mirror of
https://github.com/NixOS/nix
synced 2025-06-24 22:11:15 +02:00
* Nix can now fetch prebuilts (and other files) from the network, iff
a mapping from the hash to a url has been registered through `nix regurl'. * Bug fix in nix: don't pollute stdout when running tar, it made nix-switch barf. * Bug fix in nix-push-prebuilts: don't create a subdirectory on the target when rsync'ing.
This commit is contained in:
parent
13176d74cc
commit
f8d91f20e6
6 changed files with 121 additions and 58 deletions
|
@ -1,4 +1,4 @@
|
|||
bin_SCRIPTS = nix-generate-regscript nix-switch nix-collect-garbage \
|
||||
bin_SCRIPTS = nix-switch nix-collect-garbage \
|
||||
nix-pull-prebuilts nix-push-prebuilts
|
||||
|
||||
install-exec-local:
|
||||
|
|
|
@ -9,13 +9,25 @@ my $conffile = "$etcdir/prebuilts.conf";
|
|||
|
||||
sub register {
|
||||
my $fn = shift;
|
||||
my $url = shift;
|
||||
return unless $fn =~ /([^\/]*)-([0-9a-z]{32})-([0-9a-z]{32})\.tar\.bz2/;
|
||||
my $id = $1;
|
||||
my $pkghash = $2;
|
||||
my $prebuilthash = $3;
|
||||
|
||||
print "$pkghash => $prebuilthash ($id)\n";
|
||||
|
||||
system "nix regprebuilt $pkghash $prebuilthash";
|
||||
if ($?) { die "`nix regprebuilt' failed"; }
|
||||
|
||||
if ($url =~ /^\//) {
|
||||
system "nix regfile $url";
|
||||
if ($?) { die "`nix regfile' failed"; }
|
||||
} else {
|
||||
system "nix regurl $prebuilthash $url";
|
||||
if ($?) { die "`nix regurl' failed"; }
|
||||
}
|
||||
|
||||
print KNOWNS "$pkghash\n";
|
||||
}
|
||||
|
||||
|
@ -35,7 +47,7 @@ while (<CONFFILE>) {
|
|||
# It's a local path.
|
||||
|
||||
foreach my $fn (glob "$url/*") {
|
||||
register $fn;
|
||||
register($fn, $fn);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -54,7 +66,7 @@ while (<CONFFILE>) {
|
|||
my $fn = $1;
|
||||
next if $fn =~ /\.\./;
|
||||
next if $fn =~ /\//;
|
||||
register $fn;
|
||||
register($fn, "$url/$fn");
|
||||
}
|
||||
|
||||
close INDEX;
|
||||
|
|
|
@ -17,7 +17,6 @@ close KNOWNS;
|
|||
# For each installed package, check whether a prebuilt is known.
|
||||
|
||||
open PKGS, "nix listinst|";
|
||||
open KNOWNS, ">>$knowns";
|
||||
|
||||
while (<PKGS>) {
|
||||
chomp;
|
||||
|
@ -28,13 +27,16 @@ while (<PKGS>) {
|
|||
print "exporting $pkghash...\n";
|
||||
system "nix export '$exportdir' $pkghash";
|
||||
if ($?) { die "`nix export' failed"; }
|
||||
print KNOWNS "$pkghash\n";
|
||||
}
|
||||
}
|
||||
|
||||
close KNOWNS;
|
||||
close PKGS;
|
||||
|
||||
# Push the prebuilts to the server. !!! FIXME
|
||||
|
||||
system "rsync -av -e ssh '$exportdir' losser:/home/eelco/public_html/nix-prebuilts/";
|
||||
system "rsync -av -e ssh '$exportdir'/ losser:/home/eelco/public_html/nix-prebuilts/";
|
||||
|
||||
# Rerun `nix-pull-prebuilts' to rescan the prebuilt source locations.
|
||||
|
||||
print "running nix-pull-prebuilts...";
|
||||
system "nix-pull-prebuilts";
|
||||
|
|
|
@ -30,7 +30,7 @@ while (-e "$linkdir/$id-$nr") { $nr++; }
|
|||
my $link = "$linkdir/$id-$nr";
|
||||
|
||||
# Create a symlink from $link to $pkgdir.
|
||||
symlink($pkgdir, $link) or die "cannot create $link";
|
||||
symlink($pkgdir, $link) or die "cannot create $link: $!";
|
||||
|
||||
# Also store the hash of $pkgdir. This is useful for garbage
|
||||
# collection and the like.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue