nixos/README.md: relax the requirement of providing option defaults (#334509)
[NixPkgs.git] / nixos / modules / system / boot / stratisroot.nix
blob68c387f2d3cc18b33de21fbc4acc1765961234ab
2   config,
3   lib,
4   pkgs,
5   utils,
6   ...
7 }:
8 let
9   requiredStratisFilesystems = lib.attrsets.filterAttrs (
10     _: x: utils.fsNeededForBoot x && x.stratis.poolUuid != null
11   ) config.fileSystems;
14   options = { };
15   config = lib.mkIf (requiredStratisFilesystems != { }) {
16     assertions = [
17       {
18         assertion = config.boot.initrd.systemd.enable;
19         message = "stratis root fs requires systemd stage 1";
20       }
21     ];
22     boot.initrd = {
23       systemd = {
24         storePaths = [
25           "${pkgs.stratisd}/lib/udev/stratis-base32-decode"
26           "${pkgs.stratisd}/lib/udev/stratis-str-cmp"
27           "${pkgs.lvm2.bin}/bin/dmsetup"
28           "${pkgs.stratisd}/libexec/stratisd-min"
29           "${pkgs.stratisd.initrd}/bin/stratis-rootfs-setup"
30         ];
31         packages = [ pkgs.stratisd.initrd ];
32         extraBin = {
33           thin_check = "${pkgs."thin-provisioning-tools"}/bin/thin_check";
34           thin_repair = "${pkgs."thin-provisioning-tools"}/bin/thin_repair";
35           thin_metadata_size = "${pkgs."thin-provisioning-tools"}/bin/thin_metadata_size";
36           stratis-min = "${pkgs.stratisd}/bin/stratis-min";
37         };
38         services = lib.attrsets.mapAttrs' (mountPoint: fileSystem: {
39           name = "stratis-setup-${fileSystem.stratis.poolUuid}";
40           value = {
41             description = "setup for Stratis root filesystem";
42             unitConfig.DefaultDependencies = "no";
43             conflicts = [
44               "shutdown.target"
45               "initrd-switch-root.target"
46             ];
47             onFailure = [ "emergency.target" ];
48             unitConfig.OnFailureJobMode = "isolate";
49             wants = [
50               "stratisd-min.service"
51               "plymouth-start.service"
52             ];
53             wantedBy = [ "initrd.target" ];
54             after = [
55               "paths.target"
56               "plymouth-start.service"
57               "stratisd-min.service"
58             ];
59             before = [
60               "initrd.target"
61               "shutdown.target"
62               "initrd-switch-root.target"
63             ];
64             environment.STRATIS_ROOTFS_UUID = fileSystem.stratis.poolUuid;
65             serviceConfig = {
66               Type = "oneshot";
67               ExecStart = "${pkgs.stratisd.initrd}/bin/stratis-rootfs-setup";
68               RemainAfterExit = "yes";
69             };
70           };
71         }) requiredStratisFilesystems;
72       };
73       availableKernelModules =
74         [
75           "dm-thin-pool"
76           "dm-crypt"
77         ]
78         ++ [
79           "aes"
80           "aes_generic"
81           "blowfish"
82           "twofish"
83           "serpent"
84           "cbc"
85           "xts"
86           "lrw"
87           "sha1"
88           "sha256"
89           "sha512"
90           "af_alg"
91           "algif_skcipher"
92         ];
93       services.udev.packages = [
94         pkgs.stratisd.initrd
95         pkgs.lvm2
96       ];
97     };
98   };