From a95f675a1f6b0db9236f03bb351dcfaddfdabe2a Mon Sep 17 00:00:00 2001 From: Sridhar Ratnakumar Date: Sat, 1 Feb 2025 14:28:32 -0500 Subject: [PATCH] Add incus container --- .../nixos/public-container/configuration.nix | 20 +++++++++ .../nixos/public-container/default.nix | 19 +++++++++ modules/flake-parts/incus-image.nix | 41 +++++++++++++------ 3 files changed, 68 insertions(+), 12 deletions(-) create mode 100644 configurations/nixos/public-container/configuration.nix create mode 100644 configurations/nixos/public-container/default.nix diff --git a/configurations/nixos/public-container/configuration.nix b/configurations/nixos/public-container/configuration.nix new file mode 100644 index 00000000..e9451234 --- /dev/null +++ b/configurations/nixos/public-container/configuration.nix @@ -0,0 +1,20 @@ +{ flake, pkgs, ... }: + +let + inherit (flake) inputs; + inherit (inputs) self; +in +{ + imports = [ + "${inputs.nixpkgs}/nixos/modules/virtualisation/lxc-container.nix" + (self + /modules/nixos/shared/primary-as-admin.nix) + ]; + + nixpkgs.hostPlatform = "x86_64-linux"; + networking.firewall.enable = true; + + # Workaround the annoying `Failed to start Network Manager Wait Online` error on switch. + # https://github.com/NixOS/nixpkgs/issues/180175 + systemd.services.NetworkManager-wait-online.enable = false; + system.stateVersion = "24.11"; +} diff --git a/configurations/nixos/public-container/default.nix b/configurations/nixos/public-container/default.nix new file mode 100644 index 00000000..82f667ee --- /dev/null +++ b/configurations/nixos/public-container/default.nix @@ -0,0 +1,19 @@ +{ pkgs, ... }: +{ + imports = [ + ./configuration.nix + ]; + + + # Hello world service + services.nginx = { + enable = true; + # Return "Hello World" on / request + virtualHosts."_" = { + root = "${pkgs.writeTextDir "index.html" "Hello World"}"; + }; + }; + networking.firewall = { + allowedTCPPorts = [ 80 ]; + }; +} diff --git a/modules/flake-parts/incus-image.nix b/modules/flake-parts/incus-image.nix index fff789d6..2f9d79f5 100644 --- a/modules/flake-parts/incus-image.nix +++ b/modules/flake-parts/incus-image.nix @@ -1,18 +1,35 @@ { inputs, ... }: { - perSystem = { pkgs, ... }: { - apps.incus-image-import.program = pkgs.writeShellApplication { - name = "incus-image-import"; - text = '' - NAME=$1 + perSystem = { pkgs, system, ... }: { + apps = { + incus-image-vm-import.program = pkgs.writeShellApplication { + name = "incus-image-vm-import"; + text = '' + NAME=$1 - echo "Building image ... " - METADATA=$(nix build --no-link --print-out-paths ${inputs.self}#nixosConfigurations."$NAME".config.system.build.metadata)/tarball/ - IMG=$(nix build --no-link --print-out-paths ${inputs.self}#nixosConfigurations."$NAME".config.system.build.qemuImage)/nixos.qcow2 + echo "Building image ... " + METADATA=$(nix build --no-link --print-out-paths ${inputs.self}#nixosConfigurations."$NAME".config.system.build.metadata)/tarball/ + IMG=$(nix build --no-link --print-out-paths ${inputs.self}#nixosConfigurations."$NAME".config.system.build.qemuImage)/nixos.qcow2 - echo "Importing ... " - set -x - sudo incus image import --alias srid/"$NAME" "$METADATA"/*.tar.xz "$IMG" - ''; + echo "Importing ... " + set -x + sudo incus image import --alias srid/"$NAME" "$METADATA"/*.tar.xz "$IMG" + ''; + }; + + incus-image-container-import.program = pkgs.writeShellApplication { + name = "incus-image-container-import"; + text = '' + NAME=$1 + + echo "Building image ... " + METADATA=$(nix build --no-link --print-out-paths ${inputs.self}#nixosConfigurations."$NAME".config.system.build.metadata)/tarball/ + IMG=$(nix build --no-link --print-out-paths ${inputs.self}#nixosConfigurations."$NAME".config.system.build.squashfs)/nixos-lxc-image-${system}.squashfs + + echo "Importing ... " + set -x + sudo incus image import --alias srid/"$NAME" "$METADATA"/*.tar.xz "$IMG" + ''; + }; }; }; }