それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ubuntu (aarch64 ) on raspi-ubuntu +nvram な仮想マシンを作る

apt で libvirt を入れる。

sudo apt -y install qemu-kvm libvirt-daemon-system \
libvirt-daemon virtinst bridge-utils libguestfs-tools virt-top

libvirt 経由でNVRAMとUEFIを使って起動する・

NAME=u2204-02
DIR=/var/lib/libvirt/images
NVRAM=$DIR/$NAME-AAVMF_VARS.fd
UEFI=/usr/share/AAVMF/AAVMF_CODE.fd
DISK=$DIR/u2204-04.qcow2
ISOIMG=$DIR/ubuntu-22.04.2-live-server-arm64.iso

cd $DIR
cp $UEFI $NVRAM

virt-install \
  --name=$NAME \
  --machine=virt\
  --arch=aarch64 \
  --virt-type=kvm \
  --cdrom=$ISOIMG \
  --serial pty \
  --disk path=$DISK,format=qcow2,device=disk,bus=virtio,cache=none \
  --boot loader=$UEFI,loader_ro=yes,nvram=$NVRAM,loader_type=pflash \
  --boot cdrom,hd \
  --network type=direct,source=eth0,source_mode=bridge,model=virtio \
  --memory=2048 \
  --vcpu=2 \
  --os-variant ubuntu22.04 


    

URFI/nvram の設定

aarch64 の仮想マシンvirt-install する際にハマった箇所

NAME=u2204-02
UEFI=/usr/share/AAVMF/AAVMF_CODE.fd
NVRAM=/var/lib/libvirt/qemu/nvram/$NAME_VARS.fd
--boot loader=$UEFI,loader_ro=yes,nvram=$NVRAM,loader_type=pflash \

ブート時にエラーになる。UEFI関連。

ERROR internal error: process exited while connecting to monitor: qemu-system-aarch64: Failed to lock byte 100がでた。

nvram を作らないとエラーになる。 ERROR unsupported configuration: ACPI requires UEFI on this architecture がでた

ネットワーク周りの設定

UbuntuのLiveサーバーはインストールの各種ダイアログへ入力画面をSSH経由で行える。

そのため、作業用マシンから新規インスト仮想マシンまでが、SSH経由で接続出来ると便利。

SSH経由でインストをするいちばん簡単な方法は、macvtap を作ること。

macvtap 接続を作成する

 --network type=direct,source=eth0,source_mode=bridge,model=virtio \

以上の設定を足すとインストール時に、リモートSSH経由のインストールが可能になる。 SSH経由でインストールする例

CD-ROMの入手

ARM版・Raspberry pi 4 で動く仮想マシンはaarch64を使うと楽である。

aarch64を使う場合、専用のOSイメージを使う。

wget https://cdimage.ubuntu.com/releases/22.04/release/ubuntu-22.04.1-live-server-arm64.iso
sudo mv ubuntu-22.04.1-live-server-arm64.iso /var/lib/libvirt/images

raspi(aarch64)でx86_64を動かしても良いが。

HTTP経由のネットワークインストール

CD-ROMではなくネットワークからカーネルイメージを入手するのもいい。

ネットワークインストールは、インストラーをURLで指定する。

 --location 'http://ports.ubuntu.com/dists/bionic/main/installer-arm64/'
NAME=u2204-03
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/$NAME.qcow2 10G  ;
NAME=u2204-03
UEFI=/usr/share/AAVMF/AAVMF_CODE.fd
NVRAM=/var/lib/libvirt/qemu/nvram/$NAME_VARS.fd
URL='http://ports.ubuntu.com/dists/focal/main/installer-arm64/'
DISK=/var/lib/libvirt/images/$NAME.qcow2

virt-install \
    --name=$NAME \
    --machine=virt\
    --arch=aarch64 \
    --virt-type=kvm \
  --location $URL \
    --disk path=$DISK,format=qcow2,device=disk,bus=virtio,cache=none \
    --network type=direct,source=eth0,source_mode=bridge,model=virtio \
    --boot loader=$UEFI,loader_ro=yes,nvram=$NVRAM,loader_type=pflash \
    --memory=2048 \
    --vcpu=2 \
    --os-variant ubuntu22.04 

ネットワーク・インストールの場合、SSHサーバーがない。

SSH経由でインストール作業を行えないので、cloud-initなどを使う必要がある。 github から公開鍵を持ってくることもない。

純粋にDebianのnet-instが動いてる感じ。

インストール時のCPU使用量

Raspi4って優秀ですよね。

apt を設定しておくと速いかも

echo 'Acquire::HTTP::Proxy "http://192.168.200.50:3142";' |sudo tee  /etc/apt/apt.conf.d/01proxy

参考資料 https://gist.github.com/yen3/884bf14ec8286df35de67953a561eee8