From aa8fda4b54fbd84b7bc6b11904c156367683e8f6 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 9 Apr 2003 12:26:48 +0000 Subject: * We no longer use nix-populate standalone, rather we use it as a build action for `system' packages (like system.fix) that have dependencies on all packages we want to activate. So the command sequence to switch to a new activation configuration of the system would be: $ fix -i .../fixdescriptors/system.fix ... system.fix -> 89cf4713b37cc66989304abeb9ea189f $ nix-switch 89cf4713b37cc66989304abeb9ea189f * A nix-profile.sh script that can be included in .bashrc. --- scripts/nix-populate | 49 +++++++++---------------------------------------- 1 file changed, 9 insertions(+), 40 deletions(-) (limited to 'scripts/nix-populate') diff --git a/scripts/nix-populate b/scripts/nix-populate index 50819d6664d4..d375caa7d3d0 100755 --- a/scripts/nix-populate +++ b/scripts/nix-populate @@ -1,23 +1,16 @@ #! /usr/bin/perl -w use strict; +use Cwd; -my $pkglist = $ENV{"NIX_ACTIVATIONS"}; -$pkglist or die "NIX_ACTIVATIONS not set"; -my $linkdir = $ENV{"NIX_LINKS"}; -$linkdir or die "NIX_LINKS not set"; -my @dirs = ("bin", "sbin", "lib", "include"); +my $selfdir = cwd; -# Figure out a generation number. -my $nr = 1; -while (-e "$linkdir/$nr") { $nr++; } -my $gendir = "$linkdir/$nr"; -print "populating $gendir\n"; +my @dirs = ("bin", "sbin", "lib", "include"); # Create the subdirectories. -mkdir $gendir; +mkdir $selfdir; foreach my $dir (@dirs) { - mkdir "$gendir/$dir"; + mkdir "$selfdir/$dir"; } # For each activated package, create symlinks. @@ -51,39 +44,15 @@ sub createLinks { } } +foreach my $name (keys %ENV) { -open PKGS, "< $pkglist"; + next unless ($name =~ /^act.*$/); -while () { - chomp; - my $hash = $_; - - my $pkgdir = `nix getpkg $hash`; - if ($?) { die "`nix getpkg' failed"; } - chomp $pkgdir; + my $pkgdir = $ENV{$name}; print "merging $pkgdir\n"; foreach my $dir (@dirs) { - createLinks("$pkgdir/$dir", "$gendir/$dir"); + createLinks("$pkgdir/$dir", "$selfdir/$dir"); } } - -close PKGS; - -# Make $gendir the current generation by pointing $linkdir/current to -# it. The rename() system call is supposed to be essentially atomic -# on Unix. That is, if we have links `current -> X' and `new_current -# -> Y', and we rename new_current to current, a process accessing -# current will see X or Y, but never a file-not-found or other error -# condition. This is sufficient to atomically switch the current link -# tree. - -my $current = "$linkdir/current"; - -print "switching $current to $gendir\n"; - -my $tmplink = "$linkdir/new_current"; -symlink($gendir, $tmplink) or die "cannot create $tmplink"; -rename($tmplink, $current) or die "cannot rename $tmplink"; - -- cgit 1.4.1