jimaoka blog

ライトなインフラエンジニアです

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

f:id:jimaoka:20170105195738p:plain

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

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

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

対象OS: CentOS 7.1 (CUIモード)

仮想化

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

http://www.amazon.co.jp/dp/B00HVKLSVCwww.amazon.co.jp 我が家のサーバは、今のところ Intel Celeron N2830 というCPUを積んでいるモデルです。

最初はVMWareのESXiを入れれないかな、と思い調べていたのですが、ちょっと動作しないようでした。
参考: VMware Homeserver – ESXi on 4th Gen Intel NUC

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

環境構築

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

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

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

### 必要ソフトウェアのインストール
% 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が外部ネットワークにアクセスするためのブリッジインターフェースを作成します。

### 元あるネットワーク設定をベースに作成していく
% 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
BOOTPROTO="static"
IPADDR="192.168.x.x"
PREFIX="24"
GATEWAY="192.168.x.x"
DNS1="192.168.x.x"
### もとのインターフェースを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の適用を行わない設定をします。

### パラメーターの設定
% 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を使用します。

### 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 によりコンソールに接続するオプションを付けます。

% 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アドレスを設定します)

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

f:id:jimaoka:20160213210226p:plain

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

% ssh 192.168.xx.xx