1
0
mirror of https://github.com/rancher/os-kernel.git synced 2025-04-27 18:25:05 +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
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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

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

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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