From 5eb587cb013d2231a3b7607e5158df924e649af9 Mon Sep 17 00:00:00 2001 From: Stefano Stabellini Date: Thu, 16 Nov 2017 13:59:57 -0800 Subject: [PATCH] Split dom0 build and mkimage build in smaller pieces Signed-off-by: Stefano Stabellini --- alpine-dom0/build-linux/build.docker | 24 +++++++ alpine-dom0/{ => build-linux}/linux-config | 0 alpine-dom0/build-qemu/build.docker | 32 +++++++++ alpine-dom0/{ => build-qemu}/qemu-patch | 0 alpine-dom0/build-xen/build.docker | 29 +++++++++ alpine-dom0/{ => build-xen}/xen-patch | 0 alpine-dom0/build.docker | 65 ------------------- alpine-dom0/build.sh | 28 ++++++-- alpine-dom0/{ => runtime}/runtime.docker | 4 +- alpine-dom0/{ => runtime}/udhcpc.script | 0 alpine-dom0/sleep | 4 -- .../build.docker} | 23 +------ .../patches/0001-TPM-build-issue-fixing.patch | 0 ...to-set-pure-text-mode-in-case-of-EFI.patch | 0 mkimage/build.sh | 12 +++- mkimage/mkimage/build.docker | 23 +++++++ mkimage/{ => mkimage}/make-efi | 0 17 files changed, 144 insertions(+), 100 deletions(-) create mode 100644 alpine-dom0/build-linux/build.docker rename alpine-dom0/{ => build-linux}/linux-config (100%) create mode 100644 alpine-dom0/build-qemu/build.docker rename alpine-dom0/{ => build-qemu}/qemu-patch (100%) create mode 100644 alpine-dom0/build-xen/build.docker rename alpine-dom0/{ => build-xen}/xen-patch (100%) delete mode 100644 alpine-dom0/build.docker rename alpine-dom0/{ => runtime}/runtime.docker (89%) rename alpine-dom0/{ => runtime}/udhcpc.script (100%) delete mode 100644 alpine-dom0/sleep rename mkimage/{mkimage.docker => build-grub/build.docker} (79%) rename mkimage/{ => build-grub}/patches/0001-TPM-build-issue-fixing.patch (100%) rename mkimage/{ => build-grub}/patches/0002-video-Allow-to-set-pure-text-mode-in-case-of-EFI.patch (100%) create mode 100644 mkimage/mkimage/build.docker rename mkimage/{ => mkimage}/make-efi (100%) diff --git a/alpine-dom0/build-linux/build.docker b/alpine-dom0/build-linux/build.docker new file mode 100644 index 0000000..1b8d6ce --- /dev/null +++ b/alpine-dom0/build-linux/build.docker @@ -0,0 +1,24 @@ +FROM qemu-builder as linux-builder + +COPY alpine-dom0/build-linux/linux-config /root/ + +ENV SOURCE_DIR=/root +ENV OUT_DIR=/out +ENV LINUX_VERSION=4.14 + +RUN \ + apk update && \ +# Linux build deps + apk add bc + +# Download and build Linux +RUN \ +cd $SOURCE_DIR && \ +curl -fsSLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-$LINUX_VERSION.tar.xz && \ +tar xvJf linux-$LINUX_VERSION.tar.xz && \ +cd linux-$LINUX_VERSION && \ +cp $SOURCE_DIR/linux-config .config && \ +make -j 4 && \ +cp arch/x86/boot/bzImage $OUT_DIR/boot/kernel + +ENTRYPOINT ["/bin/sh"] diff --git a/alpine-dom0/linux-config b/alpine-dom0/build-linux/linux-config similarity index 100% rename from alpine-dom0/linux-config rename to alpine-dom0/build-linux/linux-config diff --git a/alpine-dom0/build-qemu/build.docker b/alpine-dom0/build-qemu/build.docker new file mode 100644 index 0000000..0cbd0f4 --- /dev/null +++ b/alpine-dom0/build-qemu/build.docker @@ -0,0 +1,32 @@ +FROM xen-builder as qemu-builder + +COPY alpine-dom0/build-qemu/qemu-patch /root/ + +ENV SOURCE_DIR=/root +ENV OUT_DIR=/out +ENV QEMU_VERSION=2.10.1 + +RUN \ + apk update && \ +# QEMU build deps + apk add glib-dev pixman-dev libcap-dev libattr + +# Download and build QEMU +RUN \ +cd $SOURCE_DIR && \ +curl -fsSLO https://download.qemu.org/qemu-$QEMU_VERSION.tar.xz && \ +tar xvJf qemu-$QEMU_VERSION.tar.xz && \ +cd qemu-$QEMU_VERSION && \ +patch -p1 < $SOURCE_DIR/qemu-patch && \ +export PKG_CONFIG_PATH=$SOURCE_DIR/xen/tools/pkg-config && \ +export INST_DIR=$OUT_DIR && \ +./configure --prefix=/usr --enable-xen --target-list=i386-softmmu \ + --extra-cflags="-I$INST_DIR/usr/include" \ + --extra-ldflags="-L$INST_DIR/usr/lib -Wl,-rpath-link=$INST_DIR/usr/lib \ + -L$INST_DIR/usr/lib64 -Wl,-rpath-link=$INST_DIR/usr/lib64" \ + --disable-kvm --enable-virtfs --disable-werror && \ +make -j 4 && \ +mkdir -p DESTDIR=$OUT_DIR/qemu && \ +make DESTDIR=$OUT_DIR install + +ENTRYPOINT ["/bin/sh"] diff --git a/alpine-dom0/qemu-patch b/alpine-dom0/build-qemu/qemu-patch similarity index 100% rename from alpine-dom0/qemu-patch rename to alpine-dom0/build-qemu/qemu-patch diff --git a/alpine-dom0/build-xen/build.docker b/alpine-dom0/build-xen/build.docker new file mode 100644 index 0000000..ffa3a43 --- /dev/null +++ b/alpine-dom0/build-xen/build.docker @@ -0,0 +1,29 @@ +FROM alpine as xen-builder + +COPY alpine-dom0/build-xen/xen-patch /root/ + +ENV SOURCE_DIR=/root +ENV OUT_DIR=/out +ENV XEN_VERSION=4.10.0-rc3 + +RUN \ + apk update && \ +# Xen build deps + apk add gcc patch musl-dev git python2-dev gettext zlib-dev \ + ncurses-dev dev86 texinfo yajl-dev curl-dev libaio-dev autoconf \ + automake iasl make xz-dev bash util-linux-dev argp-standalone \ + linux-headers curl + +# Download and build Xen +RUN \ +cd $SOURCE_DIR && \ +curl -fsSLO https://downloads.xenproject.org/release/xen/$XEN_VERSION/xen-$XEN_VERSION.tar.gz && \ +tar xvzf xen-$XEN_VERSION.tar.gz && \ +cd xen-$XEN_VERSION && \ +patch -p1 < $SOURCE_DIR/xen-patch && \ +./configure --prefix=/usr --with-system-qemu=/usr/lib/xen/bin/qemu-system-i386 --disable-stubdom --disable-qemu-traditional --disable-rombios && \ +make -j4 && \ +mkdir -p DESTDIR=$OUT_DIR && \ +make DESTDIR=$OUT_DIR install + +ENTRYPOINT ["/bin/sh"] diff --git a/alpine-dom0/xen-patch b/alpine-dom0/build-xen/xen-patch similarity index 100% rename from alpine-dom0/xen-patch rename to alpine-dom0/build-xen/xen-patch diff --git a/alpine-dom0/build.docker b/alpine-dom0/build.docker deleted file mode 100644 index 1e5f7da..0000000 --- a/alpine-dom0/build.docker +++ /dev/null @@ -1,65 +0,0 @@ -FROM alpine as xen-builder - -COPY alpine-dom0/xen-patch /root/ -COPY alpine-dom0/qemu-patch /root/ -COPY alpine-dom0/linux-config /root/ - -ENV SOURCE_DIR=/root -ENV OUT_DIR=/out -ENV XEN_VERSION=4.10.0-rc3 -ENV QEMU_VERSION=2.10.1 -ENV LINUX_VERSION=4.14 - -RUN \ - apk update && \ -# Xen build deps - apk add gcc patch musl-dev git python2-dev gettext zlib-dev \ - ncurses-dev dev86 texinfo yajl-dev curl-dev libaio-dev autoconf \ - automake iasl make xz-dev bash util-linux-dev argp-standalone \ - linux-headers curl && \ -# QEMU build deps - apk add glib-dev pixman-dev libcap-dev libattr && \ -# Linux build deps - apk add bc - -# Download and build Xen -RUN \ -cd $SOURCE_DIR && \ -curl -fsSLO https://downloads.xenproject.org/release/xen/$XEN_VERSION/xen-$XEN_VERSION.tar.gz && \ -tar xvzf xen-$XEN_VERSION.tar.gz && \ -cd xen-$XEN_VERSION && \ -patch -p1 < $SOURCE_DIR/xen-patch && \ -./configure --prefix=/usr --with-system-qemu=/usr/lib/xen/bin/qemu-system-i386 --disable-stubdom --disable-qemu-traditional --disable-rombios && \ -make -j4 && \ -mkdir -p DESTDIR=$OUT_DIR && \ -make DESTDIR=$OUT_DIR install - -# Download and build QEMU -RUN \ -cd $SOURCE_DIR && \ -curl -fsSLO https://download.qemu.org/qemu-$QEMU_VERSION.tar.xz && \ -tar xvJf qemu-$QEMU_VERSION.tar.xz && \ -cd qemu-$QEMU_VERSION && \ -patch -p1 < $SOURCE_DIR/qemu-patch && \ -export PKG_CONFIG_PATH=$SOURCE_DIR/xen/tools/pkg-config && \ -export INST_DIR=$OUT_DIR && \ -./configure --prefix=/usr --enable-xen --target-list=i386-softmmu \ - --extra-cflags="-I$INST_DIR/usr/include" \ - --extra-ldflags="-L$INST_DIR/usr/lib -Wl,-rpath-link=$INST_DIR/usr/lib \ - -L$INST_DIR/usr/lib64 -Wl,-rpath-link=$INST_DIR/usr/lib64" \ - --disable-kvm --enable-virtfs --disable-werror && \ -make -j 4 && \ -mkdir -p DESTDIR=$OUT_DIR/qemu && \ -make DESTDIR=$OUT_DIR install - -# Download and build Linux -RUN \ -cd $SOURCE_DIR && \ -curl -fsSLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-$LINUX_VERSION.tar.xz && \ -tar xvJf linux-$LINUX_VERSION.tar.xz && \ -cd linux-$LINUX_VERSION && \ -cp $SOURCE_DIR/linux-config .config && \ -make -j 4 && \ -cp arch/x86/boot/bzImage $OUT_DIR/boot/kernel - -ENTRYPOINT ["/bin/sh"] diff --git a/alpine-dom0/build.sh b/alpine-dom0/build.sh index a279904..399dd02 100755 --- a/alpine-dom0/build.sh +++ b/alpine-dom0/build.sh @@ -1,18 +1,34 @@ #!/bin/sh -BUILDER_LABEL="xen-builder" +XEN_LABEL="xen-builder" +QEMU_LABEL="qemu-builder" +LINUX_LABEL="linux-builder" DOM0_LABEL="dom0" -# Create build container -exists=`docker images $BUILDER_LABEL | grep $BUILDER_LABEL` +# Build Xen, create $XEN_LABEL +exists=`docker images $XEN_LABEL | grep $XEN_LABEL` if test -z "$exists" then - docker build -f alpine-dom0/build.docker -t $BUILDER_LABEL . + docker build -f alpine-dom0/build-xen/build.docker -t $XEN_LABEL . fi -# Create Dom0 +# Build QEMU, based on $XEN_LABEL, create $QEMU_LABEL +exists=`docker images $QEMU_LABEL | grep $QEMU_LABEL` +if test -z "$exists" +then + docker build -f alpine-dom0/build-qemu/build.docker -t $QEMU_LABEL . +fi + +# Build Linux, based on $QEMU_LABEL, create $LINUX_LABEL +exists=`docker images $LINUX_LABEL | grep $LINUX_LABEL` +if test -z "$exists" +then + docker build -f alpine-dom0/build-linux/build.docker -t $LINUX_LABEL . +fi + +# Create Dom0, takes build artifacts from $LINUX_LABEL exists=`docker images $DOM0_LABEL | grep $DOM0_LABEL` if test -z "$exists" then - docker build -f alpine-dom0/runtime.docker -t $DOM0_LABEL . + docker build -f alpine-dom0/runtime/runtime.docker -t $DOM0_LABEL . fi diff --git a/alpine-dom0/runtime.docker b/alpine-dom0/runtime/runtime.docker similarity index 89% rename from alpine-dom0/runtime.docker rename to alpine-dom0/runtime/runtime.docker index d4714bb..2e6d678 100644 --- a/alpine-dom0/runtime.docker +++ b/alpine-dom0/runtime/runtime.docker @@ -4,8 +4,8 @@ RUN \ apk update && \ apk add openrc -ADD alpine-dom0/udhcpc.script /usr/share/udhcpc/default.script -COPY --from=xen-builder /out/ / +ADD alpine-dom0/runtime/udhcpc.script /usr/share/udhcpc/default.script +COPY --from=linux-builder /out/ / RUN \ rc-update add networking sysinit && \ diff --git a/alpine-dom0/udhcpc.script b/alpine-dom0/runtime/udhcpc.script similarity index 100% rename from alpine-dom0/udhcpc.script rename to alpine-dom0/runtime/udhcpc.script diff --git a/alpine-dom0/sleep b/alpine-dom0/sleep deleted file mode 100644 index 03f26ac..0000000 --- a/alpine-dom0/sleep +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -/bin/sleep 60 - diff --git a/mkimage/mkimage.docker b/mkimage/build-grub/build.docker similarity index 79% rename from mkimage/mkimage.docker rename to mkimage/build-grub/build.docker index 0ede913..c07f190 100644 --- a/mkimage/mkimage.docker +++ b/mkimage/build-grub/build.docker @@ -1,4 +1,4 @@ -FROM alpine AS image-builder +FROM alpine AS grub-builder RUN apk update && apk add \ automake \ @@ -21,8 +21,7 @@ ENV GRUB_MODULES="part_gpt fat ext2 iso9660 gzio linux acpi normal cpio crypto d search_disk_uuid tftp verify xzio xfs video multiboot2 gfxterm efi_gop efi_uga" ENV GRUB_COMMIT=6782f6d431d22b4e9ab14e94d263795c7991e160 -COPY mkimage/patches/* /patches/ -COPY --from=dom0 / /out +COPY mkimage/build-grub/patches/* /patches/ RUN mkdir /grub-lib && \ set -e && \ @@ -47,22 +46,4 @@ RUN mkdir /grub-lib && \ ;; \ esac -RUN \ - apk update && apk upgrade && \ - apk add --no-cache \ - dosfstools \ - libarchive-tools \ - binutils \ - mtools \ - sfdisk \ - sgdisk \ - xfsprogs \ - e2fsprogs \ - util-linux \ - coreutils \ - multipath-tools \ - && true - -COPY mkimage/make-efi / - ENTRYPOINT [ "/bin/sh" ] diff --git a/mkimage/patches/0001-TPM-build-issue-fixing.patch b/mkimage/build-grub/patches/0001-TPM-build-issue-fixing.patch similarity index 100% rename from mkimage/patches/0001-TPM-build-issue-fixing.patch rename to mkimage/build-grub/patches/0001-TPM-build-issue-fixing.patch diff --git a/mkimage/patches/0002-video-Allow-to-set-pure-text-mode-in-case-of-EFI.patch b/mkimage/build-grub/patches/0002-video-Allow-to-set-pure-text-mode-in-case-of-EFI.patch similarity index 100% rename from mkimage/patches/0002-video-Allow-to-set-pure-text-mode-in-case-of-EFI.patch rename to mkimage/build-grub/patches/0002-video-Allow-to-set-pure-text-mode-in-case-of-EFI.patch diff --git a/mkimage/build.sh b/mkimage/build.sh index 846bcfc..f9588cc 100755 --- a/mkimage/build.sh +++ b/mkimage/build.sh @@ -1,12 +1,20 @@ HOME_DIR=`pwd` OUT_DIR=$HOME_DIR/out +GRUB_LABEL="grub-builder" IMAGE_BUILD_LABEL="image-builder" -# Create final image +# Build Grub +exists=`docker images $GRUB_LABEL | grep $GRUB_LABEL` +if test -z "$exists" +then + docker build -f mkimage/build-grub/build.docker -t $GRUB_LABEL . +fi + +# Build image builder exists=`docker images $IMAGE_BUILD_LABEL | grep $IMAGE_BUILD_LABEL` if test -z "$exists" then - docker build -f mkimage/mkimage.docker -t $IMAGE_BUILD_LABEL . + docker build -f mkimage/mkimage/build.docker -t $IMAGE_BUILD_LABEL . fi # Create system image diff --git a/mkimage/mkimage/build.docker b/mkimage/mkimage/build.docker new file mode 100644 index 0000000..9923367 --- /dev/null +++ b/mkimage/mkimage/build.docker @@ -0,0 +1,23 @@ +FROM grub-builder AS image-builder + +COPY --from=dom0 / /out + +RUN \ + apk update && apk upgrade && \ + apk add --no-cache \ + dosfstools \ + libarchive-tools \ + binutils \ + mtools \ + sfdisk \ + sgdisk \ + xfsprogs \ + e2fsprogs \ + util-linux \ + coreutils \ + multipath-tools \ + && true + +COPY mkimage/mkimage/make-efi / + +ENTRYPOINT [ "/bin/sh" ] diff --git a/mkimage/make-efi b/mkimage/mkimage/make-efi similarity index 100% rename from mkimage/make-efi rename to mkimage/mkimage/make-efi -- 2.39.5