diff --git a/scripts/create-installed b/scripts/create-installed new file mode 100755 index 00000000..9390c47b --- /dev/null +++ b/scripts/create-installed @@ -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 diff --git a/scripts/run b/scripts/run index 1cc65ed5..9ce13714 100755 --- a/scripts/run +++ b/scripts/run @@ -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 diff --git a/scripts/run-common b/scripts/run-common new file mode 100755 index 00000000..8f75097e --- /dev/null +++ b/scripts/run-common @@ -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}"