about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJaka Hudoklin <jakahudoklin@gmail.com>2016-09-13 15:59:18 +0200
committerGitHub <noreply@github.com>2016-09-13 15:59:18 +0200
commit7a9dd489d6200929c1f89c22441f286fc46b8170 (patch)
treeb2d5a060c2f30fd660a813bb22cadc5dd0231aff
parent49ba0b7896a4e8f70c2c8e9571c814e5dd1d3931 (diff)
parent5d9c62541a3524fd2c035b75058a0cb412b61f95 (diff)
downloadnixlib-7a9dd489d6200929c1f89c22441f286fc46b8170.tar
nixlib-7a9dd489d6200929c1f89c22441f286fc46b8170.tar.gz
nixlib-7a9dd489d6200929c1f89c22441f286fc46b8170.tar.bz2
nixlib-7a9dd489d6200929c1f89c22441f286fc46b8170.tar.lz
nixlib-7a9dd489d6200929c1f89c22441f286fc46b8170.tar.xz
nixlib-7a9dd489d6200929c1f89c22441f286fc46b8170.tar.zst
nixlib-7a9dd489d6200929c1f89c22441f286fc46b8170.zip
Merge pull request #18481 from offlinehacker/pkgs/docker/1.12.1
docker: 1.10.3 -> 1.12.1
-rw-r--r--nixos/modules/virtualisation/docker.nix25
-rw-r--r--nixos/tests/docker.nix3
-rw-r--r--pkgs/applications/virtualization/containerd/default.nix42
-rw-r--r--pkgs/applications/virtualization/docker/default.nix66
-rw-r--r--pkgs/applications/virtualization/runc/default.nix62
-rw-r--r--pkgs/development/tools/misc/md2man/default.nix25
-rw-r--r--pkgs/top-level/all-packages.nix10
7 files changed, 208 insertions, 25 deletions
diff --git a/nixos/modules/virtualisation/docker.nix b/nixos/modules/virtualisation/docker.nix
index ebc2be087a5b..92fe98f3f9c2 100644
--- a/nixos/modules/virtualisation/docker.nix
+++ b/nixos/modules/virtualisation/docker.nix
@@ -40,13 +40,25 @@ in
       };
     storageDriver =
       mkOption {
-        type = types.enum ["aufs" "btrfs" "devicemapper" "overlay" "zfs"];
-        default = "devicemapper";
+        type = types.nullOr (types.enum ["aufs" "btrfs" "devicemapper" "overlay" "overlay2" "zfs"]);
+        default = null;
         description =
           ''
-            This option determines which Docker storage driver to use.
+            This option determines which Docker storage driver to use. By default
+            it let's docker automatically choose preferred storage driver.
           '';
       };
