Rabbit Slide Show

Ubuntuのriscv64版をqemuで動かした

2024-04-27

Description

[LILO&東海道らぐオフラインミーティング 2024-04-27](https://lilo.connpass.com/event/316818/)での発表資料です。

Text

Page: 1

Ubuntuのriscv64版をqemu
で動かした
Kazuhiro NISHIYAMA
LILO&東海道らぐオフラインミーティング
2024-04-27
2024-04-27
Powered by Rabbit 3.0.3

Page: 2

self.introduction
西山 和広
Ruby のコミッター
github など: @znz
株式会社 Ruby 開発 www.ruby-dev.jp
1/10

Page: 3

ホスト
Debian GNU/Linux 12 (bookworm)
qemu-system* 1:7.2+dfsg-7+deb12u5
libvirt-daemon 9.0.0-4
u-boot-qemu 2023.01+dfsg-2
cloud-image-utils 0.33-1
2/10

Page: 4

ゲストイメージファイル
https://cloud-images.ubuntu.com から ダウン
ロード
/${codename}/current/${codename}-server-
cloudimg-${arch}.img
でデイリービルド版
https://cloud-images.ubuntu.com/releases/ に
リリース版
基本デイリービルドでたまたま問題があるビルド
だったらリリース版を選ぶぐらいでいいかも
( 実機用は https://cdimage.ubuntu.com/
releases/)
3/10

Page: 5

イメージをいい感じにする
img=noble-server-cloudimg-riscv64.img
wget https://cloud-images.ubuntu.com/noble/current/$img
qemu-img resize "$img" +5G
qcow2 形式
速度のため raw に変換するのもあり ( qemu-img
convert -f qcow2 -O raw "$orig" "$img")
ギリギリのディスクサイズなのでリサイズ
ちょっと試すなら +5G ぐらい
もっと使うなら 16G とかに増やす ( qemu-img
resize "$img" 16G)
4/10

Page: 6

最低限の起動確認
qemu-system-riscv64 -nographic -M virt -m 1G \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-drive "if=virtio,format=qcow2,file=$img" -snapshot
-machine (-M) は virt で良さそう
-m は適当に増やす
デフォルトの 128 だと起動しなかった
-kernel は uboot で起動
-bios に opensbi の fw_jump.elf の指定は不要
-snapshot で書き込みは止めておいた
5/10

Page: 7

ログイン準備
mkdir config
echo "instance-id: $(uuidgen || echo i-abcdefg)" > config/meta-data
vi config/user-data
cloud-localds "seed.iso" config/user-data config/meta-data
起動できるが root もパスワードがなくてログ
インできない
cloud-init で設定するため ISO ファイル作成
-drive
"if=virtio,format=raw,file=seed.iso" を追
加して起動
6/10

Page: 8

config/user-data
詳細は cloud-init のドキュメントを参照
例 : https://cloudinit.readthedocs.io/en/latest/
reference/examples.html
#cloud-config
hostname: noble-riscv64
# user: ubuntu のパスワード設定
password: ubuntu
chpasswd: { expire: False }
ssh_pwauth: true
# 各種設定
timezone: Asia/Tokyo
locale: ja_JP.utf8
# 自分のssh鍵を設定
ssh_import_id:
- gh:znz
7/10

Page: 9

起動
qemu-system-riscv64 -nographic -M virt -m 2G -smp 4 \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-drive "if=virtio,format=qcow2,file=$img" \
-drive "if=virtio,format=raw,file=seed.iso" \
-device "virtio-net-device,netdev=net0" \
-netdev "user,id=net0,hostfwd=tcp::2222-:22" \
-device virtio-rng-pci \
-snapshot
メモリや CPU も増やした
ネット接続や RNG デバイスも追加
「ssh -o "StrictHostKeyChecking no" -p
2222 ubuntu@localhost」でログイン可能
8/10

Page: 10

その他の設定
今日はここまで
後日、ブログ https://blog.n-z.jp/ に記事を書く
予定
qemu-guest-agent 対応
https://wiki.qemu.org/Documentation/9psetup でホ
ストとのファイル共有
自動起動のため libvirt 管理下に移行
9/10

Page: 11

まとめ
cloud-images.ubuntu.com にある amd64,
arm64, armhf, ppc64el, riscv64, s390x はどれ
も同じように使える ( はず )
最低限の起動までは arch ごとに調査が必要
cloud-init でログインできる設定が必要
他の設定はできるだけシェルスクリプトや
ansible などの provisioner を使う方が楽かも
cloud-init は試行錯誤しにくい
ansible などは知識の流用がしやすい
Powered by Rabbit 3.0.3
10/10

Other slides