From 637dec9d45db4df2a3e6aa565fa2c5cf6bb77768 Mon Sep 17 00:00:00 2001 From: Timmy Douglas Date: Tue, 21 Dec 2021 23:33:56 -0800 Subject: [PATCH] gnu: Add podman. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/containers.scm (podman): New variable. Signed-off-by: Ludovic Courtès --- gnu/packages/containers.scm | 80 +++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/gnu/packages/containers.scm b/gnu/packages/containers.scm index c5492a9c3b..9a567f9f62 100644 --- a/gnu/packages/containers.scm +++ b/gnu/packages/containers.scm @@ -260,3 +260,83 @@ (define-public cni-plugins "This package provides Container Network Interface (CNI) plugins to configure network interfaces in Linux containers.") (license license:asl2.0))) + +;; For podman to work, the user needs to run +;; `sudo mount -t cgroup2 none /sys/fs/cgroup` + +(define-public podman + (package + (name "podman") + (version "3.4.4") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/containers/podman") + (commit (string-append "v" version)))) + (sha256 + (base32 "1q09qsl1wwiiy5njvb97n1j5f5jin4ckmzj5xbdfs28czb2kx3g5")) + (file-name (git-file-name name version)))) + + (build-system gnu-build-system) + (arguments + `(#:make-flags (list ,(string-append "CC=" (cc-for-target)) + (string-append "PREFIX=" %output)) + #:tests? #f ; /sys/fs/cgroup not set up in guix sandbox + #:test-target "test" + #:phases (modify-phases %standard-phases + (delete 'configure) + (add-after 'unpack 'set-env + (lambda* (#:key inputs #:allow-other-keys) + ;; when running go, things fail because + ;; HOME=/homeless-shelter. + (setenv "HOME" "/tmp"))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + ;; (invoke "strace" "-f" "bin/podman" "version") + (invoke "make" "localsystem") + (invoke "make" "remotesystem")))) + (add-after 'unpack 'fix-hardcoded-paths + (lambda _ + (substitute* (find-files "libpod" "\\.go") + (("exec.LookPath[(][\"]slirp4netns[\"][)]") + (string-append "exec.LookPath(\"" + (which "slirp4netns") "\")"))) + (substitute* "hack/install_catatonit.sh" + (("CATATONIT_PATH=\"[^\"]+\"") + (string-append "CATATONIT_PATH=" (which "true")))) + (substitute* "vendor/github.com/containers/common/pkg/config/config_linux.go" + (("/usr/local/libexec/podman") + (string-append (assoc-ref %outputs "out") "/bin"))) + (substitute* "vendor/github.com/containers/common/pkg/config/default.go" + (("/usr/libexec/podman/conmon") (which "conmon")) + (("/usr/local/libexec/cni") + (string-append (assoc-ref %build-inputs "cni-plugins") + "/bin")) + (("/usr/bin/crun") (which "crun")))))))) + (inputs + (list btrfs-progs + cni-plugins + conmon + crun + gpgme + go-github-com-go-md2man + iptables + libassuan + libseccomp + libselinux + slirp4netns)) + (native-inputs + (list bats + git + go + ; strace ; XXX debug + pkg-config)) + (home-page "https://podman.io") + (synopsis "Manage containers, images, pods, and their volumes") + (description + "Podman (the POD MANager) is a tool for managing containers and images, +volumes mounted into those containers, and pods made from groups of +containers.") + (license license:asl2.0)))