ホストOSにCentOS7を使用し、ゲストOSとしてWindows10をセットアップ(2018/03/22)
- はじめに
- 手順
- CentOS7.4用のDVD作成(旧PC(Windows7)で作成)
- BIOSの設定確認
- CentOS7インストール(ポイントのみ)
- インストール後のOS設定(最低限)
- 仮想化環境セットアップ
- おわりに
はじめに
ホストOSにCentOSを使用し、ゲストOSとしてWindows10(Pro)を作成する。 Windows10でTVキャプチャができるようにUSBパススルー(使用ハードは後述)を設定し、動画エンコードにIntelQSVが使用できるようGPUパススルーを設定する。また、Blu-ray Diskも使用できるようにしておく。なお、ローカルネットワーク上で動作させるので、セキュリティ関連のOS設定は最低限のみ。
参考:マシンスペック
CPU: Intel Core i5-8400 (CoffeeLake)
MEM: 16GB
SSD: 500GB (Crucial CT500MX)
HDD: 2TB
CD: Blu-ray (Pioneer BDR-TD05)
TVキャプチャ:PX-W3U4 ※外付けUSB
手順
CentOS7.4用のDVD作成(旧PC(Windows7)で作成)
今回はDVDでインストールするべく、古いWindowsマシンで、DVD作成を行った。 なおisoイメージはここにある。なお、使用したファイルはCentOS-7-x86_64-DVD-1708.iso。
BIOSの設定確認
電源投入し、BIOS(正確にはUEFI)の設定を確認し、仮想化関連の設定が有効になっているか確認する。
今回使用したPCではすでに有効になっていた。確認した項目は以下。
- CPU [Advanced]-[Intel Virtualization Technology]
→Enabledであること - Chipset [VT-d]
→Enabledであること
CentOS7インストール(ポイントのみ)
- DATE&TIMEで
Region:Asia
、City: Tokyo
を選択 - KEYBOADで
Japanese
を追加 - SOFTWARE SELECTIONはデフォルトの
Minimal Install
のまま - INSTALLATION DESTINATION
→ディスク選択
→partitioning は /home は削除、swapはメモリと同じサイズの16GB、他を / に割り当てるにしておく (/boot はデフォルトのまま) - NETWORK&HOSTNAMEで以下を設定
- Host name :
localhost.localdomain (default)
- IP Address:
192.168.10.20
- Subnet Mask:
255.255.255.0
- Default Route:
192.168.10.1
- DNS:
192.168.10.1
- Host name :
- Begin Installation 押下
- 途中でrootユーザパスワード、ユーザ作成
→一般ユーザは [x]Make this user admiistrator にチェックを入れておく - reboot
インストール後のOS設定(最低限)
rootにスイッチするユーザの限定
# vi /etc/pam.d/su auth required pam_wheel.so use_uid ※先頭のコメント(#)を外す
FW確認&SELinux無効化
# systemctl status firewalld # getenforce ※一先ず、無効化せず、すすめる。(後述:無効化せずOK)
SSH設定
rootログイン禁止など
# vi /etc/ssh/sshd_config ※以下の設定に変更 PermitRootLogin no PermitEmptyPasswords no PasswordAuthentication yes # systemctl restart sshd
Firewalldの確認
# firewall-cmd --list-all
→servicesにsshが含まれること
システム最新化
# yum -y update
リポジトリ追加
# yum -y install yum-plugin-priorities # sed -i -e "s/\]$/\]\npriority=1/g" /etc/yum.repos.d/CentOS-Base.repo # yum -y install epel-release # sed -i -e "s/\]$/\]\npriority=5/g" /etc/yum.repos.d/epel.repo # sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo # yum -y install centos-release-scl-rh centos-release-scl # sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/CentOS-SCLo-scl.repo # sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo # sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-SCLo-scl.repo # sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo # yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/remi-safe.repo # sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/remi-safe.repo
vimインストール
# yum -y install vim-enhanced
NTP(chrony)設定
# yum -y install chrony # vim /etc/chrony.conf ※以下の部分を変更 server ntp.nict.jp iburst server ntp1.jst.mfeed.ad.jp iburst server ntp2.jst.mfeed.ad.jp iburst allow 192.168.10.0/24 # systemctl start chronyd # systemctl enable chronyd # firewall-cmd --add-service=ntp --permanent # firewall-cmd --reload # chronyc sources
増設HDDのフォーマット&マウント
# fdisk -l ※デバイス名確認 # fdisk /dev/sdb →m →d (delete a partition) ※すでにパーティションが合ったので、一旦削除 →n (add a new partition) →p →1 →First sector , Last sector はデフォルトのままで最大サイズになる(Enter x 2) →p (print the partition table) ※確認のため →w (write table to disk and exit) # fdisk -l # mkfs -t xfs /dev/sdb1 ※ファイルシステムは CentOS7のデフォルトに合わせた # df -h # mkdir /export1 # mount /dev/sdb1 /export1 ※手動マウント # df -h # blkid /dev/sdb1 ※UUID確認 # vim /etc/fstab ※以下の行を追加 UUID=96db3ebe-0474-4fa8-a051-4b029419f15f /export1 xfs defaults0 0 # reboot ※ 自動マウントを確認するため
samba設定
追加ディスクをホストOS、ゲストOSの双方で参照できるようにホストOS上でsambaを稼働させる。
# yum -y install samba samba-client # vim /etc/samba.smb.conf 以下のdiff結果を参考に追記 # diff smb.conf.original smb.conf 7c7,11 < workgroup = SAMBA --- > workgroup = WORKGROUP > unix charset = UTF-8 > dos charset = CP932 > > hosts allow = 127. 192.168.10. 10a15,16 > > map to guest = Bad User 16a23 > 36a44,54 > > [share] > path = /export1/share > public = yes > writable = yes > guest ok = yes > guest only = yes > create mode = 0777 > directory mode = 0777 > printable = no > # systemctl restart smb nmb # systemctl enable smb nmb # firewall-cmd --list-all ※ sambaがない場合、以下で追加する # firewall-cmd --add-service=samba --permanent # firewall-cmd --reload ※SELinuxを有効にしている場合、以下を実施する # setsebool -P samba_enable_home_dirs on # restorecon -Rv /export1/share # setsebool -P allow_smbd_anon_write 1 # chcon -R -t samba_share_t /export1/share
仮想化環境セットアップ
インストール
# yum -y install qemu-kvm libvirt virt-install bridge-utils # systemctl start libvirtd # systemctl enable libvirtd
bridge設定
注意一度インタフェースに設定されているIPアドレスを削除するため、ssh接続している端末は切れるので、コンソールから実行する必要がある。
# nmcli c add type bridge autoconnect yes con-name br0 ifname br0`` # nmcli c modify br0 ipv4.addresses 192.168.10.20/24 ipv4.method manual # nmcli c modify br0 ipv4.gateway 192.168.10.1 # nmcli c modify br0 ipv4.dns 192.168.10.1 # nmcli c delete enp0s31f6 ★注意★ネットワークが切れる!!コンソールで実施する!! # nmcli c add type bridge-slave autoconnect yes con-name enp0s31f6 ifname enp0s31f6 master br0 # reboot # ip a ※IPアドレス確認
SPICEサーバインストール
# yum -y install spice-server spice-protocol # firewall-cmd --add-port=5900/tcp --permanent # firewall-cmd --reload
補足MacOSのクライアントはここからダウンロードした物を使う(bundleをダウンロード)
UEFI起動設定(OVMFインストール)
# vi /etc/yum.repos.d/kraxel.repo 下記内容を追記(新規作成) -- [qemu-firmware-jenkins] name=firmware for qemu, built by jenkins, fresh from git repos baseurl=https://www.kraxel.org/repos/jenkins/ enabled=0 gpgcheck=0 -- # yum --enablerepo=qemu-firmware-jenkins -y install OVMF # vi /etc/libvirt/qemu.conf →今回は677行目付近のnvramをコメント外すだけ # /usr/libexec/qemu-kvm -version # yum -y install centos-release-qemu-ev # sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-QEMU-EV.repo # yum --enablerepo=centos-qemu-ev -y install qemu-kvm-ev # systemctl restart libvirtd # /usr/libexec/qemu-kvm -version
IOMMU 有効化
# vi /etc/default/grub →CMDLINEの最後に intel_iommu=on を追加 # grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg ※ 補足 ※ ※ BIOSの場合はこっち→grub2-mkconfig -o /boot/grub2/grub.cfg ※ 不明の場合は両方実行しておけば間違いない # reboot # dmesg | grep -E "DMAR|IOMMU” →IOMMUが複数行出てくること
KVMをネストする(必須ではない)
# vi /etc/modprobe.d/kvm-nested.conf 下記行追加(新規ファイル) -- options kvm_intel nested=1 -- # cat /sys/module/kvm_intel/parameters/nested # modprobe -r kvm_intel # modprobe kvm_intel # cat /sys/module/kvm_intel/parameters/nested → Y になってる
Intel UHD Graphics パススルー
参考:仮想マシンゲストでIntel QSV(2016年版) - えぬえす工房
Intel HD Graphicsデバイス名確認
# lspci -nnk 00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:3e92] Subsystem: ASRock Incorporation Device [1849:3e92]
→[8086:3e92]という文字列の部分を確認(次で使う)
→また、先頭の 00:02.0 もゲストOS作成時に使う
/etc/modprobe.d/igd.conf の修正
# vim /etc/modprobe.d/igd.conf 以下を追記(新規ファイル) -- blacklist i915 options vfio-pci ids=8086:3e92 --
→8086:3e92は前項で確認した文字列
/etc/default/grub の修正
# vim /etc/default/grub → GRUB_CMDLINE_LINUXの最後にvideo=vesafb:offを追加 GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on video=vesafb:off"
grub更新
# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg ※ 補足 ※ ※ BIOSの場合はこっち→grub2-mkconfig -o /boot/grub2/grub.cfg ※ 不明の場合は両方実行しておけば間違いない
/etc/modules-load.d/vfio-pci.confの編集
# echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
再起動
# reboot
Windows10のゲストOS作成
ゲストOSとして、メモリ:8GB, ディスク:256GB, IntelUHDグラフィックデバイスをパススルーとして扱う。また、SPICEアクセス用のパスワードは1234とする。
# virt-install \ --name Win10 \ --ram 8192 \ --disk path=/var/kvm/images/Win10.img,size=256 \ --vcpus=4 \ --os-type windows \ --os-variant=win10 \ --network bridge=br0 \ --graphics spice,listen=0.0.0.0,password=1234,keymap=ja \ --video qxl \ --cdrom /export1/isos/Win10_1709_Japanese_x64.iso \ --boot uefi \ --host-device 00:02.0 \ --features kvm_hidden=on \ --machine q35
上記コマンド実行後SPICEクライアントでspice://192.168.10.20:5900
にアクセスし、Windows10のインストールを行う。(Windows10のインストールは省略、IPアドレス設定、リモートデスクトップの有効化ぐらいは実施しておいたほうがよい)なお、Windows10のインストール終了後はWindowsをシャットダウンさせる。
CPUモード変更
# virsh edit Win10 以下のように変更 -- <cpu mode='host-passthrough' check='none'> <topology sockets='1' cores='4' threads='1'/> </cpu> --
Blu-ray用パススルー
参考:
- https://lime-technology.com/forums/topic/46887-passthrough-optical-drives/
- https://lime-technology.com/forums/topic/33851-blu-ray-dvd-rom-passthrough/
# lsscsi [0:0:0:0] disk ATA CT500MX500SSD1 010 /dev/sda [1:0:0:0] disk ATA WDC WD20EARS-00M AB51 /dev/sdb [4:0:0:0] cd/dvd PIONEER BD-RW BDR-TD05 1.02 /dev/sr0
先頭に表示される[4:0:0:0]を元にXMLを修正する
# virsh edit Win10 以下を追記 -- <controller type='scsi' index='0' model='virtio-scsi'/> <hostdev mode='subsystem' type='scsi' managed='no'> <source> <adapter name='scsi_host4'/> <address bus='0' target='0' unit='0'/> </source> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='2'/> </hostdev> --
USBパススルー
参考
# lspci -D | grep USB 0000:00:14.0 USB controller: Intel Corporation 200 Series PCH USB 3.0 xHCI Controller # virsh edit Win10 -- <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x00' slot='0x14' function='0x0'/> </source> </hostdev> --
Windows10へ virtioドライバインストール
# wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso # virsh edit Win10 →cdrom で指定していた Windows10のインストールディスクを上記ダウンロードしたファイル名に変更 # virsh start Win10
Windows10が起動した後、Windows上で以下を実施
- 「スタート」右クリック⇒「デバイスマネージャー」⇒「ほかのデバイス」
- 「PCIシンプル通信コントローラー」を右クリック⇒「ドライバーソフトウェアの更新」⇒「コンピューターを参照してドライバーソフトウェアを検索」⇒「参照」ボタン押下⇒CDドライブを選択して「次へ」でデバイスドライバをインストールして「VirtIO-Serial Driverを」を追加する
- 「SCSIコントローラー」を右クリック⇒「ドライバーソフトウェアの更新」⇒「コンピューターを参照してドライバーソフトウェアを検索」⇒「参照」ボタン押下⇒CDドライブを選択して「次へ」⇒「このドライバーソフトウェアをインストールします」でデバイスドライバをインストールして「Red Hat VirtIO SCSI controller」を追加する
Windows Intel driver更新
ここから最新ドライバをダウンロードし、Windows上でインストール
Windows10のEthernetドライバもvirtioにする
Windowsはシャットダウン状態にし、ホストOSで以下の作業で以下を実施
# virsh edit Win10 -- <interface type='bridge'> <mac address='52:54:00:f5:2b:1e'/> <source bridge='br0'/> <model type='virtio'/> ← 行追加 <model type='rtl8139'/> ← 行削除 <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> -- # virsh start Win10
Windows10が起動した後、Windows上で以下を実施
- 「スタート」右クリック⇒「デバイスマネージャー」⇒「ほかのデバイス」⇒「イーサネットコントローラー」を右クリック⇒「ドライバーソフトウェアの更新」⇒「コンピューターを参照してドライバーソフトウェアを検索」⇒「参照」ボタン押下⇒CDドライブを選択して「次へ」でデバイスドライバをインストールして「Red Hat VirtIO Ethernet Adapter」を追加する
おわりに
ゲストOS上でTV録画、エンコードができることは確認済み。