tools/alpine: multi-arch support for the base alpine image

Alpine is the base docker image for the LinuxKit, but currently
it only supports amd64 architecture. This patch is try to unify
the alpine tool docker image build process order to suport other
architectures, such as AArch64, by using '--build-arg' to override
the alpine base image specified by 'FROM' in the Dockerfile.

Also this patch splits the standalone packages into 2 parts:
one is common for all archs, another is arch-specific.

Signed-off-by: Dennis Chen <dennis.chen@arm.com>
This commit is contained in:
Dennis Chen 2017-07-24 10:09:23 +00:00
parent e59d4ef3d7
commit cc14a74276
7 changed files with 271 additions and 21 deletions

View File

@ -1,14 +1,16 @@
FROM alpine:3.6 AS mirror ARG BASE=alpine:3.6
FROM $BASE AS mirror
# update base image # update base image
RUN apk update && apk upgrade -a RUN apk update && apk upgrade -a
# Copy Dockerfile so we can include it in the hash # Copy Dockerfile so we can include it in the hash
COPY Dockerfile /Dockerfile COPY Dockerfile /Dockerfile
COPY packages /tmp/ COPY packages* /tmp/
# mirror packages # mirror packages
RUN mkdir -p /mirror/$(uname -m) && \ RUN cat /tmp/packages.$(uname -m) >> /tmp/packages && \
mkdir -p /mirror/$(uname -m) && \
apk fetch --recursive -o /mirror/$(uname -m) $(apk info; cat /tmp/packages) apk fetch --recursive -o /mirror/$(uname -m) $(apk info; cat /tmp/packages)
# add the tools for WireGuard, since the kernel module is now included, but from edge/testing # add the tools for WireGuard, since the kernel module is now included, but from edge/testing
@ -28,7 +30,10 @@ RUN cp /mirror/$(uname -m)/APKINDEX.unsigned.tar.gz /mirror/$(uname -m)/APKINDEX
RUN abuild-sign /mirror/$(uname -m)/APKINDEX.tar.gz RUN abuild-sign /mirror/$(uname -m)/APKINDEX.tar.gz
# fetch OVMF for qemu EFI boot (this is not added as a package) # fetch OVMF for qemu EFI boot (this is not added as a package)
RUN apk add -X http://dl-cdn.alpinelinux.org/alpine/edge/community ovmf RUN mkdir -p /usr/share/ovmf && \
if [ $(uname -m) = x86_64 ]; then \
apk add -X http://dl-cdn.alpinelinux.org/alpine/edge/community ovmf; \
fi
# set this as our repo but keep a copy of the upstream for downstream use # set this as our repo but keep a copy of the upstream for downstream use
RUN mv /etc/apk/repositories /etc/apk/repositories.upstream && echo "/mirror" > /etc/apk/repositories && apk update RUN mv /etc/apk/repositories /etc/apk/repositories.upstream && echo "/mirror" > /etc/apk/repositories && apk update
@ -41,14 +46,14 @@ RUN go get -u github.com/golang/lint/golint
RUN go get -u github.com/gordonklaus/ineffassign RUN go get -u github.com/gordonklaus/ineffassign
RUN go get -u github.com/LK4D4/vndr RUN go get -u github.com/LK4D4/vndr
FROM alpine:3.6 FROM $BASE
COPY --from=mirror /etc/apk/repositories /etc/apk/repositories COPY --from=mirror /etc/apk/repositories /etc/apk/repositories
COPY --from=mirror /etc/apk/repositories.upstream /etc/apk/repositories.upstream COPY --from=mirror /etc/apk/repositories.upstream /etc/apk/repositories.upstream
COPY --from=mirror /etc/apk/keys /etc/apk/keys/ COPY --from=mirror /etc/apk/keys /etc/apk/keys/
COPY --from=mirror /mirror /mirror/ COPY --from=mirror /mirror /mirror/
COPY --from=mirror /go/bin /go/bin/ COPY --from=mirror /go/bin /go/bin/
COPY --from=mirror /usr/share/ovmf/bios.bin /usr/share/ovmf/bios.bin COPY --from=mirror /usr/share/ovmf/ /usr/share/ovmf/
COPY --from=mirror /Dockerfile /Dockerfile COPY --from=mirror /Dockerfile /Dockerfile
RUN apk update && apk upgrade -a RUN apk update && apk upgrade -a

