Author: ludo
Date: Mon Jun 13 22:17:22 2011
New Revision: 27444
URL: https://svn.nixos.org/websvn/nix/?rev=27444&sc=1

Log:
hurd: Add `qemu_image'.

Modified:
   hydra-config/gnu/trunk/hurd/release.nix

Modified: hydra-config/gnu/trunk/hurd/release.nix
==============================================================================
--- hydra-config/gnu/trunk/hurd/release.nix     Mon Jun 13 22:14:06 2011        
(r27443)
+++ hydra-config/gnu/trunk/hurd/release.nix     Mon Jun 13 22:17:22 2011        
(r27444)
@@ -158,6 +158,72 @@
           buildNativeInputs = [ pkgs.mig ];
           inherit meta succeedOnFailure keepBuildDirectory;
         }).hostDrv;
+
+    # A bare bones QEMU disk image with GNU/Hurd on partition 1.
+    # FIXME: Currently hangs at "start ext2fs:".
+    qemu_image =
+      { build ? (jobs.xbuild_without_parted {})
+      , mach ? ((import ../gnumach/release.nix {}).build {}) }:
+
+      let
+        size = 1024; fullName = "QEMU Disk Image of GNU/Hurd";
+        pkgs = import nixpkgs {
+          system = "x86_64-linux";               # build platform
+          crossSystem = crossSystems.i586_pc_gnu; # host platform
+        };
+      in
+        pkgs.vmTools.runInLinuxVM (pkgs.stdenv.mkDerivation {
+          name = "hurd-qemu-image";
+          preVM = pkgs.vmTools.createEmptyImage { inherit size fullName; };
+
+          # Software cross-compiled for GNU to be installed.
+          gnuDerivations =
+            [ mach build
+              pkgs.bash.hostDrv pkgs.coreutils.hostDrv
+              pkgs.findutils.hostDrv pkgs.gnused.hostDrv
+            ];
+
+          # Command to build the disk image.
+          buildCommand = let hd = "vda"; dollar = "\\\$"; in ''
+            ${pkgs.parted}/sbin/parted /dev/${hd} \
+               mklabel msdos mkpart primary ext2 1MiB 100MiB
+            mknod /dev/${hd}1 b 254 1
+
+            ${pkgs.e2fsprogs}/sbin/mke2fs -o hurd -F /dev/${hd}1
+            mkdir /mnt
+            ${pkgs.utillinux}/bin/mount -t ext2 /dev/${hd}1 /mnt
+
+            mkdir -p /mnt/nix/store
+            cp -rv "/nix/store/"*-gnu /mnt/nix/store
+
+            mkdir /mnt/bin /mnt/dev
+            ln -sv "${build}/hurd" /mnt/hurd
+            ln -sv "${pkgs.bash.hostDrv}/bin/bash" /mnt/bin/sh
+
+            mkdir -p /mnt/boot/grub
+            ln -sv "${mach}/boot/gnumach" /mnt/boot
+            cat > /mnt/boot/grub/grub.cfg <<EOF
+set timeout=5
+search.file /boot/gnumach
+
+menuentry "GNU (wannabe NixOS GNU/Hurd)" {
+  multiboot /boot/gnumach root=device:hd0s1
+  module  /hurd/ext2fs.static ext2fs --readonly \
+     --multiboot-command-line='${dollar}{kernel-command-line}' \
+     --host-priv-port='${dollar}{host-port}' \
+     --device-master-port='${dollar}{device-port}' \
+     --exec-server-task='${dollar}{exec-task}' -T typed '${dollar}{root}' \
+     '\$(task-create)' '\$(task-resume)'
+  module ${pkgs.glibc.hostDrv}/lib/ld.so.1 exec /hurd/exec 
'\$(exec-task=task-create)'
+}
+EOF
+
+            ${pkgs.grub2}/sbin/grub-install --no-floppy \
+              --boot-directory /mnt/boot /dev/${hd}
+
+            ${pkgs.utillinux}/bin/umount /mnt
+          '';
+        });
    };
 in
   jobs
_______________________________________________
nix-commits mailing list
nix-comm...@cs.uu.nl
http://mail.cs.uu.nl/mailman/listinfo/nix-commits

Reply via email to