機能・要件 
 構成・方式 
 動作 
 タスク 
 導入 
    プロセッサ確認
    CentOS7_install
    ソフトウェア選択
    PKGインストール
    SELinux無効化
    KVM関連ドライバ
    libvirtd関連設定
    ネットワーク設定
    ゲストOS作成
    ネットワーク追加
    ブリッジの整理

 仮想化 
 プロセッサの確認
 # grep vmx /proc/cpuinfo
 ・vmxの確認

 CentOS7インストール
 ・CentOS7インストール

 ソフトウェアの選択
 ・environment group(仮想化ホスト)の中身 $ yum groups info 仮想化ホスト Environment Group: 仮想化ホスト Environment-Id: virtualization-host-environment 説明: 最小の仮想化ホストです。 Mandatory Groups: +base +core +virtualization-hypervisor +virtualization-tools Optional Groups: +debugging +network-file-system-client +remote-system-management +virtualization-platform
 ・「+virtualization-hypervisor」の中身 $ yum groups info virtualization-hypervisor グループ: 仮想化ハイパーバイザー グループ ID: virtualization-hypervisor 説明: 最小限の仮想化ホストのインストールです。 強制的なパッケージ: libvirt qemu-kvm オプション パッケージ: qemu-kvm-tools
 ・「+virtualization-tools」の中身 $ yum groups info virtualization-tools 読み込んだプラグイン:fastestmirror, langpacks グループ: 仮想化ツール グループ ID: virtualization-tools 説明: 停止中の仮想マシンのディスクイメージを操作するためのツールです。 標準パッケージ: libguestfs オプション パッケージ: libguestfs-java libguestfs-tools libguestfs-tools-c
 ・CUI関連パッケージ
qemu-kvm
qemu-img
libvirt-client
virt-install
bridge-utils

 必要なパッケージのインストール
 ・更新も行う。
 ・qemu-kvm qemu-img インストール # yum install qemu-kvm qemu-img パッケージ 10:qemu-kvm・・・.x86_64 はインストール済みか最新バージョンです パッケージ 10:qemu-img・・・.x86_64 はインストール済みか最新バージョンです 何もしません
 ・libvirt インストール # yum install libvirt 依存性関連をインストールしました:
 ・virt-manager virt-install インストール # yum -y install virt-manager virt-install
 SELinux無効化 # getenforce Enforcing # setenforce 0 # getenforce Permissive(警告は出すが、SELinuxは無効) # vi /etc/sysconfig/selinux SELINUX=disabled
 KVM関連ドライバのロード確認 $ lsmod | grep kvm kvm_intel xxxxxx 0 kvm xxxxxx 1 kvm_intel
 libvirtd関連の設定
 ・ユーザ作成、グループに追加 # useradd -m -d /home/kvmuserxxxx kvmuserxxxx # passwd kvmuserxxxx # usermod -a -G libvirt kvmuserxxxx
 ・作成したユーザに切り替え
 ・libvirtd.conf変更 unix_sock_group = "libvirt" unix_sock_ro_perms = "0777" unix_sock_rw_perms = "0770" auth_unix_ro = "none" auth_unix_rw = "none"
 ・libvirtd起動 # systemctl status libvirtd.service # systemctl start libvirtd.service # systemctl enable libvirtd.service # virsh version
 ネットワークの設定
 ・複数の仮想ブリッジを用いる。(br0、br1、・・)
