2011年8月8日月曜日

CentOS6のインストールサーバー

OS/アプリケーションを、一度に、たくさんのサーバーに、入れることがちょいちょいあります。そのときに必要なインストール用のサーバーのメモ。

このインストール用のサーバーがあると、
空のサーバー機(VMでも)に、簡単に(CDメディアとか無しで)、CentOS6をインストールすることが出来るようになります。

1つのサーバーに、
1-1. CentOS6のローカルリポジトリ(http)と、
1-2. PXEブート用のサーバー(dhcpd, tftpd)を、
設定します。(1-1だけ、1-2だけでも、別途利用方法があります)

ここでは、サーバーのIPアドレスは10.0.0.1とします。

1. CentOS6のローカルリポジトリ
1-0. できあがり目標

こんな感じでアクセスできるCentOSのリポジトリができます。
http://10.0.0.1/centos/6/os/x86_64
(本記事は、64bitの場合。32bitなら以下、x86_64をi386に読み替えればいいはず。)

/var/www/html/centos
+-- 6
+-- os
| +-- x86_64 (←ここはDVDまるコピー)
| +-- CentOS
| +-- NOTES
| :
+-- updates
+-- x86_64

使い方
・PXEブートを仕込むと、メディアDVD無しでインストールできます。
・PXEブート+Kickstartファイルを仕込むと、メディアも対話も無しでインストールできます。
・PXEブートを仕込まなくても、netbootのCDメディアからインストールできます。

1-1. 準備
・SELinuxをOFFにしてしまう。
echo 0 > /selinux/enforce
/etc/selinux/configを変更:SELINUX=disabled

1-2. 静的なリポジトリ部分をDVDからのコピー
(ここでCentOS6.0のisoを、/centos/6/osディレクトリへ)

mkdir -p /var/www/html/centos/6/os

1-3. コピー元のDVD(iso)を準備
ここでは以下2ファイルを/var/tmpに配置
CentOS-6.0-x86_64-bin-DVD1.iso
CentOS-6.0-x86_64-bin-DVD2.iso

確認
sha256sum /var/tmp/CentOS-6.0-x86_64-bin-DVD1.iso
期待されるハッシュ値: 3399d1f7bdfb0690a7d5f09e5fe1ec30380646d732ab15e1e5bd9653698ead2c
sha256sum /var/tmp/CentOS-6.0-x86_64-bin-DVD2.iso
期待されるハッシュ値: 46631ac6719fa042c25fa607ac776a654a840606703015b554393ca19371cba9

1-4. CentOS 6.0をコピー

コピー先を作成
mkdir /var/www/html/centos/6/os/x86_64/

DVD1枚目をコピー
mount -o loop /var/tmp/CentOS-6.0-x86_64-bin-DVD1.iso /mnt
cp -vr /mnt/* /var/www/html/centos/6/os/x86_64/
umount /mnt

DVD2枚目をコピー
mount -o loop /var/tmp/CentOS-6.0-x86_64-bin-DVD2.iso /mnt
cp -vruf /mnt/* /var/www/html/centos/6/os/x86_64/
umount /mnt

1-5. updateリポジトリの同期と定期更新設定
updateリポジトリは定期更新することにします。

コピー先ディレクトリを作成
mkdir -p /var/www/html/centos/6/updates/x86_64
mkdir -p /var/www/html/centos/6/extras/x86_64
mkdir -p /var/www/html/centos/6/centosplus/x86_64
mkdir -p /var/www/html/centos/6/contrib/x86_64

コマンドを準備
yum -y install yum-utils createrepo

コピー用スクリプトを作成
cat << EOF > /etc/cron.daily/syncrepo
#!/bin/sh

reposync -r updates -n -p /var/www/html/centos/6/updates/x86_64
cd /var/www/html/centos/6/updates/x86_64
createrepo -d .

reposync -r extras -n -p /var/www/html/centos/6/extras/x86_64
cd /var/www/html/centos/6/extras/x86_64
createrepo -d .

reposync -r centosplus -n -p /var/www/html/centos/6/centosplus/x86_64
cd /var/www/html/centos/6/centosplus/x86_64
createrepo -d .

reposync -r contrib -n -p /var/www/html/centos/6/contrib/x86_64
cd /var/www/html/centos/6/contrib/x86_64
createrepo -d .
EOF

chmod +x /etc/cron.daily/syncrepo

とりあえず手動で一回同期
/etc/cron.daily/syncrepo

1-6. http server
yum -y install httpd


cat << EOF > /etc/httpd/conf.d/centos-repository-mirror.conf
<Directory /centos >
Options +Indexes
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 10.0.0.0/255.255.255.0
</Directory>
EOF

chkconfig httpd on
service httpd start

動作確認
適当なブラウザから、
http://10.0.0.1/centos/6/os/x86_64/RELEASE-NOTES-en-US.html
を閲覧してみる。


2. PXEブートサーバー

2-0. サーバーをPXEブートさせるためのサーバーの設定。

PXEブートは、HDDにOS入っていなくても、CD/DVD/USBのOSを持っていなくてもブートできます。
今時、大抵のサーバーはPXEブートできるはず。

dhcpサーバーとtftpサーバーからなる。

2-1. firewall
面倒だからとりあえず止める

2-2. tftp server
2-2-1. install
yum -y install tftp-server
chkconfig tftp on
chkconfig --list | grep tftp
tftp: on

2-2-2. pxeブート用ファイル

/var/lib/tftpbootディレクトリ
CentOS6.0 x86_64用
(CentOS5は/tftpbootだった)
(設定は、/etc/xinetd.d/tftpのserver_args = -s の後ろのディレクトリ)

mkdir -p /var/lib/tftpboot/cent60x64/pxelinux.cfg

pxelinux.0, vmlinuz, initrd.imgの3ファイルが必要

・pxelinux.0
(rpmから)
cd /var/tmp/
wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.0/os/x86_64/Packages/syslinux-3.86-1.1.el6.x86_64.rpm
rpm2cpio syslinux-3.86-1.1.el6.x86_64.rpm | cpio -ivr "*/pxelinux.0"
rename ./usr/share/syslinux/pxelinux.0 ->
とでたら、/var/lib/tftpboot/cent60x64/pxelinux.0

