nixos/incus,incus{,-lts}: add multi-platform incus-agent support

Moraxyc 1368a817 5b751d1b

Changed files
+23 -4
nixos
modules
virtualisation
pkgs
by-name
in
incus
+1
nixos/modules/virtualisation/incus.nix
···
INCUS_LXC_HOOK = "${cfg.lxcPackage}/share/lxc/hooks";
INCUS_LXC_TEMPLATE_CONFIG = "${pkgs.lxcfs}/share/lxc/config";
INCUS_USBIDS_PATH = "${pkgs.hwdata}/share/hwdata/usb.ids";
+
INCUS_AGENT_PATH = "${cfg.package}/share/agent";
PATH = lib.mkForce serverBinPath;
}
(lib.mkIf (cfg.ui.enable) { "INCUS_UI" = cfg.ui.package; })
+22 -4
pkgs/by-name/in/incus/generic.nix
···
{
callPackage,
lib,
+
stdenv,
buildGoModule,
fetchFromGitHub,
acl,
···
substituteInPlace Makefile --replace-fail '. $(SPHINXENV) ; ' ""
make doc-incremental
+
# build multiple binaries of incus-agent
+
build_incus_agent() {
+
GOOS="$1" GOARCH="$2" CGO_ENABLED=0 \
+
go build -ldflags="-s" -tags=agent,netgo \
+
-o "$out/share/agent/incus-agent.$1.$3" ./cmd/incus-agent
+
}
+
${lib.optionalString stdenv.hostPlatform.isx86_64 ''
+
build_incus_agent linux amd64 x86_64
+
build_incus_agent linux 386 i686
+
build_incus_agent windows amd64 x86_64
+
build_incus_agent windows 386 i686
+
''}
+
${lib.optionalString stdenv.hostPlatform.isAarch64 ''
+
build_incus_agent linux arm64 aarch64
+
build_incus_agent windows arm64 aarch64
+
''}
+
# build some static executables
-
make incus-agent incus-migrate
+
make incus-migrate
'';
# Disable tests requiring local operations
···
--zsh <($out/bin/incus completion zsh)
mkdir -p $agent_loader/bin $agent_loader/etc/systemd/system $agent_loader/lib/udev/rules.d
-
cp internal/server/instance/drivers/agent-loader/incus-agent-setup $agent_loader/bin/
-
chmod +x $agent_loader/bin/incus-agent-setup
-
patchShebangs $agent_loader/bin/incus-agent-setup
+
cp internal/server/instance/drivers/agent-loader/incus-agent{,-setup} $agent_loader/bin/
+
chmod +x $agent_loader/bin/incus-agent{,-setup}
+
patchShebangs $agent_loader/bin/incus-agent{,-setup}
cp internal/server/instance/drivers/agent-loader/systemd/incus-agent.service $agent_loader/etc/systemd/system/
cp internal/server/instance/drivers/agent-loader/systemd/incus-agent.rules $agent_loader/lib/udev/rules.d/99-incus-agent.rules
substituteInPlace $agent_loader/etc/systemd/system/incus-agent.service --replace-fail 'TARGET/systemd' "$agent_loader/bin"