summaryrefslogtreecommitdiff
path: root/gnu/packages/docker.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/docker.scm')
-rw-r--r--gnu/packages/docker.scm657
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")