diff --git a/pr-28.patch b/pr-28.patch index 0ca9a47..b47b3b3 100644 --- a/pr-28.patch +++ b/pr-28.patch @@ -49,29 +49,61 @@ index 331fecd..85fda30 100644 system.build.extraUtils = extraUtils; boot.initrd.availableKernelModules = [ ]; boot.initrd.kernelModules = [ "tun" "loop" "squashfs" ] ++ (lib.optional config.not-os.nix "overlay"); +diff --git a/stage-2-init.sh b/stage-2-init.sh +index 6cc08e2..0c854c4 100644 +--- a/stage-2-init.sh ++++ b/stage-2-init.sh +@@ -19,4 +19,7 @@ mount -t tmpfs tmpfs /dev/shm + + $systemConfig/activate + ++# Run any user-specified commands. ++@runtimeShell@ @postBootCommands@ ++ + exec runit diff --git a/stage-2.nix b/stage-2.nix -index c61f9d6..4e30d4b 100644 +index c61f9d6..46cf260 100644 --- a/stage-2.nix +++ b/stage-2.nix -@@ -21,6 +21,11 @@ with lib; +@@ -20,6 +20,19 @@ with lib; + example = "256m"; type = types.str; }; - }; ++ postBootCommands = mkOption { ++ default = ""; ++ example = "rm -f /var/log/messages"; ++ type = types.lines; ++ description = lib.mdDoc '' ++ Shell commands to be executed just before runnit is started. ++ ''; ++ }; ++ }; + networking.hostName = mkOption { + default = ""; + type = types.strMatching + "^$|^[[:alnum:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$"; -+ }; + }; }; config = { - system.build.bootStage2 = pkgs.substituteAll { +@@ -28,6 +41,9 @@ with lib; + isExecutable = true; + path = config.system.path; + inherit (pkgs) runtimeShell; ++ postBootCommands = pkgs.writeText "local-cmds" '' ++ ${config.boot.postBootCommands} ++ ''; + }; + }; + } diff --git a/zynq_image.nix b/zynq_image.nix -index 3fa23ab..695d876 100644 +index 3fa23ab..06dd1a5 100644 --- a/zynq_image.nix +++ b/zynq_image.nix -@@ -1,66 +1,63 @@ - { config, pkgs, ... }: +@@ -1,66 +1,90 @@ +-{ config, pkgs, ... }: ++{ lib, config, pkgs, ... }: ++with lib; let - # dont use overlays for the qemu, it causes a lot of wasted time on recompiles - x86pkgs = import pkgs.path { system = "x86_64-linux"; }; @@ -154,17 +186,15 @@ index 3fa23ab..695d876 100644 - chmod +x qemu-script - patchShebangs qemu-script - ls -ltrh -- ''; + ''; - system.build.rpi_image_tar = pkgs.runCommand "dist.tar" {} '' - mkdir -p $out/nix-support - tar -cvf $out/dist.tar ${config.system.build.rpi_image} - echo "file binary-dist $out/dist.tar" >> $out/nix-support/hydra-build-products - ''; +- ''; - environment.systemPackages = [ pkgs.strace ]; - environment.etc."service/getty/run".source = pkgs.writeShellScript "getty" '' - agetty ttyPS0 115200 -- ''; -- environment.etc."pam.d/other".text = ""; + environment = { + systemPackages = with pkgs; [ strace inetutils ]; + etc = { @@ -181,4 +211,31 @@ index 3fa23ab..695d876 100644 + "security/pam_env.conf".text = ""; + }; + }; ++ boot.postBootCommands = lib.mkIf config.not-os.sd '' ++ # On the first boot do some maintenance tasks ++ if [ -f /nix-path-registration ]; then ++ set -euo pipefail ++ set -x ++ # Figure out device names for the boot device and root filesystem. ++ rootPart=$(${pkgs.utillinux}/bin/findmnt -n -o SOURCE /) ++ bootDevice=$(lsblk -npo PKNAME $rootPart) ++ partNum=$(lsblk -npo MAJ:MIN $rootPart | ${pkgs.gawk}/bin/awk -F: '{print $2}') ++ ++ # Resize the root partition and the filesystem to fit the disk ++ echo ",+," | sfdisk -N$partNum --no-reread $bootDevice ++ ${pkgs.parted}/bin/partprobe ++ ${pkgs.e2fsprogs}/bin/resize2fs $rootPart ++ ++ # Register the contents of the initial Nix store ++ nix-store --load-db < /nix-path-registration ++ ++ # nixos-rebuild also requires a "system" profile and an /etc/NIXOS tag. ++ touch /etc/NIXOS ++ nix-env -p /nix/var/nix/profiles/system --set /run/current-system ++ ++ # Prevents this from running on later boots. ++ rm -f /nix-path-registration ++ fi + ''; +- environment.etc."pam.d/other".text = ""; }