Author: eelco
Date: Wed Apr  6 15:09:34 2011
New Revision: 26721
URL: https://svn.nixos.org/websvn/nix/?rev=26721&sc=1

Log:
* Added a module to create a disk image for Nova.

Added:
   nixos/trunk/modules/virtualisation/ec2-data.nix
   nixos/trunk/modules/virtualisation/nova-image.nix
      - copied, changed from r26708, 
nixos/trunk/modules/virtualisation/amazon-image.nix
Modified:
   nixos/trunk/modules/virtualisation/amazon-image.nix

Modified: nixos/trunk/modules/virtualisation/amazon-image.nix
==============================================================================
--- nixos/trunk/modules/virtualisation/amazon-image.nix Wed Apr  6 15:08:36 
2011        (r26720)
+++ nixos/trunk/modules/virtualisation/amazon-image.nix Wed Apr  6 15:09:34 
2011        (r26721)
@@ -3,6 +3,8 @@
 with pkgs.lib;
 
 {
+  require = [ ./ec2-data.nix ];
+
   system.build.amazonImage =
     pkgs.vmTools.runInLinuxVM (
       pkgs.runCommand "amazon-image"
@@ -104,40 +106,4 @@
   # at instance creation time.
   services.openssh.enable = true;
   services.openssh.permitRootLogin = "without-password";
-
-  # Obtain the SSH key and host name at startup time.
-  jobs.fetchEC2Data =
-    { name = "fetch-ec2-data";
-
-      startOn = "ip-up";
-
-      task = true;
-
-      script =
-        ''
-          echo "obtaining SSH key..."
-          mkdir -p /root/.ssh
-          ${pkgs.curl}/bin/curl --retry 3 --retry-delay 0 --fail \
-            -o /root/key.pub \
-            http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
-          if [ $? -eq 0 -a -e /root/key.pub ]; then
-              if ! grep -q -f /root/key.pub /root/.ssh/authorized_keys; then
-                  cat /root/key.pub >> /root/.ssh/authorized_keys
-                  echo "new key added to authorized_keys"
-              fi
-              chmod 600 /root/.ssh/authorized_keys
-              rm -f /root/key.pub
-          fi
-
-          # Print the host public key on the console so that the user
-          # can obtain it securely by parsing the output of
-          # ec2-get-console-output.
-          echo "-----BEGIN SSH HOST KEY FINGERPRINTS-----" > /dev/console
-          ${pkgs.openssh}/bin/ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub > 
/dev/console
-          echo "-----END SSH HOST KEY FINGERPRINTS-----" > /dev/console
-
-          echo "setting host name..."
-          ${pkgs.nettools}/bin/hostname $(${pkgs.curl}/bin/curl 
http://169.254.169.254/1.0/meta-data/hostname)
-        '';
-    };
 }

Added: nixos/trunk/modules/virtualisation/ec2-data.nix
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ nixos/trunk/modules/virtualisation/ec2-data.nix     Wed Apr  6 15:09:34 
2011        (r26721)
@@ -0,0 +1,45 @@
+# This module defines an Upstart job that obtains the SSH key and host
+# name of virtual machines running on Amazon EC2, Eucalyptus and
+# OpenStack Compute (Nova).
+
+{ config, pkgs, ... }:
+
+{
+
+  jobs.fetchEC2Data =
+    { name = "fetch-ec2-data";
+
+      startOn = "ip-up";
+
+      task = true;
+
+      script =
+        ''
+          echo "setting host name..."
+          ${pkgs.nettools}/bin/hostname $(${pkgs.curl}/bin/curl 
http://169.254.169.254/1.0/meta-data/hostname)
+
+          echo "obtaining SSH key..."
+          mkdir -p /root/.ssh
+          ${pkgs.curl}/bin/curl --retry 3 --retry-delay 0 --fail \
+            -o /root/key.pub \
+            http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
+          if [ $? -eq 0 -a -e /root/key.pub ]; then
+              if ! grep -q -f /root/key.pub /root/.ssh/authorized_keys; then
+                  cat /root/key.pub >> /root/.ssh/authorized_keys
+                  echo "new key added to authorized_keys"
+              fi
+              chmod 600 /root/.ssh/authorized_keys
+              rm -f /root/key.pub
+          fi
+
+          # Print the host public key on the console so that the user
+          # can obtain it securely by parsing the output of
+          # ec2-get-console-output.
+          echo "-----BEGIN SSH HOST KEY FINGERPRINTS-----" > /dev/console
+          ${pkgs.openssh}/bin/ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub > 
/dev/console
+          echo "-----END SSH HOST KEY FINGERPRINTS-----" > /dev/console
+        '';
+    };
+
+
+}

Copied and modified: nixos/trunk/modules/virtualisation/nova-image.nix (from 
r26708, nixos/trunk/modules/virtualisation/amazon-image.nix)
==============================================================================
--- nixos/trunk/modules/virtualisation/amazon-image.nix Wed Apr  6 09:16:22 
2011        (r26708, copy source)
+++ nixos/trunk/modules/virtualisation/nova-image.nix   Wed Apr  6 15:09:34 
2011        (r26721)
@@ -3,13 +3,15 @@
 with pkgs.lib;
 
 {
-  system.build.amazonImage =
+  require = [ ../profiles/qemu-guest.nix ./ec2-data.nix ];
+
+  system.build.novaImage =
     pkgs.vmTools.runInLinuxVM (
-      pkgs.runCommand "amazon-image"
+      pkgs.runCommand "nova-image"
         { preVM =
             ''
               mkdir $out
-              diskImage=$out/nixos.img
+              diskImage=$out/image
               ${pkgs.vmTools.kvm}/bin/qemu-img create -f raw $diskImage "4G"
             '';
           buildInputs = [ pkgs.utillinux pkgs.perl ];
@@ -17,20 +19,29 @@
             [ "closure" config.system.build.toplevel ];
         }
         ''
+          # Create a single / partition.
+          ${pkgs.parted}/sbin/parted /dev/vda mklabel msdos
+          ${pkgs.parted}/sbin/parted /dev/vda -- mkpart primary ext2 1M -1s
+          . /sys/class/block/vda1/uevent
+          mknod /dev/vda1 b $MAJOR $MINOR
+        
           # Create an empty filesystem and mount it.
-          ${pkgs.e2fsprogs}/sbin/mkfs.ext3 -L nixos /dev/vda
-          ${pkgs.e2fsprogs}/sbin/tune2fs -c 0 -i 0 /dev/vda
+          ${pkgs.e2fsprogs}/sbin/mkfs.ext3 -L nixos /dev/vda1
+          ${pkgs.e2fsprogs}/sbin/tune2fs -c 0 -i 0 /dev/vda1
           mkdir /mnt
-          mount /dev/vda /mnt
+          mount /dev/vda1 /mnt
 
           # The initrd expects these directories to exist.
           mkdir /mnt/dev /mnt/proc /mnt/sys
+          mount --bind /proc /mnt/proc
+          mount --bind /dev /mnt/dev
+          mount --bind /sys /mnt/sys
 
           # Copy all paths in the closure to the filesystem.
           storePaths=$(perl ${pkgs.pathsFromGraph} $ORIG_TMPDIR/closure)
 
           mkdir -p /mnt/nix/store
-          cp -prvd $storePaths /mnt/nix/store/
+          ${pkgs.rsync}/bin/rsync -av $storePaths /mnt/nix/store/
 
           # Register the paths in the Nix database.
           printRegistration=1 perl ${pkgs.pathsFromGraph} $ORIG_TMPDIR/closure 
| \
@@ -46,11 +57,12 @@
 
           # Install a configuration.nix.
           mkdir -p /mnt/etc/nixos
-          cp ${./amazon-config.nix} /mnt/etc/nixos/configuration.nix
+          #cp ${./amazon-config.nix} /mnt/etc/nixos/configuration.nix
 
           # Generate the GRUB menu.
           chroot /mnt 
${config.system.build.toplevel}/bin/switch-to-configuration boot
 
+          umount /mnt/proc /mnt/dev /mnt/sys
           umount /mnt
         ''
     );
@@ -59,30 +71,33 @@
     [ { mountPoint = "/";
         device = "/dev/disk/by-label/nixos";
       }
-      { mountPoint = "/ephemeral0";
-        device = "/dev/xvdc";
-        neededForBoot = true;
-      }
+      #{ mountPoint = "/ephemeral0";
+      #  device = "/dev/xvdc";
+      #  neededForBoot = true;
+      #}
     ];
 
+  /*
   swapDevices =
     [ { device = "/dev/xvdb"; } ];
+  */
+  
+  boot.kernelParams = [ "console=ttyS0" ];
 
-  boot.initrd.kernelModules = [ "xen-blkfront" "aufs" ];
-  boot.kernelModules = [ "xen-netfront" ];
+  boot.initrd.kernelModules = [ "aufs" ];
 
   boot.extraModulePackages = [ config.boot.kernelPackages.aufs2 ];
 
-  # Generate a GRUB menu.  Amazon's pv-grub uses this to boot our 
kernel/initrd.
-  boot.loader.grub.device = "nodev";
+  boot.loader.grub.version = 2;
+  boot.loader.grub.device = "/dev/vda";
   boot.loader.grub.timeout = 0;
-  boot.loader.grub.extraPerEntryConfig = "root (hd0)";
 
   # Put /tmp and /var on /ephemeral0, which has a lot more space.  
   # Unfortunately we can't do this with the `fileSystems' option 
   # because it has no support for creating the source of a bind 
   # mount.  Also, "move" /nix to /ephemeral0 by layering an AUFS
   # on top of it so we have a lot more space for Nix operations.
+  /*
   boot.initrd.postMountCommands =
     ''
       mkdir -m 1777 -p $targetRoot/ephemeral0/tmp
@@ -96,6 +111,7 @@
       mkdir -m 755 -p $targetRoot/ephemeral0/nix
       mount -t aufs -o dirs=$targetRoot/ephemeral0/nix=rw:$targetRoot/nix=rr 
none $targetRoot/nix
     '';
+    */
 
   # There are no virtual consoles.
   services.mingetty.ttys = [ ];
@@ -104,40 +120,4 @@
   # at instance creation time.
   services.openssh.enable = true;
   services.openssh.permitRootLogin = "without-password";
-
-  # Obtain the SSH key and host name at startup time.
-  jobs.fetchEC2Data =
-    { name = "fetch-ec2-data";
-
-      startOn = "ip-up";
-
-      task = true;
-
-      script =
-        ''
-          echo "obtaining SSH key..."
-          mkdir -p /root/.ssh
-          ${pkgs.curl}/bin/curl --retry 3 --retry-delay 0 --fail \
-            -o /root/key.pub \
-            http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
-          if [ $? -eq 0 -a -e /root/key.pub ]; then
-              if ! grep -q -f /root/key.pub /root/.ssh/authorized_keys; then
-                  cat /root/key.pub >> /root/.ssh/authorized_keys
-                  echo "new key added to authorized_keys"
-              fi
-              chmod 600 /root/.ssh/authorized_keys
-              rm -f /root/key.pub
-          fi
-
-          # Print the host public key on the console so that the user
-          # can obtain it securely by parsing the output of
-          # ec2-get-console-output.
-          echo "-----BEGIN SSH HOST KEY FINGERPRINTS-----" > /dev/console
-          ${pkgs.openssh}/bin/ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub > 
/dev/console
-          echo "-----END SSH HOST KEY FINGERPRINTS-----" > /dev/console
-
-          echo "setting host name..."
-          ${pkgs.nettools}/bin/hostname $(${pkgs.curl}/bin/curl 
http://169.254.169.254/1.0/meta-data/hostname)
-        '';
-    };
 }
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits

Reply via email to