From 6a8805346f73c93048bf57922f82626b34baef16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Fri, 5 Jun 2026 14:10:37 +0200 Subject: [PATCH] add example (but useful) dhcp initrd --- build-dhcp-initrd | 62 +++++++++++++++++++++++++++++++++++++++++++++++ dhcp/config.yaml | 37 ++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100755 build-dhcp-initrd create mode 100644 dhcp/config.yaml diff --git a/build-dhcp-initrd b/build-dhcp-initrd new file mode 100755 index 0000000..7713527 --- /dev/null +++ b/build-dhcp-initrd @@ -0,0 +1,62 @@ +#! /bin/bash + +base_initrd=dist/initrd +flavor=dhcp +dir=tmp/$flavor-initrd + +dist=dist/$flavor +uki=$dist/bootx64.efi + +linux_v=6.18.34 + +set -ex + +mkdir -p tmp/dl $dist + +linux=tmp/dl/linux-$linux_v +modules=tmp/dl/modules-$linux_v + +[ -e $linux ] || curl -o $linux https://dkl.novit.io/dist/kernels/6.18.34 +[ -e $modules ] || curl -o $modules https://dkl.novit.io/dist/layers/modules/6.18.34 # TODO .erofs + +rm -fr $dir +mkdir $dir + +cpio --quiet --extract --file $base_initrd --directory $dir + +cp -rv $flavor/. $dir +cp $modules $dir/modules.fs + +(cd $dir && find * |cpio --create -H newc -R 0:0) >$dir.cpio + +if cpio -tF $dir.cpio 2>&1 |grep bytes.of.junk; then echo "bad cpio archive"; exit 1; fi + +zstd -12 -T0 -vf $dir.cpio && +mv $dir.cpio.zst $dist/initrd +cp $linux $dist/vmlinuz + +ukify build --output $uki --os-release "Direktil DHCP" \ + --linux $linux --initrd $dist/initrd --cmdline "console=tty0 console=ttyS0,115200" + +MB=$(( 2**20 )) +sz=$(( ( $(stat -c %s $uki) + MB ) / MB + 2 )) + +efi=$dist/efi.img + +if [ -e $efi ]; then rm $efi; fi + +truncate -s ${sz}M $efi +sgdisk -n 1:2048:0 -t 1:ef00 -c 1:"EFI System" $efi + +offset=$(( 2048 * 512 )) + +export MTOOLSRC=$(mktemp) +trap "rm -f $MTOOLSRC" exit +echo "drive e: file=\"$efi\" offset=$offset" >$MTOOLSRC + +args="-i $efi@@$offset" + +mformat -F e: +mmd e:EFI e:EFI/BOOT +mcopy $uki e:EFI/BOOT/BOOTX64.EFI + diff --git a/dhcp/config.yaml b/dhcp/config.yaml new file mode 100644 index 0000000..1ea94e2 --- /dev/null +++ b/dhcp/config.yaml @@ -0,0 +1,37 @@ +--- +anti_phishing_code: "direktil<3" + +modules: /modules.fs + +auths: + - name: adm1@novit + sshKey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICkpbU6sf4t0f6XAv9DuW3XH5iLM0AI5rc8PT2jwea1N + - name: adm2@novit + sshKey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILIomzqVAIqb7BedauhAo2VgbLqme5Jx/vjGUqZLoJqF + +ssh: + listen: "[::]:22" + +networks: +- name: loopback + interfaces: [ { var: iface, n: 1, udev: !eq [INTERFACE, lo] } ] + script: | + ip a add 127.0.0.1/8 dev lo + ip a add ::1/128 dev lo + ip li set lo up +- name: main + interfaces: + - var: iface + n: -1 + udev: !has ID_NET_NAME_MAC + script: | + ip link add main type bond mode active-backup + for l in $ifaces; do + ip link set $l master main + ip link set $l up + done + ip link set main up + udhcpc -b -i main + +bootstrap: + dev: /dev/storage/bootstrap