diff options
Diffstat (limited to 'gnu/packages/docker.scm')
-rw-r--r-- | gnu/packages/docker.scm | 657 |
1 files changed, 326 insertions, 331 deletions
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm index 07731886ae..ae4ee419af 100644 --- a/gnu/packages/docker.scm +++ b/gnu/packages/docker.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com> ;;; Copyright © 2020 Jesse Dowell <jessedowell@gmail.com> ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com> +;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,6 +29,7 @@ #:use-module (gnu packages) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) @@ -52,7 +54,7 @@ ;; Note - when changing Docker versions it is important to update the versions ;; of several associated packages (docker-libnetwork and go-sctp). -(define %docker-version "19.03.15") +(define %docker-version "20.10.17") (define-public python-docker (package @@ -173,7 +175,7 @@ Python without keeping their credentials in a Docker configuration file.") (define-public containerd (package (name "containerd") - (version "1.4.4") + (version "1.6.6") (source (origin (method git-fetch) @@ -182,51 +184,58 @@ Python without keeping their credentials in a Docker configuration file.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0qjbfj1dw6pykxhh8zahcxlgpyjzgnrngk5vjaf34akwyan8nrxb")))) + (base32 "1vsl747i3wyy68j4lp4nprwxadbyga8qxlrk892afcd2990zp5mr")))) (build-system go-build-system) (arguments - (let ((make-flags (list (string-append "VERSION=" version) - "REVISION=0"))) - `(#:import-path "github.com/containerd/containerd" - #:phases - (modify-phases %standard-phases - (add-after 'chdir 'patch-paths - (lambda* (#:key inputs import-path outputs #:allow-other-keys) - (with-directory-excursion (string-append "src/" import-path) - (substitute* "runtime/v1/linux/runtime.go" - (("defaultRuntime[ \t]*=.*") - (string-append "defaultRuntime = \"" - (assoc-ref inputs "runc") - "/sbin/runc\"\n")) - (("defaultShim[ \t]*=.*") - (string-append "defaultShim = \"" - (assoc-ref outputs "out") - "/bin/containerd-shim\"\n"))) - (substitute* "vendor/github.com/containerd/go-runc/runc.go" - (("DefaultCommand[ \t]*=.*") - (string-append "DefaultCommand = \"" - (assoc-ref inputs "runc") - "/sbin/runc\"\n"))) - (substitute* "vendor/github.com/containerd/continuity/testutil\ + (let ((make-flags #~(list (string-append "VERSION=" #$version) + (string-append "DESTDIR=" #$output) + "PREFIX=" + "REVISION=0"))) + (list + #:import-path "github.com/containerd/containerd" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-paths + (lambda* (#:key inputs import-path outputs #:allow-other-keys) + (with-directory-excursion (string-append "src/" import-path) + (substitute* "runtime/v1/linux/runtime.go" + (("defaultRuntime[ \t]*=.*") + (string-append "defaultRuntime = \"" + (search-input-file inputs "/sbin/runc") + "\"\n")) + (("defaultShim[ \t]*=.*") + (string-append "defaultShim = \"" + (assoc-ref outputs "out") + "/bin/containerd-shim\"\n"))) + (substitute* "pkg/cri/config/config_unix.go" + (("DefaultRuntimeName: \"runc\"") + (string-append "DefaultRuntimeName: \"" + (search-input-file inputs "/sbin/runc") + "\""))) + (substitute* "vendor/github.com/containerd/go-runc/runc.go" + (("DefaultCommand[ \t]*=.*") + (string-append "DefaultCommand = \"" + (search-input-file inputs "/sbin/runc") + "\"\n"))) + (substitute* "vendor/github.com/containerd/continuity/testutil\ /loopback/loopback_linux.go" - (("exec\\.Command\\(\"losetup\"") - (string-append "exec.Command(\"" - (assoc-ref inputs "util-linux") - "/sbin/losetup\""))) - (substitute* "archive/compression/compression.go" - (("exec\\.LookPath\\(\"unpigz\"\\)") - (string-append "\"" (assoc-ref inputs "pigz") - "/bin/unpigz\", error(nil)")))))) - (replace 'build - (lambda* (#:key import-path #:allow-other-keys) - (with-directory-excursion (string-append "src/" import-path) - (apply invoke "make" ',make-flags)))) - (replace 'install - (lambda* (#:key import-path outputs #:allow-other-keys) - (with-directory-excursion (string-append "src/" import-path) - (let* ((out (assoc-ref outputs "out"))) - (apply invoke "make" (string-append "DESTDIR=" out) "install" - ',make-flags))))))))) + (("exec\\.Command\\(\"losetup\"") + (string-append "exec.Command(\"" + (search-input-file inputs "/sbin/losetup") + "\""))) + (substitute* "archive/compression/compression.go" + (("exec\\.LookPath\\(\"unpigz\"\\)") + (string-append "\"" + (search-input-file inputs "/bin/unpigz") + "\", error(nil)")))))) + (replace 'build + (lambda* (#:key import-path #:allow-other-keys) + (with-directory-excursion (string-append "src/" import-path) + (apply invoke "make" #$make-flags)))) + (replace 'install + (lambda* (#:key import-path #:allow-other-keys) + (with-directory-excursion (string-append "src/" import-path) + (apply invoke "make" "install" #$make-flags)))))))) (inputs (list btrfs-progs libseccomp pigz runc util-linux)) (native-inputs @@ -243,11 +252,10 @@ network attachments.") ;;; anyway, as it needs many dependencies that aren't being satisfied. (define docker-libnetwork ;; There are no recent release for libnetwork, so choose the last commit of - ;; the branch that Docker uses, as can be seen in the Docker source file - ;; 'hack/dockerfile/install/proxy.installer'. NOTE - It is important that - ;; this version is kept in sync with the version of Docker being used. - ;; This commit is the "bump_19.03" branch, as mentioned in Docker's vendor.conf. - (let ((commit "55e924b8a84231a065879156c0de95aefc5f5435") + ;; the branch that Docker uses, as can be seen in the 'vendor.conf' Docker + ;; source file. NOTE - It is important that this version is kept in sync + ;; with the version of Docker being used. + (let ((commit "f6ccccb1c082a432c2a5814aaedaca56af33d9ea") (version (version-major+minor %docker-version)) (revision "1")) (package @@ -262,12 +270,10 @@ network attachments.") (file-name (git-file-name name version)) (sha256 (base32 - "19syb3scwiykn44gqfaqrgqv8a0df4ps0ykf3za9xkjc5cyi99mp")) + "0nxpr0h0smv4n641g41vxibr5r85ixfcvs9cp3c4fc7zvrhjc49s")) ;; Delete bundled ("vendored") free software source code. (modules '((guix build utils))) - (snippet '(begin - (delete-file-recursively "vendor") - #t)))) + (snippet '(delete-file-recursively "vendor")))) (build-system go-build-system) (arguments `(#:import-path "github.com/moby/libnetwork/")) @@ -315,278 +321,269 @@ built-in registry server of Docker.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0419iha9zmwlhzhnbfxlsa13vgd04yifnsr8qqnj2ks5dxrcajl8")) - (patches - (search-patches "docker-fix-tests.patch")))) + (base32 "0hn7fg717rggwk6dbicrwa7aglqp7dp0jp5rvn6p9gfcnrp2w97d")))) (build-system gnu-build-system) (arguments - `(#:modules - ((guix build gnu-build-system) + (list + #:modules + '((guix build gnu-build-system) ((guix build go-build-system) #:prefix go:) (guix build union) (guix build utils)) - #:imported-modules - (,@%gnu-build-system-modules + #:imported-modules + `(,@%gnu-build-system-modules (guix build union) (guix build go-build-system)) - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-paths - (lambda* (#:key inputs #:allow-other-keys) - (substitute* "builder/builder-next/executor_unix.go" - (("CommandCandidates:.*runc.*") - (string-append "CommandCandidates: []string{\"" - (assoc-ref inputs "runc") - "/sbin/runc\"},\n"))) - (substitute* "vendor/github.com/containerd/go-runc/runc.go" - (("DefaultCommand = .*") - (string-append "DefaultCommand = \"" - (assoc-ref inputs "runc") - "/sbin/runc\"\n"))) - (substitute* "vendor/github.com/containerd/containerd/runtime/v1/linux/runtime.go" - (("defaultRuntime[ \t]*=.*") - (string-append "defaultRuntime = \"" - (assoc-ref inputs "runc") - "/sbin/runc\"\n")) - (("defaultShim[ \t]*=.*") - (string-append "defaultShim = \"" - (assoc-ref inputs "containerd") - "/bin/containerd-shim\"\n"))) - (substitute* "daemon/daemon_unix.go" - (("DefaultShimBinary = .*") - (string-append "DefaultShimBinary = \"" - (assoc-ref inputs "containerd") - "/bin/containerd-shim\"\n")) - (("DefaultRuntimeBinary = .*") - (string-append "DefaultRuntimeBinary = \"" - (assoc-ref inputs "runc") - "/sbin/runc\"\n")) - (("DefaultRuntimeName = .*") - (string-append "DefaultRuntimeName = \"" - (assoc-ref inputs "runc") - "/sbin/runc\"\n"))) - (substitute* "daemon/config/config.go" - (("StockRuntimeName = .*") - (string-append "StockRuntimeName = \"" - (assoc-ref inputs "runc") - "/sbin/runc\"\n")) - (("DefaultInitBinary = .*") - (string-append "DefaultInitBinary = \"" - (assoc-ref inputs "tini") - "/bin/tini-static\"\n"))) - (substitute* "daemon/config/config_common_unix_test.go" - (("expectedInitPath: \"docker-init\"") - (string-append "expectedInitPath: \"" - (assoc-ref inputs "tini") - "/bin/tini-static\""))) - (substitute* "vendor/github.com/moby/buildkit/executor/runcexecutor/executor.go" - (("var defaultCommandCandidates = .*") - (string-append "var defaultCommandCandidates = []string{\"" - (assoc-ref inputs "runc") "/sbin/runc\"}"))) - (substitute* "vendor/github.com/docker/libnetwork/portmapper/proxy.go" - (("var userlandProxyCommandName = .*") - (string-append "var userlandProxyCommandName = \"" - (assoc-ref inputs "docker-proxy") - "/bin/proxy\"\n"))) - (substitute* "pkg/archive/archive.go" - (("string\\{\"xz") - (string-append "string{\"" (assoc-ref inputs "xz") "/bin/xz"))) - ;; TODO: Remove when Docker proper uses v1.14.x to build - (substitute* "registry/resumable/resumablerequestreader_test.go" - (("I%27m%20not%20an%20url" all) - (string-append "\"" all "\""))) - ;; TODO: Remove when Docker proper uses v1.14.x to build - (substitute* "vendor/gotest.tools/x/subtest/context.go" - (("func \\(tc \\*testcase\\) Cleanup\\(" all) - (string-append all "func()")) - (("tc\\.Cleanup\\(" all) - (string-append all "nil"))) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "builder/builder-next/executor_unix.go" + (("CommandCandidates:.*runc.*") + (string-append "CommandCandidates: []string{\"" + (search-input-file inputs "/sbin/runc") + "\"},\n"))) + (substitute* "vendor/github.com/containerd/go-runc/runc.go" + (("DefaultCommand = .*") + (string-append "DefaultCommand = \"" + (search-input-file inputs "/sbin/runc") + "\"\n"))) + (substitute* "vendor/github.com/containerd/containerd/\ +runtime/v1/linux/runtime.go" + (("defaultRuntime[ \t]*=.*") + (string-append "defaultRuntime = \"" + (search-input-file inputs "/sbin/runc") + "\"\n")) + (("defaultShim[ \t]*=.*") + (string-append "defaultShim = \"" + (search-input-file inputs "/bin/containerd-shim") + "\"\n"))) + (substitute* "daemon/daemon_unix.go" + (("DefaultShimBinary = .*") + (string-append "DefaultShimBinary = \"" + (search-input-file inputs "/bin/containerd-shim") + "\"\n")) + (("DefaultRuntimeBinary = .*") + (string-append "DefaultRuntimeBinary = \"" + (search-input-file inputs "/sbin/runc") + "\"\n"))) + (substitute* "daemon/runtime_unix.go" + (("defaultRuntimeName = .*") + (string-append "defaultRuntimeName = \"" + (search-input-file inputs "/sbin/runc") + "\"\n"))) + (substitute* "daemon/config/config.go" + (("StockRuntimeName = .*") + (string-append "StockRuntimeName = \"" + (search-input-file inputs "/sbin/runc") + "\"\n")) + (("DefaultInitBinary = .*") + (string-append "DefaultInitBinary = \"" + (search-input-file inputs "/bin/tini-static") + "\"\n"))) + (substitute* "daemon/config/config_common_unix_test.go" + (("expectedInitPath: \"docker-init\"") + (string-append "expectedInitPath: \"" + (search-input-file inputs "/bin/tini-static") + "\""))) + (substitute* "vendor/github.com/moby/buildkit/executor/\ +runcexecutor/executor.go" + (("var defaultCommandCandidates = .*") + (string-append "var defaultCommandCandidates = []string{\"" + (search-input-file inputs "/sbin/runc") "\"}"))) + (substitute* "vendor/github.com/docker/libnetwork/portmapper/proxy.go" + (("var userlandProxyCommandName = .*") + (string-append "var userlandProxyCommandName = \"" + (search-input-file inputs "/bin/proxy") + "\"\n"))) + (substitute* "pkg/archive/archive.go" + (("string\\{\"xz") + (string-append "string{\"" (search-input-file inputs "/bin/xz")))) - (let ((source-files (filter (lambda (name) - (not (string-contains name "test"))) - (find-files "." "\\.go$")))) - (let-syntax ((substitute-LookPath* - (syntax-rules () - ((_ (source-text package relative-path) ...) - (substitute* source-files - (((string-append "\\<exec\\.LookPath\\(\"" - source-text - "\")")) - (string-append "\"" - (assoc-ref inputs package) - "/" relative-path - "\", error(nil)")) ...)))) - (substitute-Command* - (syntax-rules () - ((_ (source-text package relative-path) ...) - (substitute* source-files - (((string-append "\\<(re)?exec\\.Command\\(\"" - source-text - "\"") _ re?) - (string-append (if re? re? "") - "exec.Command(\"" - (assoc-ref inputs package) - "/" relative-path - "\"")) ...))))) - (substitute-LookPath* - ("containerd" "containerd" "bin/containerd") - ("ps" "procps" "bin/ps") - ("mkfs.xfs" "xfsprogs" "bin/mkfs.xfs") - ("lvmdiskscan" "lvm2" "sbin/lvmdiskscan") - ("pvdisplay" "lvm2" "sbin/pvdisplay") - ("blkid" "util-linux" "sbin/blkid") - ("unpigz" "pigz" "bin/unpigz") - ("iptables" "iptables" "sbin/iptables") - ("iptables-legacy" "iptables" "sbin/iptables") - ("ip" "iproute2" "sbin/ip")) + (let ((source-files (filter (lambda (name) + (not (string-contains name "test"))) + (find-files "." "\\.go$")))) + (let-syntax ((substitute-LookPath* + (syntax-rules () + ((_ (source-text path) ...) + (substitute* source-files + (((string-append "\\<exec\\.LookPath\\(\"" + source-text + "\")")) + (string-append "\"" + (search-input-file inputs path) + "\", error(nil)")) ...)))) + (substitute-Command* + (syntax-rules () + ((_ (source-text path) ...) + (substitute* source-files + (((string-append "\\<(re)?exec\\.Command\\(\"" + source-text + "\"") _ re?) + (string-append (if re? re? "") + "exec.Command(\"" + (search-input-file inputs path) + "\"")) ...))))) + (substitute-LookPath* + ("containerd" "/bin/containerd") + ("ps" "/bin/ps") + ("mkfs.xfs" "/sbin/mkfs.xfs") + ("lvmdiskscan" "/sbin/lvmdiskscan") + ("pvdisplay" "/sbin/pvdisplay") + ("blkid" "/sbin/blkid") + ("unpigz" "/bin/unpigz") + ("iptables" "/sbin/iptables") + ("ip6tables" "/sbin/ip6tables") + ("iptables-legacy" "/sbin/iptables") + ("ip" "/sbin/ip")) - (substitute-Command* - ("modprobe" "kmod" "bin/modprobe") - ("pvcreate" "lvm2" "sbin/pvcreate") - ("vgcreate" "lvm2" "sbin/vgcreate") - ("lvcreate" "lvm2" "sbin/lvcreate") - ("lvconvert" "lvm2" "sbin/lvconvert") - ("lvchange" "lvm2" "sbin/lvchange") - ("mkfs.xfs" "xfsprogs" "sbin/mkfs.xfs") - ("xfs_growfs" "xfsprogs" "sbin/xfs_growfs") - ("mkfs.ext4" "e2fsprogs" "sbin/mkfs.ext4") - ("tune2fs" "e2fsprogs" "sbin/tune2fs") - ("blkid" "util-linux" "sbin/blkid") - ("resize2fs" "e2fsprogs" "sbin/resize2fs") - ("ps" "procps" "bin/ps") - ("losetup" "util-linux" "sbin/losetup") - ("uname" "coreutils" "bin/uname") - ("dbus-launch" "dbus" "bin/dbus-launch") - ("git" "git" "bin/git"))) - ;; docker-mountfrom ?? - ;; docker - ;; docker-untar ?? - ;; docker-applyLayer ?? - ;; /usr/bin/uname - ;; grep - ;; apparmor_parser + (substitute-Command* + ("modprobe" "/bin/modprobe") + ("pvcreate" "/sbin/pvcreate") + ("vgcreate" "/sbin/vgcreate") + ("lvcreate" "/sbin/lvcreate") + ("lvconvert" "/sbin/lvconvert") + ("lvchange" "/sbin/lvchange") + ("mkfs.xfs" "/sbin/mkfs.xfs") + ("xfs_growfs" "/sbin/xfs_growfs") + ("mkfs.ext4" "/sbin/mkfs.ext4") + ("tune2fs" "/sbin/tune2fs") + ("blkid" "/sbin/blkid") + ("resize2fs" "/sbin/resize2fs") + ("ps" "/bin/ps") + ("losetup" "/sbin/losetup") + ("uname" "/bin/uname") + ("dbus-launch" "/bin/dbus-launch") + ("git" "/bin/git"))) + ;; docker-mountfrom ?? + ;; docker + ;; docker-untar ?? + ;; docker-applyLayer ?? + ;; /usr/bin/uname + ;; grep + ;; apparmor_parser - ;; Make compilation fail when, in future versions, Docker - ;; invokes other programs we don't know about and thus don't - ;; substitute. - (substitute* source-files - ;; Search for Java in PATH. - (("\\<exec\\.Command\\(\"java\"") - "xxec.Command(\"java\"") - ;; Search for AUFS in PATH (mainline Linux doesn't support it). - (("\\<exec\\.Command\\(\"auplink\"") - "xxec.Command(\"auplink\"") - ;; Fail on other unsubstituted commands. - (("\\<exec\\.Command\\(\"([a-zA-Z0-9][a-zA-Z0-9_-]*)\"" - _ executable) - (string-append "exec.Guix_doesnt_want_Command(\"" - executable "\"")) - (("\\<xxec\\.Command") - "exec.Command") - ;; Search for ZFS in PATH. - (("\\<LookPath\\(\"zfs\"\\)") "LooxPath(\"zfs\")") - ;; Fail on other unsubstituted LookPaths. - (("\\<LookPath\\(\"") "Guix_doesnt_want_LookPath\\(\"") - (("\\<LooxPath") "LookPath"))) - #t)) - (add-after 'patch-paths 'delete-failing-tests - (lambda _ - ;; Needs internet access. - (delete-file "builder/remotecontext/git/gitutils_test.go") - ;; Permission denied. - (delete-file "daemon/graphdriver/devmapper/devmapper_test.go") - ;; Operation not permitted (idtools.MkdirAllAndChown). - (delete-file "daemon/graphdriver/vfs/vfs_test.go") - ;; Timeouts after 5 min. - (delete-file "plugin/manager_linux_test.go") - ;; Operation not permitted. - (delete-file "daemon/graphdriver/aufs/aufs_test.go") - (delete-file "daemon/graphdriver/btrfs/btrfs_test.go") - (delete-file "daemon/graphdriver/overlay/overlay_test.go") - (delete-file "daemon/graphdriver/overlay2/overlay_test.go") - (delete-file "pkg/chrootarchive/archive_unix_test.go") - (delete-file "daemon/container_unix_test.go") - ;; This file uses cgroups and /proc. - (delete-file "pkg/sysinfo/sysinfo_linux_test.go") - ;; This file uses cgroups. - (delete-file "runconfig/config_test.go") - ;; This file uses /var. - (delete-file "daemon/oci_linux_test.go") - ;; Signal tests fail in bizarre ways - (delete-file "pkg/signal/signal_linux_test.go") - #t)) - (replace 'configure - (lambda _ - (setenv "DOCKER_BUILDTAGS" "seccomp") - (setenv "DOCKER_GITCOMMIT" (string-append "v" ,%docker-version)) - (setenv "VERSION" (string-append ,%docker-version "-ce")) - ;; Automatically use bundled dependencies. - ;; TODO: Unbundle - see file "vendor.conf". - (setenv "AUTO_GOPATH" "1") - ;; Respectively, strip the symbol table and debug - ;; information, and the DWARF symbol table. - (setenv "LDFLAGS" "-s -w") - ;; Make build faster - (setenv "GOCACHE" "/tmp") - #t)) - (add-before 'build 'setup-go-environment - (assoc-ref go:%standard-phases 'setup-go-environment)) - (replace 'build - (lambda _ - ;; Our LD doesn't like the statically linked relocatable things - ;; that go produces, so install the dynamic version of - ;; dockerd instead. - (invoke "hack/make.sh" "dynbinary"))) - (replace 'check - (lambda _ - ;; The build process generated a file because the environment - ;; variable "AUTO_GOPATH" was set. Use it. - (setenv "GOPATH" (string-append (getcwd) "/.gopath")) - ;; ".gopath/src/github.com/docker/docker" is a link to the current - ;; directory and chdir would canonicalize to that. - ;; But go needs to have the uncanonicalized directory name, so - ;; store that. - (setenv "PWD" (string-append (getcwd) - "/.gopath/src/github.com/docker/docker")) - (with-directory-excursion ".gopath/src/github.com/docker/docker" - (invoke "hack/test/unit")) - (setenv "PWD" #f) - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (out-bin (string-append out "/bin"))) - (install-file "bundles/dynbinary-daemon/dockerd" out-bin) - (install-file (string-append "bundles/dynbinary-daemon/dockerd-" - (getenv "VERSION")) - out-bin) - #t))) - (add-after 'install 'remove-go-references - (assoc-ref go:%standard-phases 'remove-go-references))))) + ;; Make compilation fail when, in future versions, Docker + ;; invokes other programs we don't know about and thus don't + ;; substitute. + (substitute* source-files + ;; Search for Java in PATH. + (("\\<exec\\.Command\\(\"java\"") + "xxec.Command(\"java\"") + ;; Search for AUFS in PATH (mainline Linux doesn't support it). + (("\\<exec\\.Command\\(\"auplink\"") + "xxec.Command(\"auplink\"") + ;; Fail on other unsubstituted commands. + (("\\<exec\\.Command\\(\"([a-zA-Z0-9][a-zA-Z0-9_-]*)\"" + _ executable) + (string-append "exec.Guix_doesnt_want_Command(\"" + executable "\"")) + (("\\<xxec\\.Command") + "exec.Command") + ;; Search for ZFS in PATH. + (("\\<LookPath\\(\"zfs\"\\)") "LooxPath(\"zfs\")") + ;; Do not fail when buildkit-qemu-<target> isn't found. + ;; FIXME: We might need to package buildkit and docker's + ;; buildx plugin, to support qemu-based docker containers. + (("\\<LookPath\\(\"buildkit-qemu-\"") "LooxPath(\"buildkit-qemu-\"") + ;; Fail on other unsubstituted LookPaths. + (("\\<LookPath\\(\"") "Guix_doesnt_want_LookPath\\(\"") + (("\\<LooxPath") "LookPath"))))) + (add-after 'patch-paths 'delete-failing-tests + (lambda _ + ;; Needs internet access. + (delete-file "builder/remotecontext/git/gitutils_test.go") + ;; Permission denied. + (delete-file "daemon/graphdriver/devmapper/devmapper_test.go") + ;; Operation not permitted (idtools.MkdirAllAndChown). + (delete-file "daemon/graphdriver/vfs/vfs_test.go") + ;; Timeouts after 5 min. + (delete-file "plugin/manager_linux_test.go") + ;; Operation not permitted. + (delete-file "daemon/graphdriver/aufs/aufs_test.go") + (delete-file "daemon/graphdriver/btrfs/btrfs_test.go") + (delete-file "daemon/graphdriver/overlay/overlay_test.go") + (delete-file "daemon/graphdriver/overlay2/overlay_test.go") + (delete-file "pkg/chrootarchive/archive_unix_test.go") + (delete-file "daemon/container_unix_test.go") + ;; This file uses cgroups and /proc. + (delete-file "pkg/sysinfo/sysinfo_linux_test.go") + ;; This file uses cgroups. + (delete-file "runconfig/config_test.go") + ;; This file uses /var. + (delete-file "daemon/oci_linux_test.go") + ;; Signal tests fail in bizarre ways + (delete-file "pkg/signal/signal_linux_test.go"))) + (replace 'configure + (lambda _ + (setenv "DOCKER_BUILDTAGS" "seccomp") + (setenv "DOCKER_GITCOMMIT" (string-append "v" #$%docker-version)) + (setenv "VERSION" (string-append #$%docker-version "-ce")) + ;; Automatically use bundled dependencies. + ;; TODO: Unbundle - see file "vendor.conf". + (setenv "AUTO_GOPATH" "1") + ;; Respectively, strip the symbol table and debug + ;; information, and the DWARF symbol table. + (setenv "LDFLAGS" "-s -w") + ;; Make build faster + (setenv "GOCACHE" "/tmp"))) + (add-before 'build 'setup-go-environment + (assoc-ref go:%standard-phases 'setup-go-environment)) + (replace 'build + (lambda _ + ;; Our LD doesn't like the statically linked relocatable things + ;; that go produces, so install the dynamic version of + ;; dockerd instead. + (invoke "hack/make.sh" "dynbinary"))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + ;; The build process generated a file because the environment + ;; variable "AUTO_GOPATH" was set. Use it. + (setenv "GOPATH" (string-append (getcwd) "/.gopath")) + ;; ".gopath/src/github.com/docker/docker" is a link to the current + ;; directory and chdir would canonicalize to that. + ;; But go needs to have the uncanonicalized directory name, so + ;; store that. + (setenv "PWD" (string-append + (getcwd) "/.gopath/src/github.com/docker/docker")) + (with-directory-excursion ".gopath/src/github.com/docker/docker" + (invoke "hack/test/unit")) + (setenv "PWD" #f)))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (out-bin (string-append out "/bin"))) + (install-file "bundles/dynbinary-daemon/dockerd" out-bin) + (install-file (string-append "bundles/dynbinary-daemon/dockerd-" + (getenv "VERSION")) + out-bin)))) + (add-after 'install 'remove-go-references + (assoc-ref go:%standard-phases 'remove-go-references))))) (inputs - `(("btrfs-progs" ,btrfs-progs) - ("containerd" ,containerd) ; for containerd-shim - ("coreutils" ,coreutils) - ("dbus" ,dbus) - ("docker-proxy" ,docker-libnetwork-cmd-proxy) - ("e2fsprogs" ,e2fsprogs) - ("git" ,git) - ("iproute2" ,iproute) - ("iptables" ,iptables) - ("kmod" ,kmod) - ("libseccomp" ,libseccomp) - ("pigz" ,pigz) - ("procps" ,procps) - ("runc" ,runc) - ("util-linux" ,util-linux) - ("lvm2" ,lvm2) - ("tini" ,tini) - ("xfsprogs" ,xfsprogs) - ("xz" ,xz))) + (list btrfs-progs + containerd ; for containerd-shim + coreutils + dbus + docker-libnetwork-cmd-proxy + e2fsprogs + git + iproute + iptables + kmod + libseccomp + pigz + procps + runc + util-linux + lvm2 + tini + xfsprogs + xz)) (native-inputs (list eudev ; TODO: Should be propagated by lvm2 (.pc -> .pc) - go-1.14 gotestsum pkg-config)) - (synopsis "Docker container component library, and daemon") + go gotestsum pkg-config)) + (synopsis "Container component library and daemon") (description "This package provides a framework to assemble specialized container systems. It includes components for orchestration, image management, secret management, configuration management, networking, @@ -600,13 +597,13 @@ provisioning etc.") (version %docker-version) (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/docker/cli") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "1asapjj8brvbkd5irgdq82fx1ihrc14qaq30jxvjwflfm5yb7lv0")))) + (method git-fetch) + (uri (git-reference + (url "https://github.com/docker/cli") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0ksicj4iqvgp9jabd4xmhkf3vax6dwn4f5dsr73bdqj4mf3ahav0")))) (build-system go-build-system) (arguments `(#:import-path "github.com/docker/cli" @@ -626,21 +623,20 @@ provisioning etc.") ;; Make build reproducible. (setenv "BUILDTIME" "1970-01-01 00:00:01.000000000+00:00") (symlink "src/github.com/docker/cli/scripts" "./scripts") - (symlink "src/github.com/docker/cli/docker.Makefile" "./docker.Makefile") - #t)) + (symlink "src/github.com/docker/cli/docker.Makefile" "./docker.Makefile"))) (replace 'build (lambda _ - (invoke "./scripts/build/dynbinary"))) + (setenv "GO_LINKMODE" "dynamic") + (invoke "./scripts/build/binary"))) (replace 'check (lambda* (#:key make-flags tests? #:allow-other-keys) (setenv "PATH" (string-append (getcwd) "/build:" (getenv "PATH"))) - (if tests? - ;; Use the newly-built docker client for the tests. - (with-directory-excursion "src/github.com/docker/cli" - ;; TODO: Run test-e2e as well? - (apply invoke "make" "-f" "docker.Makefile" "test-unit" - (or make-flags '()))) - #t))) + (when tests? + ;; Use the newly-built docker client for the tests. + (with-directory-excursion "src/github.com/docker/cli" + ;; TODO: Run test-e2e as well? + (apply invoke "make" "-f" "docker.Makefile" "test-unit" + (or make-flags '())))))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -653,8 +649,7 @@ provisioning etc.") (string-append etc "/fish/completions")) (install-file "zsh/_docker" (string-append etc "/zsh/site-functions"))) - (install-file "build/docker" out-bin) - #t)))))) + (install-file "build/docker" out-bin))))))) (native-inputs (list go libltdl pkg-config)) (synopsis "Command line interface to Docker") |