diff options
author | adisbladis <adisbladis@gmail.com> | 2020-05-08 14:40:00 +0100 |
---|---|---|
committer | adisbladis <adisbladis@gmail.com> | 2022-04-27 18:35:03 +1200 |
commit | 7d9a979b2e176190caadc9d73ccc07f36b6efa91 (patch) | |
tree | de3c07c96ec5be5502de1fa4c6ac9343637b42d2 | |
parent | 85919894405c54467e978a7e580f85f48f939ef7 (diff) | |
download | nixpkgs-7d9a979b2e176190caadc9d73ccc07f36b6efa91.tar nixpkgs-7d9a979b2e176190caadc9d73ccc07f36b6efa91.tar.gz nixpkgs-7d9a979b2e176190caadc9d73ccc07f36b6efa91.tar.bz2 nixpkgs-7d9a979b2e176190caadc9d73ccc07f36b6efa91.tar.lz nixpkgs-7d9a979b2e176190caadc9d73ccc07f36b6efa91.tar.xz nixpkgs-7d9a979b2e176190caadc9d73ccc07f36b6efa91.tar.zst nixpkgs-7d9a979b2e176190caadc9d73ccc07f36b6efa91.zip |
nixos-container: Make configuration and state directories configurable
/etc/containers is also used by Podman, Skopeo & other popular container tooling so we need to be able to move to another configuration directory. The state move is not strictly a requirement but is good for consistency.
-rw-r--r-- | pkgs/tools/virtualization/nixos-container/default.nix | 10 | ||||
-rwxr-xr-x | pkgs/tools/virtualization/nixos-container/nixos-container.pl | 23 |
2 files changed, 22 insertions, 11 deletions
diff --git a/pkgs/tools/virtualization/nixos-container/default.nix b/pkgs/tools/virtualization/nixos-container/default.nix index 17065a2aa8b..4d46ec3299b 100644 --- a/pkgs/tools/virtualization/nixos-container/default.nix +++ b/pkgs/tools/virtualization/nixos-container/default.nix @@ -1,4 +1,10 @@ -{ substituteAll, perl, shadow, util-linux }: +{ substituteAll +, perl +, shadow +, util-linux +, configurationDirectory ? "/etc/nixos-containers" +, stateDirectory ? "/var/lib/nixos-containers" +}: substituteAll { name = "nixos-container"; @@ -9,6 +15,8 @@ substituteAll { su = "${shadow.su}/bin/su"; utillinux = util-linux; + inherit configurationDirectory stateDirectory; + postInstall = '' t=$out/share/bash-completion/completions mkdir -p $t diff --git a/pkgs/tools/virtualization/nixos-container/nixos-container.pl b/pkgs/tools/virtualization/nixos-container/nixos-container.pl index d99b4cfba4a..e945bc70b6b 100755 --- a/pkgs/tools/virtualization/nixos-container/nixos-container.pl +++ b/pkgs/tools/virtualization/nixos-container/nixos-container.pl @@ -12,6 +12,9 @@ use Time::HiRes; my $nsenter = "@utillinux@/bin/nsenter"; my $su = "@su@"; +my $configurationDirectory = "@configurationDirectory@"; +my $stateDirectory = "@stateDirectory@"; + # Ensure a consistent umask. umask 0022; @@ -132,11 +135,11 @@ if (defined $flake && $flake =~ /^(.*)#([^#"]+)$/) { # Execute the selected action. -mkpath("/etc/containers", 0, 0755); -mkpath("/var/lib/containers", 0, 0700); +mkpath("$configurationDirectory", 0, 0755); +mkpath("$stateDirectory", 0, 0700); if ($action eq "list") { - foreach my $confFile (glob "/etc/containers/*.conf") { + foreach my $confFile (glob "$configurationDirectory/*.conf") { $confFile =~ /\/([^\/]+).conf$/ or next; print "$1\n"; } @@ -198,15 +201,15 @@ if ($action eq "create") { open(my $lock, '>>', $lockFN) or die "$0: opening $lockFN: $!"; flock($lock, LOCK_EX) or die "$0: could not lock $lockFN: $!"; - my $confFile = "/etc/containers/$containerName.conf"; - my $root = "/var/lib/containers/$containerName"; + my $confFile = "$configurationDirectory/$containerName.conf"; + my $root = "$stateDirectory/$containerName"; # Maybe generate a unique name. if ($ensureUniqueName) { my $base = $containerName; for (my $nr = 0; ; $nr++) { - $confFile = "/etc/containers/$containerName.conf"; - $root = "/var/lib/containers/$containerName"; + $confFile = "$configurationDirectory/$containerName.conf"; + $root = "$stateDirectory/$containerName"; last unless -e $confFile || -e $root; $containerName = "$base-$nr"; } @@ -220,7 +223,7 @@ if ($action eq "create") { # Get an unused IP address. my %usedIPs; - foreach my $confFile2 (glob "/etc/containers/*.conf") { + foreach my $confFile2 (glob "$configurationDirectory/*.conf") { my $s = read_file($confFile2) or die; $usedIPs{$1} = 1 if $s =~ /^HOST_ADDRESS=([0-9\.]+)$/m; $usedIPs{$1} = 1 if $s =~ /^LOCAL_ADDRESS=([0-9\.]+)$/m; @@ -292,10 +295,10 @@ if ($action eq "create") { exit 0; } -my $root = "/var/lib/containers/$containerName"; +my $root = "$stateDirectory/$containerName"; my $profileDir = "/nix/var/nix/profiles/per-container/$containerName"; my $gcRootsDir = "/nix/var/nix/gcroots/per-container/$containerName"; -my $confFile = "/etc/containers/$containerName.conf"; +my $confFile = "$configurationDirectory/$containerName.conf"; if (!-e $confFile) { if ($action eq "destroy") { exit 0; |