add example (but useful) dhcp initrd
This commit is contained in:
Executable
+62
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user