プロジェクト

全般

プロフィール

CentOS 7 KVMゲストとしてインストール

はじめに

CentOS 7が2014年7月7日にリリースされました。そこで、CentOS 6.5のKVM仮想ホスト上にCentOS 7の仮想ゲストをインストールしました。

仮想ホストはGUIレス(コンソールのみ)なのですが、CentOSのインストールはGUIがほぼ必須なので、仮想ゲストの画面をVNCでリモートに表示操作する方法を取ります。

インストール

CentOS 7のISOイメージファイルからインストールする方法と、ネットワークからインストールする方法があります。

CentOS 7のISOイメージファイルを準備

CentOSのサイトから、CentOS 7のISOイメージファイルを入手します。ミラーサイトから近いものを探してそこから入手します。今回はなんとなくIIJのサイトを利用しました。
http://ftp.iij.ad.jp/pub/linux/centos/7/

ISOイメージファイルの種類

DVDイメージ(ISOファイル)には、次のものがありました。

  • CentOS-7.0-1406-x86_64-DVD.iso
  • CentOS-7.0-1406-x86_64-Everything.iso
  • CentOS-7.0-1406-x86_64-GnomeLive.iso
  • CentOS-7.0-1406-x86_64-GnomeLive.iso
  • CentOS-7.0-1406-x86_64-NetInstall.iso
  • CentOS-7.0-1406-x86_64-livecd.iso

今回はネットワークを使わずにインストールするので、Everythingを選んでみました。
説明によると、インストール種類を選んでインストールするだけなら1番目のDVDで十分とのことです。追加インストールをメディアからする場合、Everythingを使うとありました。

入手したISOイメージファイルを仮想ホストにコピー

仮想ホストの/tmpにとりあえずCentOS-7.0-1406-x86_64-Everything.isoを配置しました。

最初Sambaファイル共有サーバー上にISOファイルを置き、仮想ホストでmount -t CIFSでマウントしてそこをvirt-installで指定しましたが、Permission errorとなって解決できなかったので仮想ホスト上に置きました。

仮想ホストでのインストール実行前準備

仮想ホストのファイアウォールを一時停止

VNCクライアントを接続するので、手っ取り早くiptablesを停止しました。本当はVNCのポートを通すようにiptablesを設定するのがよいでしょう。

仮想ゲストのイメージファイルを作成

仮想ゲストのHDDイメージとなるイメージファイルを作成します。フォーマットにはRAWとQCOW2がありますが、今回はスナップショットが取れる等の機能が豊富なQCOW2形式で作ります。性能はRAW形式が上ですが、後から変換も可能なので、あまりこだわらないで作ります。

~$ sudo qemu-img create -f qcow2 /var/lib/libvirt/images/centos7minimal.img 16G
Formatting '/var/lib/libvirt/images/centos7minimal.img', fmt=qcow2 size=17179869184 encryption=off cluster_size=65536
~$

KVMはゲストのイメージファイルを置く場所を設定で決めています。デフォルトは/var/lib/libvirt/imagesになります。この場所は、KVMのストレージ定義ファイル /etc/libvirt/storage/default.xmlに記載されています。ディスク容量等で別の場所にイメージファイルを置きたい場合は、/etc/libvirt/storageの下に適切な定義ファイルを作成し、virsh pool-define で定義ファイルを認識させ、virsh pool-startで起動、virsh-poolautostartで自動起動設定します。

KVMでゲストインストールコマンドを実行

KVMホスト上でKVMのコマンドを使ってゲストのインストールを行います。

~$ sudo virt-install --name=centos7minimal --connect=qemu:///system --ram 1024 --vcpus=1
 --os-type=linux --hvm --virt-type=kvm --disk path=/var/lib/libvirt/images/centos7minimal.img,device=disk,bus=virtio --cdrom=/tmp/CentOS-7.0-1406-x86_64-Everything.iso
 --vnc --vncport=5909 --vnclisten=0.0.0.0 --network=bridge:br0 --keymap=ja

Starting install...
ドメインを作成中...                              |    0 B     00:00
ディスプレイをオープンできません:
利用可能なコマンドラインオプションの完全な一覧を確認するには 'virt-viewer --help' を実行してください
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
~$

