diff options
author | Jan Malakhovski <oxij@oxij.org> | 2015-11-25 19:09:09 +0000 |
---|---|---|
committer | Jan Malakhovski <oxij@oxij.org> | 2016-08-23 18:14:05 +0000 |
commit | 65d26c4dc12f8f0113b6b128573f18492ac5b6f6 (patch) | |
tree | bcd427c83dab4633c9c4b06c338ac10350f0209e /nixos/modules/system/boot/stage-1.nix | |
parent | 2c8ca0d1bd1df838b3e3b2d2e17c6855b3b520c1 (diff) | |
download | nixpkgs-65d26c4dc12f8f0113b6b128573f18492ac5b6f6.tar nixpkgs-65d26c4dc12f8f0113b6b128573f18492ac5b6f6.tar.gz nixpkgs-65d26c4dc12f8f0113b6b128573f18492ac5b6f6.tar.bz2 nixpkgs-65d26c4dc12f8f0113b6b128573f18492ac5b6f6.tar.lz nixpkgs-65d26c4dc12f8f0113b6b128573f18492ac5b6f6.tar.xz nixpkgs-65d26c4dc12f8f0113b6b128573f18492ac5b6f6.tar.zst nixpkgs-65d26c4dc12f8f0113b6b128573f18492ac5b6f6.zip |
nixos: apply toposort to fileSystems to support bind and move mounts
And use new `config.system.build.fileSystems` property everywhere.
Diffstat (limited to 'nixos/modules/system/boot/stage-1.nix')
-rw-r--r-- | nixos/modules/system/boot/stage-1.nix | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/nixos/modules/system/boot/stage-1.nix b/nixos/modules/system/boot/stage-1.nix index baeba1d6b31..f26412103ed 100644 --- a/nixos/modules/system/boot/stage-1.nix +++ b/nixos/modules/system/boot/stage-1.nix @@ -3,7 +3,7 @@ # the modules necessary to mount the root file system, then calls the # init in the root file system to start the second boot stage. -{ config, lib, pkgs, ... }: +{ config, lib, utils, pkgs, ... }: with lib; @@ -23,6 +23,14 @@ let }; + # The initrd only has to mount `/` or any FS marked as necessary for + # booting (such as the FS containing `/nix/store`, or an FS needed for + # mounting `/`, like `/` on a loopback). + fileSystems = filter + (fs: fs.neededForBoot || elem fs.mountPoint [ "/" "/nix" "/nix/store" "/var" "/var/log" "/var/lib" "/etc" ]) + config.system.build.fileSystems; + + # Some additional utilities needed in stage 1, like mount, lvm, fsck # etc. We don't want to bring in all of those packages, so we just # copy what we need. Instead of using statically linked binaries, @@ -71,7 +79,7 @@ let ln -sf kmod $out/bin/modprobe # Copy resize2fs if needed. - ${optionalString (any (fs: fs.autoResize) (attrValues config.fileSystems)) '' + ${optionalString (any (fs: fs.autoResize) config.system.build.fileSystems) '' # We need mke2fs in the initrd. copy_bin_and_libs ${pkgs.e2fsprogs}/sbin/resize2fs ''} @@ -128,14 +136,6 @@ let ''; # */ - # The initrd only has to mount / or any FS marked as necessary for - # booting (such as the FS containing /nix/store, or an FS needed for - # mounting /, like / on a loopback). - fileSystems = filter - (fs: fs.neededForBoot || elem fs.mountPoint [ "/" "/nix" "/nix/store" "/var" "/var/log" "/var/lib" "/etc" ]) - (attrValues config.fileSystems); - - udevRules = pkgs.stdenv.mkDerivation { name = "udev-rules"; allowedReferences = [ extraUtils ]; @@ -398,9 +398,8 @@ in }; config = mkIf (!config.boot.isContainer) { - assertions = [ - { assertion = any (fs: fs.mountPoint == "/") (attrValues config.fileSystems); + { assertion = any (fs: fs.mountPoint == "/") fileSystems; message = "The ‘fileSystems’ option does not specify your root file system."; } { assertion = let inherit (config.boot) resumeDevice; in |