mirror of
https://github.com/rancher/os.git
synced 2025-09-17 15:40:47 +00:00
cross-build is back
`HOST_ARCH=arm64 ./make.sh minimal` builds vmlinuz and initrd for arm64 on arm64 (sourcing .docker-env.arm64 in the process) `ARCH=arm ./make.sh rootfs` builds rootfs.tar.gz for arm on your current docker environment
This commit is contained in:
@@ -1,24 +1,23 @@
|
||||
FROM rancher/os-dapper-base
|
||||
|
||||
ARG ARCH
|
||||
ENV ARCH ${ARCH}
|
||||
ARG DOCKER_BINARY_URL
|
||||
ENV DOCKER_BINARY_URL ${DOCKER_BINARY_URL}
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install locales sudo vim less curl wget git rsync build-essential isolinux xorriso gccgo \
|
||||
libblkid-dev libmount-dev libselinux1-dev cpio genisoimage qemu-kvm python-pip ca-certificates pkg-config tox
|
||||
|
||||
ARG HOST_ARCH
|
||||
ENV HOST_ARCH ${HOST_ARCH}
|
||||
RUN mkdir -p /usr/local && cd /usr/local && \
|
||||
wget -O - https://storage.googleapis.com/golang/go1.6.src.tar.gz | tar -xz && \
|
||||
cd go/src && GOROOT_BOOTSTRAP=/usr GOARCH=${ARCH} GOHOSTARCH=${ARCH} ./make.bash
|
||||
cd go/src && GOROOT_BOOTSTRAP=/usr GOARCH=${HOST_ARCH} GOHOSTARCH=${HOST_ARCH} ./make.bash
|
||||
|
||||
ENV PATH /usr/local/go/bin:$PATH
|
||||
RUN mkdir -p /go/src /go/bin && chmod -R 777 /go
|
||||
ENV GOPATH /go
|
||||
ENV PATH /go/bin:$PATH
|
||||
|
||||
RUN wget -O - ${DOCKER_BINARY_URL} > /usr/local/bin/docker
|
||||
ARG HOST_DOCKER_BINARY_URL
|
||||
ENV HOST_DOCKER_BINARY_URL ${HOST_DOCKER_BINARY_URL}
|
||||
RUN wget -O - ${HOST_DOCKER_BINARY_URL} > /usr/local/bin/docker
|
||||
RUN chmod +x /usr/local/bin/docker
|
||||
|
||||
ENV DAPPER_DOCKER_SOCKET true
|
||||
@@ -35,6 +34,10 @@ CMD make
|
||||
ARG TOOLCHAIN
|
||||
ENV TOOLCHAIN ${TOOLCHAIN}
|
||||
|
||||
RUN if [ "${TOOLCHAIN}" != "" ] && ! which ${TOOLCHAIN}-gcc; then \
|
||||
apt-get install -y gcc-${TOOLCHAIN} g++-${TOOLCHAIN} \
|
||||
;fi
|
||||
|
||||
RUN if [ "${TOOLCHAIN}" != "" ]; then \
|
||||
cd /usr/local/src && \
|
||||
for i in libselinux pcre3 util-linux; do \
|
||||
|
9
Makefile
9
Makefile
@@ -1,5 +1,6 @@
|
||||
FORCE_PULL := 0
|
||||
DEV_BUILD := 0
|
||||
HOST_ARCH := amd64
|
||||
ARCH := amd64
|
||||
SUFFIX := $(if $(filter-out amd64,$(ARCH)),_$(ARCH))
|
||||
|
||||
@@ -13,7 +14,11 @@ bin/ros:
|
||||
|
||||
build/host_ros: bin/ros
|
||||
mkdir -p $(dir $@)
|
||||
ifeq "$(ARCH)" "$(HOST_ARCH)"
|
||||
ln -sf ../bin/ros $@
|
||||
else
|
||||
ARCH=$(HOST_ARCH) TOOLCHAIN= VERSION=$(VERSION) ./scripts/mk-ros.sh $@
|
||||
endif
|
||||
|
||||
|
||||
assets/docker:
|
||||
@@ -42,7 +47,7 @@ build/kernel/:
|
||||
|
||||
dist/artifacts/initrd: bin/ros assets/docker assets/selinux/policy.29 build/kernel/ build/images.tar
|
||||
mkdir -p $(dir $@)
|
||||
ARCH=$(ARCH) DFS_IMAGE=$(DFS_IMAGE) DEV_BUILD=$(DEV_BUILD) ./scripts/mk-initrd.sh $@
|
||||
SUFFIX=$(SUFFIX) DFS_IMAGE=$(DFS_IMAGE) DEV_BUILD=$(DEV_BUILD) ./scripts/mk-initrd.sh $@
|
||||
|
||||
|
||||
dist/artifacts/rancheros.iso: minimal
|
||||
@@ -74,7 +79,7 @@ build/images.tar: build/host_ros build/os-config.yml
|
||||
|
||||
dist/artifacts/rootfs.tar.gz: bin/ros assets/docker build/images.tar assets/selinux/policy.29
|
||||
mkdir -p $(dir $@)
|
||||
ARCH=$(ARCH) DFS_IMAGE=$(DFS_IMAGE) DEV_BUILD=$(DEV_BUILD) IS_ROOTFS=1 ./scripts/mk-initrd.sh $@
|
||||
SUFFIX=$(SUFFIX) DFS_IMAGE=$(DFS_IMAGE) DEV_BUILD=$(DEV_BUILD) IS_ROOTFS=1 ./scripts/mk-initrd.sh $@
|
||||
|
||||
|
||||
dist/artifacts/iso-checksums.txt: dist/artifacts/rancheros.iso
|
||||
|
@@ -1,4 +1,5 @@
|
||||
DAPPER_BASE=armhf/ubuntu:16.04
|
||||
TOOLCHAIN=arm-linux-gnueabihf
|
||||
|
||||
COMPILED_KERNEL_URL= #empty
|
||||
DOCKER_BINARY_URL=https://github.com/rancher/docker/releases/download/v1.10.2-arm2/docker-1.10.2_arm
|
||||
|
@@ -1,5 +1,5 @@
|
||||
DAPPER_BASE=aarch64/ubuntu:16.04
|
||||
TOOLCHAIN=aarch64-linux-gnu
|
||||
|
||||
DOCKER_BINARY_URL=https://github.com/rancher/docker/releases/download/v1.10.2-arm2/docker-1.10.2_arm64
|
||||
COMPILED_KERNEL_URL=https://github.com/imikushin/os-kernel/releases/download/Estuary-4.1.18-arm64/linux-4.1.18-arm64.tar.gz
|
||||
DOCKER_BINARY_URL=https://github.com/rancher/docker/releases/download/v1.10.2-arm2/docker-1.10.2_arm64
|
||||
|
@@ -4,4 +4,4 @@ set -ex
|
||||
cd $(dirname $0)/..
|
||||
. ./scripts/dapper-common
|
||||
|
||||
dapper -d -O make ARCH=${ARCH} DEV_BUILD=1 test
|
||||
dapper -d -O make HOST_ARCH=${HOST_ARCH} ARCH=${ARCH} DEV_BUILD=1 test
|
||||
|
@@ -1,21 +1,20 @@
|
||||
#!/bin/sh
|
||||
set -ex
|
||||
|
||||
guessArch() {
|
||||
docker version | grep 'OS/Arch:' | tail -n+2 | awk '{print $2}' | cut -f2 -d'/'
|
||||
}
|
||||
|
||||
ARCH=${ARCH:-"$(guessArch)"}
|
||||
ARCH=${ARCH:?"Failed to guess ARCH"}
|
||||
export ARCH
|
||||
HOST_ARCH=${HOST_ARCH:-$(docker version | grep 'OS/Arch:' | tail -n+2 | awk '{print $2}' | cut -f2 -d'/')}
|
||||
HOST_ARCH=${HOST_ARCH:?"Failed to guess HOST_ARCH"}
|
||||
ARCH=${ARCH:-"$HOST_ARCH"}
|
||||
export HOST_ARCH ARCH
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
[ -f "./.docker-env.${ARCH}" ] && . ./.docker-env.${ARCH} || echo "WARNING: missing .docker-env.${ARCH} (to use an ${ARCH} docker host)"
|
||||
[ -f "./.docker-env.${HOST_ARCH}" ] && . ./.docker-env.${HOST_ARCH} || echo "WARNING: missing .docker-env.${HOST_ARCH} (to use an ${HOST_ARCH} docker host)"
|
||||
|
||||
. ./build.conf.${HOST_ARCH}
|
||||
export HOST_DOCKER_BINARY_URL=${DOCKER_BINARY_URL}
|
||||
docker inspect $DAPPER_BASE >/dev/null 2>&1 || docker pull $DAPPER_BASE
|
||||
docker tag $DAPPER_BASE rancher/os-dapper-base
|
||||
|
||||
set -a
|
||||
. ./build.conf.${ARCH}
|
||||
set +a
|
||||
|
||||
docker inspect $DAPPER_BASE >/dev/null 2>&1 || docker pull $DAPPER_BASE
|
||||
docker tag $DAPPER_BASE rancher/os-dapper-base
|
||||
|
@@ -4,4 +4,4 @@ set -e
|
||||
cd $(dirname $0)/..
|
||||
. ./scripts/dapper-common
|
||||
|
||||
dapper make ARCH=${ARCH} "$@"
|
||||
dapper make HOST_ARCH=${HOST_ARCH} ARCH=${ARCH} "$@"
|
||||
|
@@ -3,15 +3,10 @@ set -ex
|
||||
|
||||
TARGET=$(pwd)/${1}
|
||||
|
||||
ARCH=${ARCH:?"ARCH not set"}
|
||||
SUFFIX=${SUFFIX:-""}
|
||||
DFS_IMAGE=${DFS_IMAGE:?"DFS_IMAGE not set"}
|
||||
IS_ROOTFS=${IS_ROOTFS:-0}
|
||||
|
||||
suffix=""
|
||||
[ "$ARCH" == "amd64" ] || suffix="_${ARCH}"
|
||||
|
||||
DFS_ARCH_IMAGE=${DFS_IMAGE}${suffix}
|
||||
|
||||
cd $(dirname $0)/..
|
||||
. scripts/build-common
|
||||
|
||||
@@ -41,7 +36,7 @@ cp assets/selinux/seusers ${INITRD_DIR}/usr/etc/selinux/ros/
|
||||
cp assets/selinux/lxc_contexts ${INITRD_DIR}/usr/etc/selinux/ros/contexts/
|
||||
cp assets/selinux/failsafe_context ${INITRD_DIR}/usr/etc/selinux/ros/contexts/
|
||||
|
||||
DFS_ARCH=$(docker create ${DFS_ARCH_IMAGE})
|
||||
DFS_ARCH=$(docker create ${DFS_IMAGE}${SUFFIX})
|
||||
trap "docker rm -fv ${DFS_ARCH}" EXIT
|
||||
|
||||
docker export ${DFS_ARCH} | tar xvf - -C ${INITRD_DIR} --exclude=usr/bin/dockerlaunch \
|
||||
@@ -53,7 +48,7 @@ docker export ${DFS_ARCH} | tar xvf - -C ${INITRD_DIR} --exclude=usr/bin/dockerl
|
||||
usr
|
||||
|
||||
if [ "$IS_ROOTFS" == "1" ]; then
|
||||
DFS=$(docker run -d --privileged -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) ${DFS_ARCH_IMAGE})
|
||||
DFS=$(docker run -d --privileged -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) ${DFS_IMAGE})
|
||||
trap "docker rm -fv ${DFS_ARCH} ${DFS}" EXIT
|
||||
docker exec -i ${DFS} docker load < ${BUILD}/images.tar
|
||||
docker stop ${DFS}
|
||||
|
@@ -8,6 +8,12 @@ VERSION=${VERSION:?"VERSION not set"}
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
strip_bin=$(which strip)
|
||||
[ "${ARCH}" == "arm" ] && export GOARM=6
|
||||
if [ "${TOOLCHAIN}" != "" ]; then
|
||||
export CC=/usr/bin/${TOOLCHAIN}-gcc
|
||||
export CGO_ENABLED=1
|
||||
strip_bin=/usr/${TOOLCHAIN}/bin/strip
|
||||
fi
|
||||
GOARCH=${ARCH} go build -tags netgo -installsuffix netgo -ldflags "-X github.com/rancher/os/config.VERSION=${VERSION} -linkmode external -extldflags -static" -o ${ros}
|
||||
strip --strip-all ${ros}
|
||||
${strip_bin} --strip-all ${ros}
|
||||
|
Reference in New Issue
Block a user