forked from mirrors/nixpkgs
nixos-container: Pass through several Nix flags
Since nixos-container calls nix-env / nix-build, it's useful to support various evaluation-related options.
This commit is contained in:
parent
5abeb133de
commit
ed49c901dd
|
@ -5,7 +5,7 @@ use POSIX;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
use File::Slurp;
|
use File::Slurp;
|
||||||
use Fcntl ':flock';
|
use Fcntl ':flock';
|
||||||
use Getopt::Long qw(:config gnu_getopt);
|
use Getopt::Long qw(:config gnu_getopt no_bundling);
|
||||||
use Cwd 'abs_path';
|
use Cwd 'abs_path';
|
||||||
use Time::HiRes;
|
use Time::HiRes;
|
||||||
|
|
||||||
|
@ -68,6 +68,22 @@ my $localAddress;
|
||||||
my $flake;
|
my $flake;
|
||||||
my $flakeAttr = "container";
|
my $flakeAttr = "container";
|
||||||
|
|
||||||
|
# Nix passthru flags.
|
||||||
|
my @nixFlags;
|
||||||
|
my @nixFlags2;
|
||||||
|
|
||||||
|
sub copyNixFlags0 { push @nixFlags, "--$_[0]"; }
|
||||||
|
sub copyNixFlags1 { push @nixFlags, "--$_[0]", $_[1]; }
|
||||||
|
|
||||||
|
# Ugly hack to handle flags that take two arguments, like --option.
|
||||||
|
sub copyNixFlags2 {
|
||||||
|
if (scalar(@nixFlags2) % 3 == 0) {
|
||||||
|
push @nixFlags2, "--$_[0]", $_[1];
|
||||||
|
} else {
|
||||||
|
push @nixFlags2, $_[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GetOptions(
|
GetOptions(
|
||||||
"help" => sub { showHelp() },
|
"help" => sub { showHelp() },
|
||||||
"ensure-unique-name" => \$ensureUniqueName,
|
"ensure-unique-name" => \$ensureUniqueName,
|
||||||
|
@ -82,8 +98,22 @@ GetOptions(
|
||||||
"host-address=s" => \$hostAddress,
|
"host-address=s" => \$hostAddress,
|
||||||
"local-address=s" => \$localAddress,
|
"local-address=s" => \$localAddress,
|
||||||
"flake=s" => \$flake,
|
"flake=s" => \$flake,
|
||||||
|
# Nix passthru options.
|
||||||
|
"log-format=s" => \©NixFlags1,
|
||||||
|
"option=s{2}" => \©NixFlags2,
|
||||||
|
"impure" => \©NixFlags0,
|
||||||
|
"update-input=s" => \©NixFlags1,
|
||||||
|
"override-input=s{2}" => \©NixFlags2,
|
||||||
|
"commit-lock-file" => \©NixFlags0,
|
||||||
|
"no-registries" => \©NixFlags0,
|
||||||
|
"no-update-lock-file" => \©NixFlags0,
|
||||||
|
"no-write-lock-file" => \©NixFlags0,
|
||||||
|
"no-allow-dirty" => \©NixFlags0,
|
||||||
|
"recreate-lock-file" => \©NixFlags0,
|
||||||
) or exit 1;
|
) or exit 1;
|
||||||
|
|
||||||
|
push @nixFlags, @nixFlags2;
|
||||||
|
|
||||||
if (defined $hostAddress and !defined $localAddress or defined $localAddress and !defined $hostAddress) {
|
if (defined $hostAddress and !defined $localAddress or defined $localAddress and !defined $hostAddress) {
|
||||||
die "With --host-address set, --local-address is required as well!";
|
die "With --host-address set, --local-address is required as well!";
|
||||||
}
|
}
|
||||||
|
@ -144,7 +174,7 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
sub buildFlake {
|
sub buildFlake {
|
||||||
system("nix", "build", "-o", "$systemPath.tmp", "--",
|
system("nix", "build", "-o", "$systemPath.tmp", @nixFlags, "--",
|
||||||
"$flake#nixosConfigurations.\"$flakeAttr\".config.system.build.toplevel") == 0
|
"$flake#nixosConfigurations.\"$flakeAttr\".config.system.build.toplevel") == 0
|
||||||
or die "$0: failed to build container from flake '$flake'\n";
|
or die "$0: failed to build container from flake '$flake'\n";
|
||||||
$systemPath = readlink("$systemPath.tmp") or die;
|
$systemPath = readlink("$systemPath.tmp") or die;
|
||||||
|
@ -251,7 +281,7 @@ if ($action eq "create") {
|
||||||
|
|
||||||
system("nix-env", "-p", "$profileDir/system",
|
system("nix-env", "-p", "$profileDir/system",
|
||||||
"-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF",
|
"-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF",
|
||||||
"--set", "-A", "system") == 0
|
"--set", "-A", "system", @nixFlags) == 0
|
||||||
or do {
|
or do {
|
||||||
clearContainerState($profileDir, "$profileDir/$containerName", $root, $confFile);
|
clearContainerState($profileDir, "$profileDir/$containerName", $root, $confFile);
|
||||||
die "$0: failed to build initial container configuration\n"
|
die "$0: failed to build initial container configuration\n"
|
||||||
|
@ -400,7 +430,7 @@ elsif ($action eq "update") {
|
||||||
my $nixenvF = $nixosPath // "<nixpkgs/nixos>";
|
my $nixenvF = $nixosPath // "<nixpkgs/nixos>";
|
||||||
system("nix-env", "-p", "$profileDir/system",
|
system("nix-env", "-p", "$profileDir/system",
|
||||||
"-I", "nixos-config=$nixosConfigFile", "-f", $nixenvF,
|
"-I", "nixos-config=$nixosConfigFile", "-f", $nixenvF,
|
||||||
"--set", "-A", "system") == 0
|
"--set", "-A", "system", @nixFlags) == 0
|
||||||
or die "$0: failed to build container configuration\n";
|
or die "$0: failed to build container configuration\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue