1
0
mirror of https://github.com/rancher/os-kernel.git synced 2025-08-19 12:56:48 +00:00

Support multiple architectures

This commit is contained in:
niusmallnan 2018-11-30 17:12:34 +08:00 committed by niusmallnan
parent d8b99d9a29
commit 63ae91712c
20 changed files with 80 additions and 66 deletions

View File

@ -2,7 +2,8 @@ FROM gcc:7.3.0
# FROM arm64=arm64v8/gcc:7.3.0 # FROM arm64=arm64v8/gcc:7.3.0
RUN apt-get update \ 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 # Install dapper
RUN curl -sL https://releases.rancher.com/dapper/latest/dapper-$(uname -s)-$(uname -m | sed 's/arm.*/arm/') > /usr/bin/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 RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8 ENV LANG en_US.UTF-8
ARG DAPPER_HOST_ARCH=amd64 ARG DAPPER_HOST_ARCH
ENV HOST_ARCH=${DAPPER_HOST_ARCH} ENV HOST_ARCH=${DAPPER_HOST_ARCH} ARCH=${DAPPER_HOST_ARCH}
ENV DAPPER_DOCKER_SOCKET true ENV DAPPER_DOCKER_SOCKET true
ENV DAPPER_SOURCE /source ENV DAPPER_SOURCE /source
@ -28,19 +29,20 @@ WORKDIR ${DAPPER_SOURCE}
ARG OS_REPO=rancher ARG OS_REPO=rancher
ARG KERNEL_TAG ARG KERNEL_TAG
ARG KERNEL_VERSION=${KERNEL_TAG}-${OS_REPO} ARG KERNEL_VERSION=${KERNEL_TAG}-${OS_REPO}
ARG ARCH=x86
ENV OS_REPO=${OS_REPO} \ 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_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_TAG=${KERNEL_TAG} \
KERNEL_VERSION=${KERNEL_VERSION} \ KERNEL_VERSION=${KERNEL_VERSION} \
KERNEL_URL=https://cdn.kernel.org/pub/linux/kernel/v4.x/ \ KERNEL_URL=https://cdn.kernel.org/pub/linux/kernel/v4.x/ \
KERNEL_TAR=linux-${KERNEL_TAG}.tar.xz \ 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 # for rc testing
#ENV KERNEL_URL=https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-${KERNEL_TAG}.tar.xz #ENV KERNEL_URL=https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-${KERNEL_TAG}.tar.xz
# Install Docker # Install Docker
RUN curl -fL ${DOCKER_URL_amd64} > /usr/bin/docker && \ RUN curl -fL ${!DOCKER_URL} > /usr/bin/docker && \
chmod +x /usr/bin/docker chmod +x /usr/bin/docker

View File

@ -1,5 +1,5 @@
FROM alpine:3.4 FROM alpine:3.8
# FROM arm64=skip arm=skip # FROM arm64=arm64v8/alpine:3.8 arm=skip
RUN apk --purge --no-cache add kmod bash RUN apk --purge --no-cache add kmod bash
ARG KERNEL_VERSION ARG KERNEL_VERSION

View File

@ -2,5 +2,5 @@
set -e set -e
set -x 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

View File

@ -1,5 +1,5 @@
FROM alpine:3.4 FROM alpine:3.8
# FROM arm64=skip arm=skip # FROM arm64=arm64v8/alpine:3.8 arm=skip
RUN apk --purge --no-cache add kmod bash RUN apk --purge --no-cache add kmod bash
ARG KERNEL_VERSION ARG KERNEL_VERSION

View File

@ -2,5 +2,5 @@
set -e set -e
set -x 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

View File

@ -1,5 +1,5 @@
#FROM alpine:3.4 FROM alpine:3.8
## FROM arm64=skip arm=skip # FROM arm64=arm64v8/alpine:3.8 arm=skip
#RUN apk --purge --no-cache add kmod bash #RUN apk --purge --no-cache add kmod bash

View File

@ -1,14 +1,14 @@
#!/bin/bash #!/bin/bash
set -ex 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/vmlinuz-${KERNEL_VERSION} ./images/10-kernel/kernel
mv ./boot/System.map-${KERNEL_VERSION} ./images/10-kernel/System.map mv ./boot/System.map-${KERNEL_VERSION} ./images/10-kernel/System.map
rmdir boot 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 gunzip -f ./images/10-kernel/kernel.tar.gz
ls -lah ./images/10-kernel ls -lah ./images/10-kernel