View File

@ -2,24 +2,37 @@
ORG?=linuxkit ORG?=linuxkit
IMAGE=alpine IMAGE=alpine
DOCKER_CONTENT_VAR=1
PKG_DEPS=packages
ifeq ($(shell uname -m), x86_64)
BASE=alpine:3.6 BASE=alpine:3.6
PKG_DEPS += packages.x86_64
endif
ifeq ($(shell uname -m), aarch64)
BASE=arm64v8/alpine:3.6
PKG_DEPS += packages.aarch64
DOCKER_CONTENT_VAR=0
endif
default: push default: push
show-tag: show-tag:
@sed -n -e '1s/# \(.*\/.*:[0-9a-f]\{40\}\)/\1/p;q' versions @sed -n -e '1s/# \(.*\/.*:[0-9a-f]\{40\}\)/\1/p;q' versions.$(shell uname -m)
hash: Dockerfile Makefile packages hash: Dockerfile Makefile $(PKG_DEPS)
DOCKER_CONTENT_TRUST=1 docker pull $(BASE) DOCKER_CONTENT_TRUST=$(DOCKER_CONTENT_VAR) docker pull $(BASE)
docker build --no-cache -t $(IMAGE):build . docker build --no-cache --build-arg BASE=$(BASE) -t $(IMAGE):build .
docker run --rm $(IMAGE):build sh -c 'echo Dockerfile /lib/apk/db/installed $$(find /mirror -name '*.apk' -type f) $$(find /go/bin -type f) | xargs cat | sha1sum' | sed 's/ .*//' > $@ docker run --rm $(IMAGE):build sh -c 'echo Dockerfile /lib/apk/db/installed $$(find /mirror -name '*.apk' -type f) $$(find /go/bin -type f) | xargs cat | sha1sum' | sed 's/ .*//' > $@
push: hash push: hash
DOCKER_CONTENT_TRUST=1 docker pull $(ORG)/$(IMAGE):$(shell cat hash) || \ DOCKER_CONTENT_TRUST=$(DOCKER_CONTENT_VAR) docker pull $(ORG)/$(IMAGE):$(shell cat hash) || \
(docker tag $(IMAGE):build $(ORG)/$(IMAGE):$(shell cat hash) && \ (docker tag $(IMAGE):build $(ORG)/$(IMAGE):$(shell cat hash) && \
DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE):$(shell cat hash)) DOCKER_CONTENT_TRUST=$(DOCKER_CONTENT_VAR) docker push $(ORG)/$(IMAGE):$(shell cat hash))
echo "# $(ORG)/$(IMAGE):$(shell cat hash)" > versions echo "# $(ORG)/$(IMAGE):$(shell cat hash)" > versions.$(shell uname -m)
docker run --rm $(IMAGE):build find /mirror -name '*.apk' -exec basename '{}' .apk \; | sort | (echo '# automatically generated list of installed packages'; cat -) >> versions docker run --rm $(IMAGE):build find /mirror -name '*.apk' -exec basename '{}' .apk \; | sort | (echo '# automatically generated list of installed packages'; cat -) >> versions.$(shell uname -m)
docker rmi $(IMAGE):build docker rmi $(IMAGE):build
rm -f hash rm -f hash

View File

@ -61,7 +61,6 @@ openntpd
openrc openrc
openssh-server openssh-server
openssl-dev openssl-dev
open-vm-tools
patch patch
python3 python3
qemu-aarch64 qemu-aarch64
@ -77,7 +76,6 @@ slang-dev
squashfs-tools squashfs-tools
strace strace
swig swig
syslinux
tar tar
tcpdump tcpdump
tini tini

View File

@ -0,0 +1 @@
qemu-system-aarch64

