summaryrefslogtreecommitdiffstats
path: root/nixos/modules/installer/netboot/netboot.nix
diff options
context:
space:
mode:
authormichael bishop <cleverca22@gmail.com>2016-11-29 10:31:07 -0400
committermichael bishop <cleverca22@gmail.com>2016-11-29 10:31:07 -0400
commite710edeecfd6152c0b67357555663e5dbec2c787 (patch)
tree81583e419cc6965988781197f52102e760070a32 /nixos/modules/installer/netboot/netboot.nix
parent28fa4cfe56b8b4c99cb197b5318104673f99938e (diff)
make the /nix/store writable under netboot images
Diffstat (limited to 'nixos/modules/installer/netboot/netboot.nix')
-rw-r--r--nixos/modules/installer/netboot/netboot.nix28
1 files changed, 22 insertions, 6 deletions
diff --git a/nixos/modules/installer/netboot/netboot.nix b/nixos/modules/installer/netboot/netboot.nix
index 366591a81148..5908ff6cb940 100644
--- a/nixos/modules/installer/netboot/netboot.nix
+++ b/nixos/modules/installer/netboot/netboot.nix
@@ -26,11 +26,6 @@ with lib;
# here and it causes a cyclic dependency.
boot.loader.grub.enable = false;
- boot.initrd.postMountCommands = ''
- mkdir -p /mnt-root/nix/store
- mount -t squashfs /nix-store.squashfs /mnt-root/nix/store
- '';
-
# !!! Hack - attributes expected by other modules.
system.boot.loader.kernelFile = "bzImage";
environment.systemPackages = [ pkgs.grub2 pkgs.grub2_efi pkgs.syslinux ];
@@ -42,13 +37,34 @@ with lib;
options = [ "mode=0755" ];
};
+ # In stage 1, mount a tmpfs on top of /nix/store (the squashfs
+ # image) to make this a live CD.
+ fileSystems."/nix/.ro-store" =
+ { fsType = "squashfs";
+ device = "../nix-store.squashfs";
+ options = [ "loop" ];
+ neededForBoot = true;
+ };
+
+ fileSystems."/nix/.rw-store" =
+ { fsType = "tmpfs";
+ options = [ "mode=0755" ];
+ neededForBoot = true;
+ };
+
+ fileSystems."/nix/store" =
+ { fsType = "unionfs-fuse";
+ device = "unionfs";
+ options = [ "allow_other" "cow" "nonempty" "chroot=/mnt-root" "max_files=32768" "hide_meta_files" "dirs=/nix/.rw-store=rw:/nix/.ro-store=ro" ];
+ };
+
boot.initrd.availableKernelModules = [ "squashfs" ];
boot.initrd.kernelModules = [ "loop" ];
# Closures to be copied to the Nix store, namely the init
# script and the top-level system configuration directory.
- netboot.storeContents =
+ netboot.storeContents =
[ config.system.build.toplevel ];
# Create the squashfs image that contains the Nix store.