ripasso-cursive: cosmetic changes (#361736)
[NixPkgs.git] / pkgs / by-name / po / podman / package.nix
blob93ad4f71bb98471b88461203ea5de0f27fb6a6db
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 , crun
23 , runc
24 , conmon
25 , extraRuntimes ? lib.optionals stdenv.hostPlatform.isLinux [ runc ]  # e.g.: runc, gvisor, youki
26 , fuse-overlayfs
27 , util-linux
28 , iptables
29 , iproute2
30 , catatonit
31 , gvproxy
32 , aardvark-dns
33 , netavark
34 , passt
35 , vfkit
36 , testers
37 , podman
39 let
40   # do not add qemu to this wrapper, store paths get written to the podman vm config and break when GCed
42   binPath = lib.makeBinPath (lib.optionals stdenv.hostPlatform.isLinux [
43     fuse-overlayfs
44     util-linux
45     iptables
46     iproute2
47   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
48     vfkit
49   ] ++ extraPackages);
51   helpersBin = symlinkJoin {
52     name = "podman-helper-binary-wrapper";
54     # this only works for some binaries, others may need to be added to `binPath` or in the modules
55     paths = [
56       gvproxy
57     ] ++ lib.optionals stdenv.hostPlatform.isLinux [
58       aardvark-dns
59       catatonit # added here for the pause image and also set in `containersConf` for `init_path`
60       netavark
61       passt
62       conmon
63       crun
64     ] ++ extraRuntimes;
65   };
67 buildGoModule rec {
68   pname = "podman";
69   version = "5.3.1";
71   src = fetchFromGitHub {
72     owner = "containers";
73     repo = "podman";
74     rev = "v${version}";
75     hash = "sha256-kABP10QX4r11UDUcd6Sukb+9+LRm/ba3iATz6DTOJYw=";
76   };
78   patches = [
79     (substituteAll {
80       src = ./hardcode-paths.patch;
81       bin_path = helpersBin;
82     })
84     # we intentionally don't build and install the helper so we shouldn't display messages to users about it
85     ./rm-podman-mac-helper-msg.patch
86   ];
88   vendorHash = null;
90   doCheck = false;
92   outputs = [ "out" "man" ];
94   nativeBuildInputs = [ pkg-config go-md2man installShellFiles makeWrapper python3 ];
96   buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
97     btrfs-progs
98     gpgme
99     libapparmor
100     libseccomp
101     libselinux
102     lvm2
103     systemd
104   ];
106   HELPER_BINARIES_DIR = "${PREFIX}/libexec/podman"; # used in buildPhase & installPhase
107   PREFIX = "${placeholder "out"}";
109   buildPhase = ''
110     runHook preBuild
111     patchShebangs .
112     substituteInPlace Makefile --replace "/bin/bash" "${runtimeShell}"
113     ${if stdenv.hostPlatform.isDarwin then ''
114       make podman-remote # podman-mac-helper uses FHS paths
115     '' else ''
116       make bin/podman bin/rootlessport bin/quadlet
117     ''}
118     make docs
119     runHook postBuild
120   '';
122   installPhase = ''
123     runHook preInstall
124     ${if stdenv.hostPlatform.isDarwin then ''
125       install bin/darwin/podman -Dt $out/bin
126     '' else ''
127       make install.bin install.systemd
128     ''}
129     make install.completions install.man
130     mkdir -p ${HELPER_BINARIES_DIR}
131     ln -s ${helpersBin}/bin/* ${HELPER_BINARIES_DIR}
132     wrapProgram $out/bin/podman \
133       --prefix PATH : ${lib.escapeShellArg binPath}
134     runHook postInstall
135   '';
137   postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
138     RPATH=$(patchelf --print-rpath $out/bin/.podman-wrapped)
139     patchelf --set-rpath "${lib.makeLibraryPath [ systemd ]}":$RPATH $out/bin/.podman-wrapped
140   '';
142   passthru.tests = {
143     version = testers.testVersion {
144       package = podman;
145       command = "HOME=$TMPDIR podman --version";
146     };
147   } // lib.optionalAttrs stdenv.hostPlatform.isLinux {
148     inherit (nixosTests) podman;
149     # related modules
150     inherit (nixosTests)
151       podman-tls-ghostunnel
152       ;
153     oci-containers-podman = nixosTests.oci-containers.podman;
154   };
156   meta = with lib; {
157     homepage = "https://podman.io/";
158     description = "Program for managing pods, containers and container images";
159     longDescription = ''
160       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.
162       To install on NixOS, please use the option `virtualisation.podman.enable = true`.
163     '';
164     changelog = "https://github.com/containers/podman/blob/v${version}/RELEASE_NOTES.md";
165     license = licenses.asl20;
166     maintainers = with maintainers; [ ] ++ teams.podman.members;
167     mainProgram = "podman";
168   };