From 3c0188a701315bccd1d032f3ed8e49054f0df600 Mon Sep 17 00:00:00 2001 From: ooks-io Date: Tue, 29 Oct 2024 16:44:09 +1100 Subject: [PATCH] server: add linode profile init --- modules/nixos/server/default.nix | 4 +- .../{options/server.nix => options.nix} | 0 modules/nixos/server/options/default.nix | 5 -- modules/nixos/server/profiles/linode.nix | 65 ++++++++++++++----- .../server/profiles/linode/base/boot.nix | 60 +++++++++++++++++ .../server/profiles/linode/base/default.nix | 7 ++ .../profiles/linode/base/file-system.nix | 8 +++ .../profiles/linode/base/networking.nix | 12 ++++ .../nixos/server/profiles/linode/default.nix | 8 +++ .../nixos/server/profiles/linode/image.nix | 23 +++++++ 10 files changed, 170 insertions(+), 22 deletions(-) rename modules/nixos/server/{options/server.nix => options.nix} (100%) delete mode 100644 modules/nixos/server/options/default.nix create mode 100644 modules/nixos/server/profiles/linode/base/boot.nix create mode 100644 modules/nixos/server/profiles/linode/base/default.nix create mode 100644 modules/nixos/server/profiles/linode/base/file-system.nix create mode 100644 modules/nixos/server/profiles/linode/base/networking.nix create mode 100644 modules/nixos/server/profiles/linode/default.nix create mode 100644 modules/nixos/server/profiles/linode/image.nix diff --git a/modules/nixos/server/default.nix b/modules/nixos/server/default.nix index 8807271..e69436a 100644 --- a/modules/nixos/server/default.nix +++ b/modules/nixos/server/default.nix @@ -1,7 +1,7 @@ { imports = [ - ./options - ./profiles + ./options.nix ./services + ./profiles ]; } diff --git a/modules/nixos/server/options/server.nix b/modules/nixos/server/options.nix similarity index 100% rename from modules/nixos/server/options/server.nix rename to modules/nixos/server/options.nix diff --git a/modules/nixos/server/options/default.nix b/modules/nixos/server/options/default.nix deleted file mode 100644 index 217e7ff..0000000 --- a/modules/nixos/server/options/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./server.nix - ]; -} diff --git a/modules/nixos/server/profiles/linode.nix b/modules/nixos/server/profiles/linode.nix index 2e086c9..fd9025a 100644 --- a/modules/nixos/server/profiles/linode.nix +++ b/modules/nixos/server/profiles/linode.nix @@ -1,14 +1,16 @@ { - config, lib, pkgs, + config, ... }: let inherit (builtins) attrValues; - inherit (lib) mkForce mkIf; + inherit (lib) mkForce getExe' mkIf; inherit (config.ooknet.server) profile; in { config = mkIf (profile == "linode") { + services.qemuGuest.enable = true; + networking = { tempAddresses = "disabled"; usePredictableInterfaceNames = mkForce false; @@ -17,43 +19,76 @@ in { useDHCP = true; }; }; + fileSystems."/" = { + device = "/dev/sda"; + fsType = "ext4"; + autoResize = true; + }; + swapDevices = [{device = "/dev/sdb";}]; boot = { + kernelPackages = pkgs.linuxPackages_latest; kernelModules = []; # LISH console support - kernelParams = ["console=ttys0,19200n8"]; + kernelParams = ["console=ttyS0,19200n8"]; extraModulePackages = []; + growPartition = true; initrd = { - availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"]; - kernelModules = []; + availableKernelModules = [ + # modules generated by nixos-generate-config + "virtio_pci" + "virtio_scsi" + "ahci" + "sd_mod" + + # qemu guest modules + "virtio_net" + "virtio_mmio" + "virtio_blk" + "virtio_scsi" + "9p" + "9pnet_virtio" + ]; + kernelModules = [ + "virtio_balloon" + "virtio_console" + "virtio_rng" + "virtio_gpu" + ]; }; loader = { grub = { enable = true; - device = "/dev/sda"; + device = "nodev"; forceInstall = true; copyKernels = true; - fsIdentifier = "provided"; + fsIdentifier = "label"; + splashImage = null; extraConfig = '' serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1; terminal_input serial; terminal_output serial ''; + + extraInstallCommands = "${getExe' pkgs.coreutils "ln"} -fs /boot/grub /boot/grub2"; }; + timeout = mkForce 10; # disable base settings efi.canTouchEfiVariables = mkForce false; systemd-boot.enable = mkForce false; }; }; - environment.systemPackages = attrValues { - inherit - (pkgs) - inetutils - mtr - sysstat - linode-cli - ; + environment = { + systemPackages = attrValues { + inherit + (pkgs) + inetutils + mtr + sysstat + linode-cli + ; + }; }; }; } diff --git a/modules/nixos/server/profiles/linode/base/boot.nix b/modules/nixos/server/profiles/linode/base/boot.nix new file mode 100644 index 0000000..491eb39 --- /dev/null +++ b/modules/nixos/server/profiles/linode/base/boot.nix @@ -0,0 +1,60 @@ +{ + pkgs, + lib, + ... +}: let + inherit (lib) mkForce getExe'; +in { + boot = { + kernelPackages = pkgs.linuxPackages_latest; + kernelModules = []; + # LISH console support + kernelParams = ["console=ttyS0,19200n8"]; + extraModulePackages = []; + growPartition = true; + initrd = { + availableKernelModules = [ + # modules generated by nixos-generate-config + "virtio_pci" + "virtio_scsi" + "ahci" + "sd_mod" + + # qemu guest modules + "virtio_net" + "virtio_mmio" + "virtio_blk" + "virtio_scsi" + "9p" + "9pnet_virtio" + ]; + kernelModules = [ + "virtio_balloon" + "virtio_console" + "virtio_rng" + "virtio_gpu" + ]; + }; + loader = { + grub = { + enable = true; + device = "nodev"; + forceInstall = true; + copyKernels = true; + fsIdentifier = "label"; + splashImage = null; + extraConfig = '' + serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1; + terminal_input serial; + terminal_output serial + ''; + + extraInstallCommands = "${getExe' pkgs.coreutils "ln"} -fs /boot/grub /boot/grub2"; + }; + timeout = mkForce 10; + # disable base settings + efi.canTouchEfiVariables = mkForce false; + systemd-boot.enable = mkForce false; + }; + }; +} diff --git a/modules/nixos/server/profiles/linode/base/default.nix b/modules/nixos/server/profiles/linode/base/default.nix new file mode 100644 index 0000000..1cc34f6 --- /dev/null +++ b/modules/nixos/server/profiles/linode/base/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./boot.nix + ./networking.nix + ./file-system.nix + ]; +} diff --git a/modules/nixos/server/profiles/linode/base/file-system.nix b/modules/nixos/server/profiles/linode/base/file-system.nix new file mode 100644 index 0000000..9eb39f4 --- /dev/null +++ b/modules/nixos/server/profiles/linode/base/file-system.nix @@ -0,0 +1,8 @@ +{ + fileSystems."/" = { + device = "/dev/sda"; + fsType = "ext4"; + autoResize = true; + }; + swapDevices = [{device = "/dev/sdb";}]; +} diff --git a/modules/nixos/server/profiles/linode/base/networking.nix b/modules/nixos/server/profiles/linode/base/networking.nix new file mode 100644 index 0000000..4f30557 --- /dev/null +++ b/modules/nixos/server/profiles/linode/base/networking.nix @@ -0,0 +1,12 @@ +{lib, ...}: let + inherit (lib) mkForce; +in { + networking = { + tempAddresses = "disabled"; + usePredictableInterfaceNames = mkForce false; + interfaces.eth0 = { + tempAddress = "disabled"; + useDHCP = true; + }; + }; +} diff --git a/modules/nixos/server/profiles/linode/default.nix b/modules/nixos/server/profiles/linode/default.nix new file mode 100644 index 0000000..b89bfdf --- /dev/null +++ b/modules/nixos/server/profiles/linode/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./image.nix + ./base + ]; + + system.stateVersion = "24.11"; +} diff --git a/modules/nixos/server/profiles/linode/image.nix b/modules/nixos/server/profiles/linode/image.nix new file mode 100644 index 0000000..a6f62e3 --- /dev/null +++ b/modules/nixos/server/profiles/linode/image.nix @@ -0,0 +1,23 @@ +{ + pkgs, + lib, + inputs, + config, + ... +}: let + make-disk-image = import "${inputs.nixpkgs}/nixos/lib/make-disk-image.nix"; +in { + system.build.image = make-disk-image { + inherit lib pkgs config; + partitionTableType = "none"; + name = "linode-image"; + format = "raw"; + # Linode requires the image to be gzip'd + # unzipped image cannot exceed 6gb + postVM = '' + ${pkgs.gzip}/bin/gzip -6 -c -- $diskImage > \ + $out/nixos-image-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.img.gz + rm $diskImage + ''; + }; +}