c4fde49a5c
Let's use latest lvm2 sources to compile the libdevmapper library. Initial reason for compiling devmapper lib from sources was a need to have the static version of the library at hand, in order to build the static dockerd, but note that the same headers/solib are used for dynamic build (dynbinary) as well. The reason for this patch is to enable the deferral removal feature. The supplied devmapper library (and headers) are too old, lacking the needed functions, so the daemon is built with 'libdm_no_deferred_remove' build tag (see the check in hack/make.sh). Because of this, even if the kernel dm driver is perfectly able to support the feature, it can not be used. For more details and background story, see [1]. Surely, one can't just change the version number. While at it: - improve the comments; - remove obsoleted URLs; - remove s390 and ppc configure updates that are no longer needed; - use pkg-config instead of hardcoding the flags (newer lib added some more dependencies); [1] https://github.com/moby/moby/issues/34298 Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
182 lines
6.8 KiB
Text
182 lines
6.8 KiB
Text
# This file describes the standard way to build Docker on ARMv7, using docker
|
|
#
|
|
# Usage:
|
|
#
|
|
# # Assemble the full dev environment. This is slow the first time.
|
|
# docker build -t docker -f Dockerfile.armhf .
|
|
#
|
|
# # Mount your source in an interactive container for quick testing:
|
|
# docker run -v `pwd`:/go/src/github.com/docker/docker --privileged -i -t docker bash
|
|
#
|
|
# # Run the test suite:
|
|
# docker run --privileged docker hack/make.sh test-unit test-integration-cli test-docker-py
|
|
#
|
|
# Note: AppArmor used to mess with privileged mode, but this is no longer
|
|
# the case. Therefore, you don't have to disable it anymore.
|
|
#
|
|
|
|
FROM armhf/debian:jessie
|
|
|
|
# allow replacing httpredir or deb mirror
|
|
ARG APT_MIRROR=deb.debian.org
|
|
RUN sed -ri "s/(httpredir|deb).debian.org/$APT_MIRROR/g" /etc/apt/sources.list
|
|
|
|
# Packaged dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
apparmor \
|
|
aufs-tools \
|
|
automake \
|
|
bash-completion \
|
|
btrfs-tools \
|
|
build-essential \
|
|
createrepo \
|
|
curl \
|
|
cmake \
|
|
dpkg-sig \
|
|
git \
|
|
iptables \
|
|
jq \
|
|
net-tools \
|
|
libapparmor-dev \
|
|
libcap-dev \
|
|
libsystemd-journal-dev \
|
|
libtool \
|
|
mercurial \
|
|
pkg-config \
|
|
python-dev \
|
|
python-mock \
|
|
python-pip \
|
|
python-websocket \
|
|
xfsprogs \
|
|
tar \
|
|
vim-common \
|
|
--no-install-recommends \
|
|
&& pip install awscli==1.10.15
|
|
|
|
# Get lvm2 sources to build statically linked devmapper library
|
|
ENV LVM2_VERSION 2.02.173
|
|
RUN mkdir -p /usr/local/lvm2 \
|
|
&& curl -fsSL "https://mirrors.kernel.org/sourceware/lvm2/LVM2.${LVM2_VERSION}.tgz" \
|
|
| tar -xzC /usr/local/lvm2 --strip-components=1
|
|
|
|
# Compile and install (only the needed library)
|
|
RUN cd /usr/local/lvm2 \
|
|
&& ./configure \
|
|
--build="$(gcc -print-multiarch)" \
|
|
--enable-static_link \
|
|
--enable-pkgconfig \
|
|
&& make -C include \
|
|
&& make -C libdm install_device-mapper
|
|
|
|
|
|
# Install Go
|
|
# IMPORTANT: When updating this please note that stdlib archive/tar pkg is vendored
|
|
ENV GO_VERSION 1.8.3
|
|
RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-armv6l.tar.gz" \
|
|
| tar -xzC /usr/local
|
|
ENV PATH /go/bin:/usr/local/go/bin:$PATH
|
|
ENV GOPATH /go
|
|
|
|
# We're building for armhf, which is ARMv7, so let's be explicit about that
|
|
ENV GOARCH arm
|
|
ENV GOARM 7
|
|
|
|
# Dependency for golint
|
|
ENV GO_TOOLS_COMMIT 823804e1ae08dbb14eb807afc7db9993bc9e3cc3
|
|
RUN git clone https://github.com/golang/tools.git /go/src/golang.org/x/tools \
|
|
&& (cd /go/src/golang.org/x/tools && git checkout -q $GO_TOOLS_COMMIT)
|
|
|
|
# Grab Go's lint tool
|
|
ENV GO_LINT_COMMIT 32a87160691b3c96046c0c678fe57c5bef761456
|
|
RUN git clone https://github.com/golang/lint.git /go/src/github.com/golang/lint \
|
|
&& (cd /go/src/github.com/golang/lint && git checkout -q $GO_LINT_COMMIT) \
|
|
&& go install -v github.com/golang/lint/golint
|
|
|
|
# Install seccomp: the version shipped upstream is too old
|
|
ENV SECCOMP_VERSION 2.3.2
|
|
RUN set -x \
|
|
&& export SECCOMP_PATH="$(mktemp -d)" \
|
|
&& curl -fsSL "https://github.com/seccomp/libseccomp/releases/download/v${SECCOMP_VERSION}/libseccomp-${SECCOMP_VERSION}.tar.gz" \
|
|
| tar -xzC "$SECCOMP_PATH" --strip-components=1 \
|
|
&& ( \
|
|
cd "$SECCOMP_PATH" \
|
|
&& ./configure --prefix=/usr/local \
|
|
&& make \
|
|
&& make install \
|
|
&& ldconfig \
|
|
) \
|
|
&& rm -rf "$SECCOMP_PATH"
|
|
|
|
# Install two versions of the registry. The first is an older version that
|
|
# only supports schema1 manifests. The second is a newer version that supports
|
|
# both. This allows integration-cli tests to cover push/pull with both schema1
|
|
# and schema2 manifests.
|
|
ENV REGISTRY_COMMIT_SCHEMA1 ec87e9b6971d831f0eff752ddb54fb64693e51cd
|
|
ENV REGISTRY_COMMIT cb08de17d74bef86ce6c5abe8b240e282f5750be
|
|
RUN set -x \
|
|
&& export GOPATH="$(mktemp -d)" \
|
|
&& git clone https://github.com/docker/distribution.git "$GOPATH/src/github.com/docker/distribution" \
|
|
&& (cd "$GOPATH/src/github.com/docker/distribution" && git checkout -q "$REGISTRY_COMMIT") \
|
|
&& GOPATH="$GOPATH/src/github.com/docker/distribution/Godeps/_workspace:$GOPATH" \
|
|
go build -o /usr/local/bin/registry-v2 github.com/docker/distribution/cmd/registry \
|
|
&& (cd "$GOPATH/src/github.com/docker/distribution" && git checkout -q "$REGISTRY_COMMIT_SCHEMA1") \
|
|
&& GOPATH="$GOPATH/src/github.com/docker/distribution/Godeps/_workspace:$GOPATH" \
|
|
go build -o /usr/local/bin/registry-v2-schema1 github.com/docker/distribution/cmd/registry \
|
|
&& rm -rf "$GOPATH"
|
|
|
|
# Install notary and notary-server
|
|
ENV NOTARY_VERSION v0.5.0
|
|
RUN set -x \
|
|
&& export GOPATH="$(mktemp -d)" \
|
|
&& git clone https://github.com/docker/notary.git "$GOPATH/src/github.com/docker/notary" \
|
|
&& (cd "$GOPATH/src/github.com/docker/notary" && git checkout -q "$NOTARY_VERSION") \
|
|
&& GOPATH="$GOPATH/src/github.com/docker/notary/vendor:$GOPATH" \
|
|
go build -o /usr/local/bin/notary-server github.com/docker/notary/cmd/notary-server \
|
|
&& GOPATH="$GOPATH/src/github.com/docker/notary/vendor:$GOPATH" \
|
|
go build -o /usr/local/bin/notary github.com/docker/notary/cmd/notary \
|
|
&& rm -rf "$GOPATH"
|
|
|
|
# Get the "docker-py" source so we can run their integration tests
|
|
ENV DOCKER_PY_COMMIT a962578e515185cf06506050b2200c0b81aa84ef
|
|
RUN git clone https://github.com/docker/docker-py.git /docker-py \
|
|
&& cd /docker-py \
|
|
&& git checkout -q $DOCKER_PY_COMMIT \
|
|
&& pip install -r test-requirements.txt
|
|
|
|
# Set user.email so crosbymichael's in-container merge commits go smoothly
|
|
RUN git config --global user.email 'docker-dummy@example.com'
|
|
|
|
# Add an unprivileged user to be used for tests which need it
|
|
RUN groupadd -r docker
|
|
RUN useradd --create-home --gid docker unprivilegeduser
|
|
|
|
VOLUME /var/lib/docker
|
|
WORKDIR /go/src/github.com/docker/docker
|
|
ENV DOCKER_BUILDTAGS apparmor seccomp selinux
|
|
|
|
# Let us use a .bashrc file
|
|
RUN ln -sfv $PWD/.bashrc ~/.bashrc
|
|
|
|
# Register Docker's bash completion.
|
|
RUN ln -sv $PWD/contrib/completion/bash/docker /etc/bash_completion.d/docker
|
|
|
|
# Get useful and necessary Hub images so we can "docker load" locally instead of pulling
|
|
COPY contrib/download-frozen-image-v2.sh /go/src/github.com/docker/docker/contrib/
|
|
RUN ./contrib/download-frozen-image-v2.sh /docker-frozen-images \
|
|
armhf/buildpack-deps:jessie@sha256:eb2dad77ef53e88d94c3c83862d315c806ea1ca49b6e74f4db362381365ce489 \
|
|
armhf/busybox:latest@sha256:016a1e149d2acc2a3789a160dfa60ce870794eea27ad5e96f7a101970e5e1689 \
|
|
armhf/debian:jessie@sha256:ac59fa18b28d0ef751eabb5ba4c4b5a9063f99398bae2f70495aa8ed6139b577 \
|
|
armhf/hello-world:latest@sha256:9701edc932223a66e49dd6c894a11db8c2cf4eccd1414f1ec105a623bf16b426
|
|
# See also ensureFrozenImagesLinux() in "integration-cli/fixtures_linux_daemon_test.go" (which needs to be updated when adding images to this list)
|
|
|
|
# Install tomlv, vndr, runc, containerd, tini, docker-proxy
|
|
# Please edit hack/dockerfile/install-binaries.sh to update them.
|
|
COPY hack/dockerfile/binaries-commits /tmp/binaries-commits
|
|
COPY hack/dockerfile/install-binaries.sh /tmp/install-binaries.sh
|
|
RUN /tmp/install-binaries.sh tomlv vndr runc containerd tini proxy dockercli
|
|
ENV PATH=/usr/local/cli:$PATH
|
|
|
|
ENTRYPOINT ["hack/dind"]
|
|
|
|
# Upload docker source
|
|
COPY . /go/src/github.com/docker/docker
|