Merge pull request #18176 from hypriot/17802-build-first-debian-package-for-arm
add support for building first ARM-based debian package
This commit is contained in:
commit
e23f24bbbd
30 changed files with 69 additions and 38 deletions
|
@ -1,5 +0,0 @@
|
|||
# `dockercore/builder-deb`
|
||||
|
||||
This image's tags contain the dependencies for building Docker `.deb`s for each of the Debian-based platforms Docker targets.
|
||||
|
||||
To add new tags, see [`contrib/builder/deb` in https://github.com/docker/docker](https://github.com/docker/docker/tree/master/contrib/builder/deb), specifically the `generate.sh` script, whose usage is described in a comment at the top of the file.
|
5
contrib/builder/deb/amd64/README.md
Normal file
5
contrib/builder/deb/amd64/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# `dockercore/builder-deb`
|
||||
|
||||
This image's tags contain the dependencies for building Docker `.deb`s for each of the Debian-based platforms Docker targets.
|
||||
|
||||
To add new tags, see [`contrib/builder/deb/amd64` in https://github.com/docker/docker](https://github.com/docker/docker/tree/master/contrib/builder/deb/amd64), specifically the `generate.sh` script, whose usage is described in a comment at the top of the file.
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM debian:jessie
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM debian:stretch
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM debian:wheezy-backports
|
|
@ -33,7 +33,7 @@ for version in "${versions[@]}"; do
|
|||
echo "$version -> FROM $from"
|
||||
cat > "$version/Dockerfile" <<-EOF
|
||||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM $from
|
||||
|
@ -110,7 +110,7 @@ for version in "${versions[@]}"; do
|
|||
|
||||
echo >> "$version/Dockerfile"
|
||||
|
||||
awk '$1 == "ENV" && $2 == "GO_VERSION" { print; exit }' ../../../Dockerfile >> "$version/Dockerfile"
|
||||
awk '$1 == "ENV" && $2 == "GO_VERSION" { print; exit }' ../../../../Dockerfile >> "$version/Dockerfile"
|
||||
echo 'RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local' >> "$version/Dockerfile"
|
||||
echo 'ENV PATH $PATH:/usr/local/go/bin' >> "$version/Dockerfile"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM ubuntu:precise
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM ubuntu:trusty
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM ubuntu:wily
|
10
contrib/builder/deb/armhf/debian-jessie/Dockerfile
Normal file
10
contrib/builder/deb/armhf/debian-jessie/Dockerfile
Normal file
|
@ -0,0 +1,10 @@
|
|||
FROM armhf/debian:jessie
|
||||
|
||||
RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libltdl-dev libsqlite3-dev libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV GO_VERSION 1.4.3
|
||||
RUN curl -fSL "https://github.com/hypriot/golang-armbuilds/releases/download/v${GO_VERSION}/go${GO_VERSION}.linux-armv7.tar.gz" | tar xzC /usr/local
|
||||
ENV PATH $PATH:/usr/local/go/bin
|
||||
|
||||
ENV AUTO_GOPATH 1
|
||||
ENV DOCKER_BUILDTAGS apparmor selinux
|
|
@ -1,5 +0,0 @@
|
|||
# `dockercore/builder-rpm`
|
||||
|
||||
This image's tags contain the dependencies for building Docker `.rpm`s for each of the RPM-based platforms Docker targets.
|
||||
|
||||
To add new tags, see [`contrib/builder/rpm` in https://github.com/docker/docker](https://github.com/docker/docker/tree/master/contrib/builder/rpm), specifically the `generate.sh` script, whose usage is described in a comment at the top of the file.
|
5
contrib/builder/rpm/amd64/README.md
Normal file
5
contrib/builder/rpm/amd64/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# `dockercore/builder-rpm`
|
||||
|
||||
This image's tags contain the dependencies for building Docker `.rpm`s for each of the RPM-based platforms Docker targets.
|
||||
|
||||
To add new tags, see [`contrib/builder/rpm/amd64` in https://github.com/docker/docker](https://github.com/docker/docker/tree/master/contrib/builder/rpm/amd64), specifically the `generate.sh` script, whose usage is described in a comment at the top of the file.
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM centos:7
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM fedora:22
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM fedora:23
|
|
@ -30,7 +30,7 @@ for version in "${versions[@]}"; do
|
|||
echo "$version -> FROM $from"
|
||||
cat > "$version/Dockerfile" <<-EOF
|
||||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM $from
|
||||
|
@ -161,7 +161,7 @@ for version in "${versions[@]}"; do
|
|||
esac
|
||||
|
||||
|
||||
awk '$1 == "ENV" && $2 == "GO_VERSION" { print; exit }' ../../../Dockerfile >> "$version/Dockerfile"
|
||||
awk '$1 == "ENV" && $2 == "GO_VERSION" { print; exit }' ../../../../Dockerfile >> "$version/Dockerfile"
|
||||
echo 'RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local' >> "$version/Dockerfile"
|
||||
echo 'ENV PATH $PATH:/usr/local/go/bin' >> "$version/Dockerfile"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM opensuse:13.2
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/generate.sh"!
|
||||
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/amd64/generate.sh"!
|
||||
#
|
||||
|
||||
FROM oraclelinux:7
|
|
@ -5,7 +5,7 @@ cd "$(dirname "$BASH_SOURCE")/../.."
|
|||
|
||||
targets_from() {
|
||||
git fetch -q https://github.com/docker/docker.git "$1"
|
||||
git ls-tree -r --name-only "$(git rev-parse FETCH_HEAD)" contrib/builder/deb | grep '/Dockerfile$' | sed -r 's!^contrib/builder/deb/|-debootstrap|/Dockerfile$!!g'
|
||||
git ls-tree -r --name-only "$(git rev-parse FETCH_HEAD)" contrib/builder/deb/ | grep '/Dockerfile$' | sed -r 's!^contrib/builder/deb/|^contrib/builder/deb/amd64/|-debootstrap|/Dockerfile$!!g' | grep -v /
|
||||
}
|
||||
|
||||
release_branch=$(git ls-remote --heads https://github.com/docker/docker.git | awk -F 'refs/heads/' '$2 ~ /^release/ { print $2 }' | sort -V | tail -1)
|
||||
|
|
|
@ -17,7 +17,7 @@ Packager: Docker <support@docker.com>
|
|||
%endif
|
||||
|
||||
# required packages for build
|
||||
# most are already in the container (see contrib/builder/rpm/generate.sh)
|
||||
# most are already in the container (see contrib/builder/rpm/ARCH/generate.sh)
|
||||
# only require systemd on those systems
|
||||
%if 0%{?is_systemd}
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
|
|
|
@ -9,6 +9,7 @@ export DOCKER_ENGINE_OSARCH="$(docker version | awk '
|
|||
')"
|
||||
export DOCKER_ENGINE_GOOS="${DOCKER_ENGINE_OSARCH%/*}"
|
||||
export DOCKER_ENGINE_GOARCH="${DOCKER_ENGINE_OSARCH##*/}"
|
||||
DOCKER_ENGINE_GOARCH=${DOCKER_ENGINE_GOARCH:=amd64}
|
||||
|
||||
# and the client, just in case
|
||||
export DOCKER_CLIENT_OSARCH="$(docker version | awk '
|
||||
|
@ -16,3 +17,18 @@ export DOCKER_CLIENT_OSARCH="$(docker version | awk '
|
|||
$1 == "Server:" { client = 0; next }
|
||||
client && $1 == "OS/Arch:" { print $2 }
|
||||
')"
|
||||
|
||||
# Retrieve the architecture used in contrib/builder/(deb|rpm)/$PACKAGE_ARCH/
|
||||
PACKAGE_ARCH="amd64"
|
||||
case "$DOCKER_ENGINE_OSARCH" in
|
||||
linux/arm)
|
||||
PACKAGE_ARCH='armhf'
|
||||
;;
|
||||
linux/ppc64le)
|
||||
PACKAGE_ARCH='ppc64le'
|
||||
;;
|
||||
linux/s390x)
|
||||
PACKAGE_ARCH='s390x'
|
||||
;;
|
||||
esac
|
||||
export PACKAGE_ARCH
|
||||
|
|
|
@ -5,6 +5,7 @@ set -e
|
|||
(
|
||||
export TZ=UTC # make sure our "date" variables are UTC-based
|
||||
bundle .integration-daemon-start
|
||||
bundle .detect-daemon-osarch
|
||||
|
||||
# TODO consider using frozen images for the dockercore/builder-deb tags
|
||||
|
||||
|
@ -37,7 +38,7 @@ set -e
|
|||
./man/md2man-all.sh -q || true
|
||||
# TODO decide if it's worth getting go-md2man in _each_ builder environment to avoid this
|
||||
|
||||
builderDir="contrib/builder/deb"
|
||||
builderDir="contrib/builder/deb/${PACKAGE_ARCH}"
|
||||
pkgs=( $(find "${builderDir}/"*/ -type d) )
|
||||
if [ ! -z "$DOCKER_BUILD_PKGS" ]; then
|
||||
pkgs=( $(echo ${DOCKER_BUILD_PKGS[@]/#/$builderDir\/}) )
|
||||
|
|
|
@ -6,6 +6,7 @@ set -e
|
|||
export TZ=UTC # make sure our "date" variables are UTC-based
|
||||
|
||||
source "$(dirname "$BASH_SOURCE")/.integration-daemon-start"
|
||||
source "$(dirname "$BASH_SOURCE")/.detect-daemon-osarch"
|
||||
|
||||
# TODO consider using frozen images for the dockercore/builder-rpm tags
|
||||
|
||||
|
@ -59,15 +60,15 @@ set -e
|
|||
while read -r line || [[ -n "$line" ]]; do
|
||||
if [ -z "$line" ]; then continue; fi
|
||||
if [[ "$line" =~ $VERSION_REGEX ]]; then
|
||||
echo >> contrib/builder/rpm/changelog
|
||||
echo "* `date -d ${BASH_REMATCH[2]} '+%a %b %d %Y'` ${rpmPackager} - ${BASH_REMATCH[1]}" >> contrib/builder/rpm/changelog
|
||||
echo >> contrib/builder/rpm/${PACKAGE_ARCH}/changelog
|
||||
echo "* `date -d ${BASH_REMATCH[2]} '+%a %b %d %Y'` ${rpmPackager} - ${BASH_REMATCH[1]}" >> contrib/builder/rpm/${PACKAGE_ARCH}/changelog
|
||||
fi
|
||||
if [[ "$line" =~ $ENTRY_REGEX ]]; then
|
||||
echo "- ${BASH_REMATCH[1]//\`}" >> contrib/builder/rpm/changelog
|
||||
echo "- ${BASH_REMATCH[1]//\`}" >> contrib/builder/rpm/${PACKAGE_ARCH}/changelog
|
||||
fi
|
||||
done < CHANGELOG.md
|
||||
|
||||
builderDir="contrib/builder/rpm"
|
||||
builderDir="contrib/builder/rpm/${PACKAGE_ARCH}"
|
||||
pkgs=( $(find "${builderDir}/"*/ -type d) )
|
||||
if [ ! -z "$DOCKER_BUILD_PKGS" ]; then
|
||||
pkgs=( $(echo ${DOCKER_BUILD_PKGS[@]/#/$builderDir\/}) )
|
||||
|
@ -97,7 +98,7 @@ set -e
|
|||
RUN ln -sfv /usr/src/${rpmName}/hack/make/.build-rpm SPECS
|
||||
WORKDIR /root/rpmbuild/SPECS
|
||||
RUN tar -cz -C /usr/src -f /root/rpmbuild/SOURCES/${rpmName}.tar.gz ${rpmName}
|
||||
RUN { cat /usr/src/${rpmName}/contrib/builder/rpm/changelog; } >> ${rpmName}.spec && tail >&2 ${rpmName}.spec
|
||||
RUN { cat /usr/src/${rpmName}/contrib/builder/rpm/${PACKAGE_ARCH}/changelog; } >> ${rpmName}.spec && tail >&2 ${rpmName}.spec
|
||||
RUN rpmbuild -ba \
|
||||
--define '_release $rpmRelease' \
|
||||
--define '_version $rpmVersion' \
|
||||
|
|
|
@ -93,7 +93,7 @@ if [ ! -f "$APTDIR/conf/docker-engine-release.conf" ]; then
|
|||
fi
|
||||
|
||||
# release the debs
|
||||
for dir in contrib/builder/deb/*/; do
|
||||
for dir in contrib/builder/deb/${PACKAGE_ARCH}/*/; do
|
||||
version="$(basename "$dir")"
|
||||
codename="${version//debootstrap-}"
|
||||
|
||||
|
@ -122,7 +122,7 @@ apt-ftparchive clean "$APTDIR/conf/apt-ftparchive.conf"
|
|||
# run the apt-ftparchive commands so we can have pinning
|
||||
apt-ftparchive generate "$APTDIR/conf/apt-ftparchive.conf"
|
||||
|
||||
for dir in contrib/builder/deb/*/; do
|
||||
for dir in contrib/builder/deb/${PACKAGE_ARCH}/*/; do
|
||||
version="$(basename "$dir")"
|
||||
codename="${version//debootstrap-}"
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ for distro in "${distros[@]}"; do
|
|||
# Setup the yum repo
|
||||
REPO=$YUMDIR/$release/$distro
|
||||
|
||||
for dir in contrib/builder/rpm/$distro-*/; do
|
||||
for dir in contrib/builder/rpm/${PACKAGE_ARCH}/$distro-*/; do
|
||||
version="$(basename "$dir")"
|
||||
suite="${version##*-}"
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ fi
|
|||
|
||||
test_deb_install(){
|
||||
# test for each Dockerfile in contrib/builder
|
||||
for dir in contrib/builder/deb/*/; do
|
||||
for dir in contrib/builder/deb/${PACKAGE_ARCH}/*/; do
|
||||
local from="$(awk 'toupper($1) == "FROM" { print $2; exit }' "$dir/Dockerfile")"
|
||||
local dir=$(basename "$dir")
|
||||
|
||||
|
|
|
@ -12,14 +12,17 @@ From the root of the Docker/Docker repo one can use make to execute the followin
|
|||
- make validate
|
||||
- make binary
|
||||
- make build
|
||||
- make deb
|
||||
- make bundles
|
||||
- make default
|
||||
- make shell
|
||||
- make test-unit
|
||||
- make test-integration-cli
|
||||
- make
|
||||
|
||||
The Makefile does include logic to determine on which OS and architecture the Docker Development Image is built.
|
||||
Based on OS and architecture it chooses the correct Dockerfile.
|
||||
For the ARM 32bit architecture it uses `Dockerfile.arm`.
|
||||
For the ARM 32bit architecture it uses `Dockerfile.armhf`.
|
||||
|
||||
So for example in order to build a Docker binary one has to
|
||||
1. clone the Docker/Docker repository on an ARM device `git clone git@github.com:docker/docker.git`
|
||||
|
|
Loading…
Reference in a new issue