我有一个非常棘手的任务,其中一点让我抓狂。我会让它变得简单:目标:使用 kickstart 安装 CentOS7。在安装结束时,作为后续脚本,它应该启动 libvirtd 并使用 virt-install 命令创建虚拟机。
在我的 kickstart 文件中我有:
dd if=/dev/zero of=/var/lib/libvirt/images/fw.qcow2 bs=1024 count=0 seek=10G
/usr/sbin/libvirtd -d &
systemctl enable libvirtd
virt-install --name=firewall --disk path=/var/lib/libvirt/images/fw.qcow2 --ram=2048 --vcpus=2 --nographics --os-type=linux --os-variant=rhel7 --location /mnt/cdrom/CentOS-7-x86_64-Minimal-1511.iso --extra-args="console=tty0 console=ttyS0,115200 rd_NO_PLYMOUTH"
但是我的经验是:我不知道它是否启动了 libvirt,它肯定会启用它,因为重新启动后,libvirt 正在运行,但操作系统未通过 virt-install 安装。在 ks-post.log 文件中,我有:
ERROR Cannot recv data: Connection reset bypeer
error: Dailed to connect to the hypervisor
error: no calid connection
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
我认为我无法正确启动 libvirtd
/usr/sbin/libvirtd -d &
我可以命令吗?
答案1
代替:
/usr/sbin/libvirtd -d &
尝试:
systemctl start libvirtd
您可以用它journalctl
来查看 systemd 日志。
另外,我对你的--location
论点感到疑惑。
答案2
我知道我来晚了,但是对于希望在未来做类似事情的每个人,我建议您创建一个systemd
仅执行包含命令的普通 shell 脚本的服务。在 Kickstart 中的 chroot 环境中执行命令和正常启动的操作系统之间的一个主要区别是目标机器的内核未加载到执行中(我不知道确切情况)但由于服务未运行(包括所有守护进程)您将无法在 kickstart chrooted 环境中启动任何“ ”service
或“ systemctl
”服务。我也遇到过类似的问题,只是为我的 centos7 环境创建了一个 systemd 文件,该文件在系统首次重启后,在端口 8080 上启动一个 apache 服务器并复制粘贴一些自定义文件,执行后删除原始 systemd 文件,以便在第一次重启后不会调用相同的 shell 脚本。
注意:要使此技术发挥作用,您必须将systemd
安装媒体 (iso) 中的一些文件(如果需要)复制粘贴到目标文件系统。如果您不想这样做,那么在 kickstart 本身的 chroot 环境中,您可以简单地将其curl
或wget
(下载)systemd 文件放入托管在同一台或另一台服务器上的 systemd 文件夹中。