diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-03-09 14:37:58 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-03-09 14:37:58 +0000 |
commit | 03ebb883d18fb438de0bc27f4a209383adfa3419 (patch) | |
tree | 9486d7777b4b27b957bf3f0e05ea4efa1eb0e941 /modules/tasks/filesystems.nix | |
parent | 8708578181a12a2cec7a8d9961af905be7ba35bc (diff) | |
download | nixpkgs-03ebb883d18fb438de0bc27f4a209383adfa3419.tar nixpkgs-03ebb883d18fb438de0bc27f4a209383adfa3419.tar.gz nixpkgs-03ebb883d18fb438de0bc27f4a209383adfa3419.tar.bz2 nixpkgs-03ebb883d18fb438de0bc27f4a209383adfa3419.tar.lz nixpkgs-03ebb883d18fb438de0bc27f4a209383adfa3419.tar.xz nixpkgs-03ebb883d18fb438de0bc27f4a209383adfa3419.tar.zst nixpkgs-03ebb883d18fb438de0bc27f4a209383adfa3419.zip |
* Modularize filesystem support. Filesystems such as btrfs and
reiserfs now have separate modules that are conditional on boot.supportedFilesystems and boot.initrd.supportedFilesystems. By default, these include the filesystems specified in the fsType attribute in fileSystems. Ext2/3/4 support is currently unconditional. Also unbreak the installer test (http://hydra.nixos.org/build/2272302). svn path=/nixos/trunk/; revision=32954
Diffstat (limited to 'modules/tasks/filesystems.nix')
-rw-r--r-- | modules/tasks/filesystems.nix | 98 |
1 files changed, 38 insertions, 60 deletions
diff --git a/modules/tasks/filesystems.nix b/modules/tasks/filesystems.nix index 59e1137852a..75cec61fd6c 100644 --- a/modules/tasks/filesystems.nix +++ b/modules/tasks/filesystems.nix @@ -2,37 +2,6 @@ with pkgs.lib; -let - usingSome = fsname: any (fs: fs.fsType == fsname) config.fileSystems; - usingSomeStage1 = fsname: any (fs: fs.fsType == fsname && - (fs.mountPoint == "/" || fs.neededForBoot)) config.fileSystems; - - usingBtrfs = usingSome "btrfs"; - usingBtrfsStage1 = usingSomeStage1 "btrfs"; - - usingReiserfs = usingSome "reiserfs"; - usingReiserfsStage1 = usingSomeStage1 "reiserfs"; - - # Packages that provide fsck backends. - fsPackages = [ pkgs.e2fsprogs pkgs.dosfstools ] - ++ optional usingReiserfs pkgs.btrfsProgs - ++ optional usingBtrfs pkgs.btrfsProgs; - - fsKernelModules = optional usingBtrfsStage1 [ "btrfs" "crc32c" ] - ++ optional usingReiserfsStage1 [ "reiserfs" ]; - - fsExtraUtilsCommands = optionalString usingBtrfsStage1 '' - cp -v ${pkgs.btrfsProgs}/bin/btrfsck $out/bin - cp -v ${pkgs.btrfsProgs}/bin/btrfs $out/bin - ln -sv btrfsck $out/bin/fsck.btrfs - ''; - - fsPostDeviceCommands = optionalString usingBtrfsStage1 '' - btrfs device scan - ''; - -in - { ###### interface @@ -54,7 +23,7 @@ in } ]; - description = " + description = '' The file systems to be mounted. It must include an entry for the root directory (<literal>mountPoint = \"/\"</literal>). Each entry in the list is an attribute set with the following fields: @@ -72,7 +41,7 @@ in <literal>autocreate</literal> forces <literal>mountPoint</literal> to be created with <command>mkdir -p</command> . - "; + ''; type = types.nullOr (types.list types.optionSet); @@ -81,36 +50,28 @@ in mountPoint = mkOption { example = "/mnt/usb"; type = types.uniq types.string; - description = " - Location of the mounted the file system. - "; + description = "Location of the mounted the file system."; }; device = mkOption { default = null; example = "/dev/sda"; type = types.uniq (types.nullOr types.string); - description = " - Location of the device. - "; + description = "Location of the device."; }; label = mkOption { default = null; example = "root-partition"; type = types.uniq (types.nullOr types.string); - description = " - Label of the device (if any). - "; + description = "Label of the device (if any)."; }; fsType = mkOption { default = "auto"; example = "ext3"; type = types.uniq types.string; - description = " - Type of the file system. - "; + description = "Type of the file system."; }; options = mkOption { @@ -124,10 +85,10 @@ in autocreate = mkOption { default = false; type = types.bool; - description = " + description = '' Automatically create the mount point defined in <option>fileSystems.*.mountPoint</option>. - "; + ''; }; noCheck = mkOption { @@ -138,12 +99,24 @@ in }; }; - system.sbin.mount = mkOption { + system.fsPackages = mkOption { internal = true; - default = pkgs.utillinux; - description = " - Package containing mount and umount. - "; + default = [ ]; + description = "Packages supplying file system mounters and checkers."; + }; + + boot.supportedFilesystems = mkOption { + default = [ ]; + example = [ "btrfs" ]; + type = types.list types.string; + description = "Names of supported filesystem types."; + }; + + boot.initrd.supportedFilesystems = mkOption { + default = [ ]; + example = [ "btrfs" ]; + type = types.list types.string; + description = "Names of supported filesystem types in the initial ramdisk."; }; }; @@ -153,10 +126,19 @@ in config = { + boot.supportedFilesystems = + map (fs: fs.fsType) config.fileSystems; + + boot.initrd.supportedFilesystems = + map (fs: fs.fsType) + (filter (fs: fs.mountPoint == "/" || fs.neededForBoot) config.fileSystems); + # Add the mount helpers to the system path so that `mount' can find them. + system.fsPackages = [ pkgs.dosfstools ]; + environment.systemPackages = - [ pkgs.ntfs3g pkgs.cifs_utils pkgs.nfsUtils pkgs.mountall ] - ++ fsPackages; + [ pkgs.ntfs3g pkgs.cifs_utils pkgs.mountall ] + ++ config.system.fsPackages; environment.etc = singleton { source = pkgs.writeText "fstab" @@ -183,10 +165,6 @@ in target = "fstab"; }; - boot.initrd.extraUtilsCommands = fsExtraUtilsCommands; - boot.initrd.postDeviceCommands = fsPostDeviceCommands; - boot.initrd.kernelModules = fsKernelModules; - jobs.mountall = { startOn = "started udev" # !!! The `started nfs-kernel-statd' condition shouldn't be @@ -198,12 +176,12 @@ in task = true; + path = [ pkgs.utillinux ] ++ config.system.fsPackages; + script = '' exec > /dev/console 2>&1 echo "mounting filesystems..." - export PATH=${config.system.sbin.mount}/bin:${makeSearchPath "sbin" ([pkgs.utillinux] ++ fsPackages)}:$PATH - ${optionalString usingBtrfs "${pkgs.btrfsProgs}/bin/btrfs device scan"} ${pkgs.mountall}/sbin/mountall ''; }; |