基础环境

树莓派4b,ubuntu 22.04

安装kvm

# kvm相关
apt install qemu-system-arm libvirt-daemon-system virtinst bridge-utils seabios

# cloudinit工具
apt install cloud-image-utils

cloud-init

准备cloud-init配置cloud-init.cfg

#cloud-config
system_info:
  default_user:
    name: ubuntu
    home: /home/ubuntu

password: ${PASSWORD}
chpasswd: { expire: False }
hostname: ubuntu-vm

# 配置 sshd 允许使用密码登录
ssh_pwauth: True

生成cloud-init的iso

cloud-localds cloud-init.iso cloud-init.cfg

镜像

下载ubuntu cloud image的arm64版本,转换为qcow2

qemu-img convert -f qcow2 -O qcow2 ubuntu-22.04-server-cloudimg-arm64.img root-disk.qcow2

VM

引用磁盘、cloud-init iso、创建vm。

virt-install \
  --name ubuntu-vm \
  --memory 2048 \
  --disk /media/root-disk.qcow2,device=disk,bus=virtio \
  --disk /media/cloud-init.iso,device=cdrom \
  --os-variant ubuntu22.04 \
  --virt-type kvm \
  --graphics none \
  --network network=default,model=virtio \
  --import

配置vnc

如果需要增加vnc,virsh edit <vmName>修改xml

<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
  <listen type='address' address='0.0.0.0'/>
</graphics>
<video>
    <model type='virtio' heads='1' primary='yes'/>
  <address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</video>

配置了vnc后,qemu会在宿主机上监听vnc端口,不需要考虑端口映射

参考

ARM环境KVM快速起步 — Cloud Atlas 0.1 文档 (cloud-atlas.readthedocs.io)

制作开箱即用的 Ubuntu qcow2 镜像 | Shall We Code? (waynerv.com)

文章目录