summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDomen Kožar <domen@dev.si>2015-10-26 16:16:15 +0100
committerDomen Kožar <domen@dev.si>2015-10-26 16:16:45 +0100
commitf1508b3a23cd10a6a174580c4c8e98569beaccb8 (patch)
tree977869b745bbf44b77a45fdffd9e1601a0c6210c
parent1703d4dc5da22f6fbb483977b71a273b93c54004 (diff)
nova-image: use make-disk-image.nix
-rw-r--r--nixos/lib/make-disk-image.nix2
-rw-r--r--nixos/modules/virtualisation/nova-config.nix5
-rw-r--r--nixos/modules/virtualisation/nova-image.nix97
3 files changed, 25 insertions, 79 deletions
diff --git a/nixos/lib/make-disk-image.nix b/nixos/lib/make-disk-image.nix
index 01dd9c9ae7f2..62728c8ac761 100644
--- a/nixos/lib/make-disk-image.nix
+++ b/nixos/lib/make-disk-image.nix
@@ -110,7 +110,7 @@ pkgs.vmTools.runInLinuxVM (
umount /mnt/proc /mnt/dev /mnt/sys
umount /mnt
- # Do an fsck to make sure resize2fs works.
+ # Do a fsck to make sure resize2fs works.
fsck.${fsType} -f -y $rootDisk
''
)
diff --git a/nixos/modules/virtualisation/nova-config.nix b/nixos/modules/virtualisation/nova-config.nix
deleted file mode 100644
index f8239cdec519..000000000000
--- a/nixos/modules/virtualisation/nova-config.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ config, pkgs, modulesPath, ... }:
-
-{
- imports = [ "${modulesPath}/virtualisation/nova-image.nix" ];
-}
diff --git a/nixos/modules/virtualisation/nova-image.nix b/nixos/modules/virtualisation/nova-image.nix
index 20ec6b024e91..44c83aee2732 100644
--- a/nixos/modules/virtualisation/nova-image.nix
+++ b/nixos/modules/virtualisation/nova-image.nix
@@ -1,90 +1,45 @@
+# Usage:
+# $ NIXOS_CONFIG=`pwd`/nixos/modules/virtualisation/nova-image.nix nix-build '<nixpkgs/nixos>' -A config.system.build.novaImage
+
{ config, lib, pkgs, ... }:
with lib;
{
- imports = [ ../profiles/qemu-guest.nix ../profiles/headless.nix ./ec2-data.nix ];
-
- system.build.novaImage =
- pkgs.vmTools.runInLinuxVM (
- pkgs.runCommand "nova-image"
- { preVM =
- ''
- mkdir $out
- diskImage=$out/image
- ${pkgs.vmTools.qemu}/bin/qemu-img create -f raw $diskImage "4G"
- mv closure xchg/
- '';
- buildInputs = [ pkgs.utillinux pkgs.perl ];
- exportReferencesGraph =
- [ "closure" config.system.build.toplevel ];
+ system.build.novaImage = import ../../lib/make-disk-image.nix {
+ inherit pkgs lib config;
+ partitioned = true;
+ diskSize = 1 * 1024;
+ configFile = pkgs.writeText "configuration.nix"
+ ''
+ {
+ imports = [ <nixpkgs/nixos/modules/virtualisation/nova-image.nix> ];
}
- ''
- # 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/vda1
- ${pkgs.e2fsprogs}/sbin/tune2fs -c 0 -i 0 /dev/vda1
- mkdir /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} /tmp/xchg/closure)
-
- mkdir -p /mnt/nix/store
- ${pkgs.rsync}/bin/rsync -av $storePaths /mnt/nix/store/
-
- # Register the paths in the Nix database.
- printRegistration=1 perl ${pkgs.pathsFromGraph} /tmp/xchg/closure | \
- chroot /mnt ${config.nix.package}/bin/nix-store --load-db --option build-users-group ""
-
- # Create the system profile to allow nixos-rebuild to work.
- chroot /mnt ${config.nix.package}/bin/nix-env --option build-users-group "" \
- -p /nix/var/nix/profiles/system --set ${config.system.build.toplevel}
-
- # `nixos-rebuild' requires an /etc/NIXOS.
- mkdir -p /mnt/etc
- touch /mnt/etc/NIXOS
-
- # `switch-to-configuration' requires a /bin/sh
- mkdir -p /mnt/bin
- ln -s ${config.system.build.binsh}/bin/sh /mnt/bin/sh
+ '';
+ };
- # Install a configuration.nix.
- mkdir -p /mnt/etc/nixos
- cp ${./nova-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
- ''
- );
+ imports = [
+ ../profiles/qemu-guest.nix
+ ../profiles/headless.nix
+ ./ec2-data.nix
+ ];
fileSystems."/".device = "/dev/disk/by-label/nixos";
boot.kernelParams = [ "console=ttyS0" ];
-
- boot.loader.grub.version = 2;
boot.loader.grub.device = "/dev/vda";
boot.loader.grub.timeout = 0;
+ # Allow root logins
+ services.openssh.enable = true;
+ services.openssh.permitRootLogin = "without-password";
+
# 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 a unionfs-fuse
# mount on top of it so we have a lot more space for Nix operations.
+
/*
boot.initrd.postMountCommands =
''
@@ -106,10 +61,6 @@ with lib;
'';
boot.initrd.supportedFilesystems = [ "unionfs-fuse" ];
- */
+ */
- # Allow root logins only using the SSH key that the user specified
- # at instance creation time.
- services.openssh.enable = true;
- services.openssh.permitRootLogin = "without-password";
}