liminix/make-image.nix

68 lines
1.9 KiB
Nix
Raw Normal View History

2022-09-26 17:19:14 +02:00
{
stdenv
, busybox
, buildPackages
, callPackage
, execline
, lib
, runCommand
, s6-init-bin
, s6-init-files
, s6-linux-init
, s6-rc
, s6-rc-database
, stdenvNoCC
, writeScript
, writeText
} : config :
let
2022-09-26 17:19:14 +02:00
s6-rc-db = s6-rc-database.override {
2022-09-26 16:59:21 +02:00
services = builtins.attrValues config.services;
};
2022-09-26 16:59:21 +02:00
profile = writeScript ".profile" ''
2022-09-26 17:19:14 +02:00
PATH=${lib.makeBinPath ([ s6-init-bin busybox execline s6-linux-init s6-rc])}
export PATH
'';
2022-09-26 16:59:21 +02:00
pseudofiles = writeText "pseudofiles" ''
/ d 0755 0 0
/bin d 0755 0 0
/etc d 0755 0 0
/run d 0755 0 0
/dev d 0755 0 0
/dev/null c 0666 root root 1 3
/dev/zero c 0666 root root 1 5
/dev/tty1 c 0777 root root 4 1
/dev/tty2 c 0777 root root 4 2
/dev/tty3 c 0777 root root 4 3
/dev/tty4 c 0777 root root 4 4
/dev/tty c 0777 root root 5 0
/dev/console c 0600 root root 5 1
/proc d 0555 root root
/sys d 0555 root root
/dev/pts d 0755 0 0
/etc/init.d d 0755 0 0
2022-09-26 17:19:14 +02:00
/bin/init s 0755 0 0 ${s6-init-bin}/bin/init
/bin/sh s 0755 0 0 ${busybox}/bin/sh
/bin/busybox s 0755 0 0 ${busybox}/bin/busybox
/etc/s6-rc d 0755 0 0
2022-09-26 16:59:21 +02:00
/etc/s6-rc/compiled s 0755 0 0 ${s6-rc-db}/compiled
/etc/passwd f 0644 0 0 echo "root::0:0:root:/:/bin/sh"
/.profile s 0644 0 0 ${profile}
'';
storefs = callPackage <nixpkgs/nixos/lib/make-squashfs.nix> {
2022-09-26 16:59:21 +02:00
# add pseudofiles to store so that the packages they
# depend on are also added
storeContents = [ pseudofiles s6-init-files ] ++ config.packages ;
};
in runCommand "frob-squashfs" {
2022-09-26 17:19:14 +02:00
nativeBuildInputs = with buildPackages; [ squashfsTools qprint ];
} ''
cp ${storefs} ./store.img
chmod +w store.img
mksquashfs - store.img -no-recovery -quiet -no-progress -root-becomes store -p "/ d 0755 0 0"
2022-09-26 16:59:21 +02:00
mksquashfs - store.img -no-recovery -quiet -no-progress -root-becomes nix -pf ${pseudofiles} -pf ${s6-init-files}
cp store.img $out
''