「じゃあ20台のサーバにLinux入れといて。」などと頼まれた場合、あなたはどうするで しょうか。
1台ずつインストールメディアを入れて、anacondaブートローダーを起動して設定書を目 で追いながらいつミスするかもしれない恐怖に怯えて構築していくのでしょうか。
キックスタートによる自動インストールを実現するとそんな手間も低減できます。
キックスタートサーバはDHCPサーバ、TFTPサーバ、HTTPサーバといった複数のサーバを組み合わせてOSインストール自動化を実現する仕組みのことを指します。そしてOSインストールを自動化したいマシン側ではPXEブートに対応したNICが必要です。
PXEブートとは、ネットワークカードに搭載されているPXE(Preboot eXecution Environment)機能を利用してプログラムを起動するブート方法でネットワークブートに利用され ます。
ここで、キックスタートでOSを自動インストールする仕組みを簡単に説明します。
ここではOSインストールマシンをクライアントと記載します。
1. クライアントがPXEブートすると、
まずブロードキャストパケットを送信し、
DHCPサーバにIPアドレスをリクエストします。
2. DHCPサーバはIPアドレスとnext-serverパラメータとfilenameパラメータを渡します。
next-serverパラメータはTFTPサーバのIPアドレスを設定しておきます。
filenameにはブートストラップイメージファイル名を設定しておきます。
# ここでいうブートストラップイメージは通常起動時のMBRレコードにあたります。
3. クライアントはTFTPサーバにブートストラップイメージと
初期RAMディスクを要求し、取得します。
# お分かりのように、TFTPサーバには事前に上記ファイルを用意しておきます。
4. クライアントは取得したブートストラップイメージをメモリに読み込み、
初期RAMディスクを解凍し、最小限のデバイスドライバを組み込みます。
5. クライアントはHTTPを利用してksファイルを取得します。
6. ksファイルに記載されているOSインストールに必要な
パッケージをHTTPで取得してインストールします。
7. クライアントが再起動します。
上記の流れはpxelinux.0やdefaultファイルの流れを割愛しているので
正確ではありませんが、大きな流れを記載しました。
ここでは自宅サーバ(HP ML110G6)にKVMモジュールで仮想環境を構築しているホストマシ ンをキックスタートサーバとして構築します。
$ sudo yum install -y dhcp tftp-server httpd syslinux system-config-kickstart
$ sudo mkdir /mnt/cdrom
$ sudo mount -r -t iso9660 /dev/cdrom /mnt/cdrom
$ sudo cd /mnt/cdrom/
$ sudo mkdir /var/www/html/CENTOS62-x86_64
$ sudo cp -af /mnt/cdrom/* /var/www/html/CENTOS62-x86_64/
$ sudo cd ../
$ sudo umount /dev/cdrom
$ vi /etc/dhcp/dhcpd.conf
ddns-update-style ad-hoc;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.150 192.168.100.199;
next-server 192.168.100.200;
filename "pxelinux.0";
}
$ sudo cp -p /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
$ sudo mkdir /var/lib/tftpboot/CENTOS62-x86_64
$ sudo cp /var/www/html/CENTOS62-x86_64/images/pxeboot/vmlinuz /var/lib/tftpboot/CENTOS62-x86_64
$ sudo cp /var/www/html/CENTOS62-x86_64/images/pxeboot/initrd.img /var/lib/tftpboot/CENTOS62-x86_64
$ sudo vim /var/lib/tftpboot/boot.msg
===============================
Welcome to kickstart installer
===============================
1. CentOS 6.2 (x86_64) - CLI
2. CentOS 6.2 (x86_64) - GUI
$ sudo mkdir /var/lib/tftpboot/pxelinux.cfg
$ sudo vim /var/lib/tftpboot/pxelinux.cfg/default
prompt 1
display boot.msg
label 1
kernel /CENTOS62-x86_64/vmlinuz
append initrd=/CENTOS62-x86_64/initrd.img ks=http://192.168.100.200/ks/Basci_Server_CLI.cfg
label 2
kernel /CENTOS62-x86_64/vmlinuz
append initrd=/CENTOS62-x86_64/initrd.img ks=http://192.168.100.200/ks/Basci_Server_GUI.cfg
$ sudo chkconfig dhcpd on
$ sudo service dhcpd start
dhcpd を起動中: [ OK ]
$ sudo chkconfig httpd on
$ sudo service httpd start
httpd を起動中: httpd: apr_sockaddr_info_get() failed for pachi
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
$ sudo chkconfig xinetd on
$ sudo chkconfig tftp on
$ sudo service xinetd start
xinetd を起動中: [ OK ]
# mkdir /var/www/html/ks
~ ksファイル作成 ~
# ls -l
合計 8
-rw-r--r-- 1 root root 1199 2月 28 11:55 2012 Basci_Server_CLI.cfg
-rw-r--r-- 1 root root 1258 2月 24 14:31 2012 Basci_Server_GUI.cfg
# cat Basci_Server_CLI.cfg
#platform=x86, AMD64, 又は Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.100.200/CENTOS62-x86_64"
# Root password
rootpw --iscrypted $1$lLH/ND67$BWMCk18R3D4PylOQHJkzu0
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard jp106
# System language
lang ja_JP
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Tokyo
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=100
part swap --fstype="swap" --size=1024
part / --asprimary --fstype="ext4" --grow --size=1
%packages
@additional-devel
@base
@client-mgmt-tools
@console-internet
@debugging
@development
@directory-client
@ftp-server
@hardware-monitoring
@japanese-support
@java-platform
@large-systems
@network-file-system-client
@performance
@perl-runtime
@server-platform
%end
# cat Basci_Server_GUI.cfg
#platform=x86, AMD64, 又は Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.200.1/CENTOS62-x86_64"
# Root password
rootpw --iscrypted $1$0JbUuPdl$aVW6/ZjQWIGKxH/R7uLSk0
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard jp106
# System language
lang ja_JP
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Tokyo
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=100
part swap --fstype="swap" --size=1024
part / --asprimary --fstype="ext4" --grow --size=1
%packages
@additional-devel
@base
@basic-desktop
@client-mgmt-tools
@console-internet
@debugging
@development
@directory-client
@ftp-server
@graphical-admin-tools
@hardware-monitoring
@internet-browser
@japanese-support
@java-platform
@large-systems
@network-file-system-client
@performance
@perl-runtime
@server-platform
@x11
%end
ここまで出来たら、PXEブート可能なマシンをブートしてみてください。
POSTが終わってRAIDイニシャライズなども終わればDHCPサーチしたタイミングでCentOS6.2のブート画面が表示されるはずです。
Perl |
3
|
Linux |
16
|
Jenkins |
1
|
CI |
1
|
Bashシェル |
1
|
シェルスクリプト |
1
|
Munin |
7
|
Ruby on Rails |
7
|
plenv |
1
|
sudo |
2
|
Cobbler |
6
|
ruby |
1
|
rbenv |
1
|
WeeChat |
1
|
tmux |
2
|
Webistrano |
1
|
capistrano |
1
|
puppet |
8
|
growthforecast |
1
|
Supervisor |
1
|
perlbrew |
1
|
git |
2
|
Python |
1
|
pip |
1
|
PHP |
1
|
Nginx |
1
|
MySQL |
2
|
LXC |
2
|
RPM |
3
|
ImageMagick |
1
|
Subversion |
1
|
qmail |
3
|
yum |
1
|
ucspi-tcp |
1
|
daemontools |
1
|
Puppet |
1
|
IPVS |
1
|
Kickstart |
1
|
aaa |
0
|