PKGBUILD 6.12 KB
Newer Older
1 2 3
# Arch Maintainer: Sébastien "Seblu" Luttringer

pkgname=docker
4
pkgver=18.09.1
5
pkgrel=2
6 7 8 9 10 11 12 13
pkgdesc='Pack, ship and run any application as a lightweight container'
arch=('x86_64')
url='https://www.docker.com/'
license=('Apache')
depends=('glibc' 'bridge-utils' 'iproute2' 'device-mapper' 'sqlite' 'systemd'
         'libseccomp' 'libtool')
makedepends=('git' 'go' 'btrfs-progs' 'cmake' 'systemd')
optdepends=('btrfs-progs: btrfs backend support'
Luca Giambonini's avatar
Luca Giambonini committed
14 15
            'lxc: lxc backend support'
            'pigz: parallel gzip compressor support')
16 17 18
provides=('containerd' 'runc')
conflicts=('containerd' 'runc')
replaces=('containerd' 'runc')
19 20
# don't strip binaries! A sha1 is used to check binary consistency.
options=('!strip' '!buildflags')
Luca Giambonini's avatar
Luca Giambonini committed
21 22
# Use exact commit version from Dockerfile, see them in:
# https://github.com/docker/docker-ce/blob/master/components/engine/hack/dockerfile/install/
23 24 25 26 27
_RUNC_COMMIT=96ec2177ae841256168fcf76954f7177af9446eb
_CONTAINERD_COMMIT=9754871865f7fe2f4e74d43e2fc7ccd237edcbce
_TINI_COMMIT=fec3683b971d9c3ef73f284f176672c44b448662
_LIBNETWORK_COMMIT=2cfbf9b1f98162a55829a21cc603c76072a75382
source=("git+https://github.com/docker/docker-ce.git#tag=v$pkgver"
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
        "git+https://github.com/opencontainers/runc.git#commit=$_RUNC_COMMIT"
        "git+https://github.com/containerd/containerd.git#commit=$_CONTAINERD_COMMIT"
        "git+https://github.com/docker/libnetwork.git#commit=$_LIBNETWORK_COMMIT"
        "git+https://github.com/krallin/tini.git#commit=$_TINI_COMMIT"
        "git+https://github.com/spf13/cobra.git"
        "git+https://github.com/cpuguy83/go-md2man.git"
        "$pkgname.sysusers")
md5sums=('SKIP'
         'SKIP'
         'SKIP'
         'SKIP'
         'SKIP'
         'SKIP'
         'SKIP'
         '9a8b2744db23b14ca3cd350fdf73c179')

# create a fake go path directory and pushd into it
# $1 real directory
# $2 gopath directory
_fake_gopath_pushd() {
  mkdir -p "$GOPATH/src/${2%/*}"
  rm -f "$GOPATH/src/$2"
  ln -rsT "$1" "$GOPATH/src/$2"
  pushd  "$GOPATH/src/$2" >/dev/null
}

_fake_gopath_popd() {
  popd >/dev/null
}

