diff options
Diffstat (limited to 'gnu/packages/docker.scm')
-rw-r--r-- | gnu/packages/docker.scm | 338 |
1 files changed, 204 insertions, 134 deletions
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm index 39e7e8108b..eb76b85676 100644 --- a/gnu/packages/docker.scm +++ b/gnu/packages/docker.scm @@ -36,6 +36,7 @@ #:use-module (gnu packages glib) #:use-module (gnu packages golang) #:use-module (gnu packages linux) + #:use-module (gnu packages networking) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-web) @@ -227,6 +228,66 @@ network attachments.") (home-page "http://containerd.io/") (license license:asl2.0))) +;;; Private package that shouldn't be used directly; its purposes is to be +;;; used as a template for the various packages it contains. It doesn't build +;;; 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'. + (let ((commit "4725f2163fb214a6312f3beae5991f838ec36326") + (version "18.09") + (revision "1")) + (package + (name "docker-libnetwork") + (version (git-version version "1" commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/docker/libnetwork.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1zpnxki8qfzha6ljahpwd3vkzmjhsvkmf73w6crm4ilxxw5vnpfb")) + ;; Delete bundled ("vendored") free software source code. + (modules '((guix build utils))) + (snippet '(begin + (delete-file-recursively "vendor") + #t)))) + (build-system go-build-system) + (arguments + `(#:import-path "github.com/docker/libnetwork/")) + (home-page "https://github.com/docker/libnetwork/") + (synopsis "Networking for containers") + (description "Libnetwork provides a native Go implementation for +connecting containers. The goal of @code{libnetwork} is to deliver a robust +container network model that provides a consistent programming interface and +the required network abstractions for applications.") + (license license:asl2.0)))) + +(define-public docker-libnetwork-cmd-proxy + (package + (inherit docker-libnetwork) + (name "docker-libnetwork-cmd-proxy") + (arguments + `(#:import-path "github.com/docker/libnetwork/cmd/proxy" + #:unpack-path "github.com/docker/libnetwork" + #:install-source? #f)) + (native-inputs + `(("go-sctp" ,go-sctp) + ;; For tests. + ("logrus" ,go-github-com-sirupsen-logrus) + ("go-netlink" ,go-netlink) + ("go-netns" ,go-netns) + ("go-golang-org-x-crypto-ssh-terminal" + ,go-golang-org-x-crypto-ssh-terminal) + ("go-golang-org-x-sys-unix" ,go-golang-org-x-sys-unix))) + (synopsis "Docker user-space proxy") + (description "A proxy running in the user space. It is used by the +built-in registry server of Docker.") + (license license:asl2.0))) + ;; TODO: Patch out modprobes for ip_vs, nf_conntrack, ;; brige, nf_conntrack_netlink, aufs. (define-public docker @@ -235,17 +296,17 @@ network attachments.") (version %docker-version) (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/docker/engine.git") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0cirpd9l2qazp2jyanwzvrkx2m98nksjdvn43ff38p89w6133ipb")) - (patches - (search-patches "docker-engine-test-noinstall.patch" - "docker-fix-tests.patch" - "docker-use-fewer-modprobes.patch")))) + (method git-fetch) + (uri (git-reference + (url "https://github.com/docker/engine.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0cirpd9l2qazp2jyanwzvrkx2m98nksjdvn43ff38p89w6133ipb")) + (patches + (search-patches "docker-engine-test-noinstall.patch" + "docker-fix-tests.patch" + "docker-use-fewer-modprobes.patch")))) (build-system gnu-build-system) (arguments `(#:modules @@ -262,132 +323,139 @@ network attachments.") (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"))) + (("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"))) + (("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"))) + (("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"))) + (("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"))) + (("StockRuntimeName = .*") + (string-append "StockRuntimeName = \"" + (assoc-ref inputs "runc") + "/sbin/runc\"\n"))) (substitute* "vendor/github.com/moby/buildkit/executor/runcexecutor/executor.go" - (("var defaultCommandCandidates = .*") - (string-append "var defaultCommandCandidates = []string{\"" - (assoc-ref inputs "runc") "/sbin/runc\"}"))) + (("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"))) (let ((source-files (filter (lambda (name) - (not (string-contains name "test"))) - (find-files "." "\\.go$")))) - (let-syntax ((substitute-LookPath - (lambda (x) - (syntax-case x () - ((substitute-LookPath source-text package - relative-path) - #`(substitute* source-files - ((#,(string-append "exec\\.LookPath\\(\"" - (syntax->datum - #'source-text) - "\")")) - (string-append "\"" - (assoc-ref inputs package) - relative-path - "\", error(nil)"))))))) - (substitute-Command - (lambda (x) - (syntax-case x () - ((substitute-LookPath source-text package - relative-path) - #`(substitute* source-files - ((#,(string-append "exec\\.Command\\(\"" - (syntax->datum - #'source-text) - "\"")) ; ) - (string-append "exec.Command(\"" - (assoc-ref inputs package) - relative-path - "\"")))))))) ; ) - (substitute-LookPath "ps" "procps" "/bin/ps") - (substitute-LookPath "mkfs.xfs" "xfsprogs" "/bin/mkfs.xfs") - (substitute-LookPath "lvmdiskscan" "lvm2" "/sbin/lvmdiskscan") - (substitute-LookPath "pvdisplay" "lvm2" "/sbin/pvdisplay") - (substitute-LookPath "blkid" "util-linux" "/sbin/blkid") - (substitute-LookPath "unpigz" "pigz" "/bin/unpigz") - (substitute-LookPath "iptables" "iptables" "/sbin/iptables") - (substitute-LookPath "iptables-legacy" "iptables" "/sbin/iptables") - (substitute-LookPath "ip" "iproute2" "/sbin/ip") - (substitute-Command "modprobe" "kmod" "/bin/modprobe") - (substitute-Command "pvcreate" "lvm2" "/sbin/pvcreate") - (substitute-Command "vgcreate" "lvm2" "/sbin/vgcreate") - (substitute-Command "lvcreate" "lvm2" "/sbin/lvcreate") - (substitute-Command "lvconvert" "lvm2" "/sbin/lvconvert") - (substitute-Command "lvchange" "lvm2" "/sbin/lvchange") - (substitute-Command "mkfs.xfs" "xfsprogs" "/sbin/mkfs.xfs") - (substitute-Command "xfs_growfs" "xfsprogs" "/sbin/xfs_growfs") - (substitute-Command "mkfs.ext4" "e2fsprogs" "/sbin/mkfs.ext4") - (substitute-Command "tune2fs" "e2fsprogs" "/sbin/tune2fs") - (substitute-Command "blkid" "util-linux" "/sbin/blkid") - (substitute-Command "resize2fs" "e2fsprogs" "/sbin/resize2fs") -; docker-mountfrom ?? -; docker -; docker-untar ?? -; docker-applyLayer ?? -; /usr/bin/uname -; grep -; apparmor_parser - (substitute-Command "ps" "procps" "/bin/ps") - (substitute-Command "losetup" "util-linux" "/sbin/losetup") - (substitute-Command "uname" "coreutils" "/bin/uname") - (substitute-Command "dbus-launch" "dbus" "/bin/dbus-launch") - (substitute-Command "git" "git" "/bin/git")) + (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* + ("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")) + + (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 + ;; 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"))) + ;; 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 _ @@ -434,7 +502,7 @@ network attachments.") ;; But go needs to have the uncanonicalized directory name, so ;; store that. (setenv "PWD" (string-append (getcwd) - "/.gopath/src/github.com/docker/docker")) + "/.gopath/src/github.com/docker/docker")) (with-directory-excursion ".gopath/src/github.com/docker/docker" (invoke "hack/test/unit")) (setenv "PWD" #f) @@ -448,9 +516,10 @@ network attachments.") #t)))))) (inputs `(("btrfs-progs" ,btrfs-progs) - ("containerd" ,containerd) ; for containerd-shim + ("containerd" ,containerd) ; for containerd-shim ("coreutils" ,coreutils) ("dbus" ,dbus) + ("docker-proxy" ,docker-libnetwork-cmd-proxy) ("e2fsprogs" ,e2fsprogs) ("git" ,git) ("iproute2" ,iproute) @@ -462,9 +531,10 @@ network attachments.") ("runc" ,runc) ("util-linux" ,util-linux) ("lvm2" ,lvm2) - ("xfsprogs" ,xfsprogs))) + ("xfsprogs" ,xfsprogs) + ("xz" ,xz))) (native-inputs - `(("eudev" ,eudev) ; TODO: Should be propagated by lvm2 (.pc -> .pc) + `(("eudev" ,eudev) ; TODO: Should be propagated by lvm2 (.pc -> .pc) ("go" ,go) ("pkg-config" ,pkg-config))) (synopsis "Docker container component library, and daemon") @@ -538,7 +608,7 @@ provisioning etc.") (define-public cqfd (package (name "cqfd") - (version "5.0.1") + (version "5.1.0") (source (origin (method git-fetch) (uri (git-reference @@ -547,7 +617,7 @@ provisioning etc.") (file-name (git-file-name name version)) (sha256 (base32 - "1z4v16lbpbwd5ykawizdclpryp2k006lbk2mv427a4b3nvcd9wik")))) + "1xhydz01f2rrnw7rmnaxh3f3q1ariq7j2ig0i0w1p3wn10l3q0nv")))) (build-system gnu-build-system) (arguments ;; The test suite requires a docker daemon and connectivity. @@ -569,6 +639,6 @@ provisioning etc.") (home-page "https://github.com/savoirfairelinux/cqfd") (synopsis "Convenience wrapper for Docker") (description "cqfd is a Bash script that provides a quick and convenient -way to run commands in the ecurrent directory, but within a Docker container +way to run commands in the current directory, but within a Docker container defined in a per-project configuration file.") (license license:gpl3+))) |