View File

@ -0,0 +1,2 @@
open-vm-tools
syslinux

View File

@ -0,0 +1,231 @@
# linuxkit/alpine:07d75275bc91757f2a03b3096ddfe6d442f66ab1
# automatically generated list of installed packages
abuild-3.0.0_rc2-r8
alpine-baselayout-3.0.4-r0
alpine-keys-2.1-r1
alsa-lib-1.1.3-r0
apk-tools-2.7.2-r0
argp-standalone-1.3-r2
attr-2.4.47-r6
autoconf-2.69-r0
automake-1.15-r0
bash-4.3.48-r1
bc-1.06.95-r2
binutils-2.28-r2
binutils-dev-2.28-r2
binutils-libs-2.28-r2
bison-3.0.4-r0
bsd-compat-headers-0.7.1-r0
btrfs-progs-4.10.2-r0
btrfs-progs-dev-4.10.2-r0
btrfs-progs-libs-4.10.2-r0
build-base-0.5-r0
busybox-1.26.2-r5
busybox-initscripts-3.1-r1
bzip2-1.0.6-r5
ca-certificates-20161130-r2
cdrkit-1.1.11-r2
celt051-0.5.1.3-r0
cmake-3.8.1-r0
cryptsetup-1.7.5-r0
cryptsetup-libs-1.7.5-r0
curl-7.54.0-r0
db-5.3.28-r0
device-mapper-libs-2.02.168-r3
dhcpcd-6.11.5-r1
diffutils-3.5-r0
dosfstools-4.1-r1
e2fsprogs-1.43.4-r0
e2fsprogs-extra-1.43.4-r0
e2fsprogs-libs-1.43.4-r0
elfutils-dev-0.168-r1
elfutils-libelf-0.168-r1
expat-2.2.0-r1
expect-5.45-r3
fakeroot-1.21-r1
file-5.30-r0
findmnt-2.28.2-r2
flex-2.6.4-r1
fortify-headers-0.8-r0
g++-6.3.0-r4
gc-7.6.0-r1
gcc-6.3.0-r4
gdbm-1.12-r0
gettext-0.19.8.1-r1
gettext-asprintf-0.19.8.1-r1
gettext-dev-0.19.8.1-r1
gettext-libs-0.19.8.1-r1
git-2.13.0-r0
glib-2.52.1-r0
gmp-6.1.2-r0
gmp-dev-6.1.2-r0
gnupg-2.1.20-r0
gnutls-3.5.13-r0
go-1.8.3-r0
guile-2.0.13-r0
guile-libs-2.0.13-r0
gummiboot-48.1-r0
hvtools-4.4.15-r0
installkernel-3.5-r0
iperf3-3.1.7-r0
iproute2-4.10.0-r1
iptables-1.6.1-r0
isl-0.17.1-r0
jq-1.5-r3
jsoncpp-1.8.0-r0
keyutils-libs-1.5.9-r1
kmod-23-r1
krb5-conf-1.0-r1
krb5-libs-1.14.3-r2
libacl-2.2.52-r3
libaio-0.3.110-r0
libarchive-3.3.1-r1
libarchive-tools-3.3.1-r1
libassuan-2.4.3-r0
libatomic-6.3.0-r4
libattr-2.4.47-r6
libblkid-2.28.2-r2
libburn-1.4.6-r0
libbz2-1.0.6-r5
libcap-2.25-r1
libcap-ng-0.7.8-r0
libcap-ng-dev-0.7.8-r0
libc-dev-0.7.1-r0
libcom_err-1.43.4-r0
libcrypto1.0-1.0.2k-r0
libcurl-7.54.0-r0
libc-utils-0.7.1-r0
libdrm-2.4.80-r0
libedit-20170329.3.1-r2
libelf-0.8.13-r2
libelf-dev-0.8.13-r2
libepoxy-1.4.1-r0
libexecinfo-1.1-r0
libexecinfo-dev-1.1-r0
libfdisk-2.28.2-r2
libffi-3.2.1-r3
libgcc-6.3.0-r4
libgcrypt-1.7.8-r0
libgmpxx-6.1.2-r0
libgomp-6.3.0-r4
libgpg-error-1.27-r0
libintl-0.19.8.1-r1
libisoburn-1.4.6-r0
libisofs-1.4.6-r0
libjpeg-turbo-1.5.1-r0
libksba-1.3.4-r0
libldap-2.4.44-r5
libltdl-2.4.6-r1
libmagic-5.30-r0
libmnl-1.0.4-r0
libmount-2.28.2-r2
libnfs-1.11.0-r0
libnftnl-libs-1.0.7-r0
libogg-1.3.2-r1
libpcap-1.8.1-r0
libpng-1.6.29-r1
libressl-2.5.4-r0
libressl2.5-libcrypto-2.5.4-r0
libressl2.5-libssl-2.5.4-r0
libressl2.5-libtls-2.5.4-r0
libressl-dev-2.5.4-r0
libsasl-2.1.26-r10
libseccomp-2.3.2-r0
libseccomp-dev-2.3.2-r0
libsmartcols-2.28.2-r2
libssh2-1.8.0-r1
libssl1.0-1.0.2k-r0
libstdc++-6.3.0-r4
libtasn1-4.10-r1
libtirpc-1.0.1-r1
libtool-2.4.6-r1
libunistring-0.9.7-r0
libunwind-1.2-r2
libunwind-dev-1.2-r2
libusb-1.0.21-r0
libuuid-2.28.2-r2
libuv-1.11.0-r1
libverto-0.2.5-r2
libxml2-2.9.4-r4
linux-headers-4.4.6-r2
lua5.2-libs-5.2.4-r2
lz4-libs-1.7.5-r0
lzip-1.19-r0
lzo-2.10-r0
m4-1.4.18-r0
make-4.2.1-r0
mesa-gbm-17.0.3-r1
mpc1-1.0.3-r0
mpfr3-3.1.5-r0
mtools-4.0.18-r1
musl-1.1.16-r13
musl-dev-1.1.16-r13
musl-utils-1.1.16-r13
ncurses-dev-6.0-r7
ncurses-libs-6.0-r7
ncurses-terminfo-6.0-r7
ncurses-terminfo-base-6.0-r7
nettle-3.3-r0
npth-1.2-r0
oniguruma-6.2.0-r0
openntpd-6.0_p1-r3
openrc-0.24.1-r2
openssh-keygen-7.5_p1-r1
openssh-server-7.5_p1-r1
openssl-dev-1.0.2k-r0
opus-1.1.4-r0
p11-kit-0.23.2-r1
patch-2.7.5-r1
pax-utils-1.2.2-r0
pcre-8.40-r2
perl-5.24.1-r2
pinentry-1.0.0-r0
pixman-0.34.0-r0
pkgconf-1.3.7-r0
popt-1.16-r6
python3-3.6.1-r2
qemu-2.8.1-r1
qemu-aarch64-2.8.1-r1
qemu-arm-2.8.1-r1
qemu-guest-agent-2.8.1-r1
qemu-img-2.8.1-r1
qemu-ppc64le-2.8.1-r1
qemu-system-aarch64-2.8.1-r1
qemu-system-arm-2.8.1-r1
qemu-system-x86_64-2.8.1-r1
readline-6.3.008-r5
scanelf-1.2.2-r0
sed-4.4-r0
sfdisk-2.28.2-r2
slang-2.3.1-r0
slang-dev-2.3.1-r0
snappy-1.1.4-r1
spice-server-0.13.3-r1
sqlite-libs-3.18.0-r0
squashfs-tools-4.3-r3
strace-4.16-r1
sudo-1.8.19_p2-r0
swig-3.0.10-r0
tar-1.29-r1
tcl-8.6.6-r0
tcpdump-4.9.0-r1
tini-0.14.0-r0
tzdata-2017a-r0
usbredir-0.7-r2
util-linux-2.28.2-r2
util-linux-dev-2.28.2-r2
vde2-libs-2.3.2-r7
vim-8.0.0595-r0
wayland-1.13.0-r0
wireguard-tools-0.0.20170629-r0
xfsprogs-4.5.0-r0
xfsprogs-extra-4.5.0-r0
xfsprogs-libs-4.5.0-r0
xorriso-1.4.6-r0
xz-5.2.3-r0
xz-dev-5.2.3-r0
xz-libs-5.2.3-r0
zfs-0.6.5.9-r1
zfs-libs-0.6.5.9-r1
zlib-1.2.11-r0
zlib-dev-1.2.11-r0

