| 15 Nov 2022 |
K900 | We can map over fileSystems and filter on requiredForBoot or whatever that flag is | 22:28:35 |
@elvishjerricco:matrix.org | In reply to @andreas.schraegle:helsinki-systems.de mapping over boot.initrd.kernelModules ++ boot.initrd.availableKernelModules sounds fragile, IMHO. maybe introducing boot.initrd.fsPackages and setting it in the filesystem modules might work? A boot.initrd.fsPackages option would be functionally identical to boot.initrd.systemd.initrdBin | 22:28:47 |
@elvishjerricco:matrix.org | Mapping over fileSystems is better than the kernel modules I think, K900 | 22:29:08 |
K900 | I'm pretty sure the kernel modules get added based on that anyway | 22:29:24 |
K900 | So it's just skipping an indirection | 22:29:28 |
@elvishjerricco:matrix.org | yea | 22:29:29 |
@elvishjerricco:matrix.org | Anyone know where the translation fsType -> kernel module happens? | 22:29:42 |
@elvishjerricco:matrix.org | Could help inform how to do this | 22:29:47 |
K900 | I found it once | 22:29:49 |
K900 | But I don't remember where | 22:29:58 |
K900 | ...or how | 22:30:14 |
@elvishjerricco:matrix.org | Probably something to do with boot.initrd.supportedFilesystems | 22:32:26 |
@andreas.schraegle:helsinki-systems.de | the pattern seems to be that they're all set here: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/system/boot/stage-1.nix#L748
and them the filesystem modules do use that, e.g. here: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/tasks/filesystems/xfs.nix | 22:34:10 |
@elvishjerricco:matrix.org | yea, but I need to figure out how that's translated to available kernel modules | 22:34:47 |
@andreas.schraegle:helsinki-systems.de | https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/tasks/filesystems/xfs.nix#L16 | 22:34:58 |
@elvishjerricco:matrix.org | ah, so it isn't... | 22:35:17 |
@elvishjerricco:matrix.org | darn | 22:35:18 |
@andreas.schraegle:helsinki-systems.de | https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/tasks/filesystems/btrfs.nix#L56 | 22:35:36 |
@andreas.schraegle:helsinki-systems.de | yup. every module just does that afaict. | 22:35:45 |
@elvishjerricco:matrix.org | yea so probably need to go through and add a bunch of explicit definitions of fs packages for initrd in each of those... | 22:36:30 |
@elvishjerricco:matrix.org | did not want to have to do that | 22:36:34 |
K900 | Looks like they already do that for extraUtils | 22:37:29 |
K900 | Just awkwardly | 22:37:32 |
@elvishjerricco:matrix.org | yea | 22:37:34 |
@elvishjerricco:matrix.org | i'll probably go ahead and make a boot.initrd.systemd.fsPackages option or something, in case we decide to make it smarter later, e.g. by only copying fsck.${fsType} and mount.${fsType} or something | 22:38:31 |
@elvishjerricco:matrix.org | or more likely I'll just use extraBin to specify the exact commands already specified for scripted initrd in those modules | 22:39:55 |
@elvishjerricco:matrix.org | or... could just... make dumb fix... and add util-linux in a more special place instead of in system.fsPackages | 22:43:37 |
@elvishjerricco:matrix.org | Could literally just do this:
diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix
index d28e6ed0e27..2999b84428f 100644
--- a/nixos/modules/system/boot/systemd.nix
+++ b/nixos/modules/system/boot/systemd.nix
@@ -558,7 +558,7 @@ in
# Environment of PID 1
systemd.managerEnvironment = {
# Doesn't contain systemd itself - everything works so it seems to use the compiled-in value for its tools
- PATH = lib.makeBinPath config.system.fsPackages;
+ PATH = lib.makeBinPath (config.system.fsPackages ++ [cfg.package.util-linux]);
LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive";
TZDIR = "/etc/zoneinfo";
# If SYSTEMD_UNIT_PATH ends with an empty component (":"), the usual unit load path will be appended to the contents of the variable
diff --git a/nixos/modules/tasks/filesystems.nix b/nixos/modules/tasks/filesystems.nix
index 97f02a8c963..399ea9eabe0 100644
--- a/nixos/modules/tasks/filesystems.nix
+++ b/nixos/modules/tasks/filesystems.nix
@@ -300,11 +300,7 @@ in
boot.supportedFilesystems = map (fs: fs.fsType) fileSystems;
# Add the mount helpers to the system path so that `mount' can find them.
- system.fsPackages = [
- pkgs.dosfstools
- # This is needed for the main fsck utility wrapping the fs-specific ones.
- pkgs.util-linux
- ];
+ system.fsPackages = [ pkgs.dosfstools ];
environment.systemPackages = with pkgs; [ fuse3 fuse ] ++ config.system.fsPackages;
| 22:46:41 |
@elvishjerricco:matrix.org | https://github.com/NixOS/nixpkgs/pull/201396 | 23:01:31 |
@elvishjerricco:matrix.org | @ofborg test fsck systemd-initrd-simple would be how I make it do the tests, right? | 23:02:16 |