about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2010-06-10 12:28:04 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2010-06-10 12:28:04 +0000
commit6dddd07402ecf3389a5986611af3ef05313cb8a0 (patch)
tree4d1b6a458e30c219b97fa58c9aa945c0e5742f7b /pkgs
parent3e958eea239e9968ecfca3c890637a1633f0e37a (diff)
downloadnixlib-6dddd07402ecf3389a5986611af3ef05313cb8a0.tar
nixlib-6dddd07402ecf3389a5986611af3ef05313cb8a0.tar.gz
nixlib-6dddd07402ecf3389a5986611af3ef05313cb8a0.tar.bz2
nixlib-6dddd07402ecf3389a5986611af3ef05313cb8a0.tar.lz
nixlib-6dddd07402ecf3389a5986611af3ef05313cb8a0.tar.xz
nixlib-6dddd07402ecf3389a5986611af3ef05313cb8a0.tar.zst
nixlib-6dddd07402ecf3389a5986611af3ef05313cb8a0.zip
* vmTools: don't use klibc anymore. Just use utillinux/bash/etc.
svn path=/nixpkgs/trunk/; revision=22209
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/build-support/vm/default.nix93
-rw-r--r--pkgs/build-support/vm/test.nix2
-rw-r--r--pkgs/os-specific/linux/klibc/1.5.nix34
-rw-r--r--pkgs/os-specific/linux/klibc/builder.sh11
-rw-r--r--pkgs/top-level/all-packages.nix7
5 files changed, 60 insertions, 87 deletions
diff --git a/pkgs/build-support/vm/default.nix b/pkgs/build-support/vm/default.nix
index 6d49e30eb77d..a34c0fc77cad 100644
--- a/pkgs/build-support/vm/default.nix
+++ b/pkgs/build-support/vm/default.nix
@@ -7,8 +7,6 @@ rec {
 
   inherit (linuxPackages_2_6_32) kernel;
 
-  klibcShrunk = pkgs.klibcShrunk.override { klibc = klibc_15; };
-
   kvm = pkgs.kvm76;
 
 
@@ -18,23 +16,50 @@ rec {
   };
 
 
-  mountCifs = (makeStaticBinaries stdenv).mkDerivation {
-    name = "mount.cifs";
-    src = fetchurl {
-      url = http://nixos.org/tarballs/mount_cifs-20090330.c;
-      sha256 = "1d9v3qzic3d12vna8g7d1zsl1piwm20f6xhck319rbfkrdg0smnl";
-    };
-    buildInputs = [nukeReferences];
-    buildCommand = ''
+  initrdUtils = runCommand "initrd-utils"
+    { buildInputs = [ nukeReferences ];
+      allowedReferences = [ "out" modulesClosure ]; # prevent accidents like glibc being included in the initrd
+    }
+    ''
       ensureDir $out/bin
-      gcc -Wall $src -o $out/bin/mount.cifs
-      strip $out/bin/mount.cifs
-      nuke-refs $out/bin/mount.cifs
-    '';
-    allowedReferences = []; # prevent accidents like glibc being included in the initrd
-  };
-
+      ensureDir $out/lib
+      
+      # Copy what we need from Glibc.
+      cp -p ${glibc}/lib/ld-linux*.so.? $out/lib
+      cp -p ${glibc}/lib/libc.so.* $out/lib
+      cp -p ${glibc}/lib/librt.so.* $out/lib
+      cp -p ${glibc}/lib/libdl.so.* $out/lib
+
+      # Copy some utillinux stuff.
+      cp ${utillinux}/bin/mount ${utillinux}/bin/umount $out/bin
+      cp -pd ${utillinux}/lib/libblkid*.so.* $out/lib
+      cp -pd ${utillinux}/lib/libuuid*.so.* $out/lib
+
+      # Copy some coreutils.
+      cp ${coreutils}/bin/basename $out/bin
+      cp ${coreutils}/bin/mkdir $out/bin
+      cp ${coreutils}/bin/mknod $out/bin
+      cp ${coreutils}/bin/cat $out/bin
+      cp ${coreutils}/bin/chroot $out/bin
+      cp ${coreutils}/bin/sleep $out/bin
+      cp ${coreutils}/bin/ln $out/bin
+
+      # Copy some other tools.
+      cp ${bash}/bin/bash $out/bin
+      cp ${module_init_tools}/sbin/insmod $out/bin/insmod
+      cp ${pkgs.nettools}/sbin/ifconfig $out/bin
+      cp ${pkgs.sysvinit}/sbin/halt $out/bin
+            
+      # Run patchelf to make the programs refer to the copied libraries.
+      for i in $out/bin/* $out/lib/*; do if ! test -L $i; then nuke-refs $i; fi; done
+
+      for i in $out/bin/*; do
+          echo "patching $i..."
+          patchelf --set-interpreter $out/lib/ld-linux*.so.? --set-rpath $out/lib $i || true
+      done
+    ''; # */
 
+    
   createDeviceNodes = dev:
     ''
       mknod ${dev}/null c 1 3
@@ -46,10 +71,10 @@ rec {
 
   
   stage1Init = writeScript "vm-run-stage1" ''
-    #! ${klibcShrunk}/bin/sh.shared -e
+    #! ${initrdUtils}/bin/bash -e
     echo START
 
-    export PATH=${klibcShrunk}/bin:${mountCifs}/bin
+    export PATH=${initrdUtils}/bin
 
     mkdir /etc
     echo -n > /etc/fstab
@@ -84,14 +109,14 @@ rec {
           args="CIFSMaxBufSize=4194304"
           ;;
       esac
-      echo "loading module $i with args $args"
+      echo "loading module $(basename $i .ko)"
       insmod $i $args
     done
 
     mount -t tmpfs none /dev
     ${createDeviceNodes "/dev"}
     
-    ipconfig 10.0.2.15:::::eth0:none
+    ifconfig eth0 up 10.0.2.15
 
     mkdir /fs
 
@@ -109,7 +134,7 @@ rec {
     n=.
     echo "mounting host filesystem..."
     while true; do
-      if mount.cifs //10.0.2.4/qemu /fs/hostfs -o guest,username=nobody; then
+      if mount -t cifs //10.0.2.4/qemu /fs/hostfs -o guest,username=nobody; then
         break
       else
         n=".$n"
@@ -144,7 +169,7 @@ rec {
     mount -o remount,ro dummy /fs
 
     echo DONE
-    reboot
+    halt -d -p -f
   '';
 
   
@@ -247,7 +272,7 @@ rec {
   createRootFS = ''
     mkdir /mnt
     ${e2fsprogs}/sbin/mke2fs -F /dev/vda
-    ${klibcShrunk}/bin/mount -t ext2 /dev/vda /mnt
+    ${utillinux}/bin/mount -t ext2 /dev/vda /mnt
 
     if test -e /mnt/.debug; then
       exec ${bash}/bin/sh
@@ -403,7 +428,7 @@ rec {
 
         # Make the Nix store available in /mnt, because that's where the RPMs live.
         mkdir -p /mnt/nix/store
-        ${klibcShrunk}/bin/mount -o bind /nix/store /mnt/nix/store
+        ${utillinux}/bin/mount -o bind /nix/store /mnt/nix/store
         
         echo "installing RPMs..."
         PATH=/usr/bin:/bin:/usr/sbin:/sbin $chroot /mnt \
@@ -414,8 +439,8 @@ rec {
         
         rm /mnt/.debug
         
-        ${klibcShrunk}/bin/umount /mnt/nix/store
-        ${klibcShrunk}/bin/umount /mnt
+        ${utillinux}/bin/umount /mnt/nix/store
+        ${utillinux}/bin/umount /mnt
       '';
 
       passthru = {inherit fullName;};
@@ -543,9 +568,9 @@ rec {
 
         # Make the Nix store available in /mnt, because that's where the .debs live.
         mkdir -p /mnt/inst/nix/store
-        ${klibcShrunk}/bin/mount -o bind /nix/store /mnt/inst/nix/store
-        ${klibcShrunk}/bin/mount -o bind /proc /mnt/proc
-        ${klibcShrunk}/bin/mount -o bind /dev /mnt/dev
+        ${utillinux}/bin/mount -o bind /nix/store /mnt/inst/nix/store
+        ${utillinux}/bin/mount -o bind /proc /mnt/proc
+        ${utillinux}/bin/mount -o bind /dev /mnt/dev
         
         # Misc. files/directories assumed by various packages.
         echo "initialising Dpkg DB..."
@@ -582,10 +607,10 @@ rec {
 
         rm /mnt/.debug
         
-        ${klibcShrunk}/bin/umount /mnt/inst/nix/store
-        ${klibcShrunk}/bin/umount /mnt/proc
-        ${klibcShrunk}/bin/umount /mnt/dev
-        ${klibcShrunk}/bin/umount /mnt
+        ${utillinux}/bin/umount /mnt/inst/nix/store
+        ${utillinux}/bin/umount /mnt/proc
+        ${utillinux}/bin/umount /mnt/dev
+        ${utillinux}/bin/umount /mnt
       '';
 
       passthru = {inherit fullName;};
diff --git a/pkgs/build-support/vm/test.nix b/pkgs/build-support/vm/test.nix
index c61469bf2262..ae91cbfe84ef 100644
--- a/pkgs/build-support/vm/test.nix
+++ b/pkgs/build-support/vm/test.nix
@@ -14,7 +14,7 @@ rec {
   buildPatchelfRPM = buildRPM {
     name = "patchelf-rpm";
     src = patchelf.src;
-    diskImage = diskImages.fedora8i386;
+    diskImage = diskImages.fedora12i386;
   };
 
   
diff --git a/pkgs/os-specific/linux/klibc/1.5.nix b/pkgs/os-specific/linux/klibc/1.5.nix
deleted file mode 100644
index 72b9c12698be..000000000000
--- a/pkgs/os-specific/linux/klibc/1.5.nix
+++ /dev/null
@@ -1,34 +0,0 @@
-{stdenv, fetchurl, perl, bison, mktemp, linuxHeaders}:
-
-assert stdenv.isLinux;
-
-let version = "1.5"; in
-
-stdenv.mkDerivation {
-  name = "klibc-${version}";
-
-  src = fetchurl {
-    url = "mirror://kernel/linux/libs/klibc/klibc-${version}.tar.bz2";
-    sha256 = "1izhf8kscjymsvsvhcqw9awnmp94vwv70zdj09srg9bkpjj0n017";
-  };
-  
-  makeFlags = ["V=1" "prefix=$out" "SHLIBDIR=$out/lib"];
-  
-  preBuild = ''
-    makeFlags=$(eval "echo $makeFlags")
-
-    mkdir linux
-    cp -prsd ${linuxHeaders}/include linux/
-    chmod -R u+w linux/include/
-  ''; # */
-  
-  # Install static binaries as well.
-  postInstall = ''
-    dir=$out/lib/klibc/bin.static
-    mkdir $dir
-    cp $(find $(find . -name static) -type f ! -name "*.g" -a ! -name ".*") $dir/
-    cp usr/dash/sh $dir/
-  '';
-  
-  buildInputs = [perl bison mktemp];
-}
diff --git a/pkgs/os-specific/linux/klibc/builder.sh b/pkgs/os-specific/linux/klibc/builder.sh
deleted file mode 100644
index 4ae5a9d080b1..000000000000
--- a/pkgs/os-specific/linux/klibc/builder.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-source $stdenv/setup
-
-preBuild() {
-    mkdir -p linux/include
-    cp -prd $kernel/lib/modules/*/build/include/* linux/include/
-    chmod -R u+w linux/include/
-}
-
-makeFlagsArray=(V=1 prefix=$out SHLIBDIR=$out/lib)
-
-genericBuild
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 5e3fbc911114..23a07f25bfa3 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6574,13 +6574,6 @@ let
     linuxHeaders = glibc.kernelHeaders;
   };
 
-  # Old version; needed in vmtools for insmod.  Should use
-  # module_init_tools instead.
-  klibc_15 = makeOverridable (import ../os-specific/linux/klibc/1.5.nix) {
-    inherit fetchurl stdenv perl bison mktemp;
-    linuxHeaders = glibc.kernelHeaders;
-  };
-
   klibcShrunk = makeOverridable (import ../os-specific/linux/klibc/shrunk.nix) {
     inherit stdenv klibc;
   };