############################################################
#
# >>KVM 가상머신 이미지 만들기
#
############################################################
#!/bin/sh
############################################################
#
# adjustable variables
# osinfo-query os | grep -i win | cut -d ' ' -f -2
# 커맨드를 통해 전체 --os-variant 목록을 얻을 수 있다.
#
############################################################
KVM_NAME="testvm"
OS_VARIANT="win10"
KVM_TITLE="KVM ${KVM_NAME}"
KVM_VDA_FILE="/var/lib/libvirt/images/10.10.10.39_${OS_VARIANT}_${KVM_NAME}.qcow2"
KVM_VDA_SIZE="40"
INSTALL_ISO='/var/lib/libvirt/boot/ko_windows_10_rs5_v1809(17763.1432)_ltsc_x64_esvali.iso'
VIRTIO_VFD="/usr/share/virtio-win/virtio-win_amd64.vfd"
############################################################
#
# the installation command
# 기존 이미지가 존재할 경우 기존 이미지를 변경하지 않는다.
#
############################################################
virt-install \
--print-xml \
--virt-type kvm \
--name ${KVM_NAME} \
--metadata title="${KVM_TITLE}" \
--os-variant ${OS_VARIANT} \
--cpu host \
--vcpus 2 \
--ram 4096 \
--boot cdrom,hd,menu=on \
--graphics 'vnc,port=7200,password=123456,listen=0.0.0.0' \
--rng /dev/urandom \
--network type=direct,source=ens33,source_mode=bridge,model=virtio \
--controller type=scsi,model=virtio-scsi \
--disk path=${KVM_VDA_FILE},size=${KVM_VDA_SIZE},format=qcow2,bus=scsi \
--disk ${INSTALL_ISO},device=cdrom,bus=ide \
--disk ${VIRTIO_VFD},device=floppy \
> /var/lib/libvirt/images/${KVM_NAME}.xml
virsh define /var/lib/libvirt/images/${KVM_NAME}.xml
############################################################
#
# >>CD-ROM으로 부팅하기
#
############################################################
# virsh edit testvm하여 아래와 같이 cdrom을 dev='hd'위에 추가하고 bootmenu도 추가
# <os>
# <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
# <boot dev='cdrom'/>
# <boot dev='hd'/>
# <bootmenu enable='yes' timeout='30000' />
# </os>
############################################################
############################################################
#
# >>실행중인 가상머신 확인
#
############################################################
virsh list
virsh list --all (모두 확인)
############################################################
#
# >>강제종료
#
############################################################
virsh destroy testvm
############################################################
#
# >>삭제
#
############################################################
virsh undefine testvm
rm -rf /var/lib /var/lib/libvirt/images/10.10.10.39_win10_testvm.qcow2
############################################################
#
# >>시작
#
############################################################
virsh start testvm
############################################################
#
# >>리부팅
#
############################################################
virsh reboot testvm
############################################################
#
# >>셧다운
#
############################################################
virsh shutdown testvm
############################################################
#
# >>편집 (정의 xml 편집)
# ※VNC관련 정보도 여기서 편집한다. 편집 완료 후 리부팅
#
############################################################
virsh edit testvm
virsh reboot testvm
############################################################
#
# >>설정 XML 내보내기
#
############################################################
virsh dumpxml testvm > testvm.xml
############################################################
#
# >>접속
#
############################################################
virt-viewer testvm
############################################################
#
# >>CD-ROM Disc 빼기
#
############################################################
virsh change-media testvm --path hda --eject --live
############################################################
#
# >>CD-ROM Disc 삽입
# ※eject 필요 없음
# ※CD-ROM 교체 후 정상종료 되어야 한다.
# ※CD-ROM 드라이브 구동 중에는 교체 불가
#
############################################################
virsh attach-disk testvm /usr/share/virtio-win/virtio-win.iso hda --type cdrom --mode readonly
virsh attach-disk testvm /var/lib/libvirt/boot/win10_pe_hasu0707.iso hda --type cdrom --mode readonly
############################################################
#
# >>CD-ROM 드라이브 삭제
#
############################################################
virsh detach-disk testvm hdb --config
############################################################
#
# >>qcow2 이미지 최적화
# qemu-img convert -c -O qcow2: qcow2 포맷으로 다시 변환
# -c 옵션은 압축 옵션이며 빼면 변환속도가 빠르다
#
############################################################
cd /var/lib/libvirt/images
qemu-img convert -O qcow2 10.10.10.39_win10_testvm.qcow2 10.10.10.39_win10_testvm.qcow2.new
rm -f 10.10.10.39_win10_testvm.qcow2
mv 10.10.10.39_win10_testvm.qcow2.new 10.10.10.39_win10_testvm.qcow2
############################################################
#
# >>qcow2 용량 늘리기 (+10GB를 늘린다)
#
############################################################
qemu-img resize -f qcow2 10.10.10.39_win10_testvm.qcow2 +10G
############################################################
#
# >>Bridge Network 설정
#
############################################################
############################################################
# HostOS는 br0로 Bridge 네트워크가 이미 설정되어 있어야 한다.
# brctl show 커맨드로 bridge 네트워크를 미리 확인한다.
# default 네트워크 삭제
############################################################
virsh net-destroy default
virsh net-undefine default
systemctl restart libvirtd.service
############################################################
# 삭제 확인
############################################################
virsh net-list
ip a
############################################################
# 가상머신의 네트워크를 default에서 eth0로 변경
############################################################
# virt-manager를 통해 가상머신의 네트워크를 eth0(ens33)등의 물리 NIC로 변경해 준다.
# virsh edit testvm으로는 아래와 같이 변경한다.
############################################################
# <interface type='direct'>
# <mac address='52:54:00:16:0e:55'/>
# <source dev='ens33' mode='bridge'/>
# <model type='virtio'/>
# <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
# </interface>
############################################################