Loading nixos/modules/installer/cd-dvd/iso-image.nix +60 −20 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ { config, lib, utils, pkgs, ... }: Loading Loading @@ -785,7 +786,11 @@ in # specified on the kernel command line, created in the stage 1 # init script. "/iso" = lib.mkImageMediaOverride { device = "/dev/root"; device = if config.boot.initrd.systemd.enable then "/dev/disk/by-label/${config.isoImage.volumeID}" else "/dev/root"; neededForBoot = true; noCheck = true; }; Loading @@ -794,7 +799,7 @@ in # image) to make this a live CD. "/nix/.ro-store" = lib.mkImageMediaOverride { fsType = "squashfs"; device = "/iso/nix-store.squashfs"; device = "${lib.optionalString config.boot.initrd.systemd.enable "/sysroot"}/iso/nix-store.squashfs"; options = [ "loop" ] Loading @@ -809,18 +814,11 @@ in }; "/nix/store" = lib.mkImageMediaOverride { fsType = "overlay"; device = "overlay"; options = [ "lowerdir=/nix/.ro-store" "upperdir=/nix/.rw-store/store" "workdir=/nix/.rw-store/work" ]; depends = [ "/nix/.ro-store" "/nix/.rw-store/store" "/nix/.rw-store/work" ]; overlay = { lowerdir = [ "/nix/.ro-store" ]; upperdir = "/nix/.rw-store/store"; workdir = "/nix/.rw-store/work"; }; }; }; Loading Loading @@ -882,9 +880,9 @@ in # UUID of the USB stick. It would be nicer to write # `root=/dev/disk/by-label/...' here, but UNetbootin doesn't # recognise that. boot.kernelParams = [ "root=LABEL=${config.isoImage.volumeID}" boot.kernelParams = lib.optionals (!config.boot.initrd.systemd.enable) [ "boot.shell_on_fail" "root=LABEL=${config.isoImage.volumeID}" ]; fileSystems = config.lib.isoFileSystems; Loading @@ -901,6 +899,44 @@ in "overlay" ]; boot.initrd.systemd = lib.mkIf config.boot.initrd.systemd.enable { emergencyAccess = true; # Most of util-linux is not included by default. initrdBin = [ config.boot.initrd.systemd.package.util-linux ]; services.copytoram = { description = "Copy ISO contents to RAM"; requiredBy = [ "initrd.target" ]; before = [ "${utils.escapeSystemdPath "/sysroot/nix/.ro-store"}.mount" "initrd-switch-root.target" ]; unitConfig = { RequiresMountsFor = "/sysroot/iso"; ConditionKernelCommandLine = "copytoram"; }; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; path = [ pkgs.coreutils config.boot.initrd.systemd.package.util-linux ]; script = '' device=$(findmnt -n -o SOURCE --target /sysroot/iso) fsSize=$(blockdev --getsize64 "$device" || stat -Lc '%s' "$device") mkdir -p /tmp-iso mount --bind --make-private /sysroot/iso /tmp-iso umount /sysroot/iso mount -t tmpfs -o size="$fsSize" tmpfs /sysroot/iso cp -r /tmp-iso/* /sysroot/iso/ umount /tmp-iso rm -r /tmp-iso ''; }; }; # Closures to be copied to the Nix store on the CD, namely the init # script and the top-level system configuration directory. isoImage.storeContents = [ Loading Loading @@ -958,15 +994,19 @@ in source = "${efiDir}/EFI"; target = "/EFI"; } { source = (pkgs.writeTextDir "grub/loopback.cfg" "source /EFI/BOOT/grub.cfg") + "/grub"; target = "/boot/grub"; } { source = config.isoImage.efiSplashImage; target = "/EFI/BOOT/efi-background.png"; } ] ++ lib.optionals (config.isoImage.makeEfiBootable && !config.boot.initrd.systemd.enable) [ # http://www.supergrubdisk.org/wiki/Loopback.cfg # This feature will be removed, and thus is not supported by systemd initrd { source = (pkgs.writeTextDir "grub/loopback.cfg" "source /EFI/BOOT/grub.cfg") + "/grub"; target = "/boot/grub"; } ] ++ lib.optionals (config.boot.loader.grub.memtest86.enable && config.isoImage.makeBiosBootable) [ { source = "${pkgs.memtest86plus}/memtest.bin"; Loading Loading
nixos/modules/installer/cd-dvd/iso-image.nix +60 −20 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ { config, lib, utils, pkgs, ... }: Loading Loading @@ -785,7 +786,11 @@ in # specified on the kernel command line, created in the stage 1 # init script. "/iso" = lib.mkImageMediaOverride { device = "/dev/root"; device = if config.boot.initrd.systemd.enable then "/dev/disk/by-label/${config.isoImage.volumeID}" else "/dev/root"; neededForBoot = true; noCheck = true; }; Loading @@ -794,7 +799,7 @@ in # image) to make this a live CD. "/nix/.ro-store" = lib.mkImageMediaOverride { fsType = "squashfs"; device = "/iso/nix-store.squashfs"; device = "${lib.optionalString config.boot.initrd.systemd.enable "/sysroot"}/iso/nix-store.squashfs"; options = [ "loop" ] Loading @@ -809,18 +814,11 @@ in }; "/nix/store" = lib.mkImageMediaOverride { fsType = "overlay"; device = "overlay"; options = [ "lowerdir=/nix/.ro-store" "upperdir=/nix/.rw-store/store" "workdir=/nix/.rw-store/work" ]; depends = [ "/nix/.ro-store" "/nix/.rw-store/store" "/nix/.rw-store/work" ]; overlay = { lowerdir = [ "/nix/.ro-store" ]; upperdir = "/nix/.rw-store/store"; workdir = "/nix/.rw-store/work"; }; }; }; Loading Loading @@ -882,9 +880,9 @@ in # UUID of the USB stick. It would be nicer to write # `root=/dev/disk/by-label/...' here, but UNetbootin doesn't # recognise that. boot.kernelParams = [ "root=LABEL=${config.isoImage.volumeID}" boot.kernelParams = lib.optionals (!config.boot.initrd.systemd.enable) [ "boot.shell_on_fail" "root=LABEL=${config.isoImage.volumeID}" ]; fileSystems = config.lib.isoFileSystems; Loading @@ -901,6 +899,44 @@ in "overlay" ]; boot.initrd.systemd = lib.mkIf config.boot.initrd.systemd.enable { emergencyAccess = true; # Most of util-linux is not included by default. initrdBin = [ config.boot.initrd.systemd.package.util-linux ]; services.copytoram = { description = "Copy ISO contents to RAM"; requiredBy = [ "initrd.target" ]; before = [ "${utils.escapeSystemdPath "/sysroot/nix/.ro-store"}.mount" "initrd-switch-root.target" ]; unitConfig = { RequiresMountsFor = "/sysroot/iso"; ConditionKernelCommandLine = "copytoram"; }; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; path = [ pkgs.coreutils config.boot.initrd.systemd.package.util-linux ]; script = '' device=$(findmnt -n -o SOURCE --target /sysroot/iso) fsSize=$(blockdev --getsize64 "$device" || stat -Lc '%s' "$device") mkdir -p /tmp-iso mount --bind --make-private /sysroot/iso /tmp-iso umount /sysroot/iso mount -t tmpfs -o size="$fsSize" tmpfs /sysroot/iso cp -r /tmp-iso/* /sysroot/iso/ umount /tmp-iso rm -r /tmp-iso ''; }; }; # Closures to be copied to the Nix store on the CD, namely the init # script and the top-level system configuration directory. isoImage.storeContents = [ Loading Loading @@ -958,15 +994,19 @@ in source = "${efiDir}/EFI"; target = "/EFI"; } { source = (pkgs.writeTextDir "grub/loopback.cfg" "source /EFI/BOOT/grub.cfg") + "/grub"; target = "/boot/grub"; } { source = config.isoImage.efiSplashImage; target = "/EFI/BOOT/efi-background.png"; } ] ++ lib.optionals (config.isoImage.makeEfiBootable && !config.boot.initrd.systemd.enable) [ # http://www.supergrubdisk.org/wiki/Loopback.cfg # This feature will be removed, and thus is not supported by systemd initrd { source = (pkgs.writeTextDir "grub/loopback.cfg" "source /EFI/BOOT/grub.cfg") + "/grub"; target = "/boot/grub"; } ] ++ lib.optionals (config.boot.loader.grub.memtest86.enable && config.isoImage.makeBiosBootable) [ { source = "${pkgs.memtest86plus}/memtest.bin"; Loading