Change-Id: Idc8cc3a640fc895cd3882e93a193212adb743abb Reviewed-on: https://cl.tvl.fyi/c/depot/+/9425 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
# Profile for virtual machines on Yandex Cloud, intended for disk
 | 
						|
# images.
 | 
						|
#
 | 
						|
# https://cloud.yandex.com/en/docs/compute/operations/image-create/custom-image
 | 
						|
#
 | 
						|
# TODO(tazjin): Upstream to nixpkgs once it works well.
 | 
						|
{ config, lib, pkgs, modulesPath, ... }:
 | 
						|
 | 
						|
let
 | 
						|
  cfg = config.virtualisation.yandexCloud;
 | 
						|
 | 
						|
  # Kernel modules required for interacting with the hypervisor. These
 | 
						|
  # must be available during stage 1 boot and during normal operation,
 | 
						|
  # as disks and network do not work without them.
 | 
						|
  modules = [
 | 
						|
    "virtio-net"
 | 
						|
    "virtio-blk"
 | 
						|
    "virtio-pci"
 | 
						|
    "virtiofs"
 | 
						|
  ];
 | 
						|
in
 | 
						|
{
 | 
						|
  imports = [
 | 
						|
    "${modulesPath}/profiles/headless.nix"
 | 
						|
  ];
 | 
						|
 | 
						|
  options = {
 | 
						|
    virtualisation.yandexCloud.rootPartitionUuid = with lib; mkOption {
 | 
						|
      type = types.str;
 | 
						|
      default = "C55A5EE2-E5FA-485C-B3AE-CC928429AB6B";
 | 
						|
 | 
						|
      description = ''
 | 
						|
        UUID to use for the root partition of the disk image. Yandex
 | 
						|
        Cloud requires that root partitions are mounted by UUID.
 | 
						|
 | 
						|
        Most users do not need to set this to a non-default value.
 | 
						|
      '';
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = {
 | 
						|
    fileSystems."/" = {
 | 
						|
      device = "/dev/disk/by-uuid/${lib.toLower cfg.rootPartitionUuid}";
 | 
						|
      fsType = "ext4";
 | 
						|
      autoResize = true;
 | 
						|
    };
 | 
						|
 | 
						|
    boot = {
 | 
						|
      loader.grub.device = "/dev/vda";
 | 
						|
 | 
						|
      initrd.kernelModules = modules;
 | 
						|
      kernelModules = modules;
 | 
						|
      kernelParams = [
 | 
						|
        # Enable support for the serial console
 | 
						|
        "console=ttyS0"
 | 
						|
      ];
 | 
						|
 | 
						|
      growPartition = true;
 | 
						|
    };
 | 
						|
 | 
						|
    environment.etc.securetty = {
 | 
						|
      text = "ttyS0";
 | 
						|
      mode = "0644";
 | 
						|
    };
 | 
						|
 | 
						|
    systemd.services."serial-getty@ttyS0".enable = true;
 | 
						|
 | 
						|
    services.openssh.enable = true;
 | 
						|
    services.cloud-init.enable = true;
 | 
						|
 | 
						|
    system.build.yandexCloudImage = import (pkgs.path + "/nixos/lib/make-disk-image.nix") {
 | 
						|
      inherit lib config pkgs;
 | 
						|
      additionalSpace = "128M";
 | 
						|
      format = "qcow2";
 | 
						|
      partitionTableType = "legacy+gpt";
 | 
						|
      rootGPUID = cfg.rootPartitionUuid;
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |