1*795d594fSAndroid Build Coastguard Worker#! /bin/bash 2*795d594fSAndroid Build Coastguard Worker# 3*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 4*795d594fSAndroid Build Coastguard Worker# 5*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*795d594fSAndroid Build Coastguard Worker# 9*795d594fSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*795d594fSAndroid Build Coastguard Worker# 11*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*795d594fSAndroid Build Coastguard Worker# limitations under the License. 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Workerset -e 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard WorkerART_TEST_ON_VM=true . "$(dirname $0)/buildbot-utils.sh" 20*795d594fSAndroid Build Coastguard WorkerSCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Workerknown_actions="create|boot|geniso|install-keys|setup-ssh|connect|quit" 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Workerif [[ -z $ANDROID_BUILD_TOP ]]; then 25*795d594fSAndroid Build Coastguard Worker msgfatal "ANDROID_BUILD_TOP is not set" 26*795d594fSAndroid Build Coastguard Workerelif [[ ( $# -ne 1 ) || ! ( "$1" =~ ^($known_actions)$ ) ]]; then 27*795d594fSAndroid Build Coastguard Worker msgfatal "usage: $0 <$known_actions>" 28*795d594fSAndroid Build Coastguard Workerfi 29*795d594fSAndroid Build Coastguard Worker 30*795d594fSAndroid Build Coastguard Workeraction="$1" 31*795d594fSAndroid Build Coastguard Worker 32*795d594fSAndroid Build Coastguard Workerget_stable_binary() { 33*795d594fSAndroid Build Coastguard Worker mkdir tmp && cd tmp 34*795d594fSAndroid Build Coastguard Worker wget "http://security.ubuntu.com/ubuntu/pool/main/$1" 35*795d594fSAndroid Build Coastguard Worker 7z x "$(basename $1)" && zstd -d data.tar.zst && tar -xf data.tar 36*795d594fSAndroid Build Coastguard Worker mv "$2" .. 37*795d594fSAndroid Build Coastguard Worker cd .. && rm -rf tmp 38*795d594fSAndroid Build Coastguard Worker} 39*795d594fSAndroid Build Coastguard Worker 40*795d594fSAndroid Build Coastguard Workerif [[ $action = create ]]; then 41*795d594fSAndroid Build Coastguard Worker( 42*795d594fSAndroid Build Coastguard Worker rm -rf "$ART_TEST_VM_DIR" 43*795d594fSAndroid Build Coastguard Worker mkdir -p "$ART_TEST_VM_DIR" 44*795d594fSAndroid Build Coastguard Worker cd "$ART_TEST_VM_DIR" 45*795d594fSAndroid Build Coastguard Worker 46*795d594fSAndroid Build Coastguard Worker # sudo apt install qemu-system-<arch> qemu-efi cloud-image-utils 47*795d594fSAndroid Build Coastguard Worker 48*795d594fSAndroid Build Coastguard Worker # Get the cloud image for Ubunty 23.10 (Mantic Minotaur) 49*795d594fSAndroid Build Coastguard Worker wget "http://cloud-images.ubuntu.com/releases/23.10/release/$ART_TEST_VM_IMG" 50*795d594fSAndroid Build Coastguard Worker 51*795d594fSAndroid Build Coastguard Worker if [[ "$TARGET_ARCH" = "riscv64" ]]; then 52*795d594fSAndroid Build Coastguard Worker # Get U-Boot for Ubuntu 22.04 (Jammy) 53*795d594fSAndroid Build Coastguard Worker get_stable_binary \ 54*795d594fSAndroid Build Coastguard Worker u/u-boot/u-boot-qemu_2024.01+dfsg-5ubuntu2_all.deb \ 55*795d594fSAndroid Build Coastguard Worker usr/lib/u-boot/qemu-riscv64_smode/uboot.elf 56*795d594fSAndroid Build Coastguard Worker 57*795d594fSAndroid Build Coastguard Worker elif [[ "$TARGET_ARCH" = "arm64" ]]; then 58*795d594fSAndroid Build Coastguard Worker # Get EFI (ARM64) 59*795d594fSAndroid Build Coastguard Worker get_stable_binary \ 60*795d594fSAndroid Build Coastguard Worker e/edk2/qemu-efi-aarch64_2024.05-2ubuntu0.1_all.deb \ 61*795d594fSAndroid Build Coastguard Worker usr/share/qemu-efi-aarch64/QEMU_EFI.fd 62*795d594fSAndroid Build Coastguard Worker 63*795d594fSAndroid Build Coastguard Worker dd if=/dev/zero of=flash0.img bs=1M count=64 64*795d594fSAndroid Build Coastguard Worker dd if=QEMU_EFI.fd of=flash0.img conv=notrunc 65*795d594fSAndroid Build Coastguard Worker dd if=/dev/zero of=flash1.img bs=1M count=64 66*795d594fSAndroid Build Coastguard Worker fi 67*795d594fSAndroid Build Coastguard Worker 68*795d594fSAndroid Build Coastguard Worker qemu-img resize "$ART_TEST_VM_IMG" +128G 69*795d594fSAndroid Build Coastguard Worker) 70*795d594fSAndroid Build Coastguard Workerelif [[ $action = geniso ]]; then 71*795d594fSAndroid Build Coastguard Worker( 72*795d594fSAndroid Build Coastguard Worker #https://help.ubuntu.com/community/CloudInit 73*795d594fSAndroid Build Coastguard Worker cat >user-data <<EOF 74*795d594fSAndroid Build Coastguard Worker#cloud-config 75*795d594fSAndroid Build Coastguard Workerssh_pwauth: true 76*795d594fSAndroid Build Coastguard Workerchpasswd: 77*795d594fSAndroid Build Coastguard Worker expire: false 78*795d594fSAndroid Build Coastguard Worker users: 79*795d594fSAndroid Build Coastguard Worker - name: $ART_TEST_SSH_USER 80*795d594fSAndroid Build Coastguard Worker password: ubuntu 81*795d594fSAndroid Build Coastguard Worker type: text 82*795d594fSAndroid Build Coastguard Workerusers: 83*795d594fSAndroid Build Coastguard Worker - default 84*795d594fSAndroid Build Coastguard Worker - name: $ART_TEST_SSH_USER 85*795d594fSAndroid Build Coastguard Worker ssh-authorized-keys: 86*795d594fSAndroid Build Coastguard Worker - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCOYmwd9qoYd7rfYI6Q8zzqoZ3BtLC/SQo0WCvBFoJT6JzwU8F7nkN57KBQPLtvX2OBeDnFbtEY8uLtuNEp1Z19VcDbRd3LhyAMYFz6Ox/vWtPfl0hv0kUMQMAne1Bg0tawlNxawP2HXrLOh/FaXdSBSRUHNqMTQEnkIYw4faArDS/zKjVDs0/+e9mhtjL0akLcK04crlk2KD8Q2csya5givdAD7fVNOx7DtckRR47FLM1bERe0t0FlUESx/x7oLjNEmNUrPXV6GSkCoskmKSZC1vwgAf0VrxFADv1EywQXmlNaa4+rzqS4jMYuwi5QCtQXFFZl5qQ1Sh1rnliTRJvJzjXCeq3QPsPzUJInfVGzrPClfHG7whlJE/Uwv8UOF7WHzUt5OBOsW6nZrplldvfYif/qz6dR+RX2G0zi8tC/2Mzahr6toAqtsqbdp3coYvpi/OjHIV3RhyJxG1FtyGYQRnmGPs8R9ic3pupjLFWM9qIilUCjFrUoiw7QAgfUrUc= [email protected] 87*795d594fSAndroid Build Coastguard Worker sudo: ALL=(ALL) NOPASSWD:ALL 88*795d594fSAndroid Build Coastguard Worker groups: users, admin 89*795d594fSAndroid Build Coastguard WorkerEOF 90*795d594fSAndroid Build Coastguard Worker # meta-data is necessary, even if empty. 91*795d594fSAndroid Build Coastguard Worker cat >meta-data <<EOF 92*795d594fSAndroid Build Coastguard WorkerEOF 93*795d594fSAndroid Build Coastguard Worker genisoimage -output user-data.img -volid cidata -joliet -rock user-data meta-data 94*795d594fSAndroid Build Coastguard Worker mv user-data.img "$(dirname $0)/user-data.img" 95*795d594fSAndroid Build Coastguard Worker rm user-data meta-data 96*795d594fSAndroid Build Coastguard Worker) 97*795d594fSAndroid Build Coastguard Workerelif [[ $action = boot ]]; then 98*795d594fSAndroid Build Coastguard Worker( 99*795d594fSAndroid Build Coastguard Worker cp "$(dirname $0)/user-data.img" "$ART_TEST_VM_DIR/user-data.img" 100*795d594fSAndroid Build Coastguard Worker cd "$ART_TEST_VM_DIR" 101*795d594fSAndroid Build Coastguard Worker if [[ "$TARGET_ARCH" = "riscv64" ]]; then 102*795d594fSAndroid Build Coastguard Worker ($ANDROID_BUILD_TOP/device/google/cuttlefish_vmm/qemu/x86_64-linux-gnu/bin/qemu-system-riscv64 \ 103*795d594fSAndroid Build Coastguard Worker -M virt \ 104*795d594fSAndroid Build Coastguard Worker -nographic \ 105*795d594fSAndroid Build Coastguard Worker -m 16G \ 106*795d594fSAndroid Build Coastguard Worker -smp 8 \ 107*795d594fSAndroid Build Coastguard Worker -cpu rv64,v=true,elen=64,vlen=128,zba=true,zbb=true,zbs=true \ 108*795d594fSAndroid Build Coastguard Worker -kernel uboot.elf \ 109*795d594fSAndroid Build Coastguard Worker -drive file="$ART_TEST_VM_IMG",if=virtio \ 110*795d594fSAndroid Build Coastguard Worker -drive file=user-data.img,format=raw,if=virtio \ 111*795d594fSAndroid Build Coastguard Worker -device virtio-net-device,netdev=usernet \ 112*795d594fSAndroid Build Coastguard Worker -netdev user,id=usernet,hostfwd=tcp::$ART_TEST_SSH_PORT-:22 > $SCRIPT_DIR/boot.out &) 113*795d594fSAndroid Build Coastguard Worker echo "Now listening for successful boot" 114*795d594fSAndroid Build Coastguard Worker finish_str='.*finished at.*' 115*795d594fSAndroid Build Coastguard Worker while IFS= read -d $'\0' -n 1 a ; do 116*795d594fSAndroid Build Coastguard Worker line+="${a}" 117*795d594fSAndroid Build Coastguard Worker if [[ "$line" =~ $finish_str ]] ; then 118*795d594fSAndroid Build Coastguard Worker echo $line 119*795d594fSAndroid Build Coastguard Worker echo "VM Successfully booted!" 120*795d594fSAndroid Build Coastguard Worker exit 0 121*795d594fSAndroid Build Coastguard Worker elif [[ $a = $'\n' ]] 122*795d594fSAndroid Build Coastguard Worker then 123*795d594fSAndroid Build Coastguard Worker echo $line 124*795d594fSAndroid Build Coastguard Worker unset line 125*795d594fSAndroid Build Coastguard Worker fi 126*795d594fSAndroid Build Coastguard Worker done < <(tail -f $SCRIPT_DIR/boot.out) 127*795d594fSAndroid Build Coastguard Worker 128*795d594fSAndroid Build Coastguard Worker elif [[ "$TARGET_ARCH" = "arm64" ]]; then 129*795d594fSAndroid Build Coastguard Worker (qemu-system-aarch64 \ 130*795d594fSAndroid Build Coastguard Worker -m 16G \ 131*795d594fSAndroid Build Coastguard Worker -smp 8 \ 132*795d594fSAndroid Build Coastguard Worker -cpu cortex-a710,sve=on \ 133*795d594fSAndroid Build Coastguard Worker -M virt \ 134*795d594fSAndroid Build Coastguard Worker -nographic \ 135*795d594fSAndroid Build Coastguard Worker -drive if=none,file="$ART_TEST_VM_IMG",id=hd0 \ 136*795d594fSAndroid Build Coastguard Worker -pflash flash0.img \ 137*795d594fSAndroid Build Coastguard Worker -pflash flash1.img \ 138*795d594fSAndroid Build Coastguard Worker -drive file=user-data.img,format=raw,id=cloud \ 139*795d594fSAndroid Build Coastguard Worker -device virtio-blk-device,drive=hd0 \ 140*795d594fSAndroid Build Coastguard Worker -device virtio-net-device,netdev=usernet \ 141*795d594fSAndroid Build Coastguard Worker -netdev user,id=usernet,hostfwd=tcp::$ART_TEST_SSH_PORT-:22 > $SCRIPT_DIR/boot.out &) 142*795d594fSAndroid Build Coastguard Worker echo "Now listening for successful boot" 143*795d594fSAndroid Build Coastguard Worker finish_str='.*finished at.*' 144*795d594fSAndroid Build Coastguard Worker while IFS= read -d $'\0' -n 1 a ; do 145*795d594fSAndroid Build Coastguard Worker line+="${a}" 146*795d594fSAndroid Build Coastguard Worker if [[ "$line" =~ $finish_str ]] ; then 147*795d594fSAndroid Build Coastguard Worker echo $line 148*795d594fSAndroid Build Coastguard Worker echo "VM Successfully booted!" 149*795d594fSAndroid Build Coastguard Worker exit 0 150*795d594fSAndroid Build Coastguard Worker elif [[ $a = $'\n' ]] 151*795d594fSAndroid Build Coastguard Worker then 152*795d594fSAndroid Build Coastguard Worker echo $line 153*795d594fSAndroid Build Coastguard Worker unset line 154*795d594fSAndroid Build Coastguard Worker fi 155*795d594fSAndroid Build Coastguard Worker done < <(tail -f $SCRIPT_DIR/boot.out) 156*795d594fSAndroid Build Coastguard Worker fi 157*795d594fSAndroid Build Coastguard Worker 158*795d594fSAndroid Build Coastguard Worker) 159*795d594fSAndroid Build Coastguard Workerelif [[ $action = setup-ssh ]]; then 160*795d594fSAndroid Build Coastguard Worker # Clean up mentions of this VM from known_hosts 161*795d594fSAndroid Build Coastguard Worker sed -i -E "/\[$ART_TEST_SSH_HOST.*\]:$ART_TEST_SSH_PORT .*/d" $HOME/.ssh/known_hosts 162*795d594fSAndroid Build Coastguard Worker ssh-copy-id -p "$ART_TEST_SSH_PORT" -o IdentityAgent=none -o StrictHostKeyChecking=no "$ART_TEST_SSH_USER@$ART_TEST_SSH_HOST" 163*795d594fSAndroid Build Coastguard Worker 164*795d594fSAndroid Build Coastguard Workerelif [[ $action = install-keys ]]; then 165*795d594fSAndroid Build Coastguard Worker if [ -f "$HOME/.ssh/known_hosts" ]; then 166*795d594fSAndroid Build Coastguard Worker sed -i -E "/\[$ART_TEST_SSH_HOST.*\]:$ART_TEST_SSH_PORT .*/d" $HOME/.ssh/known_hosts 167*795d594fSAndroid Build Coastguard Worker fi 168*795d594fSAndroid Build Coastguard Worker # This key is only used to authorize access to a local test VM and does 169*795d594fSAndroid Build Coastguard Worker # not pose any security risk. 170*795d594fSAndroid Build Coastguard Worker echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCOYmwd9qoYd7rfYI6Q8zzqoZ3BtLC/SQo0WCvBFoJT6JzwU8F7nkN57KBQPLtvX2OBeDnFbtEY8uLtuNEp1Z19VcDbRd3LhyAMYFz6Ox/vWtPfl0hv0kUMQMAne1Bg0tawlNxawP2HXrLOh/FaXdSBSRUHNqMTQEnkIYw4faArDS/zKjVDs0/+e9mhtjL0akLcK04crlk2KD8Q2csya5givdAD7fVNOx7DtckRR47FLM1bERe0t0FlUESx/x7oLjNEmNUrPXV6GSkCoskmKSZC1vwgAf0VrxFADv1EywQXmlNaa4+rzqS4jMYuwi5QCtQXFFZl5qQ1Sh1rnliTRJvJzjXCeq3QPsPzUJInfVGzrPClfHG7whlJE/Uwv8UOF7WHzUt5OBOsW6nZrplldvfYif/qz6dR+RX2G0zi8tC/2Mzahr6toAqtsqbdp3coYvpi/OjHIV3RhyJxG1FtyGYQRnmGPs8R9ic3pupjLFWM9qIilUCjFrUoiw7QAgfUrUc= [email protected]" > ~/.ssh/ubuntu.pub 171*795d594fSAndroid Build Coastguard Worker echo "-----BEGIN OPENSSH PRIVATE KEY----- 172*795d594fSAndroid Build Coastguard Workerb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn 173*795d594fSAndroid Build Coastguard WorkerNhAAAAAwEAAQAAAYEAjmJsHfaqGHe632COkPM86qGdwbSwv0kKNFgrwRaCU+ic8FPBe55D 174*795d594fSAndroid Build Coastguard WorkereeygUDy7b19jgXg5xW7RGPLi7bjRKdWdfVXA20Xdy4cgDGBc+jsf71rT35dIb9JFDEDAJ3 175*795d594fSAndroid Build Coastguard WorkertQYNLWsJTcWsD9h16yzofxWl3UgUkVBzajE0BJ5CGMOH2gKw0v8yo1Q7NP/nvZobYy9GpC 176*795d594fSAndroid Build Coastguard Worker3CtOHK5ZNig/ENnLMmuYIr3QA+31TTsew7XJEUeOxSzNWxEXtLdBZVBEsf8e6C4zRJjVKz 177*795d594fSAndroid Build Coastguard Worker11ehkpAqLJJikmQtb8IAH9Fa8RQA79RMsEF5pTWmuPq86kuIzGLsIuUArUFxRWZeakNUod 178*795d594fSAndroid Build Coastguard Workera55Yk0Sbyc41wnqt0D7D81CSJ31Rs6zwpXxxu8IZSRP1ML/FDhe1h81LeTgTrFup2a6ZZX 179*795d594fSAndroid Build Coastguard Workerb32In/6s+nUfkV9htM4vLQv9jM2oa+raAKrbKm3ad3KGL6YvzoxyFd0YcicRtRbchmEEZ5 180*795d594fSAndroid Build Coastguard Workerhj7PEfYnN6bqYyxVjPaiIpVAoxa1KIsO0AIH1K1HAAAFmIWXszeFl7M3AAAAB3NzaC1yc2 181*795d594fSAndroid Build Coastguard WorkerEAAAGBAI5ibB32qhh3ut9gjpDzPOqhncG0sL9JCjRYK8EWglPonPBTwXueQ3nsoFA8u29f 182*795d594fSAndroid Build Coastguard WorkerY4F4OcVu0Rjy4u240SnVnX1VwNtF3cuHIAxgXPo7H+9a09+XSG/SRQxAwCd7UGDS1rCU3F 183*795d594fSAndroid Build Coastguard WorkerrA/Ydess6H8Vpd1IFJFQc2oxNASeQhjDh9oCsNL/MqNUOzT/572aG2MvRqQtwrThyuWTYo 184*795d594fSAndroid Build Coastguard WorkerPxDZyzJrmCK90APt9U07HsO1yRFHjsUszVsRF7S3QWVQRLH/HuguM0SY1Ss9dXoZKQKiyS 185*795d594fSAndroid Build Coastguard WorkerYpJkLW/CAB/RWvEUAO/UTLBBeaU1prj6vOpLiMxi7CLlAK1BcUVmXmpDVKHWueWJNEm8nO 186*795d594fSAndroid Build Coastguard WorkerNcJ6rdA+w/NQkid9UbOs8KV8cbvCGUkT9TC/xQ4XtYfNS3k4E6xbqdmumWV299iJ/+rPp1 187*795d594fSAndroid Build Coastguard WorkerH5FfYbTOLy0L/YzNqGvq2gCq2ypt2ndyhi+mL86MchXdGHInEbUW3IZhBGeYY+zxH2Jzem 188*795d594fSAndroid Build Coastguard Worker6mMsVYz2oiKVQKMWtSiLDtACB9StRwAAAAMBAAEAAAGAPR8I9G/forM6+Ar2CEkyPDJ2iy 189*795d594fSAndroid Build Coastguard WorkerGqweJzy/aRicjE14pCXHRH2W4d3yfxxZ/cgjm7eGeIvTUN85zIR24P89psSdJXAInkZSsz 190*795d594fSAndroid Build Coastguard WorkerWbzADPb2hYRC8Xd6s+3akCD3m7s2zOmVGaY9VYQFEWhYb4ox1C31PC6IJVmR9YCid5jjHZ 191*795d594fSAndroid Build Coastguard Workerjn+bMmg0b6KH6/9ylpSh7xjrRS0TqRxIQfbb0nHW+w54sCet9qfVVX+PhJA5B0qMNECWZr 192*795d594fSAndroid Build Coastguard WorkerHQ2gVIZaP0iOxK4UsWyrF3tZH3opA/Zoj/pbFRrxpOO0jtoXaJFy3j9khiVYXyVwLHsRgr 193*795d594fSAndroid Build Coastguard Workers8Xybv6UBtZW8L/ebxlH2GkVn0z+GkL06dWY1E6k60WROVAFlOY4dTWntjvLl3xB/vqsSF 194*795d594fSAndroid Build Coastguard WorkeryPlCv+RFfdFbUXzsd50ekERNzMqqgQdgMaIuF039CSAF8qbTxu19KNWTmbGeUKfupCamyZ 195*795d594fSAndroid Build Coastguard WorkerkwyhXtQEZrGSM70Fh/WCpZqBJnOMDpTZuuHeardX22bROLl3TVbEmeUHjtAdG0TFMxAAAA 196*795d594fSAndroid Build Coastguard WorkerwHzkHRTG5zx+fLIwy0uOYx3KhcnoOUMunbAPHq+EWwWHLA8LVKMNPLwITHrV2sjM2xtN03 197*795d594fSAndroid Build Coastguard Workeria2KllzqLoiWHHdoNK5GzjDGpfY1NBlBYRijy9yxIo+QSnIb62NXjbyfYKIkxpma9HzkHI 198*795d594fSAndroid Build Coastguard WorkerLD9W5ypk+nOIoLREzRudB3wXF2+QA5Frdv1x4Cl1CkNiW2sgnrJq55Q1Cf2V9T8b4c839d 199*795d594fSAndroid Build Coastguard Worker0VA9TYZtAHunWOg+pgC6bdKt/ojPPlnlzftEouxuMRjguL2QAAAMEAwClb/X/80tZW8Fnz 200*795d594fSAndroid Build Coastguard WorkerqoGngIqCvDYWiKtLkCxKB7ZL/iuy6ulJiat3oA5Q6AtEi7f/MjEiissXGkdKqphf+S2Ncq 201*795d594fSAndroid Build Coastguard WorkerW9RA/YHDXjlMMQle+WIHuzgZjVzZASR97gRiOJSl7l+4oZek/toxfainLl9xdADaVOhnr/ 202*795d594fSAndroid Build Coastguard WorkerwBaBZiY/OcxSXzaB6ml7ScWTw/XCLO7UAlYC/KNhRDriFa/dxzK1azDV2JuBum9cV+yMDr 203*795d594fSAndroid Build Coastguard WorkerUeymSsp6t7vCZvcKv1F0BTzpIscZuJAAAAwQC9r7PBLc1CuXKfMW3aKa+W0Ud90MaPQ34z 204*795d594fSAndroid Build Coastguard Worker/d1YyAp5Tr9t/wMGfroEp2o8lWJbQ6ZJRndRDl2D+slrU/RRA0IiUepOidvK/A3p5ITrMl 205*795d594fSAndroid Build Coastguard Worker1G95A4A//UduCIvqLGdP+UAykNFAotWWKEPbh08XvSidZjZ3+GnVz3dqx79v2s9xSmq+II 206*795d594fSAndroid Build Coastguard Worker0Ch4i0CKTHSeVAXw6wfEfO7V+VDxNQyrG2EMLT6uTu58XDgOgB9KWej4DTDYm+KNoVblkf 207*795d594fSAndroid Build Coastguard Workerkqu3h4rmEmvk8AAAAjY2F0ZHVuY2FuQGNhdHN0YXRpb24uYy5nb29nbGVycy5jb20= 208*795d594fSAndroid Build Coastguard Worker-----END OPENSSH PRIVATE KEY-----" > ~/.ssh/ubuntu 209*795d594fSAndroid Build Coastguard Worker chmod 600 ~/.ssh/ubuntu 210*795d594fSAndroid Build Coastguard Worker 211*795d594fSAndroid Build Coastguard Workerelif [[ $action = connect ]]; then 212*795d594fSAndroid Build Coastguard Worker $ART_SSH_CMD 213*795d594fSAndroid Build Coastguard Worker 214*795d594fSAndroid Build Coastguard Workerelif [[ $action = quit ]]; then 215*795d594fSAndroid Build Coastguard Worker $ART_SSH_CMD "sudo poweroff" 216*795d594fSAndroid Build Coastguard Worker 217*795d594fSAndroid Build Coastguard Workerfi 218