mirror of
https://github.com/NiklasGollenstede/nixos-installer.git
synced 2024-11-21 23:43:14 +01:00
debloat initrd (ZFS-related)
This commit is contained in:
parent
c59ecbba02
commit
41c75410e1
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@ -123,6 +123,7 @@
|
|||||||
"nounset", // bash
|
"nounset", // bash
|
||||||
"ntfs", // filesystem
|
"ntfs", // filesystem
|
||||||
"oneshot", // systemd
|
"oneshot", // systemd
|
||||||
|
"openssh", // package
|
||||||
"optimise", // B/E
|
"optimise", // B/E
|
||||||
"ostype", // virtual box
|
"ostype", // virtual box
|
||||||
"overlayed", // word
|
"overlayed", // word
|
||||||
|
@ -36,7 +36,7 @@ function create-zpool {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@{native.kmod}/bin/modprobe zfs || true
|
@{native.kmod}/bin/modprobe zfs || true
|
||||||
<$keySrc @{native.xxd}/bin/xxd -l 32 -c 64 -p | ( PATH=@{native.zfs}/bin ; ${_set_x:-:} ; zpool create ${args[zpool-force]:+-f} "${zpoolCreate[@]}" -R "$mnt" "${pool[name]}" "${vdevs[@]}" ) || return
|
{ <$keySrc tr -dc 0-9a-f || true ; } | head -c 64 | ( PATH=@{native.zfs}/bin ; ${_set_x:-:} ; zpool create ${args[zpool-force]:+-f} "${zpoolCreate[@]}" -R "$mnt" "${pool[name]}" "${vdevs[@]}" ) || return
|
||||||
prepend_trap "@{native.zfs}/bin/zpool export '$poolName'" EXIT || return
|
prepend_trap "@{native.zfs}/bin/zpool export '$poolName'" EXIT || return
|
||||||
if [[ $keySrc == /dev/urandom ]] ; then @{native.zfs}/bin/zfs unload-key "$poolName" &>/dev/null ; fi
|
if [[ $keySrc == /dev/urandom ]] ; then @{native.zfs}/bin/zfs unload-key "$poolName" &>/dev/null ; fi
|
||||||
|
|
||||||
|
@ -156,29 +156,34 @@ in let module = {
|
|||||||
anyPool = filterBy: lib.any (pool: pool.${filterBy}) (lib.attrValues cfg.pools);
|
anyPool = filterBy: lib.any (pool: pool.${filterBy}) (lib.attrValues cfg.pools);
|
||||||
poolNames = filterBy: lib.attrNames (lib.filterAttrs (name: pool: pool.${filterBy}) cfg.pools);
|
poolNames = filterBy: lib.attrNames (lib.filterAttrs (name: pool: pool.${filterBy}) cfg.pools);
|
||||||
filter = pool: "^${pool}($|[/])";
|
filter = pool: "^${pool}($|[/])";
|
||||||
ensure-datasets = zfsPackage: pkgs.writeShellScript "ensure-datasets" ''
|
ensure-datasets = zfsPackage: extraUtils: pkgs.writeScript "ensure-datasets" ''
|
||||||
|
#!${pkgs.pkgsStatic.bash}/bin/bash
|
||||||
set -o pipefail -o nounset ; declare-command () { : ; } ; declare-flag () { : ; } ;
|
set -o pipefail -o nounset ; declare-command () { : ; } ; declare-flag () { : ; } ;
|
||||||
${lib.fun.substituteImplicit { inherit pkgs; scripts = lib.attrValues { inherit (lib.self.setup-scripts) zfs utils; }; context = { inherit config; native = pkgs // { zfs = zfsPackage; }; }; }}
|
${lib.fun.substituteImplicit { inherit pkgs; scripts = lib.attrValues { inherit (lib.self.setup-scripts) zfs utils; }; context = { inherit config; native = pkgs // { zfs = zfsPackage; } // (lib.optionalAttrs (extraUtils != null) (lib.genAttrs [
|
||||||
|
"kmod" # modprobe
|
||||||
|
"util-linux" # mount umount
|
||||||
|
"nix" "openssh" "jq" # (unused)
|
||||||
|
] (_: extraUtils))); }; }}
|
||||||
ensure-datasets "$@"
|
ensure-datasets "$@"
|
||||||
'';
|
'';
|
||||||
ensure-datasets-for = filterBy: zfsPackage: ''( if [ ! "''${IN_NIXOS_ENTER:-}" ] && [ -e ${zfsPackage}/bin/zfs ] ; then
|
ensure-datasets-for = filterBy: zfsPackage: extraUtils: ''( if [ ! "''${IN_NIXOS_ENTER:-}" ] && [ -e ${zfsPackage}/bin/zfs ] ; then
|
||||||
${lib.concatStrings (map (pool: ''
|
${lib.concatStrings (map (pool: ''
|
||||||
expected=${lib.escapeShellArg (builtins.toJSON (lib.mapAttrs (n: v: v.props // (if v.permissions != { } then { ":permissions" = v.permissions; } else { })) (lib.filterAttrs (path: _: path == pool || lib.fun.startsWith "${pool}/" path) cfg.datasets)))}
|
expected=${lib.escapeShellArg (builtins.toJSON (lib.mapAttrs (n: v: v.props // (if v.permissions != { } then { ":permissions" = v.permissions; } else { })) (lib.filterAttrs (path: _: path == pool || lib.fun.startsWith "${pool}/" path) cfg.datasets)))}
|
||||||
if [ "$(${zfsPackage}/bin/zfs get -H -o value nixos-${setup}:applied-datasets ${pool})" != "$expected" ] ; then
|
if [ "$(${zfsPackage}/bin/zfs get -H -o value nixos-${setup}:applied-datasets ${pool})" != "$expected" ] ; then
|
||||||
${ensure-datasets zfsPackage} / ${lib.escapeShellArg (filter pool)} && ${zfsPackage}/bin/zfs set nixos-${setup}:applied-datasets="$expected" ${pool}
|
${ensure-datasets zfsPackage extraUtils} / ${lib.escapeShellArg (filter pool)} && ${zfsPackage}/bin/zfs set nixos-${setup}:applied-datasets="$expected" ${pool}
|
||||||
fi
|
fi
|
||||||
'') (poolNames filterBy))}
|
'') (poolNames filterBy))}
|
||||||
fi )'';
|
fi )'';
|
||||||
in {
|
in {
|
||||||
|
|
||||||
boot.initrd.postDeviceCommands = lib.mkIf (anyPool "autoApplyDuringBoot") (lib.mkOrder 2000 ''
|
boot.initrd.postDeviceCommands = lib.mkIf (anyPool "autoApplyDuringBoot") (lib.mkOrder 2000 ''
|
||||||
${ensure-datasets-for "autoApplyDuringBoot" extraUtils}
|
${ensure-datasets-for "autoApplyDuringBoot" extraUtils extraUtils}
|
||||||
'');
|
'');
|
||||||
boot.initrd.supportedFilesystems = lib.mkIf (anyPool "autoApplyDuringBoot") [ "zfs" ];
|
boot.initrd.supportedFilesystems = lib.mkIf (anyPool "autoApplyDuringBoot") [ "zfs" ];
|
||||||
${setup}.zfs.extraInitrdPools = (poolNames "autoApplyDuringBoot");
|
${setup}.zfs.extraInitrdPools = (poolNames "autoApplyDuringBoot");
|
||||||
|
|
||||||
system.activationScripts.A_ensure-datasets = lib.mkIf (anyPool "autoApplyOnActivation") {
|
system.activationScripts.A_ensure-datasets = lib.mkIf (anyPool "autoApplyOnActivation") {
|
||||||
text = ensure-datasets-for "autoApplyOnActivation" (pkgs.runCommandLocal "booted-system-link" { } ''ln -sT /run/booted-system/sw $out''); # (want to use the version of ZFS that the kernel module uses, also it's convenient that this does not yet exist during activation at boot)
|
text = ensure-datasets-for "autoApplyOnActivation" (pkgs.runCommandLocal "booted-system-link" { } ''ln -sT /run/booted-system/sw $out'') null; # (want to use the version of ZFS that the kernel module uses, also it's convenient that this does not yet exist during activation at boot)
|
||||||
}; # these are sorted alphabetically, unless one gets "lifted up" by some other ending on it via its ».deps« field
|
}; # these are sorted alphabetically, unless one gets "lifted up" by some other ending on it via its ».deps« field
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user