From d7f638da0c6d337acc201789c3b8113e01ec3942 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 20 Jul 2010 13:53:14 +0000 Subject: [PATCH] * Amazon now supports booting a custom kernel in the AMI using pv-grub, so supply a GRUB menu that starts our own kernel and initrd. svn path=/nixos/trunk/; revision=22678 --- modules/virtualisation/amazon-image.nix | 43 ++++++++++++++----------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/modules/virtualisation/amazon-image.nix b/modules/virtualisation/amazon-image.nix index 812bb8faf32..81f6a25758e 100644 --- a/modules/virtualisation/amazon-image.nix +++ b/modules/virtualisation/amazon-image.nix @@ -2,6 +2,20 @@ with pkgs.lib; +let + + grubMenu = pkgs.writeText "pv-grub-menu.lst" + '' + default 0 + timeout 0 + title EC2 + root (hd0) + kernel /nix/var/nix/profiles/system/kernel systemConfig=/nix/var/nix/profiles/system init=/nix/var/nix/profiles/system/init + initrd /nix/var/nix/profiles/system/initrd + ''; + +in + { system.build.amazonImage = pkgs.vmTools.runInLinuxVM ( @@ -47,40 +61,31 @@ with pkgs.lib; # Install a configuration.nix. mkdir -p /mnt/etc/nixos cp ${./amazon-config.nix} /mnt/etc/nixos/configuration.nix - - # Amazon assumes that there is a /sbin/init, so create one. - # Note that simply creating /sbin/init as a symlink breaks - # some EC2 initrds (like Ubuntu's) because they do a "test - # -x $mountPoint/sbin/init". - mkdir -p /mnt/sbin - echo "#! /nix/var/nix/profiles/system/init" > /mnt/sbin/init - chmod +x /mnt/sbin/init + + # Amazon uses `pv-grub', which expects a + # /boot/grub/menu.lst. + mkdir -p /mnt/boot/grub + cp ${grubMenu} /mnt/boot/grub/menu.lst umount /mnt '' ); - # On EC2 we don't get to supply our own kernel, so we can't load any - # modules. However, dhclient fails if the ipv6 module isn't loaded, - # unless it's compiled without IPv6 support. So do that. - nixpkgs.config.packageOverrides = pkgsOld: - { dhcp = pkgs.lib.overrideDerivation pkgsOld.dhcp (oldAttrs: - { configureFlags = "--disable-dhcpv6"; - }); - }; - fileSystems = [ { mountPoint = "/"; device = "/dev/disk/by-label/nixos"; } { mountPoint = "/data"; - device = "/dev/sda2"; + device = "/dev/xvdc"; autocreate = true; } ]; swapDevices = - [ { device = "/dev/sda3"; } ]; + [ { device = "/dev/xvdb"; } ]; + + boot.initrd.kernelModules = [ "xen-blkfront" ]; + boot.kernelModules = [ "xen-netfront" ]; # There are no virtual consoles. services.mingetty.ttys = [ ];