サーバ大量構築時のキモ ~KickstartでのLinux自動インストールディスク作成~

今回はOSのクローンではなく、RHEL系Linuxの機能である『Kickstart』を用いた自動インストール(Silent Install)を行う。

『KickStart』での自動インストールは、専用のconfigファイル(定義ファイル)を用いて行われる。
configファイルの読込みは、インストールディスクとは別のUSBメモリやDVD、ネットワーク上のファイルを読み込ませる方法もあるが、今回はOSのディスクと組み合わせた自動インストールディスクを作成することにした。
検証に使用するOSはCent OS 6.5だ。

1.『Kickstart』で可能な事

『Kickstart』では、configファイルに動作を記述することで以下のような事ができる。

  1. インストーラーの自動実行
  2. OSインストール時のパッケージ自動インストール
  3. インストール前、後のスクリプト自動実行

これらを実現するため、『Kickstart』のconfigファイルは以下の区分に分けて書かれている。

  1. コマンドセクション
  2. パッケージセクション
  3. スクリプトセクション

上記3つのセクションに分け、上から順に記述する。
configファイルの細かい記述方法については、また後日記載する。

2.configファイルの作成

さて、それでは実際にconfigファイルを作成していこう。
といっても、手動で作るのは面倒だなぁ…というわけで、ここでは既存のCentOS上でconfigファイルを作成するツール『system-config-kickstart』を用いて作成を行う。
このツールを実行すると、「キックスタート設定ツール」というGUIでKickstartのconfigファイルを作成できるプログラムを使用できる。

まずは、別途手動インストールしたCentOSを用意し、その上で以下のコマンドを実行。『system-config-kickstart』パッケージをインストールする。

yum install system-config-kickstart

上記コマンドでパッケージをインストール後、CentOS上で以下のコマンドを実行しキックスタート設定ツールを起動させる。

system-config-kickstart

後は、このツールで設定を進めていくだけだ。
以下に、各設定の例を記載していく。

(1)基本設定

(2)インストール方法

(3)ブートローダーオプション

(4)パーティション情報

(5)ネットワーク設定

(6)認証

(7)ファイヤーウォール設定

(8)ディスプレー設定

(9)パッケージの選択

さて、上記の例でconfigファイルを「ks.cfg」という名称で保存する。

なお、「ks.cfg」は「/root/ダウンロード」直下に設置している。
出来上がったファイル「ks.cfg」の中身は以下。

#platform=x86, AMD64, 又は Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use CDROM installation media
cdrom
# Root password
rootpw --iscrypted $1$F3O.1DJZ$uuErHjcd.UCbs4SGswt9L.
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
# System language
lang ja_JP
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info

# System timezone
timezone  Asia/Tokyo
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="ext4" --grow --size=1

%packages
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-server
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@kde-desktop
@legacy-x
@network-server
@postgresql
@postgresql-client
@remote-desktop-clients
@scalable-file-systems
@server-platform
@storage-server
@system-admin-tools
@virtualization
@virtualization-client
@virtualization-platform
@virtualization-tools
@web-server
@web-servlet
@x11
crypto-utils

%end

なお、このks.cfgを作成する上で注意したいのが、忘れずにパーティションの作成とパッケージのインストール対象を選択することだ。
これを忘れると、該当箇所の設定を手動で行う必要が出てしまい、自動インストールにならない。

3.自動インストールディスクの作成

さて、次はこの「ks.cfg」を保有したOSインストールディスクを作成する。
既存のCentOSマシンにCentOS 6.5のDVDを挿入し、以下のコマンドを実行しマウントする。

[root@test-centos ~]# mkdir /media/CentOS_6.5_Final/
[root@test-centos ~]# mount /dev/cdrom /media/CentOS_6.5_Final/
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします

次に一度DVDの中身を展開し、「ks.cfg」を所定の場所に設置する。
今回は、DVDの階層でいうと一番上の階層に設置する。

[root@test-centos ~]# cd /media/CentOS_6.5_Final/
[root@test-centos CentOS_6.5_Final]#
[root@test-centos CentOS_6.5_Final]# mkdir /home/CentOS_6.5_Final/
[root@test-centos CentOS_6.5_Final]# find . -maxdepth 1 -mindepth 1 -exec cp -rp {} /home/CentOS_6.5_Final \;
[root@test-centos CentOS_6.5_Final]# cp /root/ダウンロード/ks.cfg /home/CentOS_6.5_Final/

次に、「isolinux/isolinux.cfg」を以下のように編集し、ブート時に自動的に「ks.cfg」を読み込ませるようにする。

default vesamenu.c32
default ks
#prompt 1
timeout 600

display boot.msg

menu background splash.jpg
menu title Welcome to CentOS 6.5!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000

label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img
label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img xdriver=vesa nomodeset
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff
label memtest86
  menu label ^Memory test
  kernel memtest
  append -
label ks
  menu label vmlinuz
  kernel vmlinuz
  append ks=cdrom:/ks.cfg initrd=initrd.img

最後に、以下のコマンドを実行しCentOSの自動インストールディスクのisoファイルを作成する。

[root@test-centos CentOS_6.5_Final]# cd /home/CentOS_6.5_Final/
[root@test-centos CentOS_6.5_Final]# mkisofs -v -r -J -o ../CentOS_6.5_Final.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .

これで、自動インストールディスクが作成できた。
後はこのディスクを挿入し、DVDからブートさせるだけでインストール出来る。

…なぉ、ここまで記述しといてあれだけど、サーバの電源容量確保の問題のような”一度に起動出来るマシンに限りが無い”のであれば、PXEブートを用いた自動インストールの方が良いと思う。

また、事前に各筐体のシリアルナンバーが把握できる状態(各筐体のマネジメントポートのIPアドレスが割り振られているなど)であれば、こちらのスクリプトを用いてホスト名と固定IPアドレスを筐体ごとに自動設定することも可能だ。