# Arch Maintainer: Sébastien "Seblu" Luttringer pkgname=docker pkgver=17.12.0 pkgrel=1 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' 'lxc: lxc backend support') # don't strip binaries! A sha1 is used to check binary consistency. options=('!strip' '!buildflags') # Use exact commit version from Dockerfile for runc and containerd until 1.0.0 # https://github.com/docker/containerd/issues/299#issuecomment-240745119 # see commit in hack/dockerfile/binaries-commits # https://github.com/docker/docker-ce/blob/master/components/engine/hack/dockerfile/binaries-commits _RUNC_COMMIT=b2567b37d7b75eb4cf325b77297b140ea686ce8f _CONTAINERD_COMMIT=89623f28b87a6004d4b785663257362d1658a729 _TINI_COMMIT=949e6facb77383876aeff8a6944dde66b3089574 _LIBNETWORK_COMMIT=7b2b1feb1de4817d522cc372af149ff48d25028e source=("git+https://github.com/docker/docker-ce.git#tag=v$pkgver-ce" "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' local _cfile _commit _pkgbuild _dockerfile _cfile="$srcdir"/docker-ce/components/engine/hack/dockerfile/binaries-commits . "$_cfile" for _commit in RUNC CONTAINERD LIBNETWORK TINI; do _pkgbuild=_${_commit}_COMMIT _dockerfile=${_commit}_COMMIT if [[ ${!_pkgbuild} != ${!_dockerfile} ]]; then error "Invalid $_commit commit" fgrep '_COMMIT=' "$_cfile" return 1 fi done ### 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 LDFLAGS= make _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" }