123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #!/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) </span>
- # Silicon Valley (SJC1) </span>
- # Amsterdam, NL (AMS1) </span>
- # Tokyo, JP (NRT1) </span>
- 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
|