99 lines
2.8 KiB
Nix
99 lines
2.8 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
utils,
|
|
...
|
|
}:
|
|
let
|
|
requiredStratisFilesystems = lib.attrsets.filterAttrs (
|
|
_: x: utils.fsNeededForBoot x && x.stratis.poolUuid != null
|
|
) config.fileSystems;
|
|
in
|
|
{
|
|
options = { };
|
|
config = lib.mkIf (requiredStratisFilesystems != { }) {
|
|
assertions = [
|
|
{
|
|
assertion = config.boot.initrd.systemd.enable;
|
|
message = "stratis root fs requires systemd stage 1";
|
|
}
|
|
];
|
|
boot.initrd = {
|
|
systemd = {
|
|
storePaths = [
|
|
"${pkgs.stratisd}/lib/udev/stratis-base32-decode"
|
|
"${pkgs.stratisd}/lib/udev/stratis-str-cmp"
|
|
"${pkgs.lvm2.bin}/bin/dmsetup"
|
|
"${pkgs.stratisd}/libexec/stratisd-min"
|
|
"${pkgs.stratisd.initrd}/bin/stratis-rootfs-setup"
|
|
];
|
|
packages = [ pkgs.stratisd.initrd ];
|
|
extraBin = {
|
|
thin_check = "${pkgs."thin-provisioning-tools"}/bin/thin_check";
|
|
thin_repair = "${pkgs."thin-provisioning-tools"}/bin/thin_repair";
|
|
thin_metadata_size = "${pkgs."thin-provisioning-tools"}/bin/thin_metadata_size";
|
|
stratis-min = "${pkgs.stratisd}/bin/stratis-min";
|
|
};
|
|
services = lib.attrsets.mapAttrs' (mountPoint: fileSystem: {
|
|
name = "stratis-setup-${fileSystem.stratis.poolUuid}";
|
|
value = {
|
|
description = "setup for Stratis root filesystem";
|
|
unitConfig.DefaultDependencies = "no";
|
|
conflicts = [
|
|
"shutdown.target"
|
|
"initrd-switch-root.target"
|
|
];
|
|
onFailure = [ "emergency.target" ];
|
|
unitConfig.OnFailureJobMode = "isolate";
|
|
wants = [
|
|
"stratisd-min.service"
|
|
"plymouth-start.service"
|
|
];
|
|
wantedBy = [ "initrd.target" ];
|
|
after = [
|
|
"paths.target"
|
|
"plymouth-start.service"
|
|
"stratisd-min.service"
|
|
];
|
|
before = [
|
|
"initrd.target"
|
|
"shutdown.target"
|
|
"initrd-switch-root.target"
|
|
];
|
|
environment.STRATIS_ROOTFS_UUID = fileSystem.stratis.poolUuid;
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
ExecStart = "${pkgs.stratisd.initrd}/bin/stratis-rootfs-setup";
|
|
RemainAfterExit = "yes";
|
|
};
|
|
};
|
|
}) requiredStratisFilesystems;
|
|
};
|
|
availableKernelModules =
|
|
[
|
|
"dm-thin-pool"
|
|
"dm-crypt"
|
|
]
|
|
++ [
|
|
"aes"
|
|
"aes_generic"
|
|
"blowfish"
|
|
"twofish"
|
|
"serpent"
|
|
"cbc"
|
|
"xts"
|
|
"lrw"
|
|
"sha1"
|
|
"sha256"
|
|
"sha512"
|
|
"af_alg"
|
|
"algif_skcipher"
|
|
];
|
|
services.udev.packages = [
|
|
pkgs.stratisd.initrd
|
|
pkgs.lvm2
|
|
];
|
|
};
|
|
};
|
|
}
|