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を使いました。
接続すると使用言語の選択画面が表れます。
[続行]ボタン(画面右下隅にあります)を押すと、インストールの概要画面が表れます。
インストール先の項に要設定マークが付いているのでこれをクリックします。インストール先画面が表れます。
パーティション構成の[パーティション構成を行いたい]にチェックを付けて[完了]をクリックします。手動パーティション設定画面が表れます。
デフォルトではパーティションがLVMですが、仮想ゲストではLVMは扱いずらいので(個人的な経験)、標準パーティションに変更します。次に、[ここをクリックして自動的に作成します]をクリックします。変更の概要ダイアログが表示されます。
[再起動]ボタンを押してしばらくまっても何も起きません。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/grub
のGRUB_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
- 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
- /etc/resolv.conf
nameserver 192.168.1.254
# 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コマンドでユーザーやグループの作成ができます。