about summary refs log tree commit diff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.am4
-rw-r--r--scripts/nix-pull65
-rwxr-xr-xscripts/nix-pull-prebuilts83
-rwxr-xr-xscripts/nix-push-prebuilts44
-rw-r--r--scripts/prebuilts.conf6
5 files changed, 69 insertions, 133 deletions
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index e4602f2a1fc9..2f4dbacc93f0 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -5,5 +5,5 @@ install-exec-local:
 	$(INSTALL) -d $(sysconfdir)/profile.d
 	$(INSTALL_PROGRAM) nix-profile.sh $(sysconfdir)/profile.d/nix.sh
 	$(INSTALL) -d $(sysconfdir)/nix
-    # !!! don't overwrite local modifications
-	$(INSTALL_PROGRAM) prebuilts.conf $(sysconfdir)/nix/prebuilts.conf
+# !!! don't overwrite local modifications
+	$(INSTALL_DATA) prebuilts.conf $(sysconfdir)/nix/prebuilts.conf
diff --git a/scripts/nix-pull b/scripts/nix-pull
index 0b09c8e00a1b..59773a2bad17 100644
--- a/scripts/nix-pull
+++ b/scripts/nix-pull
@@ -1,2 +1,67 @@
 #! /usr/bin/perl -w
 
