diff --git a/disko-install b/disko-install index b2521b6..9f761b2 100755 --- a/disko-install +++ b/disko-install @@ -5,11 +5,14 @@ set -euo pipefail showUsage() { cat <&2 + exit 1 + fi + extraFiles[$2]=$3 + shift + shift + ;; --option) if [[ $# -lt 3 ]]; then echo "Option $1 requires an argument" >&2 @@ -100,7 +113,7 @@ parseArgs() { ;; --disk) if [[ $# -lt 3 ]]; then - echo "Option $1 requires an argument" >&2 + echo "Option $1 requires two arguments: disk_name, device_path" >&2 exit 1 fi # shellcheck disable=SC2034 @@ -171,6 +184,13 @@ main() { fi "$disko_script" + + for source in "${!extraFiles[@]}"; do + destination=${extraFiles[$source]} + mkdir -p "$mountPoint/$(dirname "$destination")" + cp -ar "$source" "$mountPoint/$destination" + done + nixos-install --no-root-password --system "$nixos_system" --root "$mountPoint" } diff --git a/tests/disko-install/default.nix b/tests/disko-install/default.nix index 8a6b8fd..5ccc593 100644 --- a/tests/disko-install/default.nix +++ b/tests/disko-install/default.nix @@ -33,7 +33,11 @@ pkgs.nixosTest { machine.succeed("lsblk >&2") print(machine.succeed("tty")) - machine.succeed("${disko-install}/bin/disko-install --disk main /dev/vdb --flake ${../..}#testmachine") + machine.succeed("umask 066; echo > /tmp/age.key") + permission = machine.succeed("stat -c %a /tmp/age.key").strip() + assert permission == "600", f"expected permission 600 on /tmp/age.key, got {permission}" + + machine.succeed("${disko-install}/bin/disko-install --disk main /dev/vdb --extra-files /tmp/age.key /var/lib/secrets/age.key --flake ${../..}#testmachine") # test idempotency machine.succeed("${disko-install}/bin/disko-install --mode mount --disk main /dev/vdb --flake ${../..}#testmachine") machine.shutdown() @@ -42,5 +46,7 @@ pkgs.nixosTest { new_machine.start() name = new_machine.succeed("hostname").strip() assert name == "disko-machine", f"expected hostname 'disko-machine', got {name}" + permission = new_machine.succeed("stat -c %a /var/lib/secrets/age.key").strip() + assert permission == "600", f"expected permission 600 on /var/lib/secrets/age.key, got {permission}" ''; }