script rewrite
This commit is contained in:
parent
e5bd5aa61e
commit
3175211f7c
2 changed files with 42 additions and 30 deletions
72
common.nix
72
common.nix
|
|
@ -129,15 +129,15 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
virtualisation.oci-containers.containers.fedora-dracut = {
|
virtualisation.oci-containers.containers.fedora-dracut = {
|
||||||
|
pull = "newer";
|
||||||
autoStart = false;
|
autoStart = false;
|
||||||
entrypoint = "bash";
|
entrypoint = "bash";
|
||||||
autoRemoveOnStop = false;
|
|
||||||
image = "docker.io/fedora:latest";
|
image = "docker.io/fedora:latest";
|
||||||
cmd = [ "/data/workdir/entry.sh" ];
|
cmd = [ "/data/workdir/entry.sh" ];
|
||||||
volumes = [
|
volumes = [
|
||||||
"/var/lib/podman-dracut:/data/workdir"
|
"/var/lib/podman-dracut:/data/workdir"
|
||||||
"/srv/nfs/arch/lower:/data/ro-arch:ro"
|
"/srv/nfs/arch/lower:/data/arch:ro"
|
||||||
"/srv/nfs/fedora/lower:/data/ro-fedora:ro"
|
"/srv/nfs/fedora/lower:/data/fedora:ro"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
systemd = {
|
systemd = {
|
||||||
|
|
@ -145,32 +145,36 @@
|
||||||
services.pxeboot = {
|
services.pxeboot = {
|
||||||
serviceConfig.Type = "oneshot";
|
serviceConfig.Type = "oneshot";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
path = with pkgs; [ xz grub2_efi util-linux ];
|
path = with pkgs; [ xz e2fsprogs grub2_efi util-linux ];
|
||||||
script = let
|
script = let
|
||||||
|
resolv = pkgs.writeText "resolv.conf" ''
|
||||||
|
nameserver fc02::1
|
||||||
|
nameserver 10.2.0.1
|
||||||
|
options edns0 trust-ad
|
||||||
|
'';
|
||||||
grubCfg = pkgs.writeText "grub.cfg" ''
|
grubCfg = pkgs.writeText "grub.cfg" ''
|
||||||
set timeout=10
|
set timeout=10
|
||||||
set path=(http,$net_default_server)/local/boot/pxe
|
set path=(http,$net_default_server)/local/boot/pxe
|
||||||
set nfs="rw ifname=ens0:$net_default_mac ip=$net_default_ip::$net_default_server:255.255.0.0::ens0:none root=nfs4:$net_default_server:/srv/nfs"
|
set nfs="rw ifname=ens0:$net_default_mac ip=$net_default_ip::$net_default_server:255.255.0.0::ens0:none root=nfs4:$net_default_server:/srv/nfs"
|
||||||
. $path/grub.cfg
|
. $path/grub.cfg
|
||||||
'';
|
'';
|
||||||
|
entryScript = pkgs.writeText "entry.sh" ''
|
||||||
|
set -e
|
||||||
|
dnf install -y dracut-network nfs-utils
|
||||||
|
cd /data/workdir
|
||||||
|
for target in $(cd ..; ls | grep -v workdir); do
|
||||||
|
modsDir=../$target/usr/lib/modules/*
|
||||||
|
mkdir $target
|
||||||
|
cp $modsDir/vmlinuz $target
|
||||||
|
dracut -Nm "network-manager nfs" --zstd -k $modsDir --kver $(basename $modsDir) $target/initramfs
|
||||||
|
done
|
||||||
|
'';
|
||||||
in ''
|
in ''
|
||||||
cd /srv/tftp
|
cd /srv/tftp
|
||||||
if [ ! -e grubx64.efi ]; then
|
if [ ! -e grubx64.efi ]; then
|
||||||
grub-mkstandalone -O x86_64-efi --compress=xz --modules=efinet -o grubx64.efi /boot/grub/grub.cfg=${grubCfg}
|
grub-mkstandalone -O x86_64-efi --compress=xz --modules=efinet -o grubx64.efi /boot/grub/grub.cfg=${grubCfg}
|
||||||
fi
|
fi
|
||||||
cat > /var/lib/podman-dracut/entry.sh <<'EOF'
|
for distro in arch:arch/x86_64/airootfs.sfs fedora:LiveOS/squashfs.img; do
|
||||||
set -e
|
|
||||||
dnf install -y dracut-network nfs-utils
|
|
||||||
cd /data/workdir
|
|
||||||
target=$(cat target)
|
|
||||||
modsDir=../ro-$target/usr/lib/modules/*
|
|
||||||
mkdir $target
|
|
||||||
cp $modsDir/vmlinuz $target
|
|
||||||
dracut -Nm "network-manager nfs" --zstd -k $modsDir --kver $(basename $modsDir) $target/initramfs
|
|
||||||
EOF
|
|
||||||
for distro in arch:arch/x86_64/airootfs.sfs: fedora:LiveOS/squashfs.img:selinux=0; do
|
|
||||||
cmdline=''${distro##*:}
|
|
||||||
distro=''${distro%:*}
|
|
||||||
rootfs=''${distro##*:}
|
rootfs=''${distro##*:}
|
||||||
distro=''${distro%:*}
|
distro=''${distro%:*}
|
||||||
cd /srv/nfs/$distro
|
cd /srv/nfs/$distro
|
||||||
|
|
@ -178,23 +182,31 @@
|
||||||
mountpoint -q loop || mount $distro.iso loop
|
mountpoint -q loop || mount $distro.iso loop
|
||||||
mountpoint -q lower || mount loop/$rootfs lower
|
mountpoint -q lower || mount loop/$rootfs lower
|
||||||
mountpoint -q root || mount -t overlay overlay -o lowerdir=lower,upperdir=upper,workdir=work,nfs_export=on root
|
mountpoint -q root || mount -t overlay overlay -o lowerdir=lower,upperdir=upper,workdir=work,nfs_export=on root
|
||||||
cd /srv/http/local/boot/pxe
|
if [ ! -e upper/etc/resolv.conf ]; then
|
||||||
if [ ! -e $distro ]; then
|
cd root/etc
|
||||||
echo $distro > /var/lib/podman-dracut/target
|
rm -f resolv.conf
|
||||||
systemctl --wait restart podman-fedora-dracut.service
|
cp ${resolv} resolv.conf
|
||||||
mv /var/lib/podman-dracut/$distro .
|
chattr +i resolv.conf
|
||||||
fi
|
fi
|
||||||
if [ ! -e .grub.cfg.lock ]; then
|
done
|
||||||
|
cd /srv/http/local/boot
|
||||||
|
if [ ! -e pxe ]; then
|
||||||
|
mkdir pxe
|
||||||
|
cp ${entryScript} /var/lib/podman-dracut/entry.sh
|
||||||
|
systemctl --wait start podman-fedora-dracut.service
|
||||||
|
for distro in arch: fedora:selinux=0; do
|
||||||
|
cmdline=''${distro##*:}
|
||||||
|
distro=''${distro%:*}
|
||||||
|
mv /var/lib/podman-dracut/$distro pxe
|
||||||
echo "menuentry $distro {
|
echo "menuentry $distro {
|
||||||
linux \$path/$distro/vmlinuz \$nfs/$distro/root $cmdline
|
linux \$path/$distro/vmlinuz \$nfs/$distro/root $cmdline
|
||||||
initrd \$path/$distro/initramfs
|
initrd \$path/$distro/initramfs
|
||||||
}" >> grub.cfg
|
}" >> pxe/grub.cfg
|
||||||
fi
|
done
|
||||||
done
|
chmod -R 640 pxe
|
||||||
touch .grub.cfg.lock
|
chgrp -R php pxe
|
||||||
chmod -R 640 .
|
chmod ug+x $(find pxe -type d)
|
||||||
chgrp -R php .
|
fi
|
||||||
chmod ug+x $(find -type d)
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
0
ls
Normal file
0
ls
Normal file
Loading…
Add table
Add a link
Reference in a new issue