Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / applications / virtualization / podman / default.nix
blob8841abcd3671f5d0de2c422db4a7f6f4e5410d4f
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 , extraPackages ? [ ]
21 , runc
22 , crun
23 , conmon
24 , slirp4netns
25 , fuse-overlayfs
26 , util-linux
27 , iptables
28 , iproute2
29 , catatonit
30 , gvproxy
31 , aardvark-dns
32 , netavark
33 , testers
34 , podman
36 let
37   # do not add qemu to this wrapper, store paths get written to the podman vm config and break when GCed
39   binPath = lib.makeBinPath (lib.optionals stdenv.isLinux [
40     runc
41     crun
42     conmon
43     fuse-overlayfs
44     util-linux
45     iptables
46     iproute2
47   ] ++ extraPackages);
49   helpersBin = symlinkJoin {
50     name = "podman-helper-binary-wrapper";
52     # this only works for some binaries, others may need to be be added to `binPath` or in the modules
53     paths = [
54       gvproxy
55     ] ++ lib.optionals stdenv.isLinux [
56       aardvark-dns
57       catatonit # added here for the pause image and also set in `containersConf` for `init_path`
58       netavark
59       slirp4netns
60     ];
61   };
63 buildGoModule rec {
64   pname = "podman";
65   version = "4.7.2";
67   src = fetchFromGitHub {
68     owner = "containers";
69     repo = "podman";
70     rev = "v${version}";
71     hash = "sha256-o5FTCuFUbTlENqvh+u6fPEfD816tKWPxHu2yhBi/Mf0=";
72   };
74   patches = [
75     # we intentionally don't build and install the helper so we shouldn't display messages to users about it
76     ./rm-podman-mac-helper-msg.patch
77   ];
79   vendorHash = null;
81   doCheck = false;
83   outputs = [ "out" "man" ];
85   nativeBuildInputs = [ pkg-config go-md2man installShellFiles makeWrapper python3 ];
87   buildInputs = lib.optionals stdenv.isLinux [
88     btrfs-progs
89     gpgme
90     libapparmor
91     libseccomp
92     libselinux
93     lvm2
94     systemd
95   ];
97   HELPER_BINARIES_DIR = "${PREFIX}/libexec/podman"; # used in buildPhase & installPhase
98   PREFIX = "${placeholder "out"}";
100   buildPhase = ''
101     runHook preBuild
102     patchShebangs .
103     substituteInPlace Makefile --replace "/bin/bash" "${runtimeShell}"
104     ${if stdenv.isDarwin then ''
105       make podman-remote # podman-mac-helper uses FHS paths
106     '' else ''
107       make bin/podman bin/rootlessport bin/quadlet
108     ''}
109     make docs
110     runHook postBuild
111   '';
113   installPhase = ''
114     runHook preInstall
115     ${if stdenv.isDarwin then ''
116       install bin/darwin/podman -Dt $out/bin
117     '' else ''
118       make install.bin install.systemd
119     ''}
120     make install.completions install.man
121     mkdir -p ${HELPER_BINARIES_DIR}
122     ln -s ${helpersBin}/bin/* ${HELPER_BINARIES_DIR}
123     wrapProgram $out/bin/podman \
124       --prefix PATH : ${lib.escapeShellArg binPath}
125     runHook postInstall
126   '';
128   postFixup = lib.optionalString stdenv.isLinux ''
129     RPATH=$(patchelf --print-rpath $out/bin/.podman-wrapped)
130     patchelf --set-rpath "${lib.makeLibraryPath [ systemd ]}":$RPATH $out/bin/.podman-wrapped
131   '';
133   passthru.tests = {
134     version = testers.testVersion {
135       package = podman;
136       command = "HOME=$TMPDIR podman --version";
137     };
138   } // lib.optionalAttrs stdenv.isLinux {
139     inherit (nixosTests) podman;
140     # related modules
141     inherit (nixosTests)
142       podman-tls-ghostunnel
143       ;
144     oci-containers-podman = nixosTests.oci-containers.podman;
145   };
147   meta = with lib; {
148     homepage = "https://podman.io/";
149     description = "A program for managing pods, containers and container images";
150     longDescription = ''
151       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.
153       To install on NixOS, please use the option `virtualisation.podman.enable = true`.
154     '';
155     changelog = "https://github.com/containers/podman/blob/v${version}/RELEASE_NOTES.md";
156     license = licenses.asl20;
157     maintainers = with maintainers; [ marsam ] ++ teams.podman.members;
158   };