如何创建华为HCS中可用的Ubuntu Qcow2镜像
以下所有操作均基于Ubuntu 24.10桌面版。
1.安装相关包。
sudo apt install guestfs-tools virt-manager cloud-utils
2.下载Ubuntu Cloud Image,以Ubuntu 24.04版本为例。
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
3.将下载的img转换为qcow2格式,华为HCS建议Linux磁盘大小不低于20G。
qemu-img convert -f qcow2 -O qcow2 noble-server-cloudimg-amd64.img root-disk.qcow2
qemu-img resize root-disk.qcow2 20G
4.编写cloud-init配置,并另存为cloud-init.cfg,以下配置的主要含义是:
- 自动更新软件包,自动重启。
- apt安装x11-utils、hwinfo(检测分辨率)包,snap安装vmagent包。
- 设置ubuntu用户默认密码为ubuntu。
- 软件源修改为中科大源,并使用deb 822格式。
- ssh认证允许使用密码认证。
- datasource使用OpenStack类型。
- 如果配置manage_etc_hosts: localhost,将为/etc/hosts文件添加以下记录,而且每次启动都会自动更新hostname。
127.0.1.1 ubuntu ubuntu
#cloud-config
package_reboot_if_required: True
package_update: True
package_upgrade: True
apt_preserve_sources_list: True
packages:
- snap:
- vmagent
- apt:
- x11-utils
- hwinfo
system_info:
default_user:
name: ubuntu
home: /home/ubuntu
datasource:
OpenStack:
metadata_urls: ["http://169.254.169.254"]
max_wait: 120
timeout: 5
apply_network_config: False
apt:
sources_list: |
Types: deb
URIs: https://mirrors.ustc.edu.cn/ubuntu
Suites: $RELEASE $RELEASE-updates $RELEASE-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: https://mirrors.ustc.edu.cn/ubuntu
Suites: $RELEASE-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
password: "WJLwjl123"
chpasswd: { expire: False }
ssh_pwauth: True
final_message: |
cloud-init has finished
version: $version
timestamp: $timestamp
datasource: $datasource
uptime: $uptime
5.将cloud-init.cfg文件封装成iso文件。
cloud-localds cloud-init.iso cloud-init.cfg
6.创建虚拟机,虚机名字使用“noble”,首先测试graphics参数和ideo参数对最终虚机的影响,网卡采用默认的NAT方式。
方式一: graphics参数配置为none,这种方式创建的虚机相当于不需要使用VGA、HDMI等视频连接线与显示器进行连接,虚机提供一个串口,而用户使用计算机+串口线连接虚机,可以想象串口线调试交换机等网络设备的场景,因此配套参数可以设置波特率之类的也就可以理解了。
这种方式创建的虚机开机过程会直接显示在运行命令的终端内,可以使用virsh console noble命令进入虚机。
这种方式的缺点在于创建出来的虚机分辨率特别低,而且无法修改,使用stty size命令可以看到结果为:24 80。
virt-install \
--name noble \
--memory 4096 \
--disk root-disk.qcow2,device=disk,bus=virtio \
--disk cloud-init.iso,device=cdrom \
--os-variant ubuntu24.04 \
--virt-type kvm \
--graphics none \
--network network=default,model=virtio \
--import
方式二:graphics参数配置为vnc,使用stty size命令可以看到结果为:25 80,使用全屏也只会将文字拉伸到全屏,显示效果很差。
virt-install \
--name noble \
--memory 4096 \
--disk root-disk.qcow2,device=disk,bus=virtio \
--disk cloud-init.iso,device=cdrom \
--os-variant ubuntu24.04 \
--virt-type kvm \
--graphics vnc \
--network network=default,model=virtio \
--import
virt-viewer --connect qemu:///system --wait noble
上图是华为云创建虚机后的界面,可以看到,分辨率太低了。
方式三:graphics参数配置为spice,等价于以下参数,推荐采用这种方式,这种方式安装x11-utils和hwinfo后,分辨率选项更多。
--video qxl --channel spicevmc
virt-install \
--name noble \
--memory 4096 \
--disk root-disk.qcow2,device=disk,bus=virtio \
--disk cloud-init.iso,device=cdrom \
--os-variant ubuntu24.04 \
--virt-type kvm \
--graphics spice \
--network network=default,model=virtio \
--import
方式四:video参数配置为virtio,创建出来的虚机分辨率明显提升,使用stty size命令测试结果为50 160。
virt-install \
--name noble \
--memory 4096 \
--disk root-disk.qcow2,device=disk,bus=virtio \
--disk cloud-init.iso,device=cdrom \
--os-variant ubuntu24.04 \
--virt-type kvm \
--video=virtio \
--network network=default,model=virtio \
--import
7.使用hwinfo命令查看支持的分辨率。
sudo hwinfo --framebuffer
注:方式一安装的虚机运行以上命令结果为空,因此无法提升分辨率。
8.选择1280x1024作为新分辨率。
sudo vim /etc/default/grub
GRUB_GFXMODE=1280x1024x24
GRUB_GFXPAYLOAD_LINUX=1280x1024
sudo update-grub
9.在虚机中安装vmtools,从而使得OC可以监控虚机CPU、内存等资源使用情况。
sudo snap install vmagent
10.在宿主机中执行以下命令,清理相关资源。
sudo virt-sysprep -d noble
11.把镜像压缩一下,一般可以压缩至500M左右。
qemu-img convert -f qcow2 -O qcow2 -c root-disk.qcow2 noble.qcow2
参考文章:
1.https://waynerv.com/posts/create-out-of-box-ubuntu-qcow2-image/
2.https://unix.stackexchange.com/questions/17027/how-to-set-the-resolution-in-text-consoles-troubleshoot-when-any-vga-fail
3.https://linux.die.net/man/1/virt-install
评论
发表评论