View File

@ -1,4 +1,4 @@
# linuxkit/alpine:43c139f87122e94af5fac9a9d1d96f0292ca1c0b # linuxkit/alpine:c05b16339df6d4638bc048aa12148b5803635b66
# automatically generated list of installed packages # automatically generated list of installed packages
abuild-3.0.0_rc2-r8 abuild-3.0.0_rc2-r8
alpine-baselayout-3.0.4-r0 alpine-baselayout-3.0.4-r0
@ -91,14 +91,14 @@ libattr-2.4.47-r6
libblkid-2.28.2-r2 libblkid-2.28.2-r2
libburn-1.4.6-r0 libburn-1.4.6-r0
libbz2-1.0.6-r5 libbz2-1.0.6-r5
libc-dev-0.7.1-r0
libc-utils-0.7.1-r0
libcap-2.25-r1 libcap-2.25-r1
libcap-ng-0.7.8-r0 libcap-ng-0.7.8-r0
libcap-ng-dev-0.7.8-r0 libcap-ng-dev-0.7.8-r0
libc-dev-0.7.1-r0
libcom_err-1.43.4-r0 libcom_err-1.43.4-r0
libcrypto1.0-1.0.2k-r0 libcrypto1.0-1.0.2k-r0
libcurl-7.54.0-r0 libcurl-7.54.0-r0
libc-utils-0.7.1-r0
libdrm-2.4.80-r0 libdrm-2.4.80-r0
libedit-20170329.3.1-r2 libedit-20170329.3.1-r2
libelf-0.8.13-r2 libelf-0.8.13-r2
@ -131,10 +131,10 @@ libpcap-1.8.1-r0
libpciaccess-0.13.4-r1 libpciaccess-0.13.4-r1
libpng-1.6.29-r1 libpng-1.6.29-r1
libressl-2.5.4-r0 libressl-2.5.4-r0
libressl-dev-2.5.4-r0
libressl2.5-libcrypto-2.5.4-r0 libressl2.5-libcrypto-2.5.4-r0
libressl2.5-libssl-2.5.4-r0 libressl2.5-libssl-2.5.4-r0
libressl2.5-libtls-2.5.4-r0 libressl2.5-libtls-2.5.4-r0
libressl-dev-2.5.4-r0
libsasl-2.1.26-r10 libsasl-2.1.26-r10
libseccomp-2.3.2-r0 libseccomp-2.3.2-r0
libseccomp-dev-2.3.2-r0 libseccomp-dev-2.3.2-r0
@ -175,12 +175,12 @@ ncurses-terminfo-base-6.0-r7
nettle-3.3-r0 nettle-3.3-r0
npth-1.2-r0 npth-1.2-r0
oniguruma-6.2.0-r0 oniguruma-6.2.0-r0
open-vm-tools-10.1.0-r7
openntpd-6.0_p1-r3 openntpd-6.0_p1-r3
openrc-0.24.1-r2 openrc-0.24.1-r2
openssh-keygen-7.5_p1-r1 openssh-keygen-7.5_p1-r1
openssh-server-7.5_p1-r1 openssh-server-7.5_p1-r1
openssl-dev-1.0.2k-r0 openssl-dev-1.0.2k-r0
open-vm-tools-10.1.0-r7
opus-1.1.4-r0 opus-1.1.4-r0
p11-kit-0.23.2-r1 p11-kit-0.23.2-r1
patch-2.7.5-r1 patch-2.7.5-r1