aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix
diff options
context:
space:
mode:
authorMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
committerMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
commitc4625b175f8200f643fd6e11010932ea44c78433 (patch)
treebce3f89888c8ac3991fa5569a878a9eab6801ccc /infra/libkookie/nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix
parent49f735974dd103039ddc4cb576bb76555164a9e7 (diff)
parentd661aa56a8843e991261510c1bb28fdc2f6975ae (diff)
Add 'infra/libkookie/' from commit 'd661aa56a8843e991261510c1bb28fdc2f6975ae'
git-subtree-dir: infra/libkookie git-subtree-mainline: 49f735974dd103039ddc4cb576bb76555164a9e7 git-subtree-split: d661aa56a8843e991261510c1bb28fdc2f6975ae
Diffstat (limited to 'infra/libkookie/nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix')
-rw-r--r--infra/libkookie/nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix94
1 files changed, 94 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix b/infra/libkookie/nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix
new file mode 100644
index 000000000000..b09f4ca47a3f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix
@@ -0,0 +1,94 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.amazonImage;
+in {
+
+ imports = [ ../../../modules/virtualisation/amazon-image.nix ];
+
+ # Amazon recomments setting this to the highest possible value for a good EBS
+ # experience, which prior to 4.15 was 255.
+ # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html#timeout-nvme-ebs-volumes
+ config.boot.kernelParams =
+ let timeout =
+ if pkgs.lib.versionAtLeast config.boot.kernelPackages.kernel.version "4.15"
+ then "4294967295"
+ else "255";
+ in [ "nvme_core.io_timeout=${timeout}" ];
+
+ options.amazonImage = {
+ name = mkOption {
+ type = types.str;
+ description = "The name of the generated derivation";
+ default = "nixos-amazon-image-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
+ };
+
+ contents = mkOption {
+ example = literalExample ''
+ [ { source = pkgs.memtest86 + "/memtest.bin";
+ target = "boot/memtest.bin";
+ }
+ ]
+ '';
+ default = [];
+ description = ''
+ This option lists files to be copied to fixed locations in the
+ generated image. Glob patterns work.
+ '';
+ };
+
+ sizeMB = mkOption {
+ type = types.int;
+ default = if config.ec2.hvm then 2048 else 8192;
+ description = "The size in MB of the image";
+ };
+
+ format = mkOption {
+ type = types.enum [ "raw" "qcow2" "vpc" ];
+ default = "vpc";
+ description = "The image format to output";
+ };
+ };
+
+ 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 "efi"
+ else if config.ec2.hvm then "legacy"
+ else "none";
+ diskSize = cfg.sizeMB;
+ fsType = "ext4";
+ configFile = pkgs.writeText "configuration.nix"
+ ''
+ { modulesPath, ... }: {
+ imports = [ "''${modulesPath}/virtualisation/amazon-image.nix" ];
+ ${optionalString config.ec2.hvm ''
+ ec2.hvm = true;
+ ''}
+ ${optionalString config.ec2.efi ''
+ ec2.efi = true;
+ ''}
+ }
+ '';
+ postVM = ''
+ extension=''${diskImage##*.}
+ friendlyName=$out/${cfg.name}.$extension
+ mv "$diskImage" "$friendlyName"
+ diskImage=$friendlyName
+
+ mkdir -p $out/nix-support
+ echo "file ${cfg.format} $diskImage" >> $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}/bin/qemu-img info --output json "$diskImage" | ${pkgs.jq}/bin/jq '."virtual-size"')" \
+ --arg file "$diskImage" \
+ '$ARGS.named' \
+ > $out/nix-support/image-info.json
+ '';
+ };
+}