1{ lib, hwdata, pkg-config, lxc, buildGoPackage, fetchurl, fetchpatch
2, makeWrapper, acl, rsync, gnutar, xz, btrfs-progs, gzip, dnsmasq, attr
3, squashfsTools, iproute2, iptables, libcap
4, dqlite, raft-canonical, sqlite-replication, udev
5, writeShellScriptBin, apparmor-profiles, apparmor-parser
6, criu
7, bash
8, installShellFiles
9, nixosTests
10}:
11
12buildGoPackage rec {
13 pname = "lxd";
14 version = "4.20";
15
16 goPackagePath = "github.com/lxc/lxd";
17
18 src = fetchurl {
19 url = "https://linuxcontainers.org/downloads/lxd/lxd-${version}.tar.gz";
20 sha256 = "1mcf4i4z9y4l895v50amx8nix6wnaxv9h44012vj8w6wwbr4wl1m";
21 };
22
23 postPatch = ''
24 substituteInPlace shared/usbid/load.go \
25 --replace "/usr/share/misc/usb.ids" "${hwdata}/share/hwdata/usb.ids"
26 '';
27
28 preBuild = ''
29 # required for go-dqlite. See: https://github.com/lxc/lxd/pull/8939
30 export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
31
32 makeFlagsArray+=("-tags libsqlite3")
33 '';
34
35 postInstall = ''
36 # test binaries, code generation
37 rm $out/bin/{deps,macaroon-identity,generate}
38
39 wrapProgram $out/bin/lxd --prefix PATH : ${lib.makeBinPath (
40 [ iptables ]
41 ++ [ acl rsync gnutar xz btrfs-progs gzip dnsmasq squashfsTools iproute2 bash criu attr ]
42 ++ [ (writeShellScriptBin "apparmor_parser" ''
43 exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@"
44 '') ]
45 )
46 }
47
48 installShellCompletion --bash --name lxd go/src/github.com/lxc/lxd/scripts/bash/lxd-client
49 '';
50
51 passthru.tests.lxd = nixosTests.lxd;
52
53 nativeBuildInputs = [ installShellFiles pkg-config makeWrapper ];
54 buildInputs = [ lxc acl libcap dqlite.dev raft-canonical.dev
55 sqlite-replication udev.dev ];
56
57 meta = with lib; {
58 description = "Daemon based on liblxc offering a REST API to manage containers";
59 homepage = "https://linuxcontainers.org/lxd/";
60 license = licenses.asl20;
61 maintainers = with maintainers; [ fpletz wucke13 marsam ];
62 platforms = platforms.linux;
63 };
64}