mirror of
https://github.com/rancher/os.git
synced 2025-09-04 16:21:07 +00:00
add --qind
to scripts/run
and scripts/ssh
also add `--fresh` to `scripts/run` to run with a clean state HDD, make `--qemu` the default in `scripts/run` and `scripts/ssh`
This commit is contained in:
@@ -2,7 +2,8 @@ FROM debian:jessie
|
||||
RUN apt-get update && \
|
||||
apt-get -y dist-upgrade && \
|
||||
apt-get -y install locales sudo vim less curl wget git rsync build-essential syslinux isolinux xorriso \
|
||||
libblkid-dev libmount-dev libselinux1-dev cpio python-pip ca-certificates
|
||||
libblkid-dev libmount-dev libselinux1-dev cpio genisoimage qemu-kvm python-pip ca-certificates
|
||||
RUN ln -s /usr/bin/genisoimage /usr/bin/mkisofs
|
||||
RUN locale-gen en_US.UTF-8
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
|
@@ -9,4 +9,4 @@ fi
|
||||
|
||||
docker build -t ros-build-base -f Dockerfile.build-base .
|
||||
docker build -t ros-build -f Dockerfile.build .
|
||||
./scripts/docker-run.sh --name ros-ci make -f Makefile.docker build-all integration-tests
|
||||
./scripts/docker-run.sh --name ros-ci make -f Makefile.docker minimal integration-tests
|
||||
|
175
scripts/run
175
scripts/run
@@ -7,30 +7,13 @@ cd $(dirname $0)/..
|
||||
source scripts/build-common
|
||||
|
||||
BASE=$(pwd)
|
||||
UNAME=$(uname)
|
||||
|
||||
# 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
|
||||
|
||||
KERNEL=${BASE}/dist/artifacts/vmlinuz
|
||||
INITRD=${BASE}/dist/artifacts/initrd
|
||||
NO_COMPRESS_INITRD=${INITRD}.none
|
||||
HD=${BASE}/state/empty-hd.img
|
||||
HD_GZ=${BASE}/assets/empty-hd.img.gz
|
||||
INITRD_TMP=${BUILD}/$(${sha1sum} ${INITRD} | awk '{print $1}')
|
||||
INITRD_CURRENT=${BUILD}/initrd-current
|
||||
INITRD_TEST=${BUILD}/initrd.test
|
||||
USER_DATA=${BUILD}/cloud-config/openstack/latest/user_data
|
||||
FORMAT=1
|
||||
|
||||
# PREREQ: brew install coreutils
|
||||
path() {
|
||||
if [ "$UNAME" == "Darwin" ]; then greadlink -f "$1"
|
||||
elif [ "$UNAME" == "Linux" ]; then readlink -f "$1";
|
||||
fi
|
||||
}
|
||||
QEMU=1
|
||||
FORMAT=1
|
||||
REBUILD=1
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case $1 in
|
||||
@@ -38,22 +21,43 @@ while [ "$#" -gt 0 ]; do
|
||||
shift 1
|
||||
QEMU_APPEND="${QEMU_APPEND} $1"
|
||||
;;
|
||||
--name)
|
||||
shift 1
|
||||
NAME="$1"
|
||||
;;
|
||||
--cloud-config)
|
||||
shift 1
|
||||
CLOUD_CONFIG=$(path "$1") || :
|
||||
CLOUD_CONFIG="$1" || :
|
||||
if [ ! -f ${CLOUD_CONFIG} ]; then
|
||||
echo No such file: "'"${CLOUD_CONFIG}"'" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
--xhyve)
|
||||
if [ "$UNAME" == "Darwin" ] && [ -x $(which xhyve) ]; then
|
||||
if [ -x $(which xhyve) ]; then
|
||||
XHYVE=1
|
||||
fi
|
||||
;;
|
||||
--qemu)
|
||||
if [ -x $(which qemu-system-x86_64) ]; then
|
||||
QEMU=1
|
||||
fi
|
||||
;;
|
||||
--qind)
|
||||
QIND=1
|
||||
;;
|
||||
--kvm)
|
||||
KVM=1
|
||||
;;
|
||||
--no-format)
|
||||
FORMAT=0
|
||||
;;
|
||||
--no-rebuild)
|
||||
REBUILD=0
|
||||
;;
|
||||
--fresh)
|
||||
FRESH=1
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
@@ -66,14 +70,21 @@ if [[ ! -e ${KERNEL} || ! -e ${INITRD} ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
UNAME=$(uname)
|
||||
# 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}
|
||||
if [ -e ${NO_COMPRESS_INITRD} ]; then
|
||||
cat ${NO_COMPRESS_INITRD} | cpio -idmv
|
||||
else
|
||||
xz -dc ${INITRD} | cpio -idmv
|
||||
fi
|
||||
popd
|
||||
fi
|
||||
|
||||
@@ -81,36 +92,16 @@ if [ -e ${INITRD_CURRENT} ]; then
|
||||
rm -f ${INITRD_CURRENT}
|
||||
fi
|
||||
|
||||
ln -sf ${INITRD_TMP} ${INITRD_CURRENT}
|
||||
ln -s ${INITRD_TMP} ${INITRD_CURRENT}
|
||||
|
||||
mkdir -p ${INITRD_TMP}/usr/{bin,share/ros}
|
||||
cp bin/rancheros ${INITRD_TMP}/usr/bin/ros
|
||||
cp -f os-config.yml ${INITRD_TMP}/usr/share/ros
|
||||
|
||||
pushd ${INITRD_TMP}
|
||||
find . | cpio -H newc -o > ${INITRD_TEST}
|
||||
find . | cpio -H newc -o | gzip > ${INITRD_TEST}
|
||||
popd
|
||||
|
||||
if [ ! -e ${HD} ]; then
|
||||
mkdir -p $(dirname ${HD})
|
||||
if [ "$XHYVE" == "1" ]; then qemu-img create -f raw -o size=10G ${HD}
|
||||
else qemu-img create -f qcow2 -o size=10G ${HD}
|
||||
fi
|
||||
fi
|
||||
|
||||
mkdir -p $(dirname $USER_DATA)
|
||||
|
||||
if [ -n "$CLOUD_CONFIG" ]; then
|
||||
cat ${CLOUD_CONFIG} > ${USER_DATA}
|
||||
else
|
||||
echo "#cloud-config" > ${USER_DATA}
|
||||
echo "ssh_authorized_keys:" >> ${USER_DATA}
|
||||
echo " - $(<${BASE}/assets/rancher.key.pub)" >> ${USER_DATA}
|
||||
for i in ${HOME}/.ssh/*.pub; do
|
||||
if [ -e $i ]; then
|
||||
echo " - $(<$i)" >> ${USER_DATA}
|
||||
fi
|
||||
done
|
||||
INITRD=${INITRD_TEST}
|
||||
fi
|
||||
|
||||
KERNEL_ARGS="quiet rancher.password=rancher console=ttyS0 ${QEMU_APPEND}"
|
||||
@@ -118,14 +109,38 @@ if [ "$FORMAT" == "1" ]; then
|
||||
KERNEL_ARGS="${KERNEL_ARGS} rancher.state.formatzero=true rancher.state.autoformat=[/dev/sda,/dev/vda]"
|
||||
fi
|
||||
|
||||
if [ "$KVM" == "" ] && [ -c /dev/kvm ] && [ -r /dev/kvm ] && [ -w /dev/kvm ]; then
|
||||
KVM=1
|
||||
fi
|
||||
|
||||
if [ "$XHYVE" == "1" ] || [ "$QEMU" == "1" ]; then
|
||||
|
||||
HD=${BASE}/state/hd.img
|
||||
[ "$FRESH" == "1" ] && rm -f ${HD} >/dev/null 2>&1 || :
|
||||
if [ ! -e ${HD} ]; then
|
||||
mkdir -p $(dirname ${HD})
|
||||
if [ "$XHYVE" == "1" ]; then qemu-img create -f raw -o size=10G ${HD}
|
||||
else qemu-img create -f qcow2 -o size=10G ${HD}
|
||||
fi
|
||||
fi
|
||||
|
||||
USER_DATA=${BUILD}/cloud-config/openstack/latest/user_data
|
||||
mkdir -p $(dirname ${USER_DATA})
|
||||
rm -f ${USER_DATA} || :
|
||||
if [ -n "$CLOUD_CONFIG" ]; then
|
||||
cat ${CLOUD_CONFIG} > ${USER_DATA}
|
||||
else
|
||||
echo "#cloud-config" > ${USER_DATA}
|
||||
echo "ssh_authorized_keys:" >> ${USER_DATA}
|
||||
echo "- $(<${BASE}/assets/rancher.key.pub)" >> ${USER_DATA}
|
||||
fi
|
||||
|
||||
CLOUD_CONFIG_ISO="${BUILD}/cloud-config.iso"
|
||||
rm -rf ${CLOUD_CONFIG_ISO}
|
||||
|
||||
mkisofs -R -V config-2 -o "${CLOUD_CONFIG_ISO}" "$BUILD/cloud-config"
|
||||
|
||||
if [ "$XHYVE" == "1" ]; then
|
||||
|
||||
echo PWD=`pwd`
|
||||
exec sudo -n xhyve -A -H -P -u \
|
||||
-m 4G \
|
||||
-s 0:0,hostbridge -s 31,lpc \
|
||||
@@ -134,15 +149,17 @@ if [ "$XHYVE" == "1" ]; then
|
||||
-s 3,ahci-cd,${CLOUD_CONFIG_ISO} \
|
||||
-s 4,virtio-blk,${HD} \
|
||||
-U a01fb25c-3a19-4759-a47a-2e353e51807d \
|
||||
-f kexec,${KERNEL},${INITRD_TEST},"earlyprintk=serial elevator=noop ${KERNEL_ARGS}"
|
||||
-f kexec,${KERNEL},${INITRD},"earlyprintk=serial elevator=noop ${KERNEL_ARGS}" \
|
||||
"${@}"
|
||||
|
||||
elif [ -x $(which qemu-system-x86_64) ]; then
|
||||
if [ -c /dev/kvm ] && [ -r /dev/kvm ] && [ -w /dev/kvm ]; then
|
||||
elif [ "$QEMU" == "1" ]; then
|
||||
|
||||
if [ "$KVM" == "1" ]; then
|
||||
KVM_ENABLE="-machine accel=kvm -cpu host"
|
||||
fi
|
||||
exec qemu-system-x86_64 -serial stdio \
|
||||
-kernel ${KERNEL} \
|
||||
-initrd ${INITRD_TEST} \
|
||||
-initrd ${INITRD} \
|
||||
-m 1024 \
|
||||
-net nic,vlan=0,model=virtio \
|
||||
-net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher-dev \
|
||||
@@ -153,7 +170,53 @@ elif [ -x $(which qemu-system-x86_64) ]; then
|
||||
-append "${KERNEL_ARGS}" \
|
||||
-nographic \
|
||||
-display none \
|
||||
${QEMU_ARGS} "${@}"
|
||||
${QEMU_ARGS} \
|
||||
"${@}"
|
||||
|
||||
else
|
||||
exit 42
|
||||
fi
|
||||
|
||||
elif [ "$QIND" == "1" ]; then
|
||||
|
||||
NAME=${NAME:-ros-qind}
|
||||
|
||||
if [ "$FRESH" == "1" ]; then
|
||||
docker rm -fv ${NAME} >/dev/null 2>&1 || :
|
||||
fi
|
||||
if ! docker inspect ${NAME} >/dev/null 2>&1; then
|
||||
if [ "$KVM" == "1" ]; then
|
||||
KVM_ENABLE="--device=/dev/kvm:/dev/kvm"
|
||||
fi
|
||||
|
||||
mkdir -p ./tmp
|
||||
TMP=$(mktemp -d ./tmp/ros-qind-XXXXXX)
|
||||
mkdir -p ${TMP}/stuff
|
||||
trap "rm -rf ${TMP}" EXIT
|
||||
ln ${CLOUD_CONFIG} ${KERNEL} ${INITRD} ./assets/rancher.key ./assets/rancher.key.pub ${TMP}/stuff/
|
||||
|
||||
KERNEL_FILE=$(basename ${KERNEL})
|
||||
INITRD_FILE=$(basename ${INITRD})
|
||||
|
||||
if [ -n "$CLOUD_CONFIG" ]; then
|
||||
CLOUD_CONFIG_ENABLE="--cloud-config /stuff/$(basename ${CLOUD_CONFIG})"
|
||||
else
|
||||
SSH_PUB_ENABLE="--ssh-pub /stuff/rancher.key.pub"
|
||||
fi
|
||||
|
||||
docker create --name=${NAME} -it ${KVM_ENABLE} \
|
||||
rancher/qind \
|
||||
--hostname "rancher-dev" \
|
||||
${CLOUD_CONFIG_ENABLE} \
|
||||
${SSH_PUB_ENABLE} \
|
||||
-m 1G -kernel /stuff/${KERNEL_FILE} -initrd /stuff/${INITRD_FILE} -append "${KERNEL_ARGS}" \
|
||||
"${@}"
|
||||
|
||||
docker cp ${TMP}/stuff ${NAME}:/stuff
|
||||
rm -rf ${TMP}
|
||||
fi
|
||||
exec docker start -ai ${NAME}
|
||||
|
||||
else
|
||||
exit 42
|
||||
fi
|
||||
|
40
scripts/ssh
40
scripts/ssh
@@ -5,26 +5,52 @@ cd $(dirname $0)/..
|
||||
|
||||
chmod 0600 ./assets/rancher.key
|
||||
|
||||
QEMU=1
|
||||
UNAME=$(uname)
|
||||
INTERACTIVE="-it"
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case $1 in
|
||||
--xhyve)
|
||||
--name)
|
||||
shift 1
|
||||
if [ "$UNAME" == "Darwin" ] && [ -x $(which xhyve) ]; then
|
||||
NAME="$1"
|
||||
;;
|
||||
--notty)
|
||||
INTERACTIVE=""
|
||||
;;
|
||||
--xhyve)
|
||||
XHYVE=1
|
||||
fi
|
||||
;;
|
||||
--qemu)
|
||||
QEMU=1
|
||||
;;
|
||||
--qind)
|
||||
QIND=1
|
||||
;;
|
||||
--key)
|
||||
shift 1
|
||||
KEY="$1"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
shift 1
|
||||
done
|
||||
|
||||
if [ "$XHYVE" == "1" ]; then
|
||||
HOST=192.168.64.2 # consult `/var/db/dhcpd_leases` or delete it
|
||||
exec ssh -F ./assets/scripts_ssh_config -i ./assets/rancher.key rancher@${HOST} "$@"
|
||||
else
|
||||
exec ssh -p 2222 -F ./assets/scripts_ssh_config -i ./assets/rancher.key rancher@localhost "$@"
|
||||
exec ssh -F ./assets/scripts_ssh_config -i ${KEY:-./assets/rancher.key} rancher@${HOST} "$@"
|
||||
elif [ "$QEMU" == "1" ]; then
|
||||
exec ssh -p 2222 -F ./assets/scripts_ssh_config -i ${KEY:-./assets/rancher.key} rancher@localhost "$@"
|
||||
elif [ "$QIND" == "1" ]; then
|
||||
NAME=${NAME:-ros-qind}
|
||||
if [ -n "$KEY" ]; then
|
||||
docker inspect ${NAME} >/dev/null 2>&1 || exit 1
|
||||
docker cp ${KEY} ${NAME}:/stuff/$(basename ${KEY})
|
||||
KEY_FILE=/stuff/$(basename ${KEY})
|
||||
fi
|
||||
exec docker exec ${INTERACTIVE} ${NAME} /ssh.sh -i ${KEY_FILE:-/stuff/rancher.key} rancher@localhost "$@"
|
||||
else
|
||||
exit 42
|
||||
fi
|
||||
|
||||
|
@@ -7,4 +7,4 @@ cp ./tests/integration/assets/test_02/build.conf ./
|
||||
|
||||
make -f Makefile.docker minimal
|
||||
|
||||
exec ./scripts/run
|
||||
exec ./scripts/run --qemu --no-rebuild --fresh
|
||||
|
@@ -31,8 +31,8 @@ def test_run_system_container(qemu):
|
||||
u.wait_for_ssh()
|
||||
|
||||
ssh = subprocess.Popen(
|
||||
'./scripts/ssh sudo system-docker run --rm busybox /bin/true', shell=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
||||
'./scripts/ssh --qemu sudo system-docker run --rm busybox /bin/true',
|
||||
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
||||
|
||||
for ln in u.iter_lines(ssh.stdout):
|
||||
print(ln)
|
||||
|
@@ -5,8 +5,7 @@ import subprocess
|
||||
import yaml
|
||||
|
||||
|
||||
ssh_command = ['ssh', '-p', '2222', '-F', './assets/scripts_ssh_config', '-i', './tests/integration/assets/test.key',
|
||||
'rancher@localhost']
|
||||
ssh_command = ['./scripts/ssh', '--qemu', '--key', './tests/integration/assets/test.key']
|
||||
cloud_config_path = './tests/integration/assets/test_01/cloud-config.yml'
|
||||
|
||||
|
||||
|
@@ -4,8 +4,7 @@ import subprocess
|
||||
import yaml
|
||||
|
||||
|
||||
ssh_command = ['ssh', '-p', '2222', '-F', './assets/scripts_ssh_config', '-i', './tests/integration/assets/test.key',
|
||||
'rancher@localhost']
|
||||
ssh_command = ['./scripts/ssh', '--qemu', '--key', './tests/integration/assets/test.key']
|
||||
cloud_config_path = './tests/integration/assets/test_03/cloud-config.yml'
|
||||
|
||||
|
||||
|
@@ -4,6 +4,9 @@ import subprocess
|
||||
import time
|
||||
|
||||
|
||||
ros_test = 'ros-test'
|
||||
|
||||
|
||||
def iter_lines(s):
|
||||
return it.imap(str.rstrip, iter(s.readline, ''))
|
||||
|
||||
@@ -44,10 +47,8 @@ def rancheros_version(build_conf):
|
||||
|
||||
|
||||
def run_qemu(request, run_args=[]):
|
||||
subprocess.check_call('rm -f ./state/empty-hd.img', shell=True)
|
||||
print('\nrm ./state/*')
|
||||
print('\nStarting QEMU')
|
||||
p = subprocess.Popen(['./scripts/run'] + run_args,
|
||||
p = subprocess.Popen(['./scripts/run', '--qemu', '--no-rebuild', '--fresh'] + run_args,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
||||
|
||||
def fin():
|
||||
@@ -59,6 +60,6 @@ def run_qemu(request, run_args=[]):
|
||||
|
||||
|
||||
@pytest.mark.timeout(10)
|
||||
def wait_for_ssh(ssh_command=['./scripts/ssh']):
|
||||
while subprocess.call(ssh_command + ['/bin/true']) != 0:
|
||||
def wait_for_ssh(ssh_command=['./scripts/ssh', '--qemu']):
|
||||
while subprocess.call(ssh_command + ['docker version >/dev/null 2>&1']) != 0:
|
||||
time.sleep(1)
|
||||
|
Reference in New Issue
Block a user