Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/test/sanity/scripts/run-qemu-64k.sh
5262 views
1
#!/bin/sh
2
set -e
3
4
CONTAINER=""
5
ARGS=""
6
7
while [ $# -gt 0 ]; do
8
case "$1" in
9
--container) CONTAINER="$2"; shift 2 ;;
10
--) shift; ARGS="$*"; break ;;
11
*) echo "Unknown option: $1"; exit 1 ;;
12
esac
13
done
14
15
if [ -z "$CONTAINER" ]; then
16
echo "Usage: $0 --container CONTAINER [-- ARGS...]"
17
exit 1
18
fi
19
20
echo "Installing QEMU system emulation and tools"
21
sudo apt-get update && sudo apt-get install -y qemu-system-arm binutils
22
23
echo "Exporting container filesystem"
24
CONTAINER_ID=$(docker create --platform linux/arm64 "$CONTAINER")
25
ROOTFS_DIR=$(mktemp -d)
26
docker export "$CONTAINER_ID" | sudo tar -xf - -C "$ROOTFS_DIR"
27
docker rm -f "$CONTAINER_ID"
28
29
# echo "Removing container image to free disk space"
30
# docker rmi "$CONTAINER" || true
31
docker system prune -f || true
32
33
echo "Copying test files into root filesystem"
34
TEST_DIR=$(cd "$(dirname "$0")/.." && pwd)
35
sudo cp -r "$TEST_DIR"/* "$ROOTFS_DIR/root/"
36
37
echo "Downloading Ubuntu 24.04 generic-64k kernel for ARM64"
38
KERNEL_URL="https://ports.ubuntu.com/ubuntu-ports/pool/main/l/linux/linux-image-unsigned-6.8.0-90-generic-64k_6.8.0-90.91_arm64.deb"
39
KERNEL_DIR=$(mktemp -d)
40
curl -fL "$KERNEL_URL" -o "$KERNEL_DIR/kernel.deb"
41
42
echo "Extracting kernel"
43
cd "$KERNEL_DIR" && ar x kernel.deb && rm kernel.deb
44
tar xf data.tar* && rm -f debian-binary control.tar* data.tar*
45
VMLINUZ="$KERNEL_DIR/boot/vmlinuz-6.8.0-90-generic-64k"
46
if [ ! -f "$VMLINUZ" ]; then
47
echo "Error: Could not find kernel at $VMLINUZ"
48
exit 1
49
fi
50
51
echo "Storing test arguments and installing init script"
52
echo "$ARGS" > "$ROOTFS_DIR/test-args"
53
date -u '+%Y-%m-%d %H:%M:%S' > "$ROOTFS_DIR/host-time"
54
sudo mv "$ROOTFS_DIR/root/scripts/qemu-init.sh" "$ROOTFS_DIR/init"
55
sudo chmod +x "$ROOTFS_DIR/init"
56
57
echo "Creating disk image with root filesystem"
58
DISK_IMG=$(mktemp)
59
dd if=/dev/zero of="$DISK_IMG" bs=1M count=2048 status=none
60
sudo mkfs.ext4 -q -d "$ROOTFS_DIR" "$DISK_IMG"
61
sudo rm -rf "$ROOTFS_DIR"
62
63
echo "Starting QEMU VM with 64K page size kernel"
64
timeout 1800 qemu-system-aarch64 \
65
-M virt \
66
-cpu max,pauth-impdef=on \
67
-accel tcg,thread=multi \
68
-m 4096 \
69
-smp 2 \
70
-kernel "$VMLINUZ" \
71
-append "console=ttyAMA0 root=/dev/vda rw init=/init net.ifnames=0" \
72
-drive file="$DISK_IMG",format=raw,if=virtio \
73
-netdev user,id=net0 \
74
-device virtio-net-pci,netdev=net0 \
75
-nographic \
76
-no-reboot
77
78
echo "Extracting test results from disk image"
79
MOUNT_DIR=$(mktemp -d)
80
sudo mount -o loop "$DISK_IMG" "$MOUNT_DIR"
81
sudo cp "$MOUNT_DIR/root/results.xml" "$TEST_DIR/results.xml"
82
sudo chown "$(id -u):$(id -g)" "$TEST_DIR/results.xml"
83
84
EXIT_CODE=$(sudo cat "$MOUNT_DIR/exit-code" 2>/dev/null || echo 1)
85
sudo umount "$MOUNT_DIR"
86
exit $EXIT_CODE
87
88