ここから先はGUIでのインストールになります。上記virt-installコマンドのオプションで指定したポート5909にリモートのVNCクライアントから接続します。

リモートのVNCクライアントでインストール操作

GUIが使えるリモートのマシンでVNCクライアントを動かし、KVMホストの5909に接続します。今回はWindows機上でUltraVNC Viewerを使いました。

接続すると使用言語の選択画面が表れます。

01_インストール時に使用する言語を選択.png

[続行]ボタン(画面右下隅にあります)を押すと、インストールの概要画面が表れます。

02_インストールの概要.png

インストール先の項に要設定マークが付いているのでこれをクリックします。インストール先画面が表れます。

03_インストール先_パーティション構成を行いたい.png

パーティション構成の[パーティション構成を行いたい]にチェックを付けて[完了]をクリックします。手動パーティション設定画面が表れます。

04_手動パーティション_標準パーティションで自動的に作成.png

デフォルトではパーティションがLVMですが、仮想ゲストではLVMは扱いずらいので(個人的な経験)、標準パーティションに変更します。次に、[ここをクリックして自動的に作成します]をクリックします。変更の概要ダイアログが表示されます。

05_手動パーティション設定_変更を適用.png

06_インストールの概要_インストールの開始.png

07_設定_パッケージのインストール中.png

08_設定_rootパスワードを設定したら設定完了.png

09_設定_再起動.png

[再起動]ボタンを押してしばらくまっても何も起きません。KVMホストから手動で今作成したKVMゲストをスタートする必要があります。

KVMホストからCentOS 7のKVMゲストを起動

KVMホストのコンソールに戻って、KVMゲストの状態を調べます。

~$ sudo virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     alfaomega                      実行中
 2     bravopapa                      実行中
 -     centos6minimal                 シャットオフ
 -     centos7minimal                 シャットオフ
~$

インストールが終わって再起動したcentos7minimalがシャットオフ状態のままです。
そこで、コマンドで起動します。

~$ sudo virsh start centos7minimal
ドメイン centos7minimal が起動されました

~$ sudo virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     alfaomega                      実行中
 2     bravopapa                      実行中
 3     centos7minimal                 実行中
 -     centos6minimal                 シャットオフ
~$

ここで、再度VNCクライアントからKVMホストのポート5909に接続します。

CentOS Linux 7 (Core)
Kernel 3.10.0-123.el7.x86_64 on an x86_64

localhost logoin:

ログイン可能な状態になっています。

シリアル(コンソール)接続可能な設定をする

KVMゲストへはKVMホストからシリアル(コンソール)接続できるようにしておくと、VNCを使わなくてもKVMホストへログインしそこからKVMゲストへログインすることができるので大変重宝します。

CentOS 7でカーネルのブートオプションを設定する(grub.confはどこに消えた?)

いきなり/etc/grub.confが見つからない事件が発生しました。CentOS 7からブートローダーがgrubからgrub2に変更されたので、設定の仕組みが変わりました。
Red Hat Enterprise Linux 7 System Administrator's Guideの22.1 Configuring the grub2 boot loader

  • GRUB 2は設定を/boot/grub2/grub.cfg(UEFIマシンの場合は/boot/efi/EFI/redhat/grub.conf)から読む
    • このファイルは編集してはいけない、設定は/etc/grub.d/の中か、/etc/default/grubファイルに記述し、コマンド/usr/sbin/grub2-mkconfigを使って@/boot/grub2/grub.cfgを生成するのが手順
      # grub2-mkconfig -o /boot/grub2/grub.cfg
      

上述のマニュアルの22.2.2項 Editing an Entry に、Kernel Parametersの説明があります。

  • /etc/default/grubGRUB_CMDLINE_LINUXキーを編集する

/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="vconsole.keymap=jp106 crashkernel=auto vconsole.font=latarchrheb-sun16 rhgb quiet" 
GRUB_DISABLE_RECOVERY="true" 

シリアル接続設定をGRUB_CMDLINE_LINUXに追記します。
GRUB_CMDLINE_LINUX="vconsole.keymap=jp106 crashkernel=auto vconsole.font=latarchrheb-sun16 console=tty0 console=ttyS0,115200n8r" 
  • -rhgb(RedHat Graphical Boot)とquietは起動時のメッセージを抑止するオプションです。KVMホスト(サーバー用途)では起動画面を見るとしたら障害対応時程度なのでメッセージが抑止されない方が望ましいため削除。

