From cc14a74276de92a5d04847db10331c840adc028a Mon Sep 17 00:00:00 2001 From: Dennis Chen Date: Mon, 24 Jul 2017 10:09:23 +0000 Subject: [PATCH] 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 --- tools/alpine/Dockerfile | 17 +- tools/alpine/Makefile | 29 ++- tools/alpine/packages | 2 - tools/alpine/packages.aarch64 | 1 + tools/alpine/packages.x86_64 | 2 + tools/alpine/versions.aarch64 | 231 +++++++++++++++++++++ tools/alpine/{versions => versions.x86_64} | 10 +- 7 files changed, 271 insertions(+), 21 deletions(-) create mode 100644 tools/alpine/packages.aarch64 create mode 100644 tools/alpine/packages.x86_64 create mode 100644 tools/alpine/versions.aarch64 rename tools/alpine/{versions => versions.x86_64} (98%) diff --git a/tools/alpine/Dockerfile b/tools/alpine/Dockerfile index f2f1ab504..8f7557885 100644 --- a/tools/alpine/Dockerfile +++ b/tools/alpine/Dockerfile @@ -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 diff --git a/tools/alpine/Makefile b/tools/alpine/Makefile index 25624ba4d..5c5149262 100644 --- a/tools/alpine/Makefile +++ b/tools/alpine/Makefile @@ -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 diff --git a/tools/alpine/packages b/tools/alpine/packages index 5d06d21d0..e49fc5953 100644 --- a/tools/alpine/packages +++ b/tools/alpine/packages @@ -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 diff --git a/tools/alpine/packages.aarch64 b/tools/alpine/packages.aarch64 new file mode 100644 index 000000000..67d66ec9e --- /dev/null +++ b/tools/alpine/packages.aarch64 @@ -0,0 +1 @@ +qemu-system-aarch64 diff --git a/tools/alpine/packages.x86_64 b/tools/alpine/packages.x86_64 new file mode 100644 index 000000000..b86c2899e --- /dev/null +++ b/tools/alpine/packages.x86_64 @@ -0,0 +1,2 @@ +open-vm-tools +syslinux diff --git a/tools/alpine/versions.aarch64 b/tools/alpine/versions.aarch64 new file mode 100644 index 000000000..94f0fa6f7 --- /dev/null +++ b/tools/alpine/versions.aarch64 @@ -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 diff --git a/tools/alpine/versions b/tools/alpine/versions.x86_64 similarity index 98% rename from tools/alpine/versions rename to tools/alpine/versions.x86_64 index 3aace5887..13805b726 100644 --- a/tools/alpine/versions +++ b/tools/alpine/versions.x86_64 @@ -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