From 63ae91712cbd2191ac627b35e5de298647117077 Mon Sep 17 00:00:00 2001 From: niusmallnan <niusmallnan@gmail.com> Date: Fri, 30 Nov 2018 17:12:34 +0800 Subject: [PATCH] Support multiple architectures --- Dockerfile.dapper | 16 ++++++----- config/{ => x86}/kernel-config | 0 {scripts => firmware/x86}/firmware | 0 images/10-extras/Dockerfile | 4 +-- images/10-extras/prebuild.sh | 2 +- images/10-headers/Dockerfile | 4 +-- images/10-headers/prebuild.sh | 2 +- images/10-kernel/Dockerfile | 4 +-- images/10-kernel/prebuild.sh | 6 ++-- .../x86/modules-extra.list | 0 modules.list => modules/x86/modules.list | 0 .../elide-post-dash-cmdline-from-proc.patch | 0 scripts/build-kernel | 20 ++++++------- scripts/ci | 2 ++ scripts/config-kernel | 6 ++-- scripts/extract | 8 +++--- scripts/package-kernel | 28 +++++++++---------- scripts/release | 28 ++++++++----------- scripts/test-firmware | 2 +- scripts/version | 14 ++++++++++ 20 files changed, 80 insertions(+), 66 deletions(-) rename config/{ => x86}/kernel-config (100%) rename {scripts => firmware/x86}/firmware (100%) rename modules-extra.list => modules/x86/modules-extra.list (100%) rename modules.list => modules/x86/modules.list (100%) rename patches/{ => x86}/elide-post-dash-cmdline-from-proc.patch (100%) diff --git a/Dockerfile.dapper b/Dockerfile.dapper index 70b52a2..8575b62 100644 --- a/Dockerfile.dapper +++ b/Dockerfile.dapper @@ -2,7 +2,8 @@ FROM gcc:7.3.0 # FROM arm64=arm64v8/gcc:7.3.0 RUN apt-get update \ - && apt-get install -y ccache vim gnupg2 locales bc kmod libelf-dev + && apt-get install -y ccache vim gnupg2 locales bc kmod libelf-dev \ + && rm -f /bin/sh && ln -s /bin/bash /bin/sh # Install dapper RUN curl -sL https://releases.rancher.com/dapper/latest/dapper-$(uname -s)-$(uname -m | sed 's/arm.*/arm/') > /usr/bin/dapper \ @@ -14,8 +15,8 @@ CMD ["ci"] RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 -ARG DAPPER_HOST_ARCH=amd64 -ENV HOST_ARCH=${DAPPER_HOST_ARCH} +ARG DAPPER_HOST_ARCH +ENV HOST_ARCH=${DAPPER_HOST_ARCH} ARCH=${DAPPER_HOST_ARCH} ENV DAPPER_DOCKER_SOCKET true ENV DAPPER_SOURCE /source @@ -28,19 +29,20 @@ WORKDIR ${DAPPER_SOURCE} ARG OS_REPO=rancher ARG KERNEL_TAG ARG KERNEL_VERSION=${KERNEL_TAG}-${OS_REPO} -ARG ARCH=x86 ENV OS_REPO=${OS_REPO} \ - ARCH=${ARCH} \ + DOCKER_URL=DOCKER_URL_${ARCH} \ DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-1.10.3 \ + DOCKER_URL_arm64=https://github.com/rancher/docker/releases/download/v1.10.3-ros1/docker-1.10.3_arm64 \ KERNEL_TAG=${KERNEL_TAG} \ KERNEL_VERSION=${KERNEL_VERSION} \ KERNEL_URL=https://cdn.kernel.org/pub/linux/kernel/v4.x/ \ KERNEL_TAR=linux-${KERNEL_TAG}.tar.xz \ - KERNEL_SIGN=linux-${KERNEL_TAG}.tar.sign + KERNEL_SIGN=linux-${KERNEL_TAG}.tar.sign \ + KERNEL_ARCH=x86 # for rc testing #ENV KERNEL_URL=https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-${KERNEL_TAG}.tar.xz # Install Docker -RUN curl -fL ${DOCKER_URL_amd64} > /usr/bin/docker && \ +RUN curl -fL ${!DOCKER_URL} > /usr/bin/docker && \ chmod +x /usr/bin/docker diff --git a/config/kernel-config b/config/x86/kernel-config similarity index 100% rename from config/kernel-config rename to config/x86/kernel-config diff --git a/scripts/firmware b/firmware/x86/firmware similarity index 100% rename from scripts/firmware rename to firmware/x86/firmware diff --git a/images/10-extras/Dockerfile b/images/10-extras/Dockerfile index ea59a70..754f1a3 100644 --- a/images/10-extras/Dockerfile +++ b/images/10-extras/Dockerfile @@ -1,5 +1,5 @@ -FROM alpine:3.4 -# FROM arm64=skip arm=skip +FROM alpine:3.8 +# FROM arm64=arm64v8/alpine:3.8 arm=skip RUN apk --purge --no-cache add kmod bash ARG KERNEL_VERSION diff --git a/images/10-extras/prebuild.sh b/images/10-extras/prebuild.sh index cfdb95a..f1c2994 100755 --- a/images/10-extras/prebuild.sh +++ b/images/10-extras/prebuild.sh @@ -2,5 +2,5 @@ set -e set -x -cp /source/dist/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz ./images/10-extras/extras.tar.gz +cp /source/dist/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz ./images/10-extras/extras.tar.gz diff --git a/images/10-headers/Dockerfile b/images/10-headers/Dockerfile index 4f7c9a4..d94ad63 100644 --- a/images/10-headers/Dockerfile +++ b/images/10-headers/Dockerfile @@ -1,5 +1,5 @@ -FROM alpine:3.4 -# FROM arm64=skip arm=skip +FROM alpine:3.8 +# FROM arm64=arm64v8/alpine:3.8 arm=skip RUN apk --purge --no-cache add kmod bash ARG KERNEL_VERSION diff --git a/images/10-headers/prebuild.sh b/images/10-headers/prebuild.sh index 3602989..2cb3623 100755 --- a/images/10-headers/prebuild.sh +++ b/images/10-headers/prebuild.sh @@ -2,5 +2,5 @@ set -e set -x -cp /source/dist/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz ./images/10-headers/build.tar.gz +cp /source/dist/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz ./images/10-headers/build.tar.gz diff --git a/images/10-kernel/Dockerfile b/images/10-kernel/Dockerfile index ce4e1d7..00cde03 100644 --- a/images/10-kernel/Dockerfile +++ b/images/10-kernel/Dockerfile @@ -1,5 +1,5 @@ -#FROM alpine:3.4 -## FROM arm64=skip arm=skip +FROM alpine:3.8 +# FROM arm64=arm64v8/alpine:3.8 arm=skip #RUN apk --purge --no-cache add kmod bash diff --git a/images/10-kernel/prebuild.sh b/images/10-kernel/prebuild.sh index b4bad0a..c2423e8 100755 --- a/images/10-kernel/prebuild.sh +++ b/images/10-kernel/prebuild.sh @@ -1,14 +1,14 @@ #!/bin/bash set -ex -# linux-${KERNEL_VERSION}-x86.tar +# linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar -tar -xf /source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz ./boot/vmlinuz-${KERNEL_VERSION} ./boot/System.map-${KERNEL_VERSION} +tar -xf /source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz ./boot/vmlinuz-${KERNEL_VERSION} ./boot/System.map-${KERNEL_VERSION} mv ./boot/vmlinuz-${KERNEL_VERSION} ./images/10-kernel/kernel mv ./boot/System.map-${KERNEL_VERSION} ./images/10-kernel/System.map rmdir boot -cp /source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz ./images/10-kernel/kernel.tar.gz +cp /source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz ./images/10-kernel/kernel.tar.gz gunzip -f ./images/10-kernel/kernel.tar.gz ls -lah ./images/10-kernel diff --git a/modules-extra.list b/modules/x86/modules-extra.list similarity index 100% rename from modules-extra.list rename to modules/x86/modules-extra.list diff --git a/modules.list b/modules/x86/modules.list similarity index 100% rename from modules.list rename to modules/x86/modules.list diff --git a/patches/elide-post-dash-cmdline-from-proc.patch b/patches/x86/elide-post-dash-cmdline-from-proc.patch similarity index 100% rename from patches/elide-post-dash-cmdline-from-proc.patch rename to patches/x86/elide-post-dash-cmdline-from-proc.patch diff --git a/scripts/build-kernel b/scripts/build-kernel index 9834bf9..4d0adc3 100755 --- a/scripts/build-kernel +++ b/scripts/build-kernel @@ -10,21 +10,21 @@ export CCACHE_DIR="${HOME}/.kernel-ccache" export CC="ccache gcc" export PATH="/usr/lib/ccache:$PATH" DIR=${VERSION} -FIRMWARE=$(readlink -f scripts/firmware) -MODULE_LIST=$(readlink -f modules.list) -MODULE_EXTRA_LIST=$(readlink -f modules-extra.list) +FIRMWARE=$(readlink -f firmware/${KERNEL_ARCH}/firmware) +MODULE_LIST=$(readlink -f modules/${KERNEL_ARCH}/modules.list) +MODULE_EXTRA_LIST=$(readlink -f modules/${KERNEL_ARCH}/modules-extra.list) -if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" ]; then - echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-x86.tar.gz in ./dist/kernel/" +if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ]; then + echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-${KERNEL_ARCH}.tar.gz in ./dist/kernel/" else cd ${BUILD}/${DIR} - make oldconfig - KVER=$(make kernelrelease) - if [ -e "linux-${KERNEL_VERSION}-x86.tar" ] \ + make ARCH=${KERNEL_ARCH} oldconfig + KVER=$(make ARCH=${KERNEL_ARCH} kernelrelease) + if [ -e "linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar" ] \ && [ "$KVER" == "$KERNEL_VERSION" ]; then - echo "Skipping kernel build, found linux-${KERNEL_VERSION}-x86.tar in $(pwd)" + echo "Skipping kernel build, found linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar in $(pwd)" else echo "building $KVER" - make -j$(nproc) tar-pkg + make ARCH=${KERNEL_ARCH} -j$(nproc) tar-pkg fi fi diff --git a/scripts/ci b/scripts/ci index 477616f..7727333 100755 --- a/scripts/ci +++ b/scripts/ci @@ -3,6 +3,8 @@ set -e cd $(dirname $0)/.. +source ./scripts/version + ./scripts/test-firmware if ! ./scripts/download; then diff --git a/scripts/config-kernel b/scripts/config-kernel index 7c06d65..c67e266 100755 --- a/scripts/config-kernel +++ b/scripts/config-kernel @@ -15,10 +15,10 @@ source scripts/version DIR=${VERSION} -if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" ]; then - echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-x86.tar.gz in ./dist/kernel/" +if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ]; then + echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-${KERNEL_ARCH}.tar.gz in ./dist/kernel/" else cd ${BUILD}/${DIR} - make oldconfig + make ARCH=${KERNEL_ARCH} oldconfig cp .config ${DIST}/kernel/config fi diff --git a/scripts/extract b/scripts/extract index 860eddd..ed1f610 100755 --- a/scripts/extract +++ b/scripts/extract @@ -22,16 +22,16 @@ if [ ! -e ${DIR} ]; then mv ${TEMP}/${DIR} ${DIR} fi -cp ${CONFIG}/kernel-config ${DIR}/.config +cp ${CONFIG}/${KERNEL_ARCH}/kernel-config ${DIR}/.config pushd . cd ${DIR} -echo "are there patches in ${PATCHES}" -for p in ${PATCHES}/*.patch; do +echo "are there patches in ${PATCHES}/${KERNEL_ARCH}" +for p in ${PATCHES}/${KERNEL_ARCH}/*.patch; do echo "patching $p" patch -p1 -i $p done popd -tar zcvf ${DIST}/kernel/linux-${KERNEL_VERSION}-src.tgz ${DIR} +tar zcvf ${DIST}/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}-src.tgz ${DIR} diff --git a/scripts/package-kernel b/scripts/package-kernel index e898572..cf0342c 100755 --- a/scripts/package-kernel +++ b/scripts/package-kernel @@ -25,24 +25,24 @@ done export CCACHE_DIR="${HOME}/.kernel-ccache" export CC="ccache gcc" export PATH="/usr/lib/ccache:$PATH" -FIRMWARE=$(readlink -f scripts/firmware) -MODULE_LIST=$(readlink -f modules.list) -MODULE_EXTRA_LIST=$(readlink -f modules-extra.list) +FIRMWARE=$(readlink -f firmware/${KERNEL_ARCH}/firmware) +MODULE_LIST=$(readlink -f modules/${KERNEL_ARCH}/modules.list) +MODULE_EXTRA_LIST=$(readlink -f modules/${KERNEL_ARCH}/modules-extra.list) -echo "looking for /source/dist/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz" -echo "looking for /source/dist/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz" -echo "looking for /source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" -if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" ] \ - && [ -e "/source/dist/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz" ] \ - && [ -e "/source/dist/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz" ]; then +echo "looking for /source/dist/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" +echo "looking for /source/dist/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" +echo "looking for /source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" +if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ] \ + && [ -e "/source/dist/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ] \ + && [ -e "/source/dist/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ]; then echo "Skipping packaging of kernel, extras and headers - already found in ./dist/kernel/" else cd ${SOURCEDIR} - KVER=$(make kernelrelease) + KVER=$(make ARCH=${KERNEL_ARCH} kernelrelease) create_firmware_tar $FIRMWARE - FILE="linux-${KVER}-x86.tar" + FILE="linux-${KVER}-${KERNEL_ARCH}.tar" ( split_tar $FILE $MODULE_LIST $MODULE_EXTRA_LIST @@ -50,8 +50,8 @@ else tar --concatenate --file=base.tar firmware.tar tar --concatenate --file=extra.tar firmware-extra.tar - cat base.tar | gzip -c > ${DIST}/kernel/linux-${KERNEL_VERSION}-x86.tar.gz - cat extra.tar | gzip -c > ${DIST}/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz - list_build_files | tar -czf ${DIST}/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz -T /dev/stdin + cat base.tar | gzip -c > ${DIST}/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz + cat extra.tar | gzip -c > ${DIST}/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz + list_build_files | tar -czf ${DIST}/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz -T /dev/stdin cp .config ${DIST}/kernel/config fi diff --git a/scripts/release b/scripts/release index 5d2be28..e6eab22 100755 --- a/scripts/release +++ b/scripts/release @@ -2,6 +2,8 @@ cd $(dirname $0)/.. +source ./scripts/version + if ! ./scripts/ci; then echo "build failure see release.log" exit 1 @@ -9,14 +11,11 @@ fi echo echo "--- ${KERNEL_VERSION} Kernel prepared for RancherOS" -echo " ./dist/kernel/linux-${KERNEL_VERSION}-src.tgz" -echo " ./dist/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz" -echo " ./dist/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz" -echo " ./dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" -echo " ./dist/kernel/config" -echo " ./dist/kernel/modules-main.list" -echo " ./dist/kernel/modules-extra.list" -echo " ./release.log" +echo " ./dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}-src.tgz" +echo " ./dist/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" +echo " ./dist/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" +echo " ./dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" +echo " ./release-${KERNEL_ARCH}.log" echo echo "Images ready to push:" cat dist/images @@ -25,14 +24,11 @@ echo "to publish kernel files and container images, run dist/publish.sh" echo "#!/bin/sh"> dist/publish.sh echo "github-release release --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --pre-release" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/linux-${KERNEL_VERSION}-src.tgz --name linux-${KERNEL_VERSION}-src.tgz" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz --name build-linux-${KERNEL_VERSION}-x86.tar.gz" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/config --name config" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz --name extra-linux-${KERNEL_VERSION}-x86.tar.gz" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz --name linux-${KERNEL_VERSION}-x86.tar.gz" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/modules-main.list --name modules-main.list" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/modules-extra.list --name modules-extra.list" >> dist/publish.sh -echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./release.log --name release.log" >> dist/publish.sh +echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}-src.tgz --name linux-${KERNEL_VERSION}-${KERNEL_ARCH}-src.tgz" >> dist/publish.sh +echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz --name build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" >> dist/publish.sh +echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz --name extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" >> dist/publish.sh +echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz --name linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" >> dist/publish.sh +echo "github-release upload --user rancher --repo os-kernel --tag v${KERNEL_VERSION} --file ./release-${KERNEL_ARCH}.log --name release-${KERNEL_ARCH}.log" >> dist/publish.sh cat dist/images | sed 's/^/docker push /' >> dist/publish.sh chmod 755 dist/publish.sh diff --git a/scripts/test-firmware b/scripts/test-firmware index e07943c..f954ea0 100755 --- a/scripts/test-firmware +++ b/scripts/test-firmware @@ -3,7 +3,7 @@ set -e cd $(dirname $0)/.. -FIRMWARE=$(readlink -f scripts/firmware) +FIRMWARE=$(readlink -f firmware/${KERNEL_ARCH}/firmware) echo "FIRMWARE test: $FIRMWARE" if [ ! -e linux-firmware ]; then diff --git a/scripts/version b/scripts/version index 983b02b..08b9d4d 100755 --- a/scripts/version +++ b/scripts/version @@ -12,3 +12,17 @@ if [[ -z "$DIRTY" && -n "$GIT_TAG" ]]; then else VERSION="${COMMIT}${DIRTY}" fi + +SUFFIX="" +if [ -n "${ARCH}" ] && [ "${ARCH}" != "amd64" ]; then + SUFFIX="_${ARCH}" +fi + +case $ARCH in + amd64) + KERNEL_ARCH=x86 + ;; + *) + KERNEL_ARCH=${ARCH} + ;; +esac