CentOS7上にKVM環境を構築する (CUI環境)

## CentOS7上にKVM環境を構築する (CUI環境)

![20170105195738.png](https://qiita-image-store.s3.amazonaws.com/0/46188/5192d344-419b-4985-f8b3-fe2dbb281ee9.png)

物理サーバを触っていると

* OSの再インストールが手軽できない(画面とキーボードを刺して、作業するとか)
* 新しいOS環境を用意するために、新しいハードウェアを購入する必要がある

など、大変なことが多いです。

ということで、もうちょっと手軽にサーバを作ったり潰したりしたいと思い、家のサーバに仮想環境を構築することにしました。

**OS**: CentOS 7.1  (CUIモード)
**CPU**: Intel VT-x 対応

## KVMでの構築

我が家のサーバは、[Intel NUC](http://www.amazon.co.jp/dp/B00HVKLSVC) の [Intel Celeron N2830](http://ark.intel.com/ja/products/81071/Intel-Celeron-Processor-N2830-1M-Cache-up-to-2_41-GHz) というCPUを積んでいるモデルです。

最初はVMWareのESXiを入れれないかな、と思い調べていたのですが、ちょっと動作しないようでした。
参考: [VMware Homeserver – ESXi on 4th Gen Intel NUC](http://www.virten.net/2013/12/vmware-vsphere-homeserver-homelab-esxi-on-4th-gen-intel-nuc/) 

CPUの仕様を見るにIntel VT-xのサポートはされているので、おとなしくKVMでの環境を構築します。

## 環境構築

環境構築を行っていきます。

### 必要ソフトウェアのインストール

まず、必要なソフトウェアのインストールとサービスの起動を行います。

```zsh
### 必要ソフトウェアのインストール
% sudo yum -y install libguestfs libvirt libvirt-client python-virtinst qemu-kvm virt-manager virt-top virt-viewer virt-who virt-install bridge-utils
### libvirtdの起動
% sudo systemctl start libvirtd
### libvirtdの自動起動設定
% sudo systemctl enable libvirtd
```

### ネットワークまわりの設定

ゲストOSが外部ネットワークにアクセスするためのブリッジインターフェースを作成します。  

```zsh
### 元あるネットワーク設定をベースに作成していく
% sudo cp /etc/sysconfig/network-scripts/ifcfg-enp3s0 /etc/sysconfig/network-scripts/ifcfg-br0
### ブリッジインターフェースの設定を編集
### もともとの設定はだいたい残す(UUIDとかは消したような)
% sudo vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT=yes
...
(もとのdhcpとかIPとかの設定..)
### もとのインターフェースをbr0経由で使用するよう設定
### もとの設定はだいたい消す
% sudo vim /etc/sysconfig/network-scripts/ifcfg-enp3s0
TYPE="Ethernet"
BRIDGE=br0
NAME="enp3s0"
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
DEVICE="enp3s0"
ONBOOT="yes"
### ネットワークの再起動
% sudo systemctl restart network
### ブリッジインターフェースの確認
% brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.c03fd56f5970	no		enp3s0
virbr0		8000.52540083d5a7	yes		virbr0-nic
### ネットワーク設定の確認
% ip a show br0
23: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
...
    inet 192.168.x.x/24 brd 192.168.11.255 scope global dynamic br0
       valid_lft 172672sec preferred_lft 172672sec
...
```

ブリッジデバイス経由のパケットにiptablesの適用を行わない設定をします。

```zsh
### パラメーターの設定
% sudo vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
### パラメーターのリロード
% sudo sysctl -p /etc/sysctl.conf
```

### ゲストOSの作成

ゲストOSの作成を行います。

今回はゲストOSとして、CentOS7を使用します。

```zsh
### OSイメージのダウンロード (CentOS7 -  minimal ISO)
% cd /tmp
% curl -LO http://ftp.nara.wide.ad.jp/pub/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
### イメージファイルの作成(仮想ディスク)
% sudo qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.img 20G
```

それでは、virt-installによりゲストOSのインストールを行います。

--nographics オプションでCUIモードにして、--extra-args によりコンソールに接続するオプションを付けます。

```zsh
% sudo virt-install --connect=qemu:///system \
--name=centos7 \
--vcpus=1 \
--ram=512 \
--accelerate \
--hvm \
--disk path=/var/lib/libvirt/images/centos7.img,size=20,format=qcow2 \
--location='/tmp/CentOS-7-x86_64-Minimal-1511.iso' \
--network bridge=br0 \
--nographics \
--extra-args='console=tty0 console=ttyS0,115200n8'
```

うまく起動すると下のようなコマンドラインによるインストール画面が出てくるので、うまく設定できてない項目 [!] や [ ] があったら設定していきます。 (networkはdhcpまたはホストOSと異なるIPアドレスを設定します)

上手く起動できない場合は、エラーメッセージをなんとか読みましょう。。（僕はパーミッションの関係で弾かれてたことがありました）

![Screen Shot 2016-02-13 at 9.02.15 PM.png](https://qiita-image-store.s3.amazonaws.com/0/46188/c9eadc0a-311f-298e-f345-085bee0ff2a7.png)

インストールが完了したら、普通のサーバと同様にsshでdhcpで配布された、または設定したIPアドレスに接続しましょう。（ホストOSのvirsh経由でもよい）

```zsh
% ssh 192.168.xx.xx
```

## Webインタフェースからの操作
Webからインスタンス等を操作するためのWebVirtMgrのセットアップについても書いているのでご参考にしてください。

KVMをWebから操作できるようにする(WebVirtMgr)
http://qiita.com/jimaoka/items/27205e53097ecab561f7

--

この投稿は、以前にブログに書いたものをまとめた内容になります。
http://jimaoka.hatenablog.jp/entry/kvm-inst