summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2012-10-05 12:26:13 +0400
committerMichael Raskin <7c6f434c@mail.ru>2012-10-05 12:26:13 +0400
commitd26ac88caf4504fe74e5cab99bedb7df28a8f133 (patch)
treefe7efcc53e5fc2a6d09eb4b20da77c9e5a3de02a /pkgs/tools
parentbc9bff1da42f35afc982e66dd60b7c66263b32c4 (diff)
parentef9a15a5a4952e36c111edfba3c6716c43a49090 (diff)
downloadnixlib-d26ac88caf4504fe74e5cab99bedb7df28a8f133.tar
nixlib-d26ac88caf4504fe74e5cab99bedb7df28a8f133.tar.gz
nixlib-d26ac88caf4504fe74e5cab99bedb7df28a8f133.tar.bz2
nixlib-d26ac88caf4504fe74e5cab99bedb7df28a8f133.tar.lz
nixlib-d26ac88caf4504fe74e5cab99bedb7df28a8f133.tar.xz
nixlib-d26ac88caf4504fe74e5cab99bedb7df28a8f133.tar.zst
nixlib-d26ac88caf4504fe74e5cab99bedb7df28a8f133.zip
Merging pull request 121 from MarcWeber: update/fix debootstrap with minor fixes
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/misc/debootstrap/default.nix122
-rw-r--r--pkgs/tools/system/fakeroot/default.nix18
2 files changed, 83 insertions, 57 deletions
diff --git a/pkgs/tools/misc/debootstrap/default.nix b/pkgs/tools/misc/debootstrap/default.nix
index 33a1fc839ce0..388cfa14e41e 100644
--- a/pkgs/tools/misc/debootstrap/default.nix
+++ b/pkgs/tools/misc/debootstrap/default.nix
@@ -1,55 +1,65 @@
-{ stdenv, fetchurl, dpkg, gettext, gawk, perl, wget }:
+{ stdenv, fetchurl, dpkg, gettext, gawk, perl, wget, coreutils, fakeroot }:
 
 let
 
