nixos/filesystems: Make most simple filesystems compatible with systemd
This includes disabling some features in the initrd by default, this is only done when the new initrd is used. Namely, ext and bcache are disabled by default. bcache gets an own enable option while ext is detected like any other filesystem.
This commit is contained in:
@@ -87,19 +87,19 @@ in
|
||||
boot.initrd.availableKernelModules =
|
||||
[ "mvsdio" "reiserfs" "ext3" "ums-cypress" "rtc_mv" "ext4" ];
|
||||
|
||||
boot.postBootCommands =
|
||||
boot.postBootCommands = lib.mkIf (!boot.initrd.systemd.enable)
|
||||
''
|
||||
mkdir -p /mnt
|
||||
|
||||
cp ${dummyConfiguration} /etc/nixos/configuration.nix
|
||||
'';
|
||||
|
||||
boot.initrd.extraUtilsCommands =
|
||||
boot.initrd.extraUtilsCommands = lib.mkIf (!boot.initrd.systemd.enable)
|
||||
''
|
||||
copy_bin_and_libs ${pkgs.util-linux}/sbin/hwclock
|
||||
'';
|
||||
|
||||
boot.initrd.postDeviceCommands =
|
||||
boot.initrd.postDeviceCommands = lib.mkIf (!boot.initrd.systemd.enable)
|
||||
''
|
||||
hwclock -s
|
||||
'';
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
{ pkgs, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
options.boot.initrd.services.bcache.enable = (lib.mkEnableOption "bcache support in the initrd") // {
|
||||
visible = false; # only works with systemd stage 1
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.bcache-tools ];
|
||||
config = {
|
||||
|
||||
services.udev.packages = [ pkgs.bcache-tools ];
|
||||
environment.systemPackages = [ pkgs.bcache-tools ];
|
||||
|
||||
boot.initrd.extraUdevRulesCommands = ''
|
||||
cp -v ${pkgs.bcache-tools}/lib/udev/rules.d/*.rules $out/
|
||||
'';
|
||||
services.udev.packages = [ pkgs.bcache-tools ];
|
||||
|
||||
boot.initrd.extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
cp -v ${pkgs.bcache-tools}/lib/udev/rules.d/*.rules $out/
|
||||
'';
|
||||
|
||||
boot.initrd.services.udev = lib.mkIf config.boot.initrd.services.bcache.enable {
|
||||
packages = [ pkgs.bcache-tools ];
|
||||
binPackages = [ pkgs.bcache-tools ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -66,14 +66,14 @@ in
|
||||
]
|
||||
);
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd
|
||||
boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
|
||||
''
|
||||
copy_bin_and_libs ${pkgs.btrfs-progs}/bin/btrfs
|
||||
ln -sv btrfs $out/bin/btrfsck
|
||||
ln -sv btrfsck $out/bin/fsck.btrfs
|
||||
'';
|
||||
|
||||
boot.initrd.extraUtilsCommandsTest = mkIf inInitrd
|
||||
boot.initrd.extraUtilsCommandsTest = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
|
||||
''
|
||||
$out/bin/btrfs --version
|
||||
'';
|
||||
|
||||
@@ -16,7 +16,7 @@ in
|
||||
boot.initrd.availableKernelModules = mkIf inInitrd
|
||||
[ "cifs" "nls_utf8" "hmac" "md4" "ecb" "des_generic" "sha256" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd
|
||||
boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
|
||||
''
|
||||
copy_bin_and_libs ${pkgs.cifs-utils}/sbin/mount.cifs
|
||||
'';
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
{ pkgs, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
|
||||
inInitrd = lib.any (fs: fs == "ext2" || fs == "ext3" || fs == "ext4") config.boot.initrd.supportedFilesystems;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
config = {
|
||||
|
||||
system.fsPackages = [ pkgs.e2fsprogs ];
|
||||
system.fsPackages = lib.mkIf (config.boot.initrd.systemd.enable -> inInitrd) [ pkgs.e2fsprogs ];
|
||||
|
||||
# As of kernel 4.3, there is no separate ext3 driver (they're also handled by ext4.ko)
|
||||
boot.initrd.availableKernelModules = [ "ext2" "ext4" ];
|
||||
boot.initrd.availableKernelModules = lib.mkIf (config.boot.initrd.systemd.enable -> inInitrd) [ "ext2" "ext4" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands =
|
||||
boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
|
||||
''
|
||||
# Copy e2fsck and friends.
|
||||
copy_bin_and_libs ${pkgs.e2fsprogs}/sbin/e2fsck
|
||||
|
||||
@@ -13,7 +13,7 @@ in
|
||||
|
||||
boot.initrd.availableKernelModules = mkIf inInitrd [ "f2fs" "crc32" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd ''
|
||||
boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable) ''
|
||||
copy_bin_and_libs ${pkgs.f2fs-tools}/sbin/fsck.f2fs
|
||||
${optionalString (any (fs: fs.autoResize) fileSystems) ''
|
||||
# We need f2fs-tools' tools to resize filesystems
|
||||
|
||||
@@ -12,7 +12,7 @@ in
|
||||
|
||||
boot.initrd.kernelModules = mkIf inInitrd [ "jfs" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd ''
|
||||
boot.initrd.extraUtilsCommands = mkIf (inInitrd && !boot.initrd.systemd.enable) ''
|
||||
copy_bin_and_libs ${pkgs.jfsutils}/sbin/fsck.jfs
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -15,7 +15,7 @@ in
|
||||
|
||||
boot.initrd.kernelModules = mkIf inInitrd [ "reiserfs" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd
|
||||
boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
|
||||
''
|
||||
copy_bin_and_libs ${pkgs.reiserfsprogs}/sbin/reiserfsck
|
||||
ln -s reiserfsck $out/bin/fsck.reiserfs
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
(lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) {
|
||||
boot.initrd.kernelModules = [ "fuse" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = ''
|
||||
boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
copy_bin_and_libs ${pkgs.fuse}/sbin/mount.fuse
|
||||
copy_bin_and_libs ${pkgs.unionfs-fuse}/bin/unionfs
|
||||
substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out/bin/mount.unionfs-fuse \
|
||||
@@ -16,12 +16,23 @@
|
||||
chmod +x $out/bin/mount.unionfs-fuse
|
||||
'';
|
||||
|
||||
boot.initrd.postDeviceCommands = ''
|
||||
boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
# Hacky!!! fuse hard-codes the path to mount
|
||||
mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
|
||||
ln -s $(which mount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
|
||||
ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
|
||||
'';
|
||||
|
||||
boot.initrd.systemd.extraBin = {
|
||||
"mount.fuse" = "${pkgs.fuse}/bin/mount.fuse";
|
||||
"unionfs" = "${pkgs.unionfs-fuse}/bin/unionfs";
|
||||
"mount.unionfs-fuse" = pkgs.runCommand "mount.unionfs-fuse" {} ''
|
||||
substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out \
|
||||
--replace '${pkgs.bash}/bin/bash' /bin/sh \
|
||||
--replace '${pkgs.fuse}/sbin' /bin \
|
||||
--replace '${pkgs.unionfs-fuse}/bin' /bin
|
||||
'';
|
||||
};
|
||||
})
|
||||
|
||||
(lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) {
|
||||
|
||||
@@ -15,7 +15,7 @@ in
|
||||
|
||||
boot.initrd.kernelModules = mkIf inInitrd [ "vfat" "nls_cp437" "nls_iso8859-1" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd
|
||||
boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
|
||||
''
|
||||
copy_bin_and_libs ${pkgs.dosfstools}/sbin/dosfsck
|
||||
ln -sv dosfsck $out/bin/fsck.vfat
|
||||
|
||||
@@ -15,14 +15,14 @@ in
|
||||
|
||||
boot.initrd.availableKernelModules = mkIf inInitrd [ "xfs" "crc32c" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd
|
||||
boot.initrd.extraUtilsCommands = mkIf (inInitrd && !boot.initrd.systemd.enable)
|
||||
''
|
||||
copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/fsck.xfs
|
||||
copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/xfs_repair
|
||||
'';
|
||||
|
||||
# Trick just to set 'sh' after the extraUtils nuke-refs.
|
||||
boot.initrd.extraUtilsCommandsTest = mkIf inInitrd
|
||||
boot.initrd.extraUtilsCommandsTest = mkIf (inInitrd && !boot.initrd.systemd.enable)
|
||||
''
|
||||
sed -i -e 's,^#!.*,#!'$out/bin/sh, $out/bin/fsck.xfs
|
||||
'';
|
||||
|
||||
Reference in New Issue
Block a user