1
0
mirror of https://github.com/rancher/os.git synced 2025-08-01 15:08:47 +00:00

Add functionality for installing and running a test image

This commit is contained in:
Josh Curl 2016-08-28 08:57:52 -07:00
parent 17f0ef63b9
commit b536e6ea35
No known key found for this signature in database
GPG Key ID: 82B504B9BCCFA677
3 changed files with 156 additions and 67 deletions

57
scripts/create-installed Executable file
View File

@ -0,0 +1,57 @@
#!/bin/bash
set -e
cd $(dirname $0)/..
source ./scripts/run-common
INSTALLER=${BASE}/dist/artifacts/installer.tar
if [ ! -e ${INITRD} ]; then
cp bin/ros ${INITRD_SRC}/usr/bin/ros
./scripts/hash-initrd
pushd ${INITRD_SRC} >/dev/null
find . | cpio -H newc -o | gzip -1 > ${INITRD}
popd >/dev/null
fi
mkdir -p {dist,build/openstack/latest}
cat > build/openstack/latest/user_data << EOF
#!/bin/bash
set -e
trap "poweroff" EXIT
sleep 5
mount -t 9p -o trans=virtio,version=9p2000.L config-2 /mnt
touch log
openvt -s -- tail -f log &
cat /mnt/installer.tar | system-docker load
ros install -d /dev/vda -f --no-reboot >log 2>&1
touch /mnt/success
EOF
rm -f build/{success,hd.img}
qemu-img create -f qcow2 build/hd.img 8G
cp ${INSTALLER} build/installer.tar
qemu-system-${QEMUARCH} -serial stdio \
-enable-kvm \
-drive if=virtio,file=build/hd.img \
-kernel ${KERNEL} \
-initrd ${INITRD} \
-m 2048 \
-append "${DEFAULT_KERNEL_ARGS}" \
-smp 1 \
-nographic \
-display none \
-fsdev local,id=conf,security_model=none,path=$(pwd)/build \
-device virtio-9p-pci,fsdev=conf,mount_tag=config-2
[ -f build/success ]
mkdir -p state
cp build/hd.img state/hd.img

View File

@ -4,47 +4,7 @@ set -e
cd $(dirname $0)/..
HOST_ARCH=${HOST_ARCH:-amd64}
ARCH=${ARCH:-amd64}
declare -A qemuarch=( ["amd64"]="x86_64" ["arm"]="arm" ["arm64"]="aarch64" )
declare -A ttycons=( ["amd64"]="ttyS0" ["arm"]="ttyAMA0" ["arm64"]="ttyAMA0" )
declare -A machine=( ["amd64"]="" ["arm"]="-M virt" ["arm64"]="-M virt" )
declare -A cpu=( ["amd64"]="" ["arm"]="-cpu cortex-a8" ["arm64"]="-cpu cortex-a57" )
declare -A network=(
["amd64"]="-net nic,vlan=0,model=virtio -net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher-dev"
["arm"]="-netdev user,id=unet,hostfwd=tcp::2222-:22,hostname=rancher-dev -device virtio-net-device,netdev=unet"
)
network["arm64"]=${network["arm"]}
hd_amd64() {
echo "-drive if=virtio,file=$1"
}
hd_arm() {
echo "-drive if=none,id=hd0,file=$1 -device virtio-blk-device,drive=hd0"
}
declare -A hd=( ["amd64"]="hd_amd64" ["arm"]="hd_arm" ["arm64"]="hd_arm" )
cd_amd64() {
echo "-hdc $1"
}
cd_arm() {
echo "-drive if=none,id=cd0,file=$1 -device virtio-blk-device,drive=cd0"
}
declare -A cd=( ["amd64"]="cd_amd64" ["arm"]="cd_arm" ["arm64"]="cd_arm" )
BUILD=build
BASE=$(pwd)
UNAME=$(uname)
KERNEL=${BASE}/dist/artifacts/vmlinuz
INITRD_SRC=${BASE}/build/initrd
INITRD=${BASE}/build/initrd.tmp
QEMU=1
FORMAT=1
RM_USR=1
REBUILD=1
source ./scripts/run-common
while [ "$#" -gt 0 ]; do
case $1 in
@ -93,6 +53,10 @@ while [ "$#" -gt 0 ]; do
--fresh)
FRESH=1
;;
--installed)
./scripts/create-installed
INSTALLED=1
;;
*)
break
;;
@ -100,9 +64,6 @@ while [ "$#" -gt 0 ]; do
shift 1
done
QEMUARCH=${qemuarch["${ARCH}"]}
TTYCONS=${ttycons["${ARCH}"]}
if [ "$QEMU" == "1" ] && ! which qemu-system-${QEMUARCH}; then
QEMU=0
fi
@ -120,7 +81,7 @@ if [ "$REBUILD" == "1" ] || [ ! -e ${INITRD} ]; then
popd >/dev/null
fi
KERNEL_ARGS="quiet rancher.password=rancher console=${TTYCONS} rancher.autologin=${TTYCONS} ${QEMU_APPEND}"
KERNEL_ARGS="${DEFAULT_KERNEL_ARGS} ${QEMU_APPEND}"
if [ "$FORMAT" == "1" ]; then
KERNEL_ARGS="${KERNEL_ARGS} rancher.state.dev=LABEL=RANCHER_STATE rancher.state.formatzero=true rancher.state.autoformat=[/dev/sda,/dev/vda]"
fi
@ -168,29 +129,51 @@ if [ "$QEMU" == "1" ]; then
KVM_ENABLE="-enable-kvm"
CPU="-cpu host"
fi
set -x
HOME=${HOME:-/}
exec qemu-system-${QEMUARCH} -serial stdio \
-rtc base=utc,clock=host \
${KVM_ENABLE} \
${CPU} \
${machine["$ARCH"]} \
-kernel ${KERNEL} \
-initrd ${INITRD} \
-m 2048 \
${network["$ARCH"]} \
$(eval "${hd["$ARCH"]} ${HD}") \
${SECOND_DRIVE_ENABLE} \
-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} \
"${@}"
if [ "$INSTALLED" == "1" ]; then
set -x
exec qemu-system-${QEMUARCH} -serial stdio \
-rtc base=utc,clock=host \
${KVM_ENABLE} \
${CPU} \
${machine["$ARCH"]} \
-m 2048 \
${network["$ARCH"]} \
$(eval "${hd["$ARCH"]} ${HD}") \
${SECOND_DRIVE_ENABLE} \
-smp 1 \
-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} \
"${@}"
else
set -x
exec qemu-system-${QEMUARCH} -serial stdio \
-rtc base=utc,clock=host \
${KVM_ENABLE} \
${CPU} \
${machine["$ARCH"]} \
-kernel ${KERNEL} \
-initrd ${INITRD} \
-m 2048 \
${network["$ARCH"]} \
$(eval "${hd["$ARCH"]} ${HD}") \
${SECOND_DRIVE_ENABLE} \
-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} \
"${@}"
fi
elif [ "$QIND" == "1" ]; then

