web-dev-qa-db-ja.com

KVMインストール後のゲストの自動開始

Kvmを使用してrhelホスト内にrhelゲストをインストールし、インストールの完了後にrhelゲストを自動起動させようとしています。

キックスタートファイルには「reboot」コマンドがあり、インストール後に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からスクリプトを実行しようとしましたが、マシンはインストールされていますが、オフの状態のままであり、手動でオンにする必要があります。

入力なしでこれをインストールして開始するために何を試みる可能性があるかについての提案はありますか?プロセスを監視して「virshstart $ name- $ ip_short」を実行できると思いますが、それはハックのようです。自動的に再起動する必要があるようです。 --noautoconsoleをvirt-installに追加しても、役に立たないようです...

2
dan

おそらく最もクリーンなソリューションではありませんが、これは機能します(スクリプトの先頭で定義された定義を使用)

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
1
dan