virt-install工具的--extra-args参数在源代码中是如何实现的?
virt-install --extra-args 参数实现逻辑
你没在源码里直接找到对应实现,是因为它的逻辑分散在参数解析、安装介质处理、libvirt配置生成三个模块里,具体流程如下:
- 第一步:参数解析
该参数的定义在virtinst/cli.py的CLI参数注册逻辑中,仅做字符串透传存储,不会做格式校验或者提前处理,所有你传入的内容会原封不动存到安装实例的extra_args属性中。 - 第二步:安装介质适配
只有当你配合--location参数使用(也就是指定了可直接提取内核/initrd的安装源,比如你示例里的NFS网络安装源、本地ISO解压目录、官方HTTP安装源等)时,这个参数才会生效。virt-install会先从你指定的location路径中提取内核镜像(vmlinuz)和内存盘镜像(initrd.img),此时会把你传入的--extra-args内容拼接为内核启动命令行的一部分。注意:如果用
--cdrom参数直接挂载ISO镜像安装,--extra-args不会生效,因为virt-install无法修改ISO内置的引导菜单配置注入参数。 - 第三步:参数下发给虚拟化层
拼接好的内核启动参数会被写入到libvirt域的临时XML配置中,对应<os>标签下的<cmdline>子标签,或者直接作为qemu进程的-append参数传递:如果是安装阶段临时引导,virt-install会直接调用qemu时把参数附在-kernel参数之后;如果是要持久化到域配置,就会写进XML的cmdline配置项,libvirt启动域的时候会自动传递给qemu。
你示例里的参数就是典型用法:console=ttyS0让内核把输出重定向到串口,适配你加的--nographics配置;ip、netmask、gateway参数是安装阶段内核直接配置网络用的;ks=参数告诉内核启动后去拉取kickstart自动应答文件完成无人值守安装,所有这些参数都是直接透传给安装内核的,virt-install本身不会做消费处理。
内容的提问来源于stack exchange,提问作者Xsky
相关产品推荐
相关产品推荐