-  devices = fetchurl {
-    url = mirror://gentoo/distfiles/devices.tar.gz;
-    sha256 = "0j4yhajmlgvbksr2ij0dm7jy3q52j3wzhx2fs5lh05i1icygk4qd";
+# USAGE like this: debootstrap sid /tmp/target-chroot-directory
+
+# There is also cdebootstrap now. Is that easier to maintain?
+
+  makedev = stdenv.mkDerivation {
+    name = "makedev-for-debootstrap";
+    src = fetchurl {
+            url = mirror://debian/pool/main/m/makedev/makedev_2.3.1.orig.tar.gz;
+            sha256 = "1yhxlj2mhn1nqkx1f0sn0bl898nf28arxxa4lgp7hdrb5cpp36c5";
+    };
+    patches = [
+      (fetchurl {
+       url = "http://ftp.de.debian.org/debian/pool/main/m/makedev/makedev_2.3.1-89.diff.gz";
+       sha256 = "1zbifw2jkq6471fb67y893nq4lq009xbfbi57jbjwxnhqmrppcy9";
+       })
+    ];
+    # TODO install man
+    installPhase = ''
+      ensureDir $out/sbin
+      ls -l
+      t=$out/sbin/MAKEDEV
+      cp MAKEDEV $t
+      chmod +x $t
+    '';
   };
   
 in
 
 stdenv.mkDerivation {
-  name = "debootstrap-1.0.10lenny";
+
+  name = "debootstrap-1.0.42";
 
   src = fetchurl {
-    # I'd like to use the source. However it's lacking the lanny script ?
-    url = mirror://debian/pool/main/d/debootstrap/debootstrap_1.0.10lenny1_all.deb;
-    sha256 = "a70af8e3369408ce9d6314fb5219de73f9523b347b75a3b07ee17ea92c445051";
+    # git clone git://git.debian.org/d-i/debootstrap.git
+    # I'd like to use the source. However it's lacking the lanny script ? (still true?)
+    url = http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.42.tar.gz;
+    sha256 = "0a5azl22wz1q92b2c91zlpz6krd7wqyi63yk87vyczp363ml0nz0";
   };
-  
+
   buildInputs = [ dpkg gettext gawk perl ];
 
-  unpackPhase = ''
-    dpkg-deb --extract "$src" .
-  '';
-  
   buildPhase = ":";
 
-  patches = [
-    # replace /usr/* and /sbin/* executables by @executable@ so that they can be replaced by substitute
-    # Be careful not to replace code being run in the debian chroot !
-    ./subst.patch
-  ];
-
-  # from deb 
+  # If you have to update the patch for functions a vim regex like this
+  # can help you identify which lines are used to write scripts on TARGET and
+  # which should /bin/ paths should be replaced:
+  # \<echo\>\|\/bin\/\|^\s*\<cat\>\|EOF\|END
   installPhase = ''
-    cp -r . $out; cd $out
-    t=bin/debootstrap
-    mkdir -p bin man/man8
-    cat >> $t << EOF
-    #!/bin/sh
-    export DEBOOTSTRAP_DIR=$out/usr/share/debootstrap
-    # mount and other tools must be found in chroot. So add default debain paths!
-    # TODO only add paths which are required by the scripts!
-    export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-    $out/usr/sbin/debootstrap "\$@"
-    EOF
-    chmod +x $t
-    mv usr/share/man/man8/debootstrap.8.gz man/man8
 
-    set -x
-    for file in usr/share/debootstrap/functions usr/sbin/debootstrap; do
+    sed -i \
+      -e 's@/usr/bin/id@id@' \
+      -e 's@/usr/bin/dpkg@${dpkg}/bin/dpkg@' \
+      -e 's@/usr/bin/sha@${coreutils}/bin/sha@' \
+      -e 's@/bin/sha@${coreutils}/bin/sha@' \
+      debootstrap
+
+
+    for file in functions debootstrap; do
       substituteInPlace "$file" \
         --subst-var-by gunzip "$(type -p gunzip)" \
         --subst-var-by bunzip "$(type -p bunzip)" \
@@ -61,28 +71,36 @@ stdenv.mkDerivation {
         --subst-var-by uname "$(type -p uname)" \
         --subst-var-by wget "${wget}/bin/wget"
     done
-  '';
 
-  /* build from source:
-  installPhase = ''
-    cp ${devices} devices.tar.gz
-    mkdir -p $out/{bin,man/man8};
-    cp debootstrap.8 $out/man/man8
+
     sed -i  \
-      -e 's@-o root@@'   \
-      -e 's@-g root@@'   \
-      -e 's@chown@true@' \
-      Makefile
-    make pkgdetails debootstrap-arch
-    make DESTDIR="''\${out}" install-arch
-    t=$out/bin/debootstrap
-    cat >> $t << EOF
+      -e 's@\<wget\>@${wget}/bin/wget@' \
+      functions
+
+    d=$out/share/debootstrap
+    ensureDir $out/{share/debootstrap,bin}
+
+    ${fakeroot}/bin/fakeroot -- make devices.tar.gz MAKEDEV=${makedev}/sbin/MAKEDEV
+
+    cp -r . $d
+
+    cat >> $out/bin/debootstrap << EOF
     #!/bin/sh
-    DEBOOTSTRAP_DIR=$out/usr/share/debootstrap $out/usr/sbin/debootstrap "\$@"
+    export DEBOOTSTRAP_DIR="''${DEBOOTSTRAP_DIR:-$d}"
+    # mount and other tools must be found in chroot. So add default debain paths!
+    # TODO only add paths which are required by the scripts!
+    export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+    exec $d/debootstrap "\$@"
     EOF
-    chmod +x $t
+    chmod +x $out/bin/debootstrap
+
+    ensureDir $out/man/man8
+    mv debootstrap.8 $out/man/man8
   '';
-  */
+
+  passthru = {
+    inherit makedev;
+  };
 
   meta = { 
     description = "Tool to create a Debian system in a chroot";
diff --git a/pkgs/tools/system/fakeroot/default.nix b/pkgs/tools/system/fakeroot/default.nix
index d80b35e1a111..1bf18ed867c3 100644
--- a/pkgs/tools/system/fakeroot/default.nix
+++ b/pkgs/tools/system/fakeroot/default.nix
@@ -1,13 +1,21 @@
-{stdenv, fetchurl}:
+{stdenv, fetchurl, utillinux}:
 
-stdenv.mkDerivation {
-  name = "fakeroot-1.18.1";
+stdenv.mkDerivation rec {
+  name = "fakeroot-1.18.4";
 
   src = fetchurl {
-    url = http://ftp.de.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.18.1.orig.tar.bz2;
-    sha256 = "0h5jsw715a9hv32cb1m1bajy26l7xxrbgrk6qk1b6m91lxh6rnw9";
+    url = https://launchpad.net/ubuntu/+archive/primary/+files/fakeroot_1.18.4.orig.tar.bz2;
+    sha256 = "18mydrz49n7ic7147pikkpdb96x00s9wisdk6hrc75ll7vx9wd8a";
   };
 
+  buildInputs = [ utillinux /* provides getopt */ ];
+
+  postUnpack = ''
+    for prog in getopt; do
+      sed -i "s@getopt@$(type -p getopt)@g" ${name}/scripts/fakeroot.in
+    done
+  '';
+
   meta = {
     homepage = http://fakeroot.alioth.debian.org/;
     description = "Give a fake root environment through LD_PRELOAD";