129 lines
4.0 KiB
Bash
Executable File
129 lines
4.0 KiB
Bash
Executable File
#! /bin/bash
|
|
#
|
|
# Copyright (C) 2023 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
set -e
|
|
|
|
ART_TEST_ON_VM=true . "$(dirname $0)/buildbot-utils.sh"
|
|
|
|
known_actions="create|boot|setup-ssh|connect|quit"
|
|
|
|
if [[ -z $ANDROID_BUILD_TOP ]]; then
|
|
msgfatal "ANDROID_BUILD_TOP is not set"
|
|
elif [[ ( $# -ne 1 ) || ! ( "$1" =~ ^($known_actions)$ ) ]]; then
|
|
msgfatal "usage: $0 <$known_actions>"
|
|
fi
|
|
|
|
action="$1"
|
|
|
|
get_stable_binary() {
|
|
mkdir tmp && cd tmp
|
|
wget "http://security.ubuntu.com/ubuntu/pool/main/$1"
|
|
7z x "$(basename $1)" && zstd -d data.tar.zst && tar -xf data.tar
|
|
mv "$2" ..
|
|
cd .. && rm -rf tmp
|
|
}
|
|
|
|
if [[ $action = create ]]; then
|
|
(
|
|
rm -rf "$ART_TEST_VM_DIR"
|
|
mkdir -p "$ART_TEST_VM_DIR"
|
|
cd "$ART_TEST_VM_DIR"
|
|
|
|
# sudo apt install qemu-system-<arch> qemu-efi cloud-image-utils
|
|
|
|
# Get the cloud image for Ubunty 22.04 (Jammy)
|
|
wget "http://cloud-images.ubuntu.com/releases/22.04/release/$ART_TEST_VM_IMG"
|
|
|
|
if [[ "$TARGET_ARCH" = "riscv64" ]]; then
|
|
# Get U-Boot for Ubuntu 22.04 (Jammy)
|
|
get_stable_binary \
|
|
u/u-boot/u-boot-qemu_2022.01+dfsg-2ubuntu2.3_all.deb \
|
|
usr/lib/u-boot/qemu-riscv64_smode/uboot.elf
|
|
|
|
# Get OpenSBI for Ubuntu 22.04 (Jammy)
|
|
get_stable_binary \
|
|
o/opensbi/opensbi_1.1-0ubuntu0.22.04.1_all.deb \
|
|
usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf
|
|
|
|
elif [[ "$TARGET_ARCH" = "arm64" ]]; then
|
|
# Get EFI (ARM64) for Ubuntu 22.04 (Jammy)
|
|
get_stable_binary \
|
|
e/edk2/qemu-efi-aarch64_2022.02-3ubuntu0.22.04.1_all.deb \
|
|
usr/share/qemu-efi-aarch64/QEMU_EFI.fd
|
|
|
|
dd if=/dev/zero of=flash0.img bs=1M count=64
|
|
dd if=QEMU_EFI.fd of=flash0.img conv=notrunc
|
|
dd if=/dev/zero of=flash1.img bs=1M count=64
|
|
fi
|
|
|
|
qemu-img resize "$ART_TEST_VM_IMG" +128G
|
|
|
|
# https://help.ubuntu.com/community/CloudInit
|
|
cat >user-data <<EOF
|
|
#cloud-config
|
|
ssh_pwauth: true
|
|
chpasswd:
|
|
expire: false
|
|
list:
|
|
- $ART_TEST_SSH_USER:ubuntu
|
|
EOF
|
|
cloud-localds user-data.img user-data
|
|
)
|
|
elif [[ $action = boot ]]; then
|
|
(
|
|
cd "$ART_TEST_VM_DIR"
|
|
if [[ "$TARGET_ARCH" = "riscv64" ]]; then
|
|
qemu-system-riscv64 \
|
|
-m 16G \
|
|
-smp 8 \
|
|
-M virt \
|
|
-nographic \
|
|
-bios fw_jump.elf \
|
|
-kernel uboot.elf \
|
|
-drive file="$ART_TEST_VM_IMG",if=virtio \
|
|
-drive file=user-data.img,format=raw,if=virtio \
|
|
-device virtio-net-device,netdev=usernet \
|
|
-netdev user,id=usernet,hostfwd=tcp::$ART_TEST_SSH_PORT-:22
|
|
elif [[ "$TARGET_ARCH" = "arm64" ]]; then
|
|
qemu-system-aarch64 \
|
|
-m 16G \
|
|
-smp 8 \
|
|
-cpu cortex-a57 \
|
|
-M virt \
|
|
-nographic \
|
|
-drive if=none,file="$ART_TEST_VM_IMG",id=hd0 \
|
|
-pflash flash0.img \
|
|
-pflash flash1.img \
|
|
-drive file=user-data.img,format=raw,id=cloud \
|
|
-device virtio-blk-device,drive=hd0 \
|
|
-device virtio-net-device,netdev=usernet \
|
|
-netdev user,id=usernet,hostfwd=tcp::$ART_TEST_SSH_PORT-:22
|
|
fi
|
|
|
|
)
|
|
elif [[ $action = setup-ssh ]]; then
|
|
# Clean up mentions of this VM from known_hosts
|
|
sed -i -E "/\[$ART_TEST_SSH_HOST.*\]:$ART_TEST_SSH_PORT .*/d" $HOME/.ssh/known_hosts
|
|
ssh-copy-id -p "$ART_TEST_SSH_PORT" -o IdentityAgent=none "$ART_TEST_SSH_USER@$ART_TEST_SSH_HOST"
|
|
|
|
elif [[ $action = connect ]]; then
|
|
$ART_SSH_CMD
|
|
|
|
elif [[ $action = quit ]]; then
|
|
$ART_SSH_CMD "sudo poweroff"
|
|
|
|
fi
|