+
+    logDriver =
+      mkOption {
+        type = types.enum ["none" "json-file" "syslog" "journald" "gelf" "fluentd" "awslogs" "splunk" "etwlogs" "gcplogs"];
+        default = "journald";
+        description =
+          ''
+            This option determines which Docker log driver to use.
+          '';
+      };
+
     extraOptions =
       mkOption {
         type = types.separatedString " ";
@@ -88,7 +100,12 @@ in
         after = [ "network.target" ] ++ (optional cfg.socketActivation "docker.socket") ;
         requires = optional cfg.socketActivation "docker.socket";
         serviceConfig = {
-          ExecStart = "${pkgs.docker}/bin/docker daemon --group=docker --storage-driver=${cfg.storageDriver} ${optionalString cfg.socketActivation "--host=fd://"} ${cfg.extraOptions}";
+          ExecStart = ''${pkgs.docker}/bin/dockerd \
+            --group=docker --log-driver=${cfg.logDriver} \
+            ${optionalString (cfg.storageDriver != null) "--storage-driver=${cfg.storageDriver}"} \
+            ${optionalString cfg.socketActivation "--host=fd://"} \
+            ${cfg.extraOptions}
+          '';
           #  I'm not sure if that limits aren't too high, but it's what
           #  goes in config bundled with docker itself
           LimitNOFILE = 1048576;
diff --git a/nixos/tests/docker.nix b/nixos/tests/docker.nix
index 06e511d6e0bd..1b57a94a05d4 100644
--- a/nixos/tests/docker.nix
+++ b/nixos/tests/docker.nix
@@ -11,9 +11,6 @@ import ./make-test.nix ({ pkgs, ...} : {
       { config, pkgs, ... }:
         {
           virtualisation.docker.enable = true;
-          # FIXME: The default "devicemapper" storageDriver fails in NixOS VM
-          # tests.
-          virtualisation.docker.storageDriver = "overlay";
         };
     };
 
diff --git a/pkgs/applications/virtualization/containerd/default.nix b/pkgs/applications/virtualization/containerd/default.nix
new file mode 100644
index 000000000000..6de68ee32f3a
--- /dev/null
+++ b/pkgs/applications/virtualization/containerd/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, fetchFromGitHub
+, go, libapparmor, apparmor-parser, libseccomp }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "containerd-${version}";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "docker";
+    repo = "containerd";
+    rev = "v${version}";
+    sha256 = "0hlvbd5n4v337ywkc8mnbhp9m8lg8612krv45262n87c2ijyx09s";
+  };
+
+  buildInputs = [ go ];
+
+  preBuild = ''
+    ln -s $(pwd) vendor/src/github.com/docker/containerd
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/* $out/bin
+  '';
+
+  preFixup = ''
+    # remove references to go compiler
+    while read file; do
+      sed -ri "s,${go},$(echo "${go}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" $file
+    done < <(find $out/bin -type f 2>/dev/null)
+  '';
+
+  meta = {
+    homepage = https://containerd.tools/;
+    description = "A daemon to control runC";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/virtualization/docker/default.nix b/pkgs/applications/virtualization/docker/default.nix
index 3d69de9c15ba..801b93a02de1 100644
--- a/pkgs/applications/virtualization/docker/default.nix
+++ b/pkgs/applications/virtualization/docker/default.nix
@@ -1,32 +1,34 @@
-{ stdenv, fetchFromGitHub, makeWrapper
-, go, sqlite, iproute, bridge-utils, devicemapper
-, btrfs-progs, iptables, e2fsprogs, xz, utillinux
-, systemd, pkgconfig
+{ stdenv, lib, fetchFromGitHub, makeWrapper, pkgconfig, go-md2man
+, go, containerd, runc
+, sqlite, iproute, bridge-utils, devicemapper, systemd
+, btrfs-progs, iptables, e2fsprogs, xz, utillinux, xfsprogs
+, procps
 }:
 
 # https://github.com/docker/docker/blob/master/project/PACKAGERS.md
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   name = "docker-${version}";
-  version = "1.10.3";
+  version = "1.12.1";
 
   src = fetchFromGitHub {
     owner = "docker";
     repo = "docker";
     rev = "v${version}";
-    sha256 = "0bmrafi0p3fm681y165ps97jki0a8ihl9f0bmpvi22nmc1v0sv6l";
+    sha256 = "079786dyydjfc8vb6djxh140pc7v16fjl5x2h2q420qc3mrfz5zd";
   };
 
   buildInputs = [
-    makeWrapper go sqlite iproute bridge-utils devicemapper btrfs-progs
-    iptables e2fsprogs systemd pkgconfig stdenv.glibc stdenv.glibc.static
+    makeWrapper pkgconfig go-md2man go
+    sqlite devicemapper btrfs-progs systemd
   ];
 
   dontStrip = true;
 
-  DOCKER_BUILDTAGS = [ "journald" ]
+  DOCKER_BUILDTAGS = []
+    ++ optional (systemd != null) [ "journald" ]
     ++ optional (btrfs-progs == null) "exclude_graphdriver_btrfs"
     ++ optional (devicemapper == null) "exclude_graphdriver_devicemapper";
 
@@ -39,15 +41,27 @@ stdenv.mkDerivation rec {
   buildPhase = ''
     patchShebangs .
     export AUTO_GOPATH=1
-    export DOCKER_GITCOMMIT="20f81dde"
+    export DOCKER_GITCOMMIT="23cf638"
     ./hack/make.sh dynbinary
   '';
 
+  outputs = ["out" "man"];
+
+  extraPath = makeBinPath [ iproute iptables e2fsprogs xz xfsprogs procps utillinux ];
+
   installPhase = ''
-    install -Dm755 ./bundles/${version}/dynbinary/docker-${version} $out/libexec/docker/docker
-    install -Dm755 ./bundles/${version}/dynbinary/dockerinit-${version} $out/libexec/docker/dockerinit
+    install -Dm755 ./bundles/${version}/dynbinary-client/docker-${version} $out/libexec/docker/docker
+    install -Dm755 ./bundles/${version}/dynbinary-daemon/dockerd-${version} $out/libexec/docker/dockerd
+    install -Dm755 ./bundles/${version}/dynbinary-daemon/docker-proxy-${version} $out/libexec/docker/docker-proxy
     makeWrapper $out/libexec/docker/docker $out/bin/docker \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ iproute iptables e2fsprogs xz utillinux ]}"
+      --prefix PATH : "$out/libexec/docker:$extraPath"
+    makeWrapper $out/libexec/docker/dockerd $out/bin/dockerd \
+      --prefix PATH : "$out/libexec/docker:$extraPath"
+
+    # docker uses containerd now
+    ln -s ${containerd}/bin/containerd $out/libexec/docker/docker-containerd
+    ln -s ${containerd}/bin/containerd-shim $out/libexec/docker/docker-containerd-shim
+    ln -s ${runc}/bin/runc $out/libexec/docker/docker-runc
 
     # systemd
     install -Dm644 ./contrib/init/systemd/docker.service $out/etc/systemd/system/docker.service
@@ -56,9 +70,31 @@ stdenv.mkDerivation rec {
     install -Dm644 ./contrib/completion/bash/docker $out/share/bash-completion/completions/docker
     install -Dm644 ./contrib/completion/fish/docker.fish $out/share/fish/vendor_completions.d/docker.fish
     install -Dm644 ./contrib/completion/zsh/_docker $out/share/zsh/site-functions/_docker
+
+    # Include contributed man pages
+    man/md2man-all.sh -q
+    manRoot="$man/share/man"
+    mkdir -p "$manRoot"
+    for manDir in man/man?; do
+      manBase="$(basename "$manDir")" # "man1"
+      for manFile in "$manDir"/*; do
+        manName="$(basename "$manFile")" # "docker-build.1"
+        mkdir -p "$manRoot/$manBase"
+        gzip -c "$manFile" > "$manRoot/$manBase/$manName.gz"
+      done
+    done
+  '';
+
+  preFixup = ''
+    # remove references to go compiler, gcc and glibc
+    while read file; do
+      sed -ri "s,${go},$(echo "${go}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" $file
+      sed -ri "s,${stdenv.cc.cc},$(echo "${stdenv.cc.cc}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" $file
+      sed -ri "s,${stdenv.glibc.dev},$(echo "${stdenv.glibc.dev}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" $file
+    done < <(find $out -type f 2>/dev/null)
   '';
 
-  meta = with stdenv.lib; {
+  meta = {
     homepage = http://www.docker.com/;
     description = "An open source project to pack, ship and run any application as a lightweight container";
     license = licenses.asl20;
diff --git a/pkgs/applications/virtualization/runc/default.nix b/pkgs/applications/virtualization/runc/default.nix
new file mode 100644
index 000000000000..d66865573648
--- /dev/null
+++ b/pkgs/applications/virtualization/runc/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, fetchFromGitHub, go-md2man
+, go, pkgconfig, libapparmor, apparmor-parser, libseccomp }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "runc-${version}";
+  version = "2016-06-15";
+
+  src = fetchFromGitHub {
+    owner = "opencontainers";
+    repo = "runc";
+    rev = "cc29e3dded8e27ba8f65738f40d251c885030a28";
+    sha256 = "18fwb3kq10zhhx184yn3j396gpbppy3y4ypb8m2b2pdms39s6pyx";
+  };
+
+  outputs = [ "out" "man" ];
+
+  hardeningDisable = ["fortify"];
+
+  buildInputs = [ go-md2man go pkgconfig libseccomp libapparmor apparmor-parser ];
+
+  makeFlags = ''BUILDTAGS+=seccomp BUILDTAGS+=apparmor'';
+
+  preBuild = ''
+    patchShebangs .
+    substituteInPlace libcontainer/apparmor/apparmor.go \
+      --replace /sbin/apparmor_parser ${apparmor-parser}/bin/apparmor_parser
+  '';
+
+  installPhase = ''
+    install -Dm755 runc $out/bin/runc
+
+    # Include contributed man pages
+    man/md2man-all.sh -q
+    manRoot="$man/share/man"
+    mkdir -p "$manRoot"
+    for manDir in man/man?; do
+      manBase="$(basename "$manDir")" # "man1"
+      for manFile in "$manDir"/*; do
+        manName="$(basename "$manFile")" # "docker-build.1"
+        mkdir -p "$manRoot/$manBase"
+        gzip -c "$manFile" > "$manRoot/$manBase/$manName.gz"
+      done
+    done
+  '';
+
+  preFixup = ''
+    # remove references to go compiler
+    while read file; do
+      sed -ri "s,${go},$(echo "${go}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" $file
+    done < <(find $out/bin -type f 2>/dev/null)
+  '';
+
+  meta = {
+    homepage = https://runc.io/;
+    description = "A CLI tool for spawning and running containers according to the OCI specification";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/development/tools/misc/md2man/default.nix b/pkgs/development/tools/misc/md2man/default.nix
new file mode 100644
index 000000000000..9e458f2aca5a
--- /dev/null
+++ b/pkgs/development/tools/misc/md2man/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, buildGoPackage, go, fetchFromGitHub }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "go-md2man-${version}";
+  version = "1.0.6";
+
+  goPackagePath = "github.com/cpuguy83/go-md2man";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "cpuguy83";
+    repo = "go-md2man";
+    sha256 = "1rm3zjrmfpzy0l3qp02xmd5pqzl77pdql9pbxhl0k1qw2vfzrjv6";
+  };
+
+  meta = {
+    description = "Go tool to convert markdown to man pages";
+    license = licenses.mit;
+    homepage = https://github.com/cpuguy83/go-md2man;
+    maintainers = with maintainers; [offline];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 1bb986c86b44..486950c65bc1 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6588,6 +6588,8 @@ in
   maven = maven3;
   maven3 = callPackage ../development/tools/build-managers/apache-maven { };
 
+  go-md2man = callPackage ../development/tools/misc/md2man {};
+
   minify = callPackage ../development/web/minify { };
 
   minizinc = callPackage ../development/tools/minizinc { };
@@ -12693,6 +12695,8 @@ in
   conkeror-unwrapped = callPackage ../applications/networking/browsers/conkeror { };
   conkeror = wrapFirefox conkeror-unwrapped { };
 
+  containerd = callPackage ../applications/virtualization/containerd { };
+
   cpp_ethereum = callPackage ../applications/misc/webthree-umbrella {
     withOpenCL = true;
 
@@ -12796,9 +12800,7 @@ in
   dmtx-utils = callPackage (callPackage ../tools/graphics/dmtx-utils) {
   };
 
-  docker = callPackage ../applications/virtualization/docker {
-    btrfs-progs = btrfs-progs_4_4_1;
-  };
+  docker = callPackage ../applications/virtualization/docker { };
 
   docker-gc = callPackage ../applications/virtualization/docker/gc.nix { };
 
@@ -14683,6 +14685,8 @@ in
 
   rubyripper = callPackage ../applications/audio/rubyripper {};
 
+  runc = callPackage ../applications/virtualization/runc {};
+
   rxvt = callPackage ../applications/misc/rxvt { };
 
   # urxvt