initramfs-peek: an initramfs image with a shell, for debugging

module-based-network
Daniel Barlow 2023-05-06 23:03:51 +01:00
parent 888a0d5f74
commit 74f2aa6247
2 changed files with 38 additions and 0 deletions

View File

@ -45,6 +45,7 @@
openwrt = callPackage ./openwrt {};
initramfs-peek = callPackage ./initramfs-peek {};
min-copy-closure = callPackage ./min-copy-closure {};
hi = callPackage ./hi {};
}

View File

@ -0,0 +1,37 @@
{
busybox
, pkgsBuildBuild
, runCommand
, cpio
, writeReferencesToFile
, writeScript
} :
let
inherit (pkgsBuildBuild) gen_init_cpio;
script = writeScript "init" ''
#!/bin/sh
exec >/dev/console
echo Running in initramfs
PATH=${busybox}/bin:$PATH
export PATH
mount -t proc none /proc
mount -t sysfs none /sys
${busybox}/bin/sh
'';
refs = writeReferencesToFile busybox;
in runCommand "initramfs.cpio" { } ''
cat << SPECIALS | ${gen_init_cpio}/bin/gen_init_cpio /dev/stdin > out
dir /proc 0755 0 0
dir /sys 0755 0 0
dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
nod /dev/mtdblock0 0600 0 0 b 31 0
dir /nix 0755 0 0
dir /nix/store 0755 0 0
dir /bin 0755 0 0
file /bin/sh ${busybox}/bin/sh 0755 0 0
file /init ${script} 0755 0 0
SPECIALS
find $(cat ${refs}) | ${pkgsBuildBuild.cpio}/bin/cpio -H newc -o -A -v -O out
cp out $out
''