背景
libguestfs提供了一种编辑镜像的方法
当然也可以直接把镜像挂载到本地进行编辑,可参见本人这篇博文相关章节
安装
yum install install libguestfs-tools -y
使用简介
guestfish -a ubuntu-14.04.2-server-amd64-v20160126.img
执行上述命令进入shell
这时可以看到,启动了一个虚拟机(后面详细过程部分,详细分析启动过程)
然后就可以对镜像做相关的修改,是不是很简单
原理
1.执行guestfish -a会动一个进程,也就是那个shell壳子,姑且称之为main program
2.运行run的时候,会创建一个child process,在child process中,利用libvirt启动一个称为appliance的虚拟机。
3.在appliance中,运行了linux kernel和一系列用户空间的工具(LVM, ext2等),以及一个后台进程guestfsd
4.main process中的libguestfs和这个guestfd通过RPC进行交互
5.由child process的kernel来操作disk image
详细过程
如果想看详细的启动过程可以导出如下内容
export LIBGUESTFS_DEBUG=1
1.启动guestfishb并连接libvirt
2.运行supermin5
此步骤中包含了拷贝内核相关内容到/var/tmp/.guestfs-0/appliance.d目录
3.为创建appliance一块盘
使用qem-img创建一块磁盘,作为系统盘
4.创建虚拟机的xml
为libvirt准备创建虚拟机所需的xml
然后调用libvirt命令启动虚拟机
5.启用bios
设置bios相关内容
6.启动initrd
7.加载内核模块
8.设定root设备
9.运行init
挂载相关文件系统,udev挂载设备系统
10.启动guestfsd
11.开通端口
C类库可以通过RPC连接这个端口
命令全集看这里