Как проще всего протестировать ARM Ubuntu под Qemu?

Как проще всего протестировать ARM Ubuntu под Qemu?

Я хотел бы поиграться с версией Ubuntu для ARM (с графической поддержкой) под Qemu, но у меня возникли проблемы с поиском какого-либо руководства о том, как сделать это проще всего (я бы предпочел просто загрузить какой-нибудь образ и запустить одну команду для его выполнения). Как добиться этого с наименьшими хлопотами?

решение1

В этом ответе:https://askubuntu.com/questions/281763/есть-ли-предварительно-построенный-qemu-ubuntu-image32bit-online/1081171#1081171Я описал следующие рабочие настройки для гостевой/хостовой ОС Ubuntu 18.04:

  • облачный образ arm64: самая быстрая настройка для начала работы
  • debootstrap arm64: достаточно быстрый, но позволяет больше настраивать образ

Эти установки предоставляют готовые образы дисков и не проходят через установщик. Это лучшие варианты, которые я видел до сих пор.

Далее, мне также удалось запустить образ сервера arm64 на QEMU. Однако это происходит через установщик, что на грани непрактичного замедления, если только вы не на хосте ARM с KVM. Это особенно болезненно, поскольку для завершения установки требуются десятки взаимодействий.

Вот скрипт сервера, протестированный на хосте Ubuntu 18.10:

#!/usr/bin/env bash

set -eux

# Tested on Ubuntu 18.10.
# - https://superuser.com/questions/942657/how-to-test-arm-ubuntu-under-qemu-the-easiest-way
# - https://askubuntu.com/questions/797599/how-to-run-ubuntu-16-04-arm-in-qemu

# Parameters.
# This filename may need updating, check http://cdimage.ubuntu.com/releases/18.04/release/
id=ubuntu-18.04.3-server-arm64   
#id=debian-9.6.0-arm64-xfce-CD-1
img="${id}.img.qcow2"
img_snapshot="${id}.img.snapshot.qcow2"
iso="${id}.iso"
flash0="${id}-flash0.img"
flash1="${id}-flash1.img"

# Images.
if [ ! -f "$iso" ]; then
  wget "http://cdimage.ubuntu.com/releases/18.04/release/${iso}"
fi
if [ ! -f "$img" ]; then
  qemu-img create -f qcow2 "$img" 1T
fi
if [ ! -f "$img_snapshot" ]; then
  qemu-img \
    create \
    -b "$img" \
    -f qcow2 \
    "$img_snapshot" \
  ;
fi
if [ ! -f "$flash0" ]; then
  dd if=/dev/zero of="$flash0" bs=1M count=64
  dd if=/usr/share/qemu-efi/QEMU_EFI.fd of="$flash0" conv=notrunc
fi
if [ ! -f "$flash1" ]; then
  dd if=/dev/zero of="$flash1" bs=1M count=64
fi

# Run.
#
# cdrom must be scsi or else the installation fails midway with:
#
# > Detect and mount CD-ROM
# >
# > Your installation CD-ROM couldn't be mounted. This probably means
# > that the CD-ROM was not in the drive. If so you can insert it and try
# > again.
# >
# > Retry mounting the CD-ROM?
# > Your installation CD-ROM couldn't be mounted.
#
# This is because the drivers for the default virtio are not installed in the ISO,
# because in the past it was not reliable on qemu-system-aarch64.
#
# See also:
# https://bazaar.launchpad.net/~ubuntu-testcase/ubuntu-manual-tests/trunk/view/head:/testcases/image/1688_ARM64_Headless_KVM_Guest
qemu-system-aarch64 \
  -cpu cortex-a57 \
  -device rtl8139,netdev=net0 \
  -device virtio-scsi-device \
  -device scsi-cd,drive=cdrom \
  -device virtio-blk-device,drive=hd0 \
  -drive "file=${iso},id=cdrom,if=none,media=cdrom" \
  -drive "if=none,file=${img_snapshot},id=hd0" \
  -m 2G \
  -machine virt \
  -netdev user,id=net0 \
  -nographic \
  -pflash "$flash0" \
  -pflash "$flash1" \
  -smp 2 \
;

GitHub восходящий поток.

См. также это для эмуляции Raspberry Pi:https://stackoverflow.com/questions/28880833/how-to-emulate-the-raspberry-pi-2-on-qemu/45814913#45814913

Рабочий стол amd64 показан по адресу:https://askubuntu.com/questions/884534/how-to-run-ubuntu-16-04-desktop-on-qemu/1046792#1046792

Связанный контент