defaultネットワークは、virbr0(仮想ネットワーク図では、vibr0)
virbr0ブリッジはNAT接続機能だけのためにある。
今回は使用しないため、削除する。
ブリッジインターフェース(br0)を作成する。
nmcli(NetworkManagerのCLI(コマンド・ライン・インタフェース)か、
nmtui(NetworkManagerのTUI(テキスト・ユーザー・インタフェース)を使用する。
nmcli connection add help など

 ・コネクションの状態
$ nmcli connection 名前 UUID タイプ デバイス enp0s31f6 68e38e3e-fc1b-・・・・ 802-3-ethernet enp0s31f6 (アクティブ) enp6s0 3e3b4213-1756-・・・・ 802-3-ethernet -- (解除) enp2s0 917812ca-9ba4-・・・・ 802-3-ethernet enp2s0 virbr0-nic 7e426bdd-e2ea-・・・・ generic virbr0-nic virbr0 5378461b-ca9e-・・・・ bridge virbr0
 ・デバイスの状態
$ nmcli device デバイス タイプ 状態   接続 virbr0 bridge 接続済み virbr0 enp0s31f6 ethernet 接続済み enp0s31f6 enp2s0 ethernet 接続済み enp2s0 virbr0-nic tap 接続済み virbr0-nic enp6s0 ethernet 切断済み -- lo loopback 管理無し --
 ・defaultネットワークの削除 virbr0 はNATで使用、使用しない場合は削除、再起動時も自動作成しないようにする。 # brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400c9161c yes virbr0-nic # virsh net-destroy default ネットワーク default は強制停止されました $ nmcli device デバイス タイプ 状態 接続 enp6s0 ethernet 接続済み プロファイル 1 lo loopback 管理無し -- # brctl show bridge name bridge id STP enabled interfaces
 ・再起動時に自動作成されないようにする。 # virsh net-list --all 名前 状態 自動起動 永続 -------------------------------------------- default 停止状態 はい (yes) はい (yes) # virsh net-autostart default --disable ネットワーク default の自動起動設定が解除されました # virsh net-list --all 名前 状態 自動起動 永続 --------------------------------------------- default 停止状態 いいえ (no) はい (yes)
 ・仮想ブリッジを作成(追加) 「brctl addbr」 # nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
 ・仮想ブリッジの スパニングツリー設定を解除(例、br0) # nmcli connection modify br0 bridge.stp no 既にアクティブの場合は、解除後に実施する。又は # systemctl stop network.service; systemctl start network.service
 ・仮想ブリッジにIPを設定 # nmcli connection modify br0 ipv4.method manual ipv4.addresses "仮想ブリッジのIP/ネットマスク" ipv4.dns "DNSのIP" ipv4.gateway "ゲートウェイのIP"
 ・物理ポート(例、enp6s)をブリッジに接続する場合、当該デバイスコネクションを削除する。
  (当該デバイスコネクションしかない場合、外からは繋がらなくなる場合がある。) 「nmcti」で「enp6s0」を削除、又は # nmcli connection delete enp6s0 又は # nmcli connection delete enp6s0; reboot
 ・作成した仮想ブリッジのSlaveとして仮想のインターフェースコネクションを作る。「brctl addif」
# nmcli connection add type bridge-slave autoconnect yes \
con-name enp6s0 ifname enp6s0 master br0

 ・設定を有効にする。 # systemctl stop NetworkManager; systemctl start NetworkManager # ip addr
 ・後処理 「nmcti」などで、不要なEthernet(enp6s0の残り)を削除 # ip addr ・・・ # brctl show bridge name bridge id STP enabled interfaces br0 8000.0016013e21bc no enp6s0
 ゲストOSインストール
 ・GUIツール(virt-manager)から行う(vnc立ち上げ)
 ・QEMU/KVM接続エラーありの場合 「ソケットの '/var/run/libvirt/libvirt-sock' への接続に失敗しました」 libvirtdを再起動する。
 ・QEMU/KVM、右クリック、「新規」、「新しい仮想マシン」
 ・警告ありの場合 「KVM を利用できません。これは KVM パッケージがインストールされていない。  または、KVM のカーネルモジュール (kvm.ko) が読み込まれていないことを意味します。  QEMU が使われるので動作が遅くなるでしょう。」 BIOS で Virtualization (仮想化) の項目を有効にする。
 ・ステップ1/5
ローカルのインストールメディア(ISOイメージ又はCD-ROMドライブ)、選択、進む
事前に「CentOS7-x86 64-Everything-xxxx.iso」などをどこかに格納
 ・ステップ2/5
ISOイメージを使用、ISOイメージファイルを参照して指定
「仮想マシン内のOSの種類を自動選別する」にチェックを入れる、進む
・エミュレータが検索する権限を持たないパスを参照した場合は、
 エミュレータが権限の訂正を聞いてくる。
 ・ステップ3/5
割り当てるメモリ量とCPU数(例、4096MB、2CPU)
 ・ステップ4/5
この仮想マシンにストレージデバイスを割り当てる。
コンピュータのハードディスク上にディスクイメージを作成する。
例、ローカルディスク、50GB、進む
 ・ステップ5/5
名前(例、centOS7-1)
他、表示
ネットワークの選択
ブリッジ選択
 ・インストール開始
ソフトウェアの選択
ベース設定
GNOME-Desktop
ネットワーク(eth0)とホスト名
接続はオフ(ipv4のセッティング)
ブリッジアドレスを設定(eth0)
必要ならローカルアドレスを追加(eth0)
接続をオンにして設定値を確認
インストール先
・自動パーティション
インストール開始

 ・virshコマンドなどのコマンドラインツールを使用
virt-install

 ゲストOSにネットワーク追加
 ・物理マシンに(仮想)ブリッジを追加(br1)
 (nmtuiを用いてもよい。dhcpで使うなら、自動を選び追加する。) # nmcli connection add type bridge autoconnect yes con-name br1 ifname br1  ・仮想ブリッジのスパニングツリー設定を解除 # nmcli connection modify br1 bridge.stp no # systemctl stop network.service; systemctl start network.service # brctl show  ・対象の仮想マシンシャットダウン
# virsh shutdown 仮想マシン
 ・物理マシンの「/etc/libvirt/qemu/対象の仮想マシン.xml」の編集
「interface type='bridge'」追加
「mac address='xx:xx:xx:xx:xx:xx'」自動作成のため不要
「source bridge='br1'」追加
「model type='virtio'」追加
「address type他」自動作成のため不要
 ・設定を反映
# virsh define /etc/libvirt/qemu/対象の仮想マシン.xml
 ・仮想マシン起動
# virsh start 対象の仮想マシン
 ・「eth1」追加を確認
# ip addr
 ・物理マシンに(仮想)ブリッジを追加(br2)も同様に行う。
 ・物理マシンやゲストOSのネットワークに変更があった場合
「/etc/libvirt/qemu/対象の仮想マシン.xml」反映を再度行う。
デバイスやコネクションの状態を確認し、ifcfg-xxxxを修正しながら、 整合性を維持する。

 ・コネクションの状態
$ nmcli connection 名前 UUID タイプ デバイス vnet2 d44e20ec-2489-・・・・ 802-3-ethernet vnet2 vnet1 3264014d-be8a-・・・・ 802-3-ethernet vnet1 vnet0 38d5059e-930c-・・・・ generic vnet0 br1 27d612a1-2ec6-・・・・ bridge br1 br2 ddcb3ce2-12b0-・・・・ bridge br2 enp6s0 59a77105-1834-・・・・ 802-3-ethernet enp6s0 enp2s0 e171f089-4d9d-・・・・ 802-3-ethernet enp2s0 br0 01185253-21d8-・・・・ bridge br0 enp0s31f6 caae92f8-07bf-・・・・ 802-3-ethernet enp0s31f6 vnet6 0f99764e-658d-・・・・ 802-3-ethernet vnet6 vnet5 c49b4cd6-24ba-・・・・ generic vnet5 vnet4 12cf7d83-96b3-・・・・ 802-3-ethernet vnet4
 ・デバイスの状態
$ nmcli device デバイス タイプ 状態 接続 br0 bridge 接続済み br0 br1 bridge 接続済み br1 br2 bridge 接続済み br2 enp0s31f6 ethernet 接続済み enp0s31f6 enp2s0 ethernet 接続済み enp2s0 enp6s0 ethernet 接続済み enp6s0 vnet1 ethernet 接続済み vnet1 vnet2 ethernet 接続済み vnet2 vnet4 ethernet 接続済み vnet4 vnet6 ethernet 接続済み vnet6 vnet0 tap 接続済み vnet0 vnet3 tap 接続済み vnet3 vnet5 tap 接続済み vnet5 lo loopback 管理無し --
 ・「/etc/sysconfig/network-scripts/」 ifcfg-br0 ifcfg-br1 ifcfg-br2 ifcfg-enp0s31f6 ifcfg-enp2s0 ifcfg-enp6s0 ifcfg-lo
 ブリッジの整理
 ・仮想マシン側、「nmtui」を用いてブリッジなどを全て削除
 ・物理マシン側、「/etc/libvirt/qemu/対象の仮想マシン.xml」の編集
「interface type='bridge'」
「mac address='xx:xx:xx:xx:xx:xx'」行削除
「address type他」行削除
 ・物理マシン側、反映
# virsh define /etc/libvirt/qemu/対象の仮想マシン.xml
 ・「対象の仮想マシン.xml」
「interface type='bridge'」に「mac address='xx:xx:xx:xx:xx:xx'」が追加
 ・物理マシン「reboot」で「mac address='xx:xx:xx:xx:xx:xx'」が仮想マシンへ反映