mirror of
https://github.com/rancher/os.git
synced 2025-09-01 14:48:55 +00:00
Refactor build scripts
This commit is contained in:
5
scripts/build
Executable file
5
scripts/build
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
$(dirname $0)/build-target
|
||||
$(dirname $0)/build-host
|
@@ -1,2 +0,0 @@
|
||||
BUILD=$(pwd)/build
|
||||
DIST=$(pwd)/dist
|
12
scripts/build-host
Executable file
12
scripts/build-host
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
export OUTPUT=bin/host_ros
|
||||
|
||||
if [[ -e bin/ros && "$HOST_ARCH" = "$ARCH" ]]; then
|
||||
echo Creating $OUTPUT
|
||||
cp bin/ros $OUTPUT
|
||||
else
|
||||
GOARCH=${HOST_ARCH} TOOLCHAIN= ./scripts/build-target
|
||||
fi
|
38
scripts/build-images
Executable file
38
scripts/build-images
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
export ARCH=${ARCH:-"amd64"}
|
||||
BASE=images
|
||||
|
||||
source $(dirname $0)/version
|
||||
cd $(dirname $0)/..
|
||||
|
||||
DO_PUSH="$1"
|
||||
|
||||
if [ "${DO_PUSH}" == "--push" ]; then
|
||||
for i in $BASE/[0-9]*; do
|
||||
name="os-$(echo ${i} | cut -f2 -d-)"
|
||||
tag="${OS_REPO}/${name}:${VERSION}${SUFFIX}"
|
||||
echo Pushing ${tag}
|
||||
docker push ${tag} || :
|
||||
done
|
||||
else
|
||||
for i in $BASE/[0-9]*; do
|
||||
name="os-$(echo ${i} | cut -f2 -d-)"
|
||||
tag="${OS_REPO}/${name}:${VERSION}${SUFFIX}"
|
||||
echo Building ${tag}
|
||||
if [ -x ${i}/prebuild.sh ]; then
|
||||
if ${i}/prebuild.sh; then
|
||||
dapper -d --build -f ${i}/Dockerfile -- -t rancher/${name} ${i}
|
||||
docker tag rancher/${name} ${tag}
|
||||
elif [ "$?" != "42" ]; then
|
||||
exit 1
|
||||
else
|
||||
echo "WARN: Skipping ${tag}"
|
||||
fi
|
||||
else
|
||||
dapper -d --build -f ${i}/Dockerfile -- -t rancher/${name} ${i}
|
||||
docker tag rancher/${name} ${tag}
|
||||
fi
|
||||
done
|
||||
fi
|
17
scripts/build-target
Executable file
17
scripts/build-target
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
ros="$1"
|
||||
|
||||
source $(dirname $0)/version
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
if [ "${!TOOLCHAIN}" != "" ]; then
|
||||
export CC=/usr/bin/${!TOOLCHAIN}-gcc
|
||||
export CGO_ENABLED=1
|
||||
fi
|
||||
|
||||
OUTPUT=${OUTPUT:-bin/ros}
|
||||
echo Building $OUTPUT
|
||||
go build -tags netgo -installsuffix netgo -ldflags "-X github.com/rancher/os/config.VERSION=${VERSION} -linkmode external -extldflags -static" -o ${OUTPUT}
|
@@ -1,38 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -x -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
: RANCHER_ISO=${RANCHER_ISO:="./dist/artifacts/rancheros.iso"}
|
||||
|
||||
if [[ -z $RANCHER_ISO ]]; then
|
||||
echo "Need an ISO..." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -e ${RANCHER_ISO} ]; then
|
||||
echo "Could not find ISO ${RANCHER_ISO}..." 1>&2
|
||||
echo "have you run build.sh yet?" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
GITSHA=$(git rev-parse --short HEAD)
|
||||
VM="RancherOS-${GITSHA}"
|
||||
|
||||
sudo chown -R `whoami` ./dist
|
||||
|
||||
VBoxManage createhd --format vmdk --filename ./dist/artifacts/$VM.vmdk --size 40000
|
||||
|
||||
VBoxManage createvm --name $VM --ostype "Linux_64" --register
|
||||
|
||||
VBoxManage storagectl $VM --name "SATA" --add sata --portcount 2
|
||||
VBoxManage storageattach $VM --storagectl "SATA" --port 0 --type hdd --medium ./dist/artifacts/$VM.vmdk
|
||||
VBoxManage storageattach $VM --storagectl "SATA" --port 1 --type dvddrive --medium ${RANCHER_ISO}
|
||||
|
||||
VBoxManage modifyvm $VM --memory 1024 --acpi on --boot1 disk --boot2 dvd
|
||||
VBoxManage modifyvm $VM --rtcuseutc on
|
||||
VBoxManage modifyvm $VM --usb off
|
||||
VBoxManage modifyvm $VM --audio none
|
||||
VBoxManage modifyvm $VM --nic1 nat
|
||||
VBoxManage modifyvm $VM --nictype1 virtio
|
||||
|
||||
#VBoxManage startvm $VM
|
13
scripts/ci
13
scripts/ci
@@ -1,7 +1,10 @@
|
||||
#!/bin/sh
|
||||
set -ex
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
. ./scripts/dapper-common
|
||||
cd $(dirname $0)
|
||||
|
||||
dapper -d -O make HOST_ARCH=${HOST_ARCH} ARCH=${ARCH} DEV_BUILD=1 test
|
||||
./build
|
||||
./test
|
||||
#./validate
|
||||
./prepare
|
||||
./package
|
||||
|
4
scripts/clean
Executable file
4
scripts/clean
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd $(dirname $0)/..
|
||||
rm -rf build dist bin images/*/build
|
@@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
set -ex
|
||||
|
||||
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.${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
|
11
scripts/entry
Executable file
11
scripts/entry
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
trap "chown -R $DAPPER_UID:$DAPPER_GID ." exit
|
||||
|
||||
mkdir -p bin dist build
|
||||
if [ -e ./scripts/$1 ]; then
|
||||
./scripts/"$@"
|
||||
else
|
||||
"$@"
|
||||
fi
|
@@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
set -a
|
||||
. build.conf
|
||||
. build.conf.${ARCH}
|
||||
|
||||
SUFFIX=""
|
||||
[ "${ARCH}" == "amd64" ] || SUFFIX="_${ARCH}"
|
||||
set +a
|
||||
|
||||
build/host_ros c generate < os-config.tpl.yml > $1
|
52
scripts/layout
Executable file
52
scripts/layout
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
source $(dirname $0)/version
|
||||
cd $(dirname $0)/..
|
||||
|
||||
BUILD=build
|
||||
INITRD_DIR=${BUILD}/initrd
|
||||
|
||||
echo Create initrd layout in $INITRD_DIR
|
||||
|
||||
rm -rf ${INITRD_DIR}
|
||||
mkdir -p ${INITRD_DIR}/usr/{etc,bin,share/ros}
|
||||
|
||||
cp -rf assets/selinux ${INITRD_DIR}/usr/etc
|
||||
cp build/images.tar ${INITRD_DIR}/usr/share/ros/
|
||||
cp build/os-config.yml ${INITRD_DIR}/usr/share/ros/
|
||||
cp bin/ros ${INITRD_DIR}/usr/bin/
|
||||
cp ${DOWNLOADS}/docker ${INITRD_DIR}/usr/bin/docker
|
||||
ln -s usr/bin/ros ${INITRD_DIR}/init
|
||||
ln -s bin ${INITRD_DIR}/usr/sbin
|
||||
ln -s usr/sbin ${INITRD_DIR}/sbin
|
||||
|
||||
|
||||
if [ -e ${DOWNLOADS}/kernel.tar.gz ]; then
|
||||
tar xf ${DOWNLOADS}/kernel.tar.gz -C ${INITRD_DIR}/usr/ lib/
|
||||
fi
|
||||
|
||||
if [ -e ${DOWNLOADS}/policy.29 ]; then
|
||||
mkdir -p ${INITRD_DIR}/usr/etc/selinux/ros/policy/
|
||||
cp ${DOWNLOADS}/policy.29 ${INITRD_DIR}/usr/etc/selinux/ros/policy/
|
||||
fi
|
||||
|
||||
DFS_ARCH=$(docker create ${DFS_IMAGE}${SUFFIX})
|
||||
trap "docker rm -fv ${DFS_ARCH} >/dev/null" EXIT
|
||||
|
||||
docker export ${DFS_ARCH} | tar xf - -C ${INITRD_DIR} --exclude=usr/bin/dockerlaunch \
|
||||
--exclude=usr/bin/docker \
|
||||
--exclude=usr/share/git-core \
|
||||
--exclude=usr/bin/git \
|
||||
--exclude=usr/bin/ssh \
|
||||
--exclude=usr/libexec/git-core \
|
||||
usr
|
||||
|
||||
tar xf ${DOWNLOADS}/kernel.tar.gz -C ${BUILD} boot/
|
||||
|
||||
if [ -e ${BUILD}/boot/vmlinuz-* ]; then
|
||||
mkdir -p dist/artifacts
|
||||
cp ${BUILD}/boot/vmlinuz-* dist/artifacts/vmlinuz
|
||||
fi
|
||||
|
||||
cat /proc/sys/kernel/random/uuid > ${INITRD_DIR}/.id
|
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
. ./scripts/dapper-common
|
||||
|
||||
dapper make HOST_ARCH=${HOST_ARCH} ARCH=${ARCH} "$@"
|
@@ -1,12 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
|
||||
cd $(dirname $0)/..
|
||||
. scripts/build-common
|
||||
|
||||
images="$(build/host_ros c images -i build/os-config.yml)"
|
||||
for i in ${images}; do
|
||||
[ "${FORCE_PULL}" != "1" ] && docker inspect $i >/dev/null 2>&1 || docker pull $i;
|
||||
done
|
||||
|
||||
docker save ${images} > ${BUILD}/images.tar
|
@@ -1,73 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
|
||||
TARGET=$(pwd)/${1}
|
||||
|
||||
SUFFIX=${SUFFIX:-""}
|
||||
DFS_IMAGE=${DFS_IMAGE:?"DFS_IMAGE not set"}
|
||||
IS_ROOTFS=${IS_ROOTFS:-0}
|
||||
|
||||
cd $(dirname $0)/..
|
||||
. scripts/build-common
|
||||
|
||||
INITRD_DIR=${BUILD}/initrd
|
||||
|
||||
rm -rf ${INITRD_DIR}/{usr,init}
|
||||
mkdir -p ${INITRD_DIR}/usr/{bin,share/ros}
|
||||
mkdir -p ${INITRD_DIR}/var/lib/system-docker
|
||||
mkdir -p ${INITRD_DIR}/usr/etc/selinux/ros/{policy,contexts}
|
||||
|
||||
if [ "$IS_ROOTFS" == "0" ]; then
|
||||
cp -rf ${BUILD}/kernel/lib ${INITRD_DIR}/usr/
|
||||
fi
|
||||
cp assets/docker ${INITRD_DIR}/usr/bin/docker
|
||||
if [ "$IS_ROOTFS" == "0" ]; then
|
||||
cp ${BUILD}/images.tar ${INITRD_DIR}/usr/share/ros/
|
||||
fi
|
||||
cp build/os-config.yml ${INITRD_DIR}/usr/share/ros/
|
||||
cp bin/ros ${INITRD_DIR}/usr/bin/
|
||||
ln -s usr/bin/ros ${INITRD_DIR}/init
|
||||
ln -s bin ${INITRD_DIR}/usr/sbin
|
||||
ln -s usr/sbin ${INITRD_DIR}/sbin
|
||||
|
||||
cp assets/selinux/config ${INITRD_DIR}/usr/etc/selinux/
|
||||
cp assets/selinux/policy.29 ${INITRD_DIR}/usr/etc/selinux/ros/policy/
|
||||
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/
|
||||
|
||||
if [ "$ARCH" == "amd64" ]; then
|
||||
KERNEL_RELEASE=$(tar xvf assets/modules.tar.gz -C ${INITRD_DIR} | cut -f4 -d/ | cut -f1 -d ' ')
|
||||
depmod -a -b ${INITRD_DIR}/usr $KERNEL_RELEASE
|
||||
fi
|
||||
|
||||
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 \
|
||||
--exclude=usr/bin/docker \
|
||||
--exclude=usr/share/git-core \
|
||||
--exclude=usr/bin/git \
|
||||
--exclude=usr/bin/ssh \
|
||||
--exclude=usr/libexec/git-core \
|
||||
usr
|
||||
|
||||
if [ "$IS_ROOTFS" == "1" ]; then
|
||||
DFS=$(docker run -d --privileged -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) ${DFS_IMAGE}${SUFFIX})
|
||||
trap "docker rm -fv ${DFS_ARCH} ${DFS}" EXIT
|
||||
docker exec -i ${DFS} docker load < ${BUILD}/images.tar
|
||||
docker stop ${DFS}
|
||||
docker run --rm --volumes-from=${DFS} rancher/os-dapper-base tar -c -C /var/lib/docker ./image | tar -x -C ${INITRD_DIR}/var/lib/system-docker
|
||||
docker run --rm --volumes-from=${DFS} rancher/os-dapper-base tar -c -C /var/lib/docker ./overlay | tar -x -C ${INITRD_DIR}/var/lib/system-docker
|
||||
|
||||
cd ${INITRD_DIR}
|
||||
|
||||
tar -czf ${TARGET} .
|
||||
else
|
||||
COMPRESS=lzma
|
||||
[ "$DEV_BUILD" == "1" ] && COMPRESS="gzip -1"
|
||||
|
||||
cd ${INITRD_DIR}
|
||||
|
||||
find | cpio -H newc -o | ${COMPRESS} > ${TARGET}
|
||||
fi
|
@@ -1,12 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
|
||||
cd $(dirname $0)/..
|
||||
. scripts/build-common
|
||||
|
||||
cd ${DIST}/artifacts
|
||||
rm -f iso-checksums.txt || :
|
||||
|
||||
for algo in 'sha256' 'md5'; do
|
||||
echo "$algo: `${algo}sum rancheros.iso`" >> iso-checksums.txt;
|
||||
done
|
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e -x
|
||||
|
||||
# This script will convert an Ubuntu deb file to the kernel tar structure the RancherOS build expects
|
||||
# For example
|
||||
#
|
||||
# ./scripts/mk-kernel-tar-from-deb.sh linux-image-3.19.0-28-generic_3.19.0-28.30_amd64.deb linux-image-extra-3.19.0-28-generic_3.19.0-28.30_amd64.deb linux-firmware_1.143.3_all.deb
|
||||
#
|
||||
|
||||
mkdir -p $(dirname $0)/../build
|
||||
BUILD=$(mktemp -d $(dirname $0)/../build/deb-XXXXX)
|
||||
mkdir -p $BUILD
|
||||
|
||||
extract()
|
||||
{
|
||||
if [ ! -e $1 ]; then
|
||||
echo $1 does not exist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local deb=$(readlink -f $1)
|
||||
|
||||
cd $BUILD
|
||||
rm -f data.tar.* 2>/dev/null || true
|
||||
ar x $deb
|
||||
tar xvf data.tar.*
|
||||
cd -
|
||||
}
|
||||
|
||||
for i in "$@"; do
|
||||
extract $i
|
||||
done
|
||||
|
||||
cd $BUILD
|
||||
|
||||
KVER=$(ls ./lib/modules)
|
||||
depmod -b . $KVER
|
||||
|
||||
echo Creating ${OLDPWD}/kernel.tar.gz
|
||||
tar cvzf ${OLDPWD}/kernel.tar.gz ./lib boot/vmlinuz*
|
||||
echo Created ${OLDPWD}/kernel.tar.gz
|
||||
|
||||
cd -
|
||||
rm -rf ${BUILD}
|
@@ -1,19 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
|
||||
ros="$1"
|
||||
|
||||
ARCH=${ARCH:?"ARCH not set"}
|
||||
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/bin/${TOOLCHAIN}-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_bin} --strip-all ${ros}
|
8
scripts/package
Executable file
8
scripts/package
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)
|
||||
|
||||
./package-rootfs
|
||||
./package-initrd
|
||||
./package-iso
|
41
scripts/package-initrd
Executable file
41
scripts/package-initrd
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
rootfs() {
|
||||
DFS=$(docker run -d --privileged -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) ${DFS_IMAGE}${SUFFIX})
|
||||
trap "docker rm -fv ${DFS_ARCH} ${DFS}" EXIT
|
||||
docker exec -i ${DFS} docker load < ${INITRD_DIR}/usr/share/ros/images.tar
|
||||
docker stop ${DFS}
|
||||
docker run --rm --volumes-from=${DFS} rancher/os-dapper-base tar -c -C /var/lib/docker ./image | tar -x -C ${PREPOP_DIR}
|
||||
docker run --rm --volumes-from=${DFS} rancher/os-dapper-base tar -c -C /var/lib/docker ./overlay | tar -x -C ${PREPOP_DIR}
|
||||
|
||||
tar -cf ${ARTIFACTS}/rootfs.tar --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} .
|
||||
tar -rf ${ARTIFACTS}/rootfs.tar --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} .
|
||||
rm -f ${ARTIFACTS}/rootfs.tar.gz
|
||||
gzip ${ARTIFACTS}/rootfs.tar
|
||||
}
|
||||
|
||||
initrd() {
|
||||
COMPRESS=lzma
|
||||
[ "$DEV_BUILD" == "1" ] && COMPRESS="gzip -1"
|
||||
|
||||
pushd ${INITRD_DIR} >/dev/null
|
||||
|
||||
find | cpio -H newc -o | ${COMPRESS} > ${INITRD}
|
||||
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
BUILD=$(pwd)/build
|
||||
IMAGE_CACHE=${BUILD}/image-cache
|
||||
PREPOP_DIR=${IMAGE_CACHE}/var/lib/system-docker
|
||||
INITRD_DIR=${BUILD}/initrd
|
||||
ARTIFACTS=$(pwd)/dist/artifacts
|
||||
INITRD=${ARTIFACTS}/initrd
|
||||
|
||||
mkdir -p ${ARTIFACTS} ${PREPOP_DIR}
|
||||
|
||||
rootfs
|
||||
initrd
|
@@ -1,23 +1,24 @@
|
||||
#!/bin/bash
|
||||
set -ex
|
||||
set -e
|
||||
|
||||
source $(dirname $0)/version
|
||||
cd $(dirname $0)/..
|
||||
. scripts/build-common
|
||||
|
||||
ARTIFACTS=$(pwd)/dist/artifacts
|
||||
CD=${BUILD}/cd
|
||||
|
||||
mkdir -p ${CD}/boot/isolinux
|
||||
mkdir -p ${CD}/boot/isolinux
|
||||
|
||||
cp ${DIST}/artifacts/initrd ${CD}/boot
|
||||
cp ${DIST}/artifacts/vmlinuz ${CD}/boot
|
||||
cp ${ARTIFACTS}/initrd ${CD}/boot
|
||||
cp ${ARTIFACTS}/vmlinuz ${CD}/boot
|
||||
cp scripts/isolinux.cfg ${CD}/boot/isolinux
|
||||
cp /usr/lib/ISOLINUX/isolinux.bin ${CD}/boot/isolinux
|
||||
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 ${CD}/boot/isolinux
|
||||
cd ${CD} && xorriso \
|
||||
-publisher "Rancher Labs, Inc." \
|
||||
-as mkisofs \
|
||||
-l -J -R -V "RancherOS" \
|
||||
-l -J -R -V "${DISTRIB_ID}" \
|
||||
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||||
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
|
||||
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
|
||||
-o ${DIST}/artifacts/rancheros.iso ${CD}
|
||||
-o ${ARTIFACTS}/$(echo ${DISTRIB_ID} | tr '[:upper:]' '[:lower:]').iso ${CD}
|
41
scripts/package-rootfs
Executable file
41
scripts/package-rootfs
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
rootfs() {
|
||||
DFS=$(docker run -d --privileged -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) ${DFS_IMAGE}${SUFFIX})
|
||||
trap "docker rm -fv ${DFS_ARCH} ${DFS}" EXIT
|
||||
docker exec -i ${DFS} docker load < ${INITRD_DIR}/usr/share/ros/images.tar
|
||||
docker stop ${DFS}
|
||||
docker run --rm --volumes-from=${DFS} rancher/os-dapper-base tar -c -C /var/lib/docker ./image | tar -x -C ${PREPOP_DIR}
|
||||
docker run --rm --volumes-from=${DFS} rancher/os-dapper-base tar -c -C /var/lib/docker ./overlay | tar -x -C ${PREPOP_DIR}
|
||||
|
||||
tar -cf ${ARTIFACTS}/rootfs.tar --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} .
|
||||
tar -rf ${ARTIFACTS}/rootfs.tar --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} .
|
||||
rm -f ${ARTIFACTS}/rootfs.tar.gz
|
||||
gzip ${ARTIFACTS}/rootfs.tar
|
||||
}
|
||||
|
||||
initrd() {
|
||||
COMPRESS=lzma
|
||||
[ "$DEV_BUILD" == "1" ] && COMPRESS="gzip -1"
|
||||
|
||||
pushd ${INITRD_DIR} >/dev/null
|
||||
|
||||
find | cpio -H newc -o | ${COMPRESS} > ${INITRD}
|
||||
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
BUILD=$(pwd)/build
|
||||
IMAGE_CACHE=${BUILD}/image-cache
|
||||
PREPOP_DIR=${IMAGE_CACHE}/var/lib/system-docker
|
||||
INITRD_DIR=${BUILD}/initrd
|
||||
ARTIFACTS=$(pwd)/dist/artifacts
|
||||
INITRD=${ARTIFACTS}/initrd
|
||||
|
||||
mkdir -p ${ARTIFACTS} ${PREPOP_DIR}
|
||||
|
||||
rootfs
|
||||
initrd
|
15
scripts/prepare
Executable file
15
scripts/prepare
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
source $(dirname $0)/version
|
||||
|
||||
cd $(dirname $0)
|
||||
|
||||
if [ ! -e ./bin/host_ros ]; then
|
||||
./build
|
||||
fi
|
||||
|
||||
./template
|
||||
./build-images
|
||||
./tar-images
|
||||
./layout
|
3
scripts/release
Executable file
3
scripts/release
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
exec $(dirname $0)/ci
|
62
scripts/run
62
scripts/run
@@ -3,8 +3,6 @@ set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
source scripts/build-common
|
||||
|
||||
HOST_ARCH=${HOST_ARCH:-amd64}
|
||||
ARCH=${ARCH:-amd64}
|
||||
|
||||
@@ -34,11 +32,13 @@ cd_arm() {
|
||||
}
|
||||
declare -A cd=( ["amd64"]="cd_amd64" ["arm"]="cd_arm" ["arm64"]="cd_arm" )
|
||||
|
||||
BUILD=build
|
||||
BASE=$(pwd)
|
||||
UNAME=$(uname)
|
||||
|
||||
KERNEL=${BASE}/dist/artifacts/vmlinuz
|
||||
INITRD=${BASE}/dist/artifacts/initrd
|
||||
INITRD_SRC=${BASE}/build/initrd
|
||||
INITRD=${BASE}/build/initrd.tmp
|
||||
|
||||
QEMU=1
|
||||
FORMAT=1
|
||||
@@ -103,42 +103,17 @@ if [ "$QEMU" == "1" ] && ! which qemu-system-${QEMUARCH}; then
|
||||
QEMU=0
|
||||
fi
|
||||
|
||||
if [[ ! -e ${KERNEL} || ! -e ${INITRD} ]]; then
|
||||
echo "Failed to find ${KERNEL} or ${INITRD}" 1>&2
|
||||
if [[ ! -e ${KERNEL} || ! -e ${INITRD_SRC} ]]; then
|
||||
echo "Failed to find ${KERNEL} or ${INITRD_SRC}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Linux and Darwin SHA1 sum binary are different, pick which to use
|
||||
if [ "$UNAME" == "Darwin" ]; then sha1sum=$(which shasum)
|
||||
elif [ "$UNAME" == "Linux" ]; then sha1sum=$(which sha1sum);
|
||||
fi
|
||||
|
||||
if [ "$REBUILD" == "1" ]; then
|
||||
INITRD_TMP=${BUILD}/$(${sha1sum} ${INITRD} | awk '{print $1}')
|
||||
INITRD_CURRENT=${BUILD}/initrd-current
|
||||
INITRD_TEST=${BUILD}/initrd.test
|
||||
|
||||
if [ ! -d ${INITRD_TMP} ]; then
|
||||
mkdir -p ${INITRD_TMP}
|
||||
pushd ${INITRD_TMP}
|
||||
xz -dfc ${INITRD} | gunzip -f | cpio -idm
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ -e ${INITRD_CURRENT} ]; then
|
||||
rm -f ${INITRD_CURRENT}
|
||||
fi
|
||||
|
||||
ln -s ${INITRD_TMP} ${INITRD_CURRENT}
|
||||
|
||||
mkdir -p ${INITRD_TMP}/usr/{bin,share/ros}
|
||||
cp bin/ros ${INITRD_TMP}/usr/bin/
|
||||
cp -f build/os-config.yml ${INITRD_TMP}/usr/share/ros/
|
||||
|
||||
pushd ${INITRD_TMP}
|
||||
find . | cpio -H newc -o | gzip > ${INITRD_TEST}
|
||||
popd
|
||||
INITRD=${INITRD_TEST}
|
||||
cp bin/ros ${INITRD_SRC}/usr/bin/ros
|
||||
cp build/os-config.yml ${INITRD_SRC}/usr/share/ros
|
||||
pushd ${INITRD_SRC} >/dev/null
|
||||
find . | cpio -H newc -o | gzip -1 > ${INITRD}
|
||||
popd >/dev/null
|
||||
fi
|
||||
|
||||
KERNEL_ARGS="quiet rancher.password=rancher console=${TTYCONS} ${QEMU_APPEND}"
|
||||
@@ -162,17 +137,9 @@ if [ "$QEMU" == "1" ]; then
|
||||
qemu-img create -f qcow2 -o size=10G ${HD}
|
||||
fi
|
||||
|
||||
|
||||
CCIMG=${BUILD}/cc.img
|
||||
CCDEV=$(losetup -f)
|
||||
CCROOT=${BUILD}/cloud-config
|
||||
dd if=/dev/zero of=${CCIMG} bs=1024 count=512
|
||||
losetup ${CCDEV} ${CCIMG}
|
||||
mkfs.vfat -n "config-2" ${CCDEV}
|
||||
|
||||
rm -rf ${CCROOT}
|
||||
mkdir -p ${CCROOT}
|
||||
mount ${CCDEV} ${CCROOT}
|
||||
|
||||
USER_DATA=${CCROOT}/openstack/latest/user_data
|
||||
mkdir -p $(dirname ${USER_DATA})
|
||||
@@ -185,10 +152,6 @@ if [ "$QEMU" == "1" ]; then
|
||||
echo "- $(<${BASE}/assets/rancher.key.pub)" >> ${USER_DATA}
|
||||
fi
|
||||
|
||||
umount ${CCROOT}
|
||||
losetup -d ${CCDEV}
|
||||
|
||||
|
||||
CPU=${cpu["$ARCH"]}
|
||||
if [ "$KVM" == "1" ] && [ "$ARCH" == "$HOST_ARCH" ]; then
|
||||
KVM_ENABLE="-enable-kvm"
|
||||
@@ -204,12 +167,15 @@ if [ "$QEMU" == "1" ]; then
|
||||
-initrd ${INITRD} \
|
||||
-m 2048 \
|
||||
${network["$ARCH"]} \
|
||||
$(eval "${cd["$ARCH"]} ${CCIMG}") \
|
||||
$(eval "${hd["$ARCH"]} ${HD}") \
|
||||
-smp 1 \
|
||||
-append "${KERNEL_ARGS}" \
|
||||
-nographic \
|
||||
-display none \
|
||||
-fsdev local,security_model=passthrough,readonly,id=fsdev0,path=${CCROOT} \
|
||||
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=config-2 \
|
||||
-fsdev local,security_model=none,id=fsdev1,path=${HOME} \
|
||||
-device virtio-9p-pci,id=fs1,fsdev=fsdev1,mount_tag=home \
|
||||
${QEMU_ARGS} \
|
||||
"${@}"
|
||||
|
||||
|
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
. ./scripts/dapper-common
|
||||
|
||||
exec dapper -d -s
|
15
scripts/tar-images
Executable file
15
scripts/tar-images
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
mkdir -p build
|
||||
|
||||
IMAGES=$(bin/host_ros c images -i build/os-config.yml)
|
||||
for i in $IMAGES; do
|
||||
if [ "${FORCE_PULL}" = "1" ] || ! docker inspect $i >/dev/null 2>&1; then
|
||||
docker pull $i
|
||||
fi
|
||||
done
|
||||
|
||||
docker save ${IMAGES} > build/images.tar
|
9
scripts/template
Executable file
9
scripts/template
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
source $(dirname $0)/version
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
mkdir -p build
|
||||
./bin/host_ros c generate < os-config.tpl.yml > build/os-config.yml
|
13
scripts/test
13
scripts/test
@@ -1,17 +1,10 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
if [[ ! -x "$(which go)" && -x /usr/local/go/bin/go ]]; then
|
||||
PATH=/usr/local/go/bin:${PATH}
|
||||
fi
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
result=$(find . -name "*.go" | grep -v ./Godeps | xargs gofmt -l)
|
||||
for i in $result; do
|
||||
echo $i
|
||||
done
|
||||
echo Running tests
|
||||
|
||||
[ -n "$result" ] && exit 1
|
||||
PACKAGES=". $(find -name '*.go' | xargs -I{} dirname {} | cut -f2 -d/ | sort -u | grep -Ev '(^\.$|.git|.trash-cache|vendor|bin)' | sed -e 's!^!./!' -e 's!$!/...!')"
|
||||
|
||||
echo OK
|
||||
go test -race -cover -tags=test ${PACKAGES}
|
||||
|
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
PACKAGES="$(find -name '*.go' | xargs -I{} dirname {} | cut -f2 -d/ | sort -u | grep -Ev '(^\.$|.git|.trash-cache|vendor)' | sed -e 's!^!./!' -e 's!$!/...!')"
|
||||
|
||||
go test -race -cover -tags=test $PACKAGES
|
20
scripts/validate
Executable file
20
scripts/validate
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
echo Running validation
|
||||
|
||||
PACKAGES=". $(find -name '*.go' | xargs -I{} dirname {} | cut -f2 -d/ | sort -u | grep -Ev '(^\.$|.git|.trash-cache|vendor|bin)' | sed -e 's!^!./!' -e 's!$!/...!')"
|
||||
|
||||
echo Running: go vet
|
||||
go vet ${PACKAGES}
|
||||
echo Running: golint
|
||||
for i in ${PACKAGES}; do
|
||||
if [ -n "$(golint $i | grep -v 'should have comment.*or be unexported' | tee /dev/stderr)" ]; then
|
||||
failed=true
|
||||
fi
|
||||
done
|
||||
test -z "$failed"
|
||||
echo Running: go fmt
|
||||
test -z "$(go fmt ${PACKAGES} | tee /dev/stderr)"
|
@@ -1,55 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
package=$(go list)
|
||||
prefix="${package}/vendor"
|
||||
require="github.com/stretchr/testify/require" # the only test import
|
||||
|
||||
imports=( )
|
||||
importsLen=${#imports[@]}
|
||||
|
||||
collectImports() {
|
||||
imports=( $(GOOS=linux go list -f '{{join .Deps "\n"}}' | egrep "^${prefix}/" | sed s%"^${package}.*/vendor/"%./vendor/%) )
|
||||
imports=(
|
||||
"${imports[@]}" "./vendor/${require}"
|
||||
$(GOOS=linux go list -f '{{join .Deps "\n"}}' "${prefix}/${require}" | egrep "^${prefix}/" | sed s%"^${package}.*/vendor/"%./vendor/%)
|
||||
)
|
||||
echo importsLen: $importsLen
|
||||
echo collected imports: ${#imports[@]}
|
||||
}
|
||||
|
||||
nonImports() {
|
||||
while read path; do
|
||||
skip=0
|
||||
for i in "${imports[@]}"; do
|
||||
[[ "${i}" == "${path}" || ${i} = ${path}/* ]] && skip=1 && break
|
||||
done
|
||||
[ "$skip" == "0" ] && echo ${path}
|
||||
done
|
||||
}
|
||||
|
||||
collectImports
|
||||
|
||||
while [ ${#imports[@]} != ${importsLen} ]; do
|
||||
importsLen=${#imports[@]}
|
||||
echo '=====> Collected imports'
|
||||
for i in "${imports[@]}"; do
|
||||
echo ${i}
|
||||
done
|
||||
|
||||
echo '=====> Removing unused packages'
|
||||
find ./vendor -type d | nonImports | xargs -I{} rm -rf {}
|
||||
|
||||
echo '=====> Removing empty dirs'
|
||||
emptyDirs=( $(find ./vendor -type d -empty) )
|
||||
while [ ${#emptyDirs[@]} -gt 0 ]; do
|
||||
rmdir ${emptyDirs[@]}
|
||||
emptyDirs=( $(find ./vendor -type d -empty) )
|
||||
done
|
||||
|
||||
collectImports
|
||||
done
|
||||
|
||||
echo '=====> Done!'
|
24
scripts/version
Executable file
24
scripts/version
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -n "$(git status --porcelain --untracked-files=no)" ]; then
|
||||
DIRTY="-dirty"
|
||||
fi
|
||||
|
||||
COMMIT=$(git rev-parse --short HEAD)
|
||||
GIT_TAG=$(git tag -l --contains HEAD | head -n 1)
|
||||
|
||||
if [ -z "$VERSION" ]; then
|
||||
if [[ -z "$DIRTY" && -n "$GIT_TAG" ]]; then
|
||||
VERSION=$GIT_TAG
|
||||
else
|
||||
VERSION="${COMMIT}${DIRTY}"
|
||||
fi
|
||||
fi
|
||||
|
||||
export VERSION COMMIT
|
||||
|
||||
# Suffix
|
||||
export SUFFIX=""
|
||||
if [ -n "${ARCH}" ] && [ "${ARCH}" != "amd64" ]; then
|
||||
SUFFIX="_${ARCH}"
|
||||
fi
|
Reference in New Issue
Block a user