View File

@ -10,21 +10,21 @@ export CCACHE_DIR="${HOME}/.kernel-ccache"
export CC="ccache gcc" export CC="ccache gcc"
export PATH="/usr/lib/ccache:$PATH" export PATH="/usr/lib/ccache:$PATH"
DIR=${VERSION} DIR=${VERSION}
FIRMWARE=$(readlink -f scripts/firmware) FIRMWARE=$(readlink -f firmware/${KERNEL_ARCH}/firmware)
MODULE_LIST=$(readlink -f modules.list) MODULE_LIST=$(readlink -f modules/${KERNEL_ARCH}/modules.list)
MODULE_EXTRA_LIST=$(readlink -f modules-extra.list) MODULE_EXTRA_LIST=$(readlink -f modules/${KERNEL_ARCH}/modules-extra.list)
if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" ]; then if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ]; then
echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-x86.tar.gz in ./dist/kernel/" echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-${KERNEL_ARCH}.tar.gz in ./dist/kernel/"
else else
cd ${BUILD}/${DIR} cd ${BUILD}/${DIR}
make oldconfig make ARCH=${KERNEL_ARCH} oldconfig
KVER=$(make kernelrelease) KVER=$(make ARCH=${KERNEL_ARCH} kernelrelease)
if [ -e "linux-${KERNEL_VERSION}-x86.tar" ] \ if [ -e "linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar" ] \
&& [ "$KVER" == "$KERNEL_VERSION" ]; then && [ "$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 else
echo "building $KVER" echo "building $KVER"
make -j$(nproc) tar-pkg make ARCH=${KERNEL_ARCH} -j$(nproc) tar-pkg
fi fi
fi fi

View File

@ -3,6 +3,8 @@ set -e
cd $(dirname $0)/.. cd $(dirname $0)/..
source ./scripts/version
./scripts/test-firmware ./scripts/test-firmware
if ! ./scripts/download; then if ! ./scripts/download; then

View File

@ -15,10 +15,10 @@ source scripts/version
DIR=${VERSION} DIR=${VERSION}
if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" ]; then if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ]; then
echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-x86.tar.gz in ./dist/kernel/" echo "skipping kernel build - found linux-${KERNEL_VERSION}-rancher-${KERNEL_ARCH}.tar.gz in ./dist/kernel/"
else else
cd ${BUILD}/${DIR} cd ${BUILD}/${DIR}
make oldconfig make ARCH=${KERNEL_ARCH} oldconfig
cp .config ${DIST}/kernel/config cp .config ${DIST}/kernel/config
fi fi

View File

@ -22,16 +22,16 @@ if [ ! -e ${DIR} ]; then
mv ${TEMP}/${DIR} ${DIR} mv ${TEMP}/${DIR} ${DIR}
fi fi
cp ${CONFIG}/kernel-config ${DIR}/.config cp ${CONFIG}/${KERNEL_ARCH}/kernel-config ${DIR}/.config
pushd . pushd .
cd ${DIR} cd ${DIR}
echo "are there patches in ${PATCHES}" echo "are there patches in ${PATCHES}/${KERNEL_ARCH}"
for p in ${PATCHES}/*.patch; do for p in ${PATCHES}/${KERNEL_ARCH}/*.patch; do
echo "patching $p" echo "patching $p"
patch -p1 -i $p patch -p1 -i $p
done done
popd popd
tar zcvf ${DIST}/kernel/linux-${KERNEL_VERSION}-src.tgz ${DIR} tar zcvf ${DIST}/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}-src.tgz ${DIR}

View File

@ -25,24 +25,24 @@ done
export CCACHE_DIR="${HOME}/.kernel-ccache" export CCACHE_DIR="${HOME}/.kernel-ccache"
export CC="ccache gcc" export CC="ccache gcc"
export PATH="/usr/lib/ccache:$PATH" export PATH="/usr/lib/ccache:$PATH"
FIRMWARE=$(readlink -f scripts/firmware) FIRMWARE=$(readlink -f firmware/${KERNEL_ARCH}/firmware)
MODULE_LIST=$(readlink -f modules.list) MODULE_LIST=$(readlink -f modules/${KERNEL_ARCH}/modules.list)
MODULE_EXTRA_LIST=$(readlink -f modules-extra.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/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz"
echo "looking for /source/dist/kernel/build-linux-${KERNEL_VERSION}-x86.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}-x86.tar.gz" echo "looking for /source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz"
if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" ] \ if [ -e "/source/dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ] \
&& [ -e "/source/dist/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz" ] \ && [ -e "/source/dist/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz" ] \
&& [ -e "/source/dist/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz" ]; then && [ -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/" echo "Skipping packaging of kernel, extras and headers - already found in ./dist/kernel/"
else else
cd ${SOURCEDIR} cd ${SOURCEDIR}
KVER=$(make kernelrelease) KVER=$(make ARCH=${KERNEL_ARCH} kernelrelease)
create_firmware_tar $FIRMWARE create_firmware_tar $FIRMWARE
FILE="linux-${KVER}-x86.tar" FILE="linux-${KVER}-${KERNEL_ARCH}.tar"
( (
split_tar $FILE $MODULE_LIST $MODULE_EXTRA_LIST split_tar $FILE $MODULE_LIST $MODULE_EXTRA_LIST
@ -50,8 +50,8 @@ else
tar --concatenate --file=base.tar firmware.tar tar --concatenate --file=base.tar firmware.tar
tar --concatenate --file=extra.tar firmware-extra.tar tar --concatenate --file=extra.tar firmware-extra.tar
cat base.tar | gzip -c > ${DIST}/kernel/linux-${KERNEL_VERSION}-x86.tar.gz 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}-x86.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}-x86.tar.gz -T /dev/stdin list_build_files | tar -czf ${DIST}/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz -T /dev/stdin
cp .config ${DIST}/kernel/config cp .config ${DIST}/kernel/config
fi fi

View File

@ -2,6 +2,8 @@
cd $(dirname $0)/.. cd $(dirname $0)/..
source ./scripts/version
if ! ./scripts/ci; then if ! ./scripts/ci; then
echo "build failure see release.log" echo "build failure see release.log"
exit 1 exit 1
@ -9,14 +11,11 @@ fi
echo echo
echo "--- ${KERNEL_VERSION} Kernel prepared for RancherOS" echo "--- ${KERNEL_VERSION} Kernel prepared for RancherOS"
echo " ./dist/kernel/linux-${KERNEL_VERSION}-src.tgz" echo " ./dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}-src.tgz"
echo " ./dist/kernel/extra-linux-${KERNEL_VERSION}-x86.tar.gz" echo " ./dist/kernel/extra-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz"
echo " ./dist/kernel/build-linux-${KERNEL_VERSION}-x86.tar.gz" echo " ./dist/kernel/build-linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz"
echo " ./dist/kernel/linux-${KERNEL_VERSION}-x86.tar.gz" echo " ./dist/kernel/linux-${KERNEL_VERSION}-${KERNEL_ARCH}.tar.gz"
echo " ./dist/kernel/config" echo " ./release-${KERNEL_ARCH}.log"
echo " ./dist/kernel/modules-main.list"
echo " ./dist/kernel/modules-extra.list"
echo " ./release.log"
echo echo
echo "Images ready to push:" echo "Images ready to push:"
cat dist/images 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 "#!/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 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/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}-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/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/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}-${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/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}-${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 ./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 ./release-${KERNEL_ARCH}.log --name release-${KERNEL_ARCH}.log" >> 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
cat dist/images | sed 's/^/docker push /' >> dist/publish.sh cat dist/images | sed 's/^/docker push /' >> dist/publish.sh
chmod 755 dist/publish.sh chmod 755 dist/publish.sh

View File

@ -3,7 +3,7 @@ set -e
cd $(dirname $0)/.. cd $(dirname $0)/..
FIRMWARE=$(readlink -f scripts/firmware) FIRMWARE=$(readlink -f firmware/${KERNEL_ARCH}/firmware)
echo "FIRMWARE test: $FIRMWARE" echo "FIRMWARE test: $FIRMWARE"
if [ ! -e linux-firmware ]; then if [ ! -e linux-firmware ]; then

View File

@ -12,3 +12,17 @@ if [[ -z "$DIRTY" && -n "$GIT_TAG" ]]; then
else else
VERSION="${COMMIT}${DIRTY}" VERSION="${COMMIT}${DIRTY}"
fi fi
SUFFIX=""
if [ -n "${ARCH}" ] && [ "${ARCH}" != "amd64" ]; then
SUFFIX="_${ARCH}"
fi
case $ARCH in
amd64)
KERNEL_ARCH=x86
;;
*)
KERNEL_ARCH=${ARCH}
;;
esac