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
RUN apk update && apk upgrade -a
# Copy Dockerfile so we can include it in the hash
COPY Dockerfile /Dockerfile
COPY packages /tmp/
COPY packages* /tmp/
# 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)
# 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
# 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
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/LK4D4/vndr
FROM alpine:3.6
FROM $BASE
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/keys /etc/apk/keys/
COPY --from=mirror /mirror /mirror/
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
RUN apk update && apk upgrade -a

View File

@ -2,24 +2,37 @@
ORG?=linuxkit
IMAGE=alpine
DOCKER_CONTENT_VAR=1
PKG_DEPS=packages
ifeq ($(shell uname -m), x86_64)
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
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
DOCKER_CONTENT_TRUST=1 docker pull $(BASE)
docker build --no-cache -t $(IMAGE):build .
hash: Dockerfile Makefile $(PKG_DEPS)
DOCKER_CONTENT_TRUST=$(DOCKER_CONTENT_VAR) docker pull $(BASE)
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/ .*//' > $@
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_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE):$(shell cat hash))
echo "# $(ORG)/$(IMAGE):$(shell cat hash)" > versions
docker run --rm $(IMAGE):build find /mirror -name '*.apk' -exec basename '{}' .apk \; | sort | (echo '# automatically generated list of installed packages'; cat -) >> versions
DOCKER_CONTENT_TRUST=$(DOCKER_CONTENT_VAR) docker push $(ORG)/$(IMAGE):$(shell cat hash))
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.$(shell uname -m)
docker rmi $(IMAGE):build
rm -f hash

View File

@ -61,7 +61,6 @@ openntpd
openrc
openssh-server
openssl-dev
open-vm-tools
patch
python3
qemu-aarch64
@ -77,7 +76,6 @@ slang-dev
squashfs-tools
strace
swig
syslinux
tar
tcpdump
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
abuild-3.0.0_rc2-r8
alpine-baselayout-3.0.4-r0
@ -91,14 +91,14 @@ libattr-2.4.47-r6
libblkid-2.28.2-r2
libburn-1.4.6-r0
libbz2-1.0.6-r5
libc-dev-0.7.1-r0
libc-utils-0.7.1-r0
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
@ -131,10 +131,10 @@ libpcap-1.8.1-r0
libpciaccess-0.13.4-r1
libpng-1.6.29-r1
libressl-2.5.4-r0
libressl-dev-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
@ -175,12 +175,12 @@ ncurses-terminfo-base-6.0-r7
nettle-3.3-r0
npth-1.2-r0
oniguruma-6.2.0-r0
open-vm-tools-10.1.0-r7
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
open-vm-tools-10.1.0-r7
opus-1.1.4-r0
p11-kit-0.23.2-r1
patch-2.7.5-r1