安装后 KVM Guest 自动启动

安装后 KVM Guest 自动启动

我正在尝试使用 kvm 在 rhel 主机内安装 rhel 客户机,并让 rhel 客户机在安装完成后自动启动。

kickstart 文件具有“rebo​​ot”命令,该命令会告诉 RHEL 在安装后重新启动。

该脚本位于 /root/install_machine,变量在脚本顶部定义

virt-install \
--name=$name-$ip_short \
--arch=x86_64 \
--ram=$memory \
--os-type=linux \
--os-variant=virtio26 \
--hvm \
--connect=qemu:///system \
--network bridge:br0 \
--vcpus=$cpus \
--accelerate \
--autostart \
--disk path=/kvm/disks/$name-$ip_short.img,size=$disk_size \
--location $location \
--vnc \
-x "ks=$ks_file ksdevice=eth0 ip=$ip_long netmask=255.255.255.0 gateway=$gateway dns=8.8.8.8" 

我登录机器并运行脚本

ssh -X root@virtual_server
/root/install_machine

virt-viewer 窗口弹出,我观察安装过程,观察它重新启动,并且它运行良好。

但是如果我登录时没有图形,我会收到“无法打开显示”错误(这是预料之中的),然后系统安装,然后关闭,我必须手动启动它

ssh root@virtual_server
/root/install_machine

Starting install...
Retrieving file .treeinfo...
Retrieving file vmlinuz...
Retrieving file initrd.img...
Creating storage file test2-178.img
Creating domain...
Cannot open display:
Run 'virt-viewer --help' to see a full list of available command line options
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

我也尝试从 cron 运行脚本,机器已安装但处于关闭状态,我必须手动将其打开。

有没有建议我可以尝试安装并启动它而无需我的输入?我想我可以监视该过程并运行“virsh start $name-$ip_short”,但这似乎有点不靠谱。它似乎应该自行重新启动。将 --noautoconsole 添加到 virt-install 似乎也无济于事……

答案1

可能不是最干净的解决方案,但这是可行的(使用脚本顶部定义的定义)

virsh destroy $name-$ip_short
virsh undefine $name-$ip_short
rm -fr /kvm/disks/$name-$ip_short.img

virt-install \
--name=$name-$ip_short \
--arch=x86_64 \
--ram=$memory \
--os-type=linux \
--os-variant=virtio26 \
--hvm \
--connect=qemu:///system \
--network bridge:br0 \
--vcpus=$cpus \
--accelerate \
--autostart \
--disk path=$disk_directory/$name-$ip_short.img,size=$disk_size \
--location http://$domain/$location_path \
--vnc \
--noautoconsole \
-x "ks=http://$domain/$ks_path ksdevice=eth0 ip=$ip_long netmask=255.255.255.0 gateway=$gateway dns=$dns"


finished="0";

while [ "$finished" = "0" ]; do
        sleep 5;
        if [ `virsh list --all | grep "running" | grep "$name-$ip_short" | wc -c` -eq 0 ];
        then
                #echo "setup finished, start vm $name-$ip_short"
                finished=1;
                virsh start $name-$ip_short
        fi
done

相关内容