ripasso-cursive: cosmetic changes (#361736)
[NixPkgs.git] / pkgs / by-name / in / incus / generic.nix
blob7e2483f1b2d215061403d508004de5e07e6c1cbf
2   hash,
3   lts ? false,
4   patches ? [ ],
5   updateScriptArgs ? "",
6   vendorHash,
7   version,
8 }:
11   callPackage,
12   lib,
13   buildGoModule,
14   fetchFromGitHub,
15   writeScript,
16   acl,
17   cowsql,
18   libcap,
19   lxc,
20   pkg-config,
21   sqlite,
22   udev,
23   installShellFiles,
24   nixosTests,
27 let
28   pname = "incus${lib.optionalString lts "-lts"}";
31 buildGoModule rec {
32   inherit
33     patches
34     pname
35     vendorHash
36     version
37     ;
39   outputs = [
40     "out"
41     "agent_loader"
42   ];
44   src = fetchFromGitHub {
45     owner = "lxc";
46     repo = "incus";
47     rev = "refs/tags/v${version}";
48     inherit hash;
49   };
51   excludedPackages = [
52     # statically compile these
53     "cmd/incus-agent"
54     "cmd/incus-migrate"
56     # oidc test requires network
57     "test/mini-oidc"
58   ];
60   nativeBuildInputs = [
61     installShellFiles
62     pkg-config
63   ];
65   buildInputs = [
66     lxc
67     acl
68     libcap
69     cowsql.dev
70     sqlite
71     udev.dev
72   ];
74   ldflags = [
75     "-s"
76     "-w"
77   ];
78   tags = [ "libsqlite3" ];
80   # required for go-cowsql.
81   CGO_LDFLAGS_ALLOW = "(-Wl,-wrap,pthread_create)|(-Wl,-z,now)";
83   postBuild = ''
84     make incus-agent incus-migrate
85   '';
87   # Disable tests requiring local operations
88   checkFlags =
89     let
90       skippedTests = [
91         "TestValidateConfig"
92         "TestConvertNetworkConfig"
93         "TestConvertStorageConfig"
94         "TestSnapshotCommon"
95         "TestContainerTestSuite"
96       ];
97     in
98     [ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
100   postInstall = ''
101     installShellCompletion --cmd incus \
102       --bash <($out/bin/incus completion bash) \
103       --fish <($out/bin/incus completion fish) \
104       --zsh <($out/bin/incus completion zsh)
106     mkdir -p $agent_loader/bin $agent_loader/etc/systemd/system $agent_loader/lib/udev/rules.d
107     cp internal/server/instance/drivers/agent-loader/incus-agent-setup $agent_loader/bin/
108     chmod +x $agent_loader/bin/incus-agent-setup
109     patchShebangs $agent_loader/bin/incus-agent-setup
110     cp internal/server/instance/drivers/agent-loader/systemd/incus-agent.service $agent_loader/etc/systemd/system/
111     cp internal/server/instance/drivers/agent-loader/systemd/incus-agent.rules $agent_loader/lib/udev/rules.d/99-incus-agent.rules
112     substituteInPlace $agent_loader/etc/systemd/system/incus-agent.service --replace-fail 'TARGET/systemd' "$agent_loader/bin"
113   '';
115   passthru = {
116     client = callPackage ./client.nix {
117       inherit
118         lts
119         meta
120         patches
121         src
122         vendorHash
123         version
124         ;
125     };
127     tests = if lts then nixosTests.incus-lts else nixosTests.incus;
129     ui = callPackage ./ui.nix { };
131     updateScript = writeScript "ovs-update.py" ''
132       ${./update.py} ${updateScriptArgs}
133     '';
134   };
136   meta = {
137     description = "Powerful system container and virtual machine manager";
138     homepage = "https://linuxcontainers.org/incus";
139     changelog = "https://github.com/lxc/incus/releases/tag/v${version}";
140     license = lib.licenses.asl20;
141     maintainers = lib.teams.lxc.members;
142     platforms = lib.platforms.linux;
143     mainProgram = "incus";
144   };