add zapCreateMount script for idempodents install from iso/kexec

This commit is contained in:
lassulus 2022-11-23 13:28:52 +01:00
parent 417ad31ca5
commit 9cf4f170ae
4 changed files with 28 additions and 2 deletions

View File

@ -16,6 +16,8 @@ let
disko.createScript diskFormat pkgs disko.createScript diskFormat pkgs
else if (mode == "mount") then else if (mode == "mount") then
disko.mountScript diskFormat pkgs disko.mountScript diskFormat pkgs
else if (mode = "zap_create_mount") then
disko.zapCreateMount diskFormat pkgs
else else
builtins.abort "invalid mode" builtins.abort "invalid mode"
; ;

View File

@ -24,6 +24,10 @@ in {
export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)} export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)}
${types.diskoLib.mount (eval cfg).config.devices} ${types.diskoLib.mount (eval cfg).config.devices}
''; '';
zapCreateMount = cfg: pkgs: pkgs.writeScript "disko-zap-create-mount" ''
export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)}
${types.diskoLib.zapCreateMount (eval cfg).config.devices}
'';
config = cfg: { imports = types.diskoLib.config (eval cfg).config.devices; }; config = cfg: { imports = types.diskoLib.config (eval cfg).config.devices; };
packages = cfg: types.diskoLib.packages (eval cfg).config.devices; packages = cfg: types.diskoLib.packages (eval cfg).config.devices;
} }

4
disko
View File

@ -87,8 +87,8 @@ while [[ $# -gt 0 ]]; do
shift shift
done done
if ! ([[ $mode = "create" ]] || [[ $mode = "mount" ]]); then if ! ([[ $mode = "create" ]] || [[ $mode = "mount" ]] || [[ $mode = "zap_create_mount" ]]); then
abort "mode must be either create or mount" abort "mode must be either create, mount or zap_create_mount"
fi fi
if [[ ! -z "${flake+x}" ]]; then if [[ ! -z "${flake+x}" ]]; then

View File

@ -146,6 +146,26 @@ rec {
# ensures that "/" is processed before "/foo" etc. # ensures that "/" is processed before "/foo" etc.
${concatStrings (attrValues fsMounts)} ${concatStrings (attrValues fsMounts)}
''; '';
/* takes a disko device specification and returns a string which unmounts, destroys all disks and then runs create and mount
zapCreateMount :: types.devices -> str
*/
zapCreateMount = devices: ''
set -efux
# print existing disks
lsblk
# TODO get zap the same way we get create
# make partitioning idempotent by dismounting already mounted filesystems
if findmnt /mnt; then
umount -Rlv /mnt
fi
echo 'creating partitions...'
${diskoLib.create devices}
echo 'mounting partitions...'
${diskoLib.mount devices}
'';
/* Takes a disko device specification and returns a nixos configuration /* Takes a disko device specification and returns a nixos configuration
config :: types.devices -> nixosConfig config :: types.devices -> nixosConfig