lxd: add dependencies to wrapper for VM support

This commit is contained in:
Adam Stephens 2023-07-30 13:07:44 -04:00
parent 195110917e
commit 60e3a11e1e
No known key found for this signature in database

View File

@ -1,6 +1,8 @@
{ lib { lib
, lxd-unwrapped , lxd-unwrapped
, linkFarm
, makeWrapper , makeWrapper
, stdenv
, symlinkJoin , symlinkJoin
, writeShellScriptBin , writeShellScriptBin
, acl , acl
@ -12,13 +14,18 @@
, criu , criu
, dnsmasq , dnsmasq
, gnutar , gnutar
, gptfdisk
, gzip , gzip
, iproute2 , iproute2
, iptables , iptables
, OVMF
, qemu_kvm
, qemu-utils
, rsync , rsync
, spice-gtk
, squashfsTools , squashfsTools
, virtiofsd
, xz , xz
,
}: }:
let let
binPath = lib.makeBinPath [ binPath = lib.makeBinPath [
@ -29,17 +36,63 @@ let
criu criu
dnsmasq dnsmasq
gnutar gnutar
gptfdisk
gzip gzip
iproute2 iproute2
iptables iptables
qemu_kvm
qemu-utils
rsync rsync
squashfsTools squashfsTools
virtiofsd
xz xz
(writeShellScriptBin "apparmor_parser" '' (writeShellScriptBin "apparmor_parser" ''
exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@" exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@"
'') '')
]; ];
clientBinPath = [
spice-gtk
];
ovmf-2mb = OVMF.override {
secureBoot = true;
csmSupport = false;
fdSize2MB = true;
};
ovmf-4mb = OVMF.override {
secureBoot = true;
csmSupport = false;
fdSize4MB = true;
};
ovmf-4mb-csm = OVMF.override {
secureBoot = true;
csmSupport = false;
fdSize2MB = false;
fdSize4MB = true;
};
ovmf-prefix = if stdenv.hostPlatform.isAarch64 then "AAVMF" else "OVMF";
# mimic ovmf from https://github.com/canonical/lxd-pkg-snap/blob/3abebe1dfeb20f9b7729556960c7e9fe6ad5e17c/snapcraft.yaml#L378
# also found in /snap/lxd/current/share/qemu/ on a snap install
ovmf = linkFarm "lxd-ovmf" [
{ name = "OVMF_CODE.2MB.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_CODE.fd"; }
{ name = "OVMF_CODE.4MB.CSM.fd"; path = "${ovmf-4mb-csm.fd}/FV/${ovmf-prefix}_CODE.fd"; }
{ name = "OVMF_CODE.4MB.fd"; path = "${ovmf-4mb.fd}/FV/${ovmf-prefix}_CODE.fd"; }
{ name = "OVMF_CODE.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_CODE.fd"; }
{ name = "OVMF_VARS.2MB.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
{ name = "OVMF_VARS.2MB.ms.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
{ name = "OVMF_VARS.4MB.CSM.fd"; path = "${ovmf-4mb-csm.fd}/FV/${ovmf-prefix}_VARS.fd"; }
{ name = "OVMF_VARS.4MB.fd"; path = "${ovmf-4mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
{ name = "OVMF_VARS.4MB.ms.fd"; path = "${ovmf-4mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
{ name = "OVMF_VARS.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
{ name = "OVMF_VARS.ms.fd"; path = "${ovmf-2mb.fd}/FV/${ovmf-prefix}_VARS.fd"; }
];
in in
symlinkJoin { symlinkJoin {
name = "lxd-${lxd-unwrapped.version}"; name = "lxd-${lxd-unwrapped.version}";
@ -49,11 +102,13 @@ symlinkJoin {
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];
postBuild = '' postBuild = ''
wrapProgram $out/bin/lxd --prefix PATH : ${lib.escapeShellArg binPath} wrapProgram $out/bin/lxd --prefix PATH : ${lib.escapeShellArg binPath}:${qemu_kvm}/libexec:$out/bin --set LXD_OVMF_PATH ${ovmf}
wrapProgram $out/bin/lxc --prefix PATH : ${lib.makeBinPath clientBinPath}
''; '';
passthru = { passthru = {
inherit (lxd-unwrapped) tests; inherit (lxd-unwrapped) tests ui;
}; };
inherit (lxd-unwrapped) meta pname version; inherit (lxd-unwrapped) meta pname version;