@ -4,6 +4,7 @@ with lib;
let
cfg = config . amazonImage ;
in {
imports = [ ../../../modules/virtualisation/amazon-image.nix ] ;
@ -53,15 +54,7 @@ in {
} ;
} ;
config . system . build . amazonImage = import ../../../lib/make-disk-image.nix {
inherit lib config ;
inherit ( cfg ) contents format name ;
pkgs = import ../../../.. { inherit ( pkgs ) system ; } ; # ensure we use the regular qemu-kvm package
partitionTableType = if config . ec2 . efi then " e f i "
else if config . ec2 . hvm then " l e g a c y + g p t "
else " n o n e " ;
diskSize = cfg . sizeMB ;
fsType = " e x t 4 " ;
config . system . build . amazonImage = let
configFile = pkgs . writeText " c o n f i g u r a t i o n . n i x "
''
{ modulesPath , . . . }: {
@ -72,24 +65,84 @@ in {
$ { optionalString config . ec2 . efi ''
ec2 . efi = true ;
'' }
$ { optionalString config . ec2 . zfs . enable ''
ec2 . zfs . enable = true ;
networking . hostId = " ${ config . networking . hostId } " ;
'' }
}
'' ;
postVM = ''
extension = '' ${ diskImage ##*.}
friendlyName = $ out / $ { cfg . name } . $ extension
mv " $ d i s k I m a g e " " $ f r i e n d l y N a m e "
diskImage = $ friendlyName
mkdir - p $ out/nix-support
echo " f i l e ${ cfg . format } $ d i s k I m a g e " > > $ out/nix-support/hydra-build-products
$ { pkgs . jq } /bin/jq - n \
- - arg label $ { lib . escapeShellArg config . system . nixos . label } \
- - arg system $ { lib . escapeShellArg pkgs . stdenv . hostPlatform . system } \
- - arg logical_bytes " $ ( ${ pkgs . qemu } / b i n / q e m u - i m g i n f o - - o u t p u t j s o n " $ diskImage " | ${ pkgs . jq } / b i n / j q ' . " virtual-size " ' ) " \
- - arg file " $ d i s k I m a g e " \
' $ ARGS . named' \
> $ out/nix-support/image-info.json
'' ;
} ;
zfsBuilder = import ../../../lib/make-zfs-image.nix {
inherit lib config configFile ;
inherit ( cfg ) contents format name ;
pkgs = import ../../../.. { inherit ( pkgs ) system ; } ; # ensure we use the regular qemu-kvm package
includeChannel = true ;
bootSize = 1000 ; # 1G is the minimum EBS volume
rootSize = cfg . sizeMB ;
rootPoolProperties = {
ashift = 12 ;
autoexpand = " o n " ;
} ;
datasets = config . ec2 . zfs . datasets ;
postVM = ''
extension = '' ${ rootDiskImage ##*.}
friendlyName = $ out / $ { cfg . name }
rootDisk = " $ f r i e n d l y N a m e . r o o t . $ e x t e n s i o n "
bootDisk = " $ f r i e n d l y N a m e . b o o t . $ e x t e n s i o n "
mv " $ r o o t D i s k I m a g e " " $ r o o t D i s k "
mv " $ b o o t D i s k I m a g e " " $ b o o t D i s k "
mkdir - p $ out/nix-support
echo " f i l e ${ cfg . format } $ b o o t D i s k " > > $ out/nix-support/hydra-build-products
echo " f i l e ${ cfg . format } $ r o o t D i s k " > > $ out/nix-support/hydra-build-products
$ { pkgs . jq } /bin/jq - n \
- - arg label $ { lib . escapeShellArg config . system . nixos . label } \
- - arg system $ { lib . escapeShellArg pkgs . stdenv . hostPlatform . system } \
- - arg root_logical_bytes " $ ( ${ pkgs . qemu } / b i n / q e m u - i m g i n f o - - o u t p u t j s o n " $ bootDisk " | ${ pkgs . jq } / b i n / j q ' . " virtual-size " ' ) " \
- - arg boot_logical_bytes " $ ( ${ pkgs . qemu } / b i n / q e m u - i m g i n f o - - o u t p u t j s o n " $ rootDisk " | ${ pkgs . jq } / b i n / j q ' . " virtual-size " ' ) " \
- - arg root " $ r o o t D i s k " \
- - arg boot " $ b o o t D i s k " \
' $ ARGS . named' \
> $ out/nix-support/image-info.json
'' ;
} ;
extBuilder = import ../../../lib/make-disk-image.nix {
inherit lib config configFile ;
inherit ( cfg ) contents format name ;
pkgs = import ../../../.. { inherit ( pkgs ) system ; } ; # ensure we use the regular qemu-kvm package
fsType = " e x t 4 " ;
partitionTableType = if config . ec2 . efi then " e f i "
else if config . ec2 . hvm then " l e g a c y + g p t "
else " n o n e " ;
diskSize = cfg . sizeMB ;
postVM = ''
extension = '' ${ diskImage ##*.}
friendlyName = $ out / $ { cfg . name } . $ extension
mv " $ d i s k I m a g e " " $ f r i e n d l y N a m e "
diskImage = $ friendlyName
mkdir - p $ out/nix-support
echo " f i l e ${ cfg . format } $ d i s k I m a g e " > > $ out/nix-support/hydra-build-products
$ { pkgs . jq } /bin/jq - n \
- - arg label $ { lib . escapeShellArg config . system . nixos . label } \
- - arg system $ { lib . escapeShellArg pkgs . stdenv . hostPlatform . system } \
- - arg logical_bytes " $ ( ${ pkgs . qemu } / b i n / q e m u - i m g i n f o - - o u t p u t j s o n " $ diskImage " | ${ pkgs . jq } / b i n / j q ' . " virtual-size " ' ) " \
- - arg file " $ d i s k I m a g e " \
' $ ARGS . named' \
> $ out/nix-support/image-info.json
'' ;
} ;
in if config . ec2 . zfs . enable then zfsBuilder else extBuilder ;
}