biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / applications / virtualization / podman / default.nix
blob92935ed129d8ace800d4b43e42971a89ea7cbcb7
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , pkg-config
5 , installShellFiles
6 , buildGoModule
7 , gpgme
8 , lvm2
9 , btrfs-progs
10 , libapparmor
11 , libseccomp
12 , libselinux
13 , systemd
14 , go-md2man
15 , nixosTests
16 , python3
17 , makeWrapper
18 , runtimeShell
19 , symlinkJoin
20 , substituteAll
21 , extraPackages ? [ ]
22 , runc
23 , crun
24 , gvisor
25 , youki
26 , conmon
27 , slirp4netns
28 , fuse-overlayfs
29 , util-linux
30 , iptables
31 , iproute2
32 , catatonit
33 , gvproxy
34 , aardvark-dns
35 , netavark
36 , passt
37 , testers
38 , podman
40 let
41   # do not add qemu to this wrapper, store paths get written to the podman vm config and break when GCed
43   binPath = lib.makeBinPath (lib.optionals stdenv.isLinux [
44     fuse-overlayfs
45     util-linux
46     iptables
47     iproute2
48   ] ++ extraPackages);
50   helpersBin = symlinkJoin {
51     name = "podman-helper-binary-wrapper";
53     # this only works for some binaries, others may need to be be added to `binPath` or in the modules
54     paths = [
55       gvproxy
56     ] ++ lib.optionals stdenv.isLinux [
57       aardvark-dns
58       catatonit # added here for the pause image and also set in `containersConf` for `init_path`
59       netavark
60       slirp4netns
61       passt
62     ];
63   };
65 buildGoModule rec {
66   pname = "podman";
67   version = "5.0.2";
69   src = fetchFromGitHub {
70     owner = "containers";
71     repo = "podman";
72     rev = "v${version}";
73     hash = "sha256-8Swqwyzu/WI9mG21bLF81Kk4kS2Ltg0GV9G3EcG/FnU=";
74   };
76   patches = [
77     # we intentionally don't build and install the helper so we shouldn't display messages to users about it
78     ./rm-podman-mac-helper-msg.patch
79   ] ++ lib.optionals stdenv.isLinux [
80     (substituteAll {
81       src = ./hardcode-paths.patch;
82       inherit crun runc gvisor youki conmon;
83     })
84   ];
86   vendorHash = null;
88   doCheck = false;
90   outputs = [ "out" "man" ];
92   nativeBuildInputs = [ pkg-config go-md2man installShellFiles makeWrapper python3 ];
94   buildInputs = lib.optionals stdenv.isLinux [
95     btrfs-progs
96     gpgme
97     libapparmor
98     libseccomp
99     libselinux
100     lvm2
101     systemd
102   ];
104   HELPER_BINARIES_DIR = "${PREFIX}/libexec/podman"; # used in buildPhase & installPhase
105   PREFIX = "${placeholder "out"}";
107   buildPhase = ''
108     runHook preBuild
109     patchShebangs .
110     substituteInPlace Makefile --replace "/bin/bash" "${runtimeShell}"
111     ${if stdenv.isDarwin then ''
112       make podman-remote # podman-mac-helper uses FHS paths
113     '' else ''
114       make bin/podman bin/rootlessport bin/quadlet
115     ''}
116     make docs
117     runHook postBuild
118   '';
120   installPhase = ''
121     runHook preInstall
122     ${if stdenv.isDarwin then ''
123       install bin/darwin/podman -Dt $out/bin
124     '' else ''
125       make install.bin install.systemd
126     ''}
127     make install.completions install.man
128     mkdir -p ${HELPER_BINARIES_DIR}
129     ln -s ${helpersBin}/bin/* ${HELPER_BINARIES_DIR}
130     wrapProgram $out/bin/podman \
131       --prefix PATH : ${lib.escapeShellArg binPath}
132     runHook postInstall
133   '';
135   postFixup = lib.optionalString stdenv.isLinux ''
136     RPATH=$(patchelf --print-rpath $out/bin/.podman-wrapped)
137     patchelf --set-rpath "${lib.makeLibraryPath [ systemd ]}":$RPATH $out/bin/.podman-wrapped
138   '';
140   passthru.tests = {
141     version = testers.testVersion {
142       package = podman;
143       command = "HOME=$TMPDIR podman --version";
144     };
145   } // lib.optionalAttrs stdenv.isLinux {
146     inherit (nixosTests) podman;
147     # related modules
148     inherit (nixosTests)
149       podman-tls-ghostunnel
150       ;
151     oci-containers-podman = nixosTests.oci-containers.podman;
152   };
154   meta = with lib; {
155     homepage = "https://podman.io/";
156     description = "A program for managing pods, containers and container images";
157     longDescription = ''
158       Podman (the POD MANager) is a tool for managing containers and images, volumes mounted into those containers, and pods made from groups of containers. Podman runs containers on Linux, but can also be used on Mac and Windows systems using a Podman-managed virtual machine. Podman is based on libpod, a library for container lifecycle management that is also contained in this repository. The libpod library provides APIs for managing containers, pods, container images, and volumes.
160       To install on NixOS, please use the option `virtualisation.podman.enable = true`.
161     '';
162     changelog = "https://github.com/containers/podman/blob/v${version}/RELEASE_NOTES.md";
163     license = licenses.asl20;
164     maintainers = with maintainers; [ marsam ] ++ teams.podman.members;
165     mainProgram = "podman";
166   };