読者です 読者をやめる 読者になる 読者になる

プログラミングとかLinuxとかの備忘録

プログラミング、Linuxでハマった箇所や環境構築のメモ

CentOS7へのKVMのインストール方法

Linux CentOS KVM

インストール環境は

  • CPU: i7-3820
  • M/B: ASRock X79 Extreme4-M

  • CPU: i7-4770T
  • M/B: ASUS VANGUARD B85

で,両方ともIntel VT-dに対応

インストール

$ sudo yum -y install qemu-kvm libvirt virt-install bridge-utils
$ sudo yum -y install spice-server

モジュールが組み込まれているか確認

数字は環境によって異なる

$ lsmod | grep kvm
kvm_intel             148081  0 
kvm                   461126  1 kvm_intel

カーネルパラメータの設定

GRUB_CMDLINE_LINUXの最後の"の前にintel_iommu=onを追加する

$ sudo vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos00/swap crashkernel=auto  vconsole.keymap=jp106 rd.lvm.lv=centos00/root vconsole.font=latarcyrheb-sun16 rhgb quiet intel_iommu=on"
GRUB_DISABLE_RECOVERY="true"

カーネルパラメータの適用
適用方法はBIOSブートかUEFIブートかで異なる(今回はUEFIブート環境で実行)

  • BIOSブートの場合
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  • UEFIブートの場合
$ sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

再起動・変更の確認

$ sudo reboot

$ dmesg | grep -e DMAR -e IOMMU
[    0.000000] ACPI: DMAR 00000000bcf1faf8 000EC (v01 A M I   OEMDMAR 00000001 INTL 00000001)
[    0.000000] Intel-IOMMU: enabled
[    0.029171] dmar: IOMMU 0: reg_base_addr f4ffe000 ver 1:0 cap d2078c106f0462 ecap f020fe
[    0.029264] IOAPIC id 0 under DRHD base  0xf4ffe000 IOMMU 0
[    0.029264] IOAPIC id 2 under DRHD base  0xf4ffe000 IOMMU 0
[    0.488115] IOMMU 0 0xf4ffe000: using Queued invalidation
[    0.488118] IOMMU: Setting RMRR:
[    0.488126] IOMMU: Setting identity map for device 0000:00:1a.0 [0xbd2ec000 - 0xbd316fff]
[    0.488153] IOMMU: Setting identity map for device 0000:00:1d.0 [0xbd2ec000 - 0xbd316fff]
[    0.488166] IOMMU: Prepare 0-16MiB unity mapping for LPC
[    0.488172] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]

サービス起動・スタートアップ

$ sudo systemctl start libvirtd
$ sudo systemctl enable libvirtd

ブリッジネットワークの作成

NetworkManagerはブリッジをサポートしていないので停止する
※NetworkManagerでブリッジを作成する方法を最後に追記

$ sudo systemctl stop NetworkManager
$ sudo systemctl disable NetworkManager

$ sudo systemctl start network
$ sudo chkconfig network on

NICの設定

$ cd /etc/sysconfig/network-scripts
$ sudo cp ifcfg-enp7s0 ifcfg-br0
  • ifcfg-enp7s0の設定
$ sudo vi ifcfg-enp7s0
TYPE=Ethernet
DEVICE=enp7s0
UUID=xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
HWADDR=xx:xx:xx:xx:xx:xx
ONBOOT=yes
BRIDGE=br0
  • ifcfg-br0の設定
$ sudo vi ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
IPV6INIT=no
ONBOOT=yes
DNS1=192.168.11.1
IPADDR=192.168.11.232
PREFIX=24
GATEWAY=192.168.11.1

ネットワーク再起動 (再起動が失敗する場合はシステム自体を再起動してみる)

$ sudo systemctl restart network

仮想ブリッジの削除

$ sudo virsh net-list
名前               状態     自動起動   永続
-----------------------------------------
default                   動作中  はい (yes)  はい (yes)

$ sudo virsh net-autostart default --disable
ネットワークdefaultの自動起動設定が解除されました
$ sudo virsh net-destroy default
ネットワーク default は強制停止されました

$ sudo virsh net-list --all
名前               状態     自動起動   永続
-----------------------------------------
default                   停止状態  いいえ (no)  はい (yes)

ファイウォールの設定

SPICEでリモートアクセスする場合はポートの開放を行う
今回は5930-5932/tcpを開放した

$ sudo firewall-cmd --permanent --add-port=ポート番号/tcp
$ sudo systemctl restart firewalld

$ sudo firewall-cmd --list-ports
5930/tcp 5931/tcp 5932/tcp

GUIクライアントのインストール

以下のコマンドでvirt-managerをインストールできる

Fedora

$ sudo dnf -y install virt-manger openssh-askpass
$ sudo dnf -y install spice-gtk-python

Ubuntu

$ sudo apt-get -y install virt-manager
$ sudo apt-get -y install python-spice-client-gtk

追記1: NetworkManagerでブリッジを作成する

ブリッジデバイスを作成する

$ nmcli con add type bridge ifname br0 con-name bridge-br0

$ nmcli con mod bridge-br0 bridge.stp no
$ nmcli con mod bridge-br0 ipv4.method manual ipv4.address "192.168.1.17/24" ipv4.gateway "192.168.1.1"
$ nmcli con mod bridge-br0 ipv4.dns "192.168.1.1"

$ nmcli con down bridge-br0
$ nmcli con up bridge-br0

ブリッジに物理デバイスを接続する

$ nmcli con add type bridge-slave ifname enp0s31f6 master bridge-br0