openEuler虚拟机镜像扎转换成支持无需安装,直接网络引导的镜像

背景

openEuler社区发布了支持服务器,边缘计算,云,嵌入式场景的各种支持安装或者虚机启动的镜像,这些镜像都不能实现通过网络直接无盘启动的场景。这篇文章通过简单快速的方式,将支持虚拟机的OS镜像转换成支持直接网络引导的镜像,方便有此需求的小伙伴直接使用。

具体步骤

  1. 下载镜像
    从openEuler社区选择需要的支持云计算的qcow镜像,比如22.03 LTS版本镜像,并下载到合适的Linux主机目录
cd /tmp
wget https://mirrors.tools.huawei.com/openeuler/openEuler-22.03-LTS/virtual_machine_img/x86_64/openEuler-22.03-LTS-x86_64.qcow2.xz --no-check-certificate
  1. 挂载镜像
    将qcow2镜像挂载到一个临时目录
 cd /tmp
 qemu-nbd --connect=/dev/nbd0  openEuler-22.03-LTS-x86_64.qcow2 
mkdir  openeuler_tmp
mount /dev/nbd0p2 openeuler_tmp/

  1. 修改部分内容,生成新的镜像
    进入挂载后的临时目录,删除掉etc/fstab目录下关于/和/boot的挂载点配置
cd openeuler_tmp/
vi etc/fstab

修改完成后,使用CPIO 压缩成新的镜像

find . | cpio -H newc --create  | gzip -9 > ../initrd.img
  1. 挂载boot分区,拷贝出对应的内核
cd /tmp
mount /dev/nbd0p1  openeuler_tmp/boot/
cp cp vmlinuz-5.10.0-60.18.0.50.oe2203.x86_64  ../../
  1. 将vmlinuz版本和打包的好的initrd.img文件拷贝到pxe服务器上,并放置到tftp server目录下
  2. 修改 pxe引导文件的配置,增加如下启动参数
user_root=tmpfs [color= red#]rdinit=/sbin/init[/color] console=tty1 console=ttyS0  nomodeset oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 panic=3

pxe服务器如何搭建,参考openEuler自动化安装