grub定義生成コマンドを実行します。

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Warning: Please don't use old title `CentOS Linux, with Linux 3.10.0-123.el7.x86_64' for
 Grub_DEFAULT, use `Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-12
  :
done
#

仮想ゲストを再起動し、KVMホストからコンソール(シリアル)接続を確認

~$ sudo virsh console centos7minimal
ドメイン centos7minimal に接続しました
エスケープ文字は ^] です

CentOS Linux 7 (Core)
Kernel 3.10.0-123.el7.x86_64 on an x86_64

localhost login:

接続できました。

このcentos7minimalは、この状態のままいじらず保存しておき、virt-cloneでクローンしたイメージを使います。

CentOS 7のKVMゲストの構築

centos7minimalをクローンしてKVMゲスト作成

実際にいろいろ作りこむCentOS 7のKVMホストを、先に作成したcentos7minimalイメージからクローンします。

~$ sudo virt-clone --original centos7minimal --name f --file /var/lib/libvirt/images/avlo.img --mac 52:54:00:01:23:45
割り当て中 'avlo.  2% [               ]  47 MB/s | 421 MB     05:42 ETA
:
Clone 'avlo' created successfully.
~$

クローンしたKVMゲストイメージを起動します。

~$ sudo virsh start avlo

まだネットワーク設定ができていないので、KVMホストからシリアル(コンソール)接続でログインします。

~$ sudo virsh console avlo

ネットワーク設定

固定IP設定

ネットワーク設定を行うには、NetworkManagerのGUI、Text UI若しくはコマンド又は設定ファイルを直接変更する方法があります。
今回は、設定ファイルを直接変更する方法で設定することにします。設定方法はRed Hat Enterprise Linux 7のネットワークガイド2.4項「USING THE COMMAND LINE INTERFACE」を参照しました。
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Using_the_Command_Line_Interface.html

まず、/etc/sysconfig/network-script/ifcfg-*を見ると
  • ifcfg-ens3
  • ifcfg-lo
    があります。CentOS 7では、ネットワークインタフェースデバイスの名前を、従来のeth0という固定的なネーミングではなく、いろいろな付け方ができるようになっているようです。ここでは既に作成されているifcfg-ens3を編集して固定IPアドレスのネットワーク設定を行います。
  • /etc/sysconfig/network-script/ifcfg-ens3
    DEVICE=ens3
    BOOTPROTO=none
    ONBOOT=yes
    NETMASK=255.255.255.0
    IPADDR=192.168.1.11
    USERCTL=no
    
デフォルトゲートウェイを設定します。
  • /etc/sysconfig/network
    GATEWAY=192.168.1.254
    
DNSサーバーを設定します。
  • /etc/resolv.conf
    nameserver 192.168.1.254
    
設定を反映させるにはどうしたら?と調べてみましたが、まだservice network restartも残っていました。
# service network restart
Restarting network (via systemctl):  [  OK  ]
#
  • systemctl restart networkを実行してみましたが、デフォルトゲートウェイが反映されませんでした。

ネットワークデバイスの一覧を確認します。ifconfigは遺物となってしまったのでipコマンドで確認します。

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff

IPアドレスの一覧を確認します。

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic ens3
       valid_lft 315335498sec preferred_lft 315335498sec
    inet6 fe80::5054:ff:feab:cdef/64 scope link
       valid_lft forever preferred_lft forever

デフォルトゲートウェイの確認をします。

# ip route
default via 192.168.1.254 dev ens3  proto static  metric 1024
192.168.1.0/24 dev ens3  proto kernel  scope link  src 192.168.1.11

DHCPによるIPアドレス設定

デフォルトゲートウェイやDNSの設定の手間を考えるとDHCPが楽です。

  • /etc/sysconfig/network-script/ifcfg-ens3
    DEVICE=ens3
    BOOTPROTO=dhcp
    ONBOOT=yes
    

ホスト名設定

/etc/hostnameに設定します。

ユーザー管理

従来どおり、useradd、groupaddコマンドでユーザーやグループの作成ができます。

クリップボードから画像を追加 (サイズの上限: 1 GB)