CentOS 7のKVMで仮想マシンを自動インストール(virt-install + kickstart)

Contents

はじめに

キックスタートはインストールに必要となる入力情報をkickstartファイルに格納しておくことで、ユーザの介入なしに自動インストールが可能となります。
今回はvirt-install+kickstartで仮想マシンの自動インストールを行います。
KVMのインストールはこちらを参考にまでに。
CentOS 7でkickstartファイルのパラメータがまた変わっているので、最低限必要なパラメータを使って、自動インストールできるところまで確認したいと思います。

kickstartファイルの作成

kickstartファイルの作成方法についてredhatのポータルには以下のようにあります。

まず任意のシステムに手動のインストールを行うことが、キックスタートファイル作成の推奨方法となります。インストールが完了すると、インストーラーで選択された選択肢がすべて anaconda-ks.cfg という名前のファイルに保存されます。このファイルはインストールが完了したシステムの /root/ ディレクトリーに置かれます。このファイルをコピーして、必要に応じて変更を加えると、今後のインストールでこの設定ファイルを使用することができます。

CentOS7のkickstartファイルを作成するのも今回がはじめてなので、一度手動で仮想マシンをインストールして、インストール後に作成される/root/anaconda-ks.cfgを基にして、kickstartファイルを作成します。

anaconda-ks.cfg

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use text mode install
text
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=vda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=static --device=eth0 --gateway=172.16.10.254 --ip=172.16.10.5 --nameserver=8.8.8.8 --netmask=255.255.255.0 --noipv6 --activate
network  --hostname=centos7

# Root password
rootpw --******
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Tokyo --isUtc
user --groups=wheel --name=***** --password=***** --iscrypted --gecos="*****"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=vda
autopart --type=thinp
# Partition clearing information
clearpart --all --initlabel --drives=vda

%packages
@core
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

anaconda-ks.cfgを基にして、kicstartファイルを作成します。

kickstart.cfg

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
cdrom

# Use text mode install
text

# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=vda

# Keyboard layouts
keyboard --vckeymap=jp106 --xlayouts=jp

# System language
lang en_US.UTF-8

# Network information

# Root password
rootpw --iscrypted *****

# Do not configure the X Window System
skipx

# System timezone
timezone Asia/Tokyo --isUtc

# add user
user --groups=wheel --name=***** --password=***** --iscrypted --gecos="*****"

# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=vda
autopart --type=thinp

# Partition clearing information
clearpart --all --initlabel --drives=vda

%packages
@core
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

変更はキーボードを日本語配列したのと、kickstartファイルはどのサーバでも使い回し出来るようにしたいので、サーバ固有の情報であるnetwork部分を削除しました。networkオプションで指定していたIPアドレス等はvirt-installの時にオプションで渡すようにします。
これだけでとりあえずkickstartファイルとして機能します。後はオプションリストとにらめっこしながら、必要に応じて追加していけばいいと思います。

 

kickstartファイルの検証

コマンドユーティリティでkickstartファイルをチェックできるみたいです。まずはインストール。

[root@localhost ~]# yum install pykickstart

以下のksvalidatorコマンドでkickstartファイルを指定して検証します。問題なければ実行後に何も表示されません。

[root@localhost ~]# ksvalidator /var/lib/libvirt/kickstart/kickstart.cfg

 

virt-install + kickstart で自動インストール


特にサーバ固有の設定を指定しない場合(物理NICにNAT)

KVMインストール時に自動で作成されるブリッジインターフェースvirbr0が有効になっている場合、パラメータでIPアドレス等を指定しなければ物理ホスト側のNICにNATした仮想マシンが作成されます。

[root@localhost ~]# virt-install \
--name centos7 \
--hvm \
--os-variant=rhel7 \
--vcpu=1 \
--ram 1024 \
--graphics none \
--disk=/var/lib/libvirt/images/centos7,format=qcow2,size=10,bus=virtio \
--location=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1511.iso \
--initrd-inject /var/lib/libvirt/kickstart/kickstart.cfg \
--extra-args "inst.ks=file:/kickstart.cfg console=ttyS0,115200n8"

ただしこの場合、作成した仮想マシンのNICは上がっておらず自動起動も有効になっていないので、以下のコマンドでNICを立ち上げて、自動起動も有効にします。(プロンプトが同じなのでわかりにくいですが、下は仮想マシン内のシェルです)

[root@localhost ~]# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/0)
[root@localhost ~]# nmcli connection modify eth0 connection.autoconnect yes

サーバ固有の設定を指定する場合

物理ホストに作成したブリッジ(br10)にアタッチして、--extra-argsオプションでホスト名やIPアドレス等のパラメータを渡します。

[root@localhost ~]# virt-install \
--name centos7 \
--hvm \
--os-variant=rhel7 \
--vcpu=1 \
--ram 1024 \
--graphics none \
--disk=/var/lib/libvirt/images/centos7,format=qcow2,size=10,bus=virtio \
--network bridge=br10,model=virtio \
--location=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1511.iso \
--initrd-inject /var/lib/libvirt/kickstart/kickstart.cfg \
--extra-args \
"inst.ks=file:/kickstart.cfg \
hostname=centos7 \
onboot=yes \
bootproto=static \
ip=172.16.10.5 \
netmask=255.255.255.0 \
gateway=172.16.10.254 \
nameserver=8.8.8.8 \
console=ttyS0,115200n8"

サーバの確認

インストール直後はログイン画面になります。

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

centos7 login:

仮想マシンから抜けるときはCtrl+]キーで物理ホスト側に戻ります。
作成した仮想マシンのリスト表示は以下のコマンドを実行します。

[root@localhost ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 33    centos7                        running

再度物理ホストから仮想マシンのコンソールへ入るときは以下のコマンドで入れます。

[root@localhost ~]# virsh console centos7
Connected to domain centos7
Escape character is ^]

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

centos7 login:

最後に

どうでしょう。最小限のオプションやパラメータだけで仮想マシンが自動でインストール完了できるところまでを目標としました。
あとは自分の環境や好みに応じて設定を追加していけばいいかな思います。

参考

第23章 キックスタートを使ったインストール
18.4. キックスタートを使ったインストールのパラメーター
第20章 起動オプション
KVM に virt-install でコマンドラインだけで CentOS 7 を インストール