From e5a7889ce9cfa01bf408b419a032b80e365f69b2 Mon Sep 17 00:00:00 2001 From: Sven Dowideit Date: Thu, 22 Dec 2016 20:14:35 +1000 Subject: [PATCH] make --fresh apply to the second disk too Signed-off-by: Sven Dowideit --- scripts/hosting/packet/test.expect | 64 ++++++++++++++ scripts/hosting/packet/test.sh | 130 +++++++++++++++++++++++++++++ scripts/run | 4 +- 3 files changed, 197 insertions(+), 1 deletion(-) create mode 100755 scripts/hosting/packet/test.expect create mode 100755 scripts/hosting/packet/test.sh diff --git a/scripts/hosting/packet/test.expect b/scripts/hosting/packet/test.expect new file mode 100755 index 00000000..04beb960 --- /dev/null +++ b/scripts/hosting/packet/test.expect @@ -0,0 +1,64 @@ +#!/usr/bin/expect -f + +# set Variables +# /home/sven/.docker/machine/machines/sven-test/id_rsa +set sshkey [lrange $argv 0 0] +# 718feb0e-1517-4f92-a6fa-2ee089cf12e4@sos.ewr1.packet.net +set sshurl [lrange $argv 1 1] + +set username [lrange $argv 2 2] +set password [lrange $argv 3 3] +set command "" +append command [lrange $argv 4 end] + + +set timeout -1 + +proc runcmd { username password cmd } { + send_user "<< username: $username" + send_user "<< password: $password" + send_user "<< cmd: $cmd" + + set done 0; + while {$done == 0} { + expect { + "*?login:" { + send -- "$username\r" + } + "*?assword:" { + send -- "$password\r" + #send -- "\r" + } + "*?:~#" { + send -- "$cmd\r" + set done 1 + } + "*?Reached target Shutdown." { + set done 1 + } + } + } +} + + +spawn ssh -F /dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none -i $sshkey $sshurl +match_max 100000 +send -- "\r" + +set running [ runcmd $username $password $command ] + +expect { + "*? (yes/no)?" { + send -- "no\r" + expect "# " + } + "# " { + } + "*?Restarting system" { + } + "*?kexec_core: Starting new kernel" { + } +} + +send_user "<< DONE expect" +send_user "<<" diff --git a/scripts/hosting/packet/test.sh b/scripts/hosting/packet/test.sh new file mode 100755 index 00000000..50713cfe --- /dev/null +++ b/scripts/hosting/packet/test.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +set -ex + +# https://www.packet.net/help/kb/how-to-provision-a-host-with-docker-machine/ + +# needs both docker-machine and the docker-machine packet.net driver +# https://github.com/packethost/docker-machine-driver-packet/releases + +if [ "${PACKET_API_KEY}" == "" ]; then + echo "need to set the PACKET_API_KEY" + exit +fi +if [ "${PACKET_PROJECT_ID}" == "" ]; then + echo "need to set the PACKET_PROJECT_ID" + exit +fi + +# facilities +# New York Metro (EWR1) +# Silicon Valley (SJC1) +# Amsterdam, NL (AMS1) +# Tokyo, JP (NRT1) +FACILITY=sjc1 + +# plan - the server types +PLAN=baremetal_0 + +# randomizing the hostname makes debugging things harder atm +#HOSTHASH=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 6 | head -n 1) +HOST=sven-${FACILITY}-${PLAN/_/-} + +if ! docker-machine inspect $HOST ; then + docker-machine create -d packet \ + --packet-api-key=${PACKET_API_KEY} --packet-project-id=${PACKET_PROJECT_ID} \ + --packet-facility-code ${FACILITY} \ + --packet-plan ${PLAN} \ + --packet-os=ubuntu_16_04 \ + ${HOST} +fi + +SSH="docker-machine ssh $HOST" +SCP="docker-machine scp" + +echo "- setup.." + +#Spin up an Ubuntu 16.04 Packet instance. There are two different categories: Type-0 and the other types. We'll need to test one from each category. +#SSH into the instance and change the root password. + +USER="root" +PASS=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) + +echo "echo '$USER:$PASS' | chpasswd" +echo "echo '$USER:$PASS' | chpasswd" > /tmp/pass +chmod 755 /tmp/pass +$SCP /tmp/pass $HOST:~/pass +$SSH ./pass + +#$SSH echo "root:$HOST" | chpasswd + +#Download the initrd and vmlinuz for the RC. +$SCP ./scripts/hosting/packet/packet.sh $HOST:~/ + +#$SCP ./dist/artifacts/initrd $HOST:~/ +#$SCP ./dist/artifacts/vmlinuz-4.9-rancher2 $HOST:~/vmlinuz + +$SSH wget -c https://github.com/rancher/os/releases/download/v0.7.1/vmlinuz +$SSH wget -c https://github.com/rancher/os/releases/download/v0.7.1/initrd + +#Install the kexec-tools package. + +$SSH sudo apt-get update + +#SSH into the SOS shell for the instance. There's a button labelled "Console" on the page for the instance. If you click on that it'll give you an SSH command to paste into your terminal. + +FACILITY=$(docker-machine inspect ${HOST} | grep Facility | sed 's/.*Facility": "\(.*\)".*/\1/') +DEVICEID=$(docker-machine inspect ${HOST} | grep DeviceID | sed 's/.*DeviceID": "\(.*\)".*/\1/') +SSHKEYPATH=$(docker-machine inspect ${HOST} | grep SSHKeyPath | sed 's/.*SSHKeyPath": "\(.*\)".*/\1/') + +SSHSOS="./scripts/hosting/packet/test.expect $SSHKEYPATH $DEVICEID@sos.$FACILITY.packet.net $USER $PASS" + +echo "--------------------------------------------------------------------------" +$SSHSOS uname -a + +#$SSH DEBIAN_FRONTEND=noninteractive sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -yqq kexec-tools +#USING the SOSSSH expect script to get past the "Should kexec-tools handle reboots? [yes/no]" +$SSHSOS sudo DEBIAN_FRONTEND=noninteractive apt-get install -yqq kexec-tools + + +$SSHSOS reboot + +echo "- kexecing" + +$SSHSOS sudo kexec -f -l vmlinuz --initrd=initrd --append "rancher.password=${PASS} tinkerbell=http://bdba494d.ngrok.io console=ttyS1,115200n8 rancher.network.interfaces.eth0.dhcp=true rancher.network.interfaces.eth2.dhcp=true" + +#The server will restart and then you should be running RancherOS from memory. +$SSHSOS reboot + +## need to change the user for the exepct script +USER="rancher" +SSHSOS="./scripts/hosting/packet/test.expect $SSHKEYPATH $DEVICEID@sos.$FACILITY.packet.net $USER $PASS" + +echo "--------------------------------------------------------------------------" +$SSHSOS uname -a + +# need to retrieve the packet.sh, vmlinuz and initrd from the disk +# TODO: this makes sense on type-0 - dunno about raid +# TODO: don't use dev, use LABEL - if&when we switch to running this on RancherOS +$SSHSOS sudo mount /dev/sda3 /mnt +$SSHSOS cp /mnt/root/* . +exit + +#Clear the disk(s). + +$SSHSOS sudo dd if=/dev/zero of=/dev/sda count=4 bs=1024 + +#If you're not running a type-0, also run the following command: +if [ "$PLAN" != "baremetal_0" ]; then + $SSHSOS sudo dd if=/dev/zero of=/dev/sdb count=4 bs=1024 +fi + +#Both of these will hang after you run them. Just let them run for a second or two and then hit ctrl+c. +#Download and run the Packet install script. + +$SSHSOS bash ./packet.sh + +#Reboot and then RancherOS should be fully installed. +#$SSHSOS reboot + +#$SSH uname -a diff --git a/scripts/run b/scripts/run index b5abe8a9..c7e6b1fc 100755 --- a/scripts/run +++ b/scripts/run @@ -125,7 +125,9 @@ if [ "$QEMU" == "1" ] || [ "$BOOT_ISO" == "1" ] || [ "$BOOT_HD" == "1" ]; then fi if [ "$SECOND_DRIVE" == "1" ]; then - qemu-img create -f qcow2 -o size=10G ${HD2} + if [ "$FRESH" == "1" ]; then + qemu-img create -f qcow2 -o size=10G ${HD2} + fi SECOND_DRIVE_ENABLE=$(eval "${hd["$ARCH"]} ${HD2}") fi fi