build() {
  ### check my mistakes on commit version
  msg2 'Checking commit mismatch'
Luca Giambonini's avatar
Luca Giambonini committed
61 62 63 64 65 66
  (
  local _cfile
  for _cfile in runc containerd tini proxy; do
    . "$srcdir/docker-ce/components/engine/hack/dockerfile/install/$_cfile.installer"
  done
  local _commit _pkgbuild _dockerfile
67 68 69 70
  for _commit in RUNC CONTAINERD LIBNETWORK TINI; do
    _pkgbuild=_${_commit}_COMMIT
    _dockerfile=${_commit}_COMMIT
    if [[ ${!_pkgbuild} != ${!_dockerfile} ]]; then
Luca Giambonini's avatar
Luca Giambonini committed
71
      error "Invalid $_commit commit, should be ${!_dockerfile}"
72 73 74
      return 1
    fi
  done
Luca Giambonini's avatar
Luca Giambonini committed
75
  )
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

  ### globals
  export GOPATH="$srcdir"
  export PATH="$GOPATH/bin:$PATH"

  ### cli
  msg2 'Building cli'
  _fake_gopath_pushd docker-ce/components/cli github.com/docker/cli
  DISABLE_WARN_OUTSIDE_CONTAINER=1 make VERSION=$pkgver-ce dynbinary
  _fake_gopath_popd

  ### daemon
  msg2 'Building daemon'
  _fake_gopath_pushd docker-ce/components/engine github.com/docker/docker
  DOCKER_GITCOMMIT=$(cd "$srcdir"/docker-ce && git rev-parse --short HEAD) \
    DOCKER_BUILDTAGS='seccomp journald' \
    VERSION=$pkgver-ce \
    hack/make.sh dynbinary
  _fake_gopath_popd

  ### go-md2man (used for manpages)
  msg2 'Building go-md2man'
  _fake_gopath_pushd go-md2man github.com/cpuguy83/go-md2man
  go get -v ./...
  _fake_gopath_popd

  ### docker man pages
  msg2 'Building man pages'
  mkdir -p src/github.com/spf13
  ln -rsfT cobra src/github.com/spf13/cobra
  # use docker-ce cli version because they mess up with man dir
  _fake_gopath_pushd docker-ce/components/cli github.com/docker/cli
  make manpages 2>/dev/null
  _fake_gopath_popd

  ### runc
  msg2 'Building runc'
  _fake_gopath_pushd runc github.com/opencontainers/runc
  make BUILDTAGS='seccomp'
  _fake_gopath_popd

  ### containerd
  msg2 'Building containerd'
  _fake_gopath_pushd containerd github.com/containerd/containerd
Luca Giambonini's avatar
Luca Giambonini committed
120
  make
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
  _fake_gopath_popd

  ### docker proxy
  msg2 'Building docker-proxy'
  _fake_gopath_pushd libnetwork github.com/docker/libnetwork
  go build -ldflags='-linkmode=external' github.com/docker/libnetwork/cmd/proxy
  _fake_gopath_popd

  ### docker-init
  msg2 'Building docker-init'
  _fake_gopath_pushd tini github.com/krallin/tini
  cmake .
  # we must use the static binary because it's started in a foreign os
  make tini-static
  _fake_gopath_popd
}

package() {
  ### runc
  install -Dm755 runc/runc "$pkgdir/usr/bin/docker-runc"
  ### containerd
  install -Dm755 containerd/bin/containerd "$pkgdir/usr/bin/docker-containerd"
  install -Dm755 containerd/bin/containerd-shim \
    "$pkgdir/usr/bin/docker-containerd-shim"
  install -Dm755 containerd/bin/ctr "$pkgdir/usr/bin/docker-containerd-ctr"
  ### proxy
  install -Dm755 libnetwork/proxy "$pkgdir/usr/bin/docker-proxy"
  ### init
  install -Dm755 tini/tini-static "$pkgdir/usr/bin/docker-init"
  ### engine
  cd "$srcdir"/docker-ce/components/engine
  # binary
  install -Dm755 {bundles/latest/dynbinary-daemon,"$pkgdir"/usr/bin}/dockerd
  # systemd
  install -Dm644 'contrib/init/systemd/docker.service' \
    "$pkgdir/usr/lib/systemd/system/docker.service"
  install -Dm644 'contrib/init/systemd/docker.socket' \
    "$pkgdir/usr/lib/systemd/system/docker.socket"
  install -Dm644 'contrib/udev/80-docker.rules' \
    "$pkgdir/usr/lib/udev/rules.d/80-docker.rules"
  install -Dm644 "$srcdir/$pkgname.sysusers" \
    "$pkgdir/usr/lib/sysusers.d/$pkgname.conf"
  # vim syntax
  install -Dm644 'contrib/syntax/vim/syntax/dockerfile.vim' \
    "$pkgdir/usr/share/vim/vimfiles/syntax/dockerfile.vim"
  install -Dm644 'contrib/syntax/vim/ftdetect/dockerfile.vim' \
    "$pkgdir/usr/share/vim/vimfiles/ftdetect/dockerfile.vim"
  ### cli
  cd "$srcdir"/docker-ce/components/cli
  # binary
  install -Dm755 build/docker "$pkgdir/usr/bin/docker"
  # completion
  install -Dm644 'contrib/completion/bash/docker' \
    "$pkgdir/usr/share/bash-completion/completions/docker"
  install -Dm644 'contrib/completion/zsh/_docker' \
    "$pkgdir/usr/share/zsh/site-functions/_docker"
  install -Dm644 'contrib/completion/fish/docker.fish' \
    "$pkgdir/usr/share/fish/vendor_completions.d/docker.fish"
  # man
  install -dm755 "$pkgdir/usr/share/man"
  cp -r man/man* "$pkgdir/usr/share/man"
}