From 6dddd07402ecf3389a5986611af3ef05313cb8a0 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra <eelco.dolstra@logicblox.com> Date: Thu, 10 Jun 2010 12:28:04 +0000 Subject: [PATCH] * vmTools: don't use klibc anymore. Just use utillinux/bash/etc. svn path=/nixpkgs/trunk/; revision=22209 --- pkgs/build-support/vm/default.nix | 91 ++++++++++++++++--------- pkgs/build-support/vm/test.nix | 2 +- pkgs/os-specific/linux/klibc/1.5.nix | 34 --------- pkgs/os-specific/linux/klibc/builder.sh | 11 --- pkgs/top-level/all-packages.nix | 7 -- 5 files changed, 59 insertions(+), 86 deletions(-) delete mode 100644 pkgs/os-specific/linux/klibc/1.5.nix delete mode 100644 pkgs/os-specific/linux/klibc/builder.sh 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; };