From fe8f0dbd53fb2497a44be21a177188d5c52e36e7 Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Tue, 31 May 2016 09:29:54 -0700 Subject: [PATCH 1/2] nixos-container: fix allow alternative nixos paths This should be completely backwards compatible. It allows the '-f' part of the nix-env command to be configured. This greatly eases using nixos-container as part of development where several nixpkgs repositories might be tested at the same time. --- .../nixos-container/nixos-container.pl | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/tools/virtualization/nixos-container/nixos-container.pl b/pkgs/tools/virtualization/nixos-container/nixos-container.pl index a4b6f11654e..6d28c2a4d61 100755 --- a/pkgs/tools/virtualization/nixos-container/nixos-container.pl +++ b/pkgs/tools/virtualization/nixos-container/nixos-container.pl @@ -18,13 +18,13 @@ umask 0022; sub showHelp { print < [--system-path ] [--config ] [--ensure-unique-name] [--auto-start] + nixos-container create [--nixos-path ] [--system-path ] [--config ] [--ensure-unique-name] [--auto-start] nixos-container destroy nixos-container start nixos-container stop nixos-container kill [--signal ] nixos-container status - nixos-container update [--config ] + nixos-container update [--config ] [--nixos-path ] nixos-container login nixos-container root-login nixos-container run -- args... @@ -35,6 +35,7 @@ EOF } my $systemPath; +my $nixosPath; my $ensureUniqueName = 0; my $autoStart = 0; my $extraConfig; @@ -45,8 +46,9 @@ GetOptions( "ensure-unique-name" => \$ensureUniqueName, "auto-start" => \$autoStart, "system-path=s" => \$systemPath, - "config=s" => \$extraConfig, "signal=s" => \$signal + "nixos-path=s" => \$nixosPath, + "config=s" => \$extraConfig ) or exit 1; my $action = $ARGV[0] or die "$0: no action specified\n"; @@ -158,11 +160,12 @@ if ($action eq "create") { } else { mkpath("$root/etc/nixos", 0, 0755); + my $nixenvF = $nixosPath // ""; my $nixosConfigFile = "$root/etc/nixos/configuration.nix"; writeNixOSConfig $nixosConfigFile; system("nix-env", "-p", "$profileDir/system", - "-I", "nixos-config=$nixosConfigFile", "-f", "", + "-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF", "--set", "-A", "system") == 0 or die "$0: failed to build initial container configuration\n"; } @@ -272,8 +275,9 @@ elsif ($action eq "update") { # configuration.nix. writeNixOSConfig $nixosConfigFile if (defined $extraConfig && $extraConfig ne ""); + my $nixenvF = $nixosPath // ""; system("nix-env", "-p", "$profileDir/system", - "-I", "nixos-config=$nixosConfigFile", "-f", "", + "-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF", "--set", "-A", "system") == 0 or die "$0: failed to build container configuration\n"; From a2feaf6d79ad286925f51c08772f2d6f4d3db71b Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Fri, 24 Jun 2016 07:02:26 -0700 Subject: [PATCH 2/2] nixos-container: feature add 'config-file' option This adds a config file option to nixos-container.pl that makes it quite a bit easier to use. --- .../nixos-container/nixos-container.pl | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/pkgs/tools/virtualization/nixos-container/nixos-container.pl b/pkgs/tools/virtualization/nixos-container/nixos-container.pl index 6d28c2a4d61..ec2e05c387a 100755 --- a/pkgs/tools/virtualization/nixos-container/nixos-container.pl +++ b/pkgs/tools/virtualization/nixos-container/nixos-container.pl @@ -6,6 +6,7 @@ use File::Path; use File::Slurp; use Fcntl ':flock'; use Getopt::Long qw(:config gnu_getopt); +use Cwd 'abs_path'; my $nsenter = "@utillinux@/bin/nsenter"; my $su = "@su@"; @@ -18,13 +19,13 @@ umask 0022; sub showHelp { print < [--nixos-path ] [--system-path ] [--config ] [--ensure-unique-name] [--auto-start] + nixos-container create [--nixos-path ] [--system-path ] [--config-file ] [--config ] [--ensure-unique-name] [--auto-start] nixos-container destroy nixos-container start nixos-container stop nixos-container kill [--signal ] nixos-container status - nixos-container update [--config ] [--nixos-path ] + nixos-container update [--config ] [--config-file ] nixos-container login nixos-container root-login nixos-container run -- args... @@ -40,6 +41,7 @@ my $ensureUniqueName = 0; my $autoStart = 0; my $extraConfig; my $signal; +my $configFile; GetOptions( "help" => sub { showHelp() }, @@ -48,11 +50,16 @@ GetOptions( "system-path=s" => \$systemPath, "signal=s" => \$signal "nixos-path=s" => \$nixosPath, - "config=s" => \$extraConfig + "config=s" => \$extraConfig, + "config-file=s" => \$configFile ) or exit 1; my $action = $ARGV[0] or die "$0: no action specified\n"; +if (defined $configFile and defined $extraConfig) { + die "--config and --config-file are mutually incompatible. " . + "Please define on or the other, but not both"; +} # Execute the selected action. @@ -73,6 +80,17 @@ $containerName =~ /^[a-zA-Z0-9\-]+$/ or die "$0: invalid container name\n"; sub writeNixOSConfig { my ($nixosConfigFile) = @_; + my $localExtraConfig = ""; + + + + if ($extraConfig) { + $localExtraConfig = $extraConfig + } elsif ($configFile) { + my $resolvedFile = abs_path($configFile); + $localExtraConfig = "imports = [ $resolvedFile ];" + } + my $nixosConfig = <"; system("nix-env", "-p", "$profileDir/system", - "-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF", + "-I", "nixos-config=$nixosConfigFile", "-f", "", "--set", "-A", "system") == 0 or die "$0: failed to build container configuration\n";