+my $prefix = $ENV{"NIX"} || "/tmp/nix"; # !!! use prefix
+my $etcdir = "$prefix/etc/nix";
+my $tmpfile = "$prefix/var/nix/pull.tmp";
+
+my $conffile = "$etcdir/prebuilts.conf";
+
+open CONFFILE, "<$conffile";
+
+while (<CONFFILE>) {
+
+    chomp;
+    if (/^\s*(\S+)\s*(\#.*)?$/) {
+        my $url = $1;
+
+        print "obtaining list of Nix archives at $url...\n";
+
+	system "wget '$url' -O '$tmpfile' 2> /dev/null"; # !!! escape
+	if ($?) { die "`wget' failed"; }
+	
+	open INDEX, "<$tmpfile";
+
+	while (<INDEX>) {
+	    # Get all links to prebuilts, that is, file names of the
+	    # form foo-HASH-HASH.tar.bz2.
+	    next unless (/HREF=\"([^\"]*)\"/);
+	    my $fn = $1;
+	    next if $fn =~ /\.\./;
+	    next if $fn =~ /\//;
+	    next unless $fn =~ /([0-9a-z]{32})-([0-9a-z]{32})\.nar/;
+	    my $hash = $2;
+
+	    print "registering $hash -> $url/$fn\n";
+
+	    # Construct a Fix expression that fetches and unpacks a
+	    # Nix archive from the network.
+	    my $fetch =
+              "App(IncludeFix(\"fetchurl/fetchurl.fix\"), " .
+              "[(\"url\", \"$url/$fn\"), (\"hash\", \"\")])";
+	    my $fixexpr = 
+		"App(IncludeFix(\"nar/unnar.fix\"), " .
+		"[ (\"nar\", $fetch)" .
+		", (\"name\", \"fetched-$hash\")" .
+		"])";
+	    
+	    my $fixfile = "/tmp/nix-pull-tmp.fix";
+	    open FIX, ">$fixfile";
+	    print FIX $fixexpr;
+	    close FIX;
+
+	    # Instantiate a Nix expression from the Fix expression.
+	    my $nhash = `fix $fixfile`;
+	    $? and die "instantiating Nix archive expression";
+	    chomp $nhash;
+	    die unless $nhash =~ /^([0-9a-z]{32})$/;
+
+	    system "nix --substitute $hash $nhash";
+	    if ($?) { die "`nix --substitute' failed"; }
+	}
+
+	close INDEX;
+
+	unlink $tmpfile;
+    }
+
+}
diff --git a/scripts/nix-pull-prebuilts b/scripts/nix-pull-prebuilts
deleted file mode 100755
index 3d045b46302f..000000000000
--- a/scripts/nix-pull-prebuilts
+++ /dev/null
@@ -1,83 +0,0 @@
-#! /usr/bin/perl -w
-
-my $prefix = $ENV{"NIX"} || "/nix"; # !!! use prefix
-my $etcdir = "$prefix/etc/nix";
-my $knowns = "$prefix/var/nix/known-prebuilts";
-my $tmpfile = "$prefix/var/nix/prebuilts.tmp";
-
-my $conffile = "$etcdir/prebuilts.conf";
-
-umask 0022;
-
-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";
-}
-
-open KNOWNS, ">$knowns";
-
-open CONFFILE, "<$conffile";
-
-while (<CONFFILE>) {
-    chomp;
-    if (/^\s*(\S+)\s*(\#.*)?$/) {
-        my $url = $1;
-
-        print "obtaining prebuilt list from $url...\n";
-
-        if ($url =~ /^\//) {
-
-            # It's a local path.
-
-            foreach my $fn (glob "$url/*") {
-                register($fn, $fn);
-            }
-
-        } else {
-
-            # It's a URL.
-
-            system "wget '$url' -O '$tmpfile' 2> /dev/null"; # !!! escape
-            if ($?) { die "`wget' failed"; }
-
-            open INDEX, "<$tmpfile";
-
-            while (<INDEX>) {
-                # Get all links to prebuilts, that is, file names of the
-                # form foo-HASH-HASH.tar.bz2.
-                next unless (/HREF=\"([^\"]*)\"/);
-                my $fn = $1;
-                next if $fn =~ /\.\./;
-                next if $fn =~ /\//;
-                register($fn, "$url/$fn");
-            }
-
-            close INDEX;
-
-            unlink $tmpfile;
-        }
-    }
-}
-
-close CONFFILE;
-
-close KNOWNS;
diff --git a/scripts/nix-push-prebuilts b/scripts/nix-push-prebuilts
deleted file mode 100755
index 2d44e7cda06d..000000000000
--- a/scripts/nix-push-prebuilts
+++ /dev/null
@@ -1,44 +0,0 @@
-#! /usr/bin/perl -w
-
-my $prefix = $ENV{"NIX"} || "/nix"; # !!! use prefix
-my $etcdir = "$prefix/etc/nix";
-my $exportdir = "$prefix/var/nix/prebuilts/exports";
-my $knowns = "$prefix/var/nix/known-prebuilts";
-
-umask 0022;
-
-# For performance, put the known hashes in an associative array.
-my %knowns = ();
-open KNOWNS, "<$knowns";
-while (<KNOWNS>) {
-    next unless /([0-9a-z]{32})/;
-    $knowns{$1} = 1;
-}
-close KNOWNS;
-
-# For each installed package, check whether a prebuilt is known.
-
-open PKGS, "nix listinst|";
-
-while (<PKGS>) {
-    chomp;
-    next unless /([0-9a-z]{32})/;
-    my $pkghash = $1;
-    if (!defined $knowns{$1}) {
-        # No known prebuilt exists for this package; so export it.
-        print "exporting $pkghash...\n";
-        system "nix export '$exportdir' $pkghash";
-        if ($?) { die "`nix export' failed"; }
-    }
-}
-
-close PKGS;
-
-# Push the prebuilts to the server. !!! FIXME
-
-system "rsync -av -e ssh '$exportdir'/ eelco\@losser.st-lab.cs.uu.nl:/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";
diff --git a/scripts/prebuilts.conf b/scripts/prebuilts.conf
index 9b950cad4dab..c7bc89c61c05 100644
--- a/scripts/prebuilts.conf
+++ b/scripts/prebuilts.conf
@@ -1,4 +1,2 @@
-# A list of URLs or local paths from where we obtain prebuilts.
-/nix/var/nix/prebuilts/imports
-/nix/var/nix/prebuilts/exports
-http://losser.st-lab.cs.uu.nl/~eelco/nix-prebuilts/
+# A list of URLs from where we obtain Nix archives.
+http://losser.st-lab.cs.uu.nl/~eelco/nix-dist/