(他には)
http://www.kernel.org/pub/linux/utils/boot/syslinux/

・vmlinuz, initrd.img
OSのDVDから取り出す
mount -o loop /var/tmp/CentOS-6.0-x86_64-bin-DVD1.iso /mnt
cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/cent60x64/
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/cent60x64/
umount /mnt

デフォルトのブート設定ファイル(別途、MACアドレス毎、MACアドレスの上位桁毎に、設定できます)
cat << EOF > /var/lib/tftpboot/cent60x64/pxelinux.cfg/default
default cent6

label cent6
kernel vmlinuz
append load initrd=initrd.img ksdevice=eth0 devfs=nomount
EOF

例)
MACアドレス01-00-0c-29-17-b3-d4のサーバーが読み込む設定ファイル
/tftpboot/cent60x64/pxelinux.cfg/01-00-0c-29-17-b3-d4

MACアドレス01-00-0c-29-??-??-??のサーバーが読み込む設定ファイル
/tftpboot/cent60x64/pxelinux.cfg/01-00-0c-29

2-2-3. tftpスタート(xinetd経由)
service xinetd start

2-3. dhcp server

2-3-1. インストール
yum -y install dhcp
chkconfig dhcpd on
chkconfig --list | grep dhcpd
dhcpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

2-3-2. 設定ファイル
cat << EOF > /etc/dhcp/dhcpd.conf
ddns-update-style interim;
ignore client-updates;

subnet 10.0.10.0 netmask 255.255.255.0 {
option routers 10.0.0.254;
option subnet-mask 255.255.255.0;
option domain-name "example.com";
option domain-name-servers 10.0.0.1;
range dynamic-bootp 10.0.0.100 10.0.0.200;
default-lease-time 21600;
max-lease-time 43200;
filename "/cent60x64/pxelinux.0";
next-server 10.0.0.1;
}
EOF
※ CentOS5は/etc/dhcpd.confだったと思う。

※ next-serverがリポジトリサーバー

2-3-3. スタート
service dhcpd start

3. Kickstart

Kickstartファイル(あらかじめOSインストール設定を書いたファイル)を準備すると、
対話無しでインストールできます。

OSの基本設定はもちろん、自由なscriptも、書けるので、
アプリケーションとその設定も、自動で入れてしまえます。

例えば、

基本的な設定
・ネットワークの設定、セキュリティの設定
・sshのログイン用のkey設定
・yumで使うリポジトリを、ローカルリポジトリサーバーを使うようにする設定
などなど。

アプリケーションなら、
・たくさんの、Hadoopのノードの設定
・たくさんの、Webサーバー/アプリケーションサーバーの設定
などなど

4. クライアント、というか、このインストールサーバーを使ったOSインストール

4-1. とりあえず、PXEブートだけ、リポジトリだけ、使うのもあり。
PXEブートする。
Installation Methodで、
いまいちど
http://10.0.0.1/centos/6/os/x86_64
とする。

4-2. PXEブート、リポジトリ、Kickstart設定を、あわせて楽にインストール

Kickstart例を、おいおいメモしておこう...

--

0 件のコメント:

コメントを投稿