mirror of
https://github.com/rancher/os.git
synced 2025-09-01 14:48:55 +00:00
Initial commit
This commit is contained in:
15
scripts/bootstrap
Executable file
15
scripts/bootstrap
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
apt-get update
|
||||
apt-get install -y curl rsync build-essential syslinux xorriso
|
||||
|
||||
|
||||
curl -sL https://test.docker.com/builds/Linux/x86_64/docker-1.5.0-rc4 > /usr/bin/docker
|
||||
|
||||
chmod +x /usr/bin/docker
|
||||
|
||||
curl -sL https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz | tar xvzf - -C /usr/local
|
29
scripts/build
Executable file
29
scripts/build
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
if [[ ! -x "$(which go)" && -x /usr/local/go/bin/go ]]; then
|
||||
PATH=/usr/local/go/bin:${PATH}
|
||||
fi
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
if [ -f ./build/bootstrap.envs ];then
|
||||
. ./build/bootstrap.envs
|
||||
fi
|
||||
|
||||
export GOPATH=$(pwd)/Godeps/_workspace:$(pwd)/gopath
|
||||
|
||||
PACKAGE=./gopath/src/$(<.package)
|
||||
|
||||
if [ -L ${PACKAGE} ]; then
|
||||
rm ${PACKAGE}
|
||||
fi
|
||||
|
||||
if [ ! -e ${PACKAGE} ]; then
|
||||
mkdir -p $(dirname $PACKAGE)
|
||||
ln -s $(pwd) $PACKAGE
|
||||
fi
|
||||
|
||||
echo export GOPATH=$GOPATH
|
||||
|
||||
mkdir -p bin
|
||||
go build -ldflags "-linkmode external -extldflags -static" -o bin/rancheros
|
125
scripts/build-common
Normal file
125
scripts/build-common
Normal file
@@ -0,0 +1,125 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
: ${ARTIFACTS:=$(pwd)/assets}
|
||||
: ${BUILD:=$(pwd)/build}
|
||||
: ${CONFIG:=$(pwd)/config}
|
||||
: ${DIST:=$(pwd)/dist}
|
||||
|
||||
BUILDROOT=buildroot-2014.11.tar.bz2
|
||||
DOCKER_FILE=${CONFIG}/.dockerfile
|
||||
|
||||
mkdir -p ${BUILD} ${DIST}
|
||||
|
||||
busybox_install()
|
||||
{
|
||||
apt-get update
|
||||
apt-get install -y build-essential wget libncurses5-dev unzip bc
|
||||
|
||||
cd ${BUILD}
|
||||
|
||||
rm -rf ${BUILDROOT/.tar.bz2//}
|
||||
tar xvjf ${ARTIFACTS}/${BUILDROOT}
|
||||
cd ${BUILDROOT/.tar.bz2//}
|
||||
|
||||
cp $1 .config
|
||||
make oldconfig
|
||||
make
|
||||
|
||||
cp output/images/rootfs.tar $2
|
||||
}
|
||||
|
||||
write_base()
|
||||
{
|
||||
if [ "${BASE_WRITTEN}" = "true" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
mkdir -p $(dirname ${DOCKER_FILE})
|
||||
|
||||
cat > ${DOCKER_FILE} << EOF
|
||||
FROM ${DOCKER_BASE:=ubuntu:14.04.1}
|
||||
ENV TERM xterm
|
||||
WORKDIR /source
|
||||
CMD ["/source/scripts/install"]
|
||||
EOF
|
||||
|
||||
BASE_WRITTEN=true
|
||||
}
|
||||
|
||||
run()
|
||||
{
|
||||
local content
|
||||
|
||||
while [ $# -gt 1 ]; do
|
||||
case $1 in
|
||||
--assets)
|
||||
shift 1
|
||||
if [ -e "$1" ]; then
|
||||
content="$content\nCOPY $1 /source/$1"
|
||||
else
|
||||
content="$content\nCOPY $1 /source/"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
shift 1
|
||||
done
|
||||
|
||||
write_base
|
||||
if [ -n "$content" ]; then
|
||||
echo -e "$content" >> ${DOCKER_FILE}
|
||||
fi
|
||||
if [ -n "$1" ]; then
|
||||
echo -e "\nCOPY $1 /source/$1" >> ${DOCKER_FILE}
|
||||
echo -e "RUN /source/$1" >> ${DOCKER_FILE}
|
||||
fi
|
||||
}
|
||||
|
||||
finish()
|
||||
{
|
||||
local cmd="docker build -t ${DOCKER_IMAGE} -f ${DOCKER_FILE} ."
|
||||
echo Running $cmd
|
||||
echo Pwd $(pwd)
|
||||
|
||||
cat ${DOCKER_FILE}
|
||||
|
||||
$cmd
|
||||
}
|
||||
|
||||
reset_docker_build()
|
||||
{
|
||||
BASE_WRITTEN=false
|
||||
}
|
||||
|
||||
check()
|
||||
{
|
||||
local hash=$1
|
||||
local file=$2
|
||||
|
||||
if [ ! -e "$file" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
CURRENT=$(sha1sum $file | awk '{print $1}')
|
||||
|
||||
[ "$hash" = "$CURRENT" ]
|
||||
}
|
||||
|
||||
download()
|
||||
{
|
||||
mkdir -p ${ARTIFACTS}
|
||||
|
||||
local url=$2
|
||||
local file=${ARTIFACTS}/$(basename $2)
|
||||
local hash=$1
|
||||
|
||||
if ! check $hash $file; then
|
||||
curl -sL $url > $file
|
||||
fi
|
||||
|
||||
if ! check $hash $file; then
|
||||
echo "ERROR: $file does not match checksum $hash, got $CURRENT" 1>&2
|
||||
return 1
|
||||
fi
|
||||
}
|
53
scripts/build-images
Executable file
53
scripts/build-images
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
source scripts/build-common
|
||||
|
||||
mkdir -p ${BUILD}/initrd ${DIST}/artifacts
|
||||
|
||||
echo Extracting ${ARTIFACTS}/os-base.tar.xz
|
||||
tar xJf ${ARTIFACTS}/os-base.tar.xz -C ${BUILD}
|
||||
|
||||
cp /etc/ssl/certs/ca-certificates.crt ${BUILD}/ca.crt
|
||||
|
||||
rm -rf ${BUILD}/initrd/lib
|
||||
cp -rf ${BUILD}/dist/kernel/lib ${BUILD}/initrd
|
||||
(
|
||||
cd ${BUILD}/initrd/lib/modules
|
||||
# Taken from boot2docker
|
||||
# Remove useless kernel modules, based on unclejack/debian2docker
|
||||
rm -rf ./*/kernel/sound/*
|
||||
rm -rf ./*/kernel/drivers/gpu/*
|
||||
rm -rf ./*/kernel/drivers/infiniband/*
|
||||
rm -rf ./*/kernel/drivers/isdn/*
|
||||
rm -rf ./*/kernel/drivers/media/*
|
||||
rm -rf ./*/kernel/drivers/staging/lustre/*
|
||||
rm -rf ./*/kernel/drivers/staging/comedi/*
|
||||
rm -rf ./*/kernel/fs/ocfs2/*
|
||||
rm -rf ./*/kernel/net/bluetooth/*
|
||||
rm -rf ./*/kernel/net/mac80211/*
|
||||
rm -rf ./*/kernel/net/wireless/*
|
||||
)
|
||||
cp -f ${ARTIFACTS}/docker* ${BUILD}/initrd/docker
|
||||
chmod +x ${BUILD}/initrd/docker
|
||||
|
||||
cp ${BUILD}/dist/kernel/bzImage ${DIST}/artifacts/vmlinuz
|
||||
|
||||
tar xf ${BUILD}/dist/rootfs-static.tar -C ${BUILD}/initrd --strip-components=2 ./bin/busybox
|
||||
|
||||
if ! docker info >/dev/null 2>&1 && [ -x "$(which wrapdocker)" ]; then
|
||||
wrapdocker
|
||||
fi
|
||||
|
||||
>${BUILD}/tags
|
||||
for i in scripts/dockerimages/[0-9]*; do
|
||||
tag=$(echo $i | cut -f2 -d-)
|
||||
echo Building $tag
|
||||
docker build -t $tag -f $i .
|
||||
echo $tag >> ${BUILD}/tags
|
||||
done
|
||||
|
||||
echo Creating images.tar
|
||||
docker save $(<${BUILD}/tags) > ${BUILD}/initrd/images.tar
|
48
scripts/ci
Executable file
48
scripts/ci
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
export DOCKER_IMAGE=${DOCKER_IMAGE:=rancher-os-build}
|
||||
export DOCKER_BASE=rancher/docker-dind-base:latest
|
||||
|
||||
source scripts/build-common
|
||||
|
||||
DOCKER_FILE=$(pwd)/.dockerfile
|
||||
|
||||
generate_images()
|
||||
{
|
||||
IMAGE_ID=$(docker images --no-trunc -q ${DOCKER_IMAGE})
|
||||
|
||||
if [ -e ${BUILD}/${IMAGE_ID} ]; then
|
||||
DOCKER_BASE=$(<${BUILD}/${IMAGE_ID})
|
||||
else
|
||||
CID=$(docker run -d --privileged ${DOCKER_IMAGE} /source/scripts/build-images)
|
||||
docker logs -f ${CID} &
|
||||
trap "docker rm -f ${CID}" exit
|
||||
docker wait $CID
|
||||
DOCKER_BASE=$(docker commit $CID)
|
||||
|
||||
echo ${DOCKER_BASE} > ${BUILD}/${IMAGE_ID}
|
||||
fi
|
||||
}
|
||||
|
||||
run ./scripts/bootstrap
|
||||
run --assets ./scripts/build-common ./scripts/download
|
||||
run --assets ./scripts/dockerimages --assets ./scripts/build-images
|
||||
finish
|
||||
|
||||
generate_images
|
||||
|
||||
reset_docker_build
|
||||
ARGS=
|
||||
for i in $(ls -d * .* | sort -u | grep -Ev '(\.|\.\.|\.dockerfile|build|dist|.git|scripts|bin)$'); do
|
||||
if [ -d $i ]; then
|
||||
run --assets $i
|
||||
else
|
||||
ARGS="${ARGS} $i"
|
||||
fi
|
||||
done
|
||||
run --assets "${ARGS}" ./scripts/build
|
||||
run --assets ./scripts/install ./scripts/package
|
||||
finish
|
5
scripts/clean
Executable file
5
scripts/clean
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
rm -rf build dist
|
3
scripts/dockerimages/00-base
Normal file
3
scripts/dockerimages/00-base
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM scratch
|
||||
ADD build/dist/rootfs.tar /
|
||||
CMD ["/bin/sh"]
|
5
scripts/dockerimages/01-state
Normal file
5
scripts/dockerimages/01-state
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM base
|
||||
VOLUME /home
|
||||
VOLUME /var/lib/docker
|
||||
VOLUME /var/run
|
||||
CMD ["echo"]
|
3
scripts/dockerimages/02-udev
Normal file
3
scripts/dockerimages/02-udev
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM base
|
||||
COPY scripts/dockerimages/scripts/udev.sh /
|
||||
CMD ["/udev.sh"]
|
2
scripts/dockerimages/03-network
Normal file
2
scripts/dockerimages/03-network
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM base
|
||||
CMD ["udhcpc", "-i", "eth0"]
|
4
scripts/dockerimages/04-userdocker
Normal file
4
scripts/dockerimages/04-userdocker
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM base
|
||||
COPY scripts/dockerimages/scripts/docker.sh /
|
||||
COPY build/ca.crt /etc/ssl/certs/ca-certificates.crt
|
||||
CMD ["/docker.sh"]
|
2
scripts/dockerimages/05-console
Normal file
2
scripts/dockerimages/05-console
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM base
|
||||
CMD ["/bin/sh"]
|
2
scripts/dockerimages/06-rescue
Normal file
2
scripts/dockerimages/06-rescue
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM console
|
||||
CMD ["/bin/sh"]
|
19
scripts/dockerimages/scripts/docker.sh
Executable file
19
scripts/dockerimages/scripts/docker.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
set -x -e
|
||||
|
||||
CGROUPS="perf_event net_cls freezer devices blkio memory cpuacct cpu cpuset"
|
||||
|
||||
mkdir -p /sys/fs/cgroup
|
||||
mount -t tmpfs none /sys/fs/cgroup
|
||||
|
||||
for i in $CGROUPS; do
|
||||
mkdir -p /sys/fs/cgroup/$i
|
||||
mount -t cgroup -o $i none /sys/fs/cgroup/$i
|
||||
done
|
||||
|
||||
if ! lsmod | grep -q br_netfilter; then
|
||||
modprobe br_netfilter
|
||||
fi
|
||||
|
||||
rm -f /var/run/docker.pid
|
||||
exec docker -d -s overlay
|
4
scripts/dockerimages/scripts/os-dockerfile
Normal file
4
scripts/dockerimages/scripts/os-dockerfile
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM scratch
|
||||
COPY init busybox docker images.tar /
|
||||
COPY lib /lib
|
||||
CMD ["/init"]
|
6
scripts/dockerimages/scripts/udev.sh
Executable file
6
scripts/dockerimages/scripts/udev.sh
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
mount --bind /host/dev /dev
|
||||
udevd --daemon
|
||||
udevadm trigger --action=add
|
||||
udevadm settle
|
8
scripts/download
Executable file
8
scripts/download
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
source scripts/build-common
|
||||
|
||||
download a8e5925eab10a472af4b9326dc3ff1068fd56886 https://github.com/rancherio/os-base/releases/download/v0.0.1/os-base.tar.xz
|
||||
download c7d977c2bdc48c022fcf3a51a6e26229247cfb15 https://test.docker.com/builds/Linux/x86_64/docker-1.5.0-rc4
|
11
scripts/install
Executable file
11
scripts/install
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
. scripts/build-common
|
||||
|
||||
mkdir -p target
|
||||
rm -rf target/artifacts
|
||||
|
||||
cp -rf ${DIST}/artifacts target
|
42
scripts/package
Executable file
42
scripts/package
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
source scripts/build-common
|
||||
|
||||
cp bin/rancheros ${BUILD}/initrd/init
|
||||
cp scripts/dockerimages/scripts/os-dockerfile ${BUILD}/initrd/Dockerfile
|
||||
|
||||
cd ${BUILD}/initrd
|
||||
|
||||
find | cpio -H newc -o | lzma -c > ${DIST}/artifacts/initrd
|
||||
|
||||
CD=${BUILD}/cd
|
||||
|
||||
mkdir -p ${CD}/boot/isolinux
|
||||
cp ${DIST}/artifacts/vmlinuz ${CD}/boot
|
||||
cp ${DIST}/artifacts/initrd ${CD}/boot
|
||||
cp /usr/lib/syslinux/isolinux.bin ${CD}/boot/isolinux
|
||||
cp /usr/lib/syslinux/linux.c32 ${CD}/boot/isolinux/ldlinux.c32
|
||||
cat > ${CD}/boot/isolinux/isolinux.cfg << EOF
|
||||
default rancheros
|
||||
label rancheros
|
||||
kernel /boot/vmlinuz
|
||||
initrd /boot/initrd
|
||||
append quiet
|
||||
|
||||
prompt 1
|
||||
timeout 1
|
||||
EOF
|
||||
|
||||
# Copied from boot2docker, thanks.
|
||||
cd ${CD}
|
||||
xorriso \
|
||||
-publisher "Rancher Labs, Inc." \
|
||||
-as mkisofs \
|
||||
-l -J -R -V "RancherOS" \
|
||||
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||||
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
|
||||
-isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \
|
||||
-o ${DIST}/artifacts/rancheros.iso $(pwd)
|
45
scripts/run
Executable file
45
scripts/run
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
source scripts/build-common
|
||||
|
||||
BASE=$(pwd)
|
||||
|
||||
KERNEL=${BASE}/dist/artifacts/vmlinuz
|
||||
INITRD=${BASE}/dist/artifacts/initrd
|
||||
HD=${BASE}/build/empty-hd.img
|
||||
HD_GZ=${ARTIFACTS}/empty-hd.img.gz
|
||||
INITRD_TMP=${BUILD}/$(sha1sum ${INITRD} | awk '{print $1}')
|
||||
INITRD_TEST=${BUILD}/initrd.test
|
||||
|
||||
if [[ ! -e ${KERNEL} || ! -e ${INITRD} ]]; then
|
||||
echo "Failed to find ${KERNEL} or ${INITRD}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d ${INITRD_TMP} ]; then
|
||||
mkdir -p ${INITRD_TMP}
|
||||
pushd ${INITRD_TMP}
|
||||
lzma -dc ${INITRD} | sudo cpio -idmv
|
||||
rm -f init
|
||||
popd
|
||||
fi
|
||||
|
||||
cp bin/rancheros ${INITRD_TMP}/init
|
||||
cd ${INITRD_TMP}
|
||||
|
||||
if [ "$1" == "--docker" ]; then
|
||||
docker build -t rancheros-run .
|
||||
docker run --privileged -it rancheros-run
|
||||
else
|
||||
find | cpio -H newc -o > ${INITRD_TEST}
|
||||
|
||||
if [ ! -e ${HD} ]; then
|
||||
zcat ${HD_GZ} > ${HD}
|
||||
fi
|
||||
|
||||
kvm -m 1024 -kernel ${KERNEL} -initrd ${INITRD_TEST} -append "$1" -hda ${HD} -serial stdio -netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0
|
||||
fi
|
Reference in New Issue
Block a user