49
scripts/run-common Executable file
View File

@ -0,0 +1,49 @@
#!/bin/bash
set -e
HOST_ARCH=${HOST_ARCH:-amd64}
ARCH=${ARCH:-amd64}
declare -A qemuarch=( ["amd64"]="x86_64" ["arm"]="arm" ["arm64"]="aarch64" )
declare -A ttycons=( ["amd64"]="ttyS0" ["arm"]="ttyAMA0" ["arm64"]="ttyAMA0" )
declare -A machine=( ["amd64"]="" ["arm"]="-M virt" ["arm64"]="-M virt" )
declare -A cpu=( ["amd64"]="" ["arm"]="-cpu cortex-a8" ["arm64"]="-cpu cortex-a57" )
declare -A network=(
["amd64"]="-net nic,vlan=0,model=virtio -net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher-dev"
["arm"]="-netdev user,id=unet,hostfwd=tcp::2222-:22,hostname=rancher-dev -device virtio-net-device,netdev=unet"
)
network["arm64"]=${network["arm"]}
hd_amd64() {
echo "-drive if=virtio,file=$1"
}
hd_arm() {
echo "-drive if=none,id=hd0,file=$1 -device virtio-blk-device,drive=hd0"
}
declare -A hd=( ["amd64"]="hd_amd64" ["arm"]="hd_arm" ["arm64"]="hd_arm" )
cd_amd64() {
echo "-hdc $1"
}
cd_arm() {
echo "-drive if=none,id=cd0,file=$1 -device virtio-blk-device,drive=cd0"
}
declare -A cd=( ["amd64"]="cd_amd64" ["arm"]="cd_arm" ["arm64"]="cd_arm" )
BUILD=build
BASE=$(pwd)
UNAME=$(uname)
KERNEL=${BASE}/dist/artifacts/vmlinuz
INITRD_SRC=${BASE}/build/initrd
INITRD=${BASE}/build/initrd.tmp
QEMU=1
FORMAT=1
RM_USR=1
REBUILD=1
QEMUARCH=${qemuarch["${ARCH}"]}
TTYCONS=${ttycons["${ARCH}"]}
DEFAULT_KERNEL_ARGS="quiet rancher.password=rancher console=${TTYCONS} rancher.autologin=${TTYCONS}"