Merge pull request #31535 from orivej/compress-qcow2

make-disk-image: add compressed option to compress qcow2 images
This commit is contained in:
Daniel Peebles 2017-11-12 19:17:08 -05:00 committed by GitHub
commit 6f13844bfd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -33,18 +33,23 @@
, name ? "nixos-disk-image" , name ? "nixos-disk-image"
, # Disk image format, one of qcow2, vpc, raw. , # Disk image format, one of qcow2, qcow2-compressed, vpc, raw.
format ? "raw" format ? "raw"
}: }:
with lib; with lib;
let let format' = format; in let
extensions = {
format = if (format' == "qcow2-compressed") then "qcow2" else format;
compress = optionalString (format' == "qcow2-compressed") "-c";
filename = "nixos." + {
qcow2 = "qcow2"; qcow2 = "qcow2";
vpc = "vhd"; vpc = "vhd";
raw = "img"; raw = "img";
}; }.${format};
nixpkgs = cleanSource pkgs.path; nixpkgs = cleanSource pkgs.path;
@ -125,7 +130,7 @@ let
fakeroot nixos-prepare-root $root ${channelSources} ${config.system.build.toplevel} closure fakeroot nixos-prepare-root $root ${channelSources} ${config.system.build.toplevel} closure
echo "copying staging root to image..." echo "copying staging root to image..."
cptofs ${pkgs.lib.optionalString partitioned "-P 1"} -t ${fsType} -i $diskImage $root/* / cptofs ${optionalString partitioned "-P 1"} -t ${fsType} -i $diskImage $root/* /
''; '';
in pkgs.vmTools.runInLinuxVM ( in pkgs.vmTools.runInLinuxVM (
pkgs.runCommand name pkgs.runCommand name
@ -134,12 +139,11 @@ in pkgs.vmTools.runInLinuxVM (
exportReferencesGraph = [ "closure" metaClosure ]; exportReferencesGraph = [ "closure" metaClosure ];
postVM = '' postVM = ''
${if format == "raw" then '' ${if format == "raw" then ''
mv $diskImage $out/nixos.img mv $diskImage $out/${filename}
diskImage=$out/nixos.img
'' else '' '' else ''
${pkgs.qemu}/bin/qemu-img convert -f raw -O ${format} $diskImage $out/nixos.${extensions.${format}} ${pkgs.qemu}/bin/qemu-img convert -f raw -O ${format} ${compress} $diskImage $out/${filename}
diskImage=$out/nixos.${extensions.${format}}
''} ''}
diskImage=$out/${filename}
${postVM} ${postVM}
''; '';
memSize = 1024; memSize = 1024;