work.log

元エンジニアの備忘録的ブログ

kickstartでCentOS6の自動インストール

投稿:2013-07-02 21:51  更新:

kickstart のメモ書きです。

RHEL とか CentOS には、 OS のインストール・セットアップが自動化できちゃう kickstart という機能があります。

ものすごく便利なのですがよく忘れがちなので自分用にメモしておきます。

本当は PXE Boot + DHCP + kickstart が最強だと思ってますが、今回は PXE Boot は利用しないパターンです。

インストール・セットアップの方針はこんな感じです。

  • 初回の Boot は Boot 専用メディアから
  • インストールパッケージは必要最低限に
  • インストール完了後には全てのパッケージをアップデート

kickstartの準備

kickstart を使うために準備するものを以下に書きます。

ks.cfgの作成

検証用マシンを立ち上げる時は以下の様な kickstart を利用しています。(swap 小さいので注意)

以下は CentOS6.4 i386 を利用していますが CentOS5 とかでも基本変わらないです。

# Kickstart file automatically generated by anaconda.
# root pw = "rootpass"

text
install

# インストールファイルは Web 上から取ってくる (以下は 32bit)
url --url http://ftp.iij.ad.jp/pub/linux/centos/6.4/os/i386/

lang ja_JP.UTF-8
keyboard jp106

# NW 周りの設定
network --device eth0 --bootproto dhcp --noipv6 --hostname centos6.drive.ne.jp

# スタティックに設定するならこんな感じに
# network --device eth0 --bootproto static --ip 192.168.0.100 --netmask 255.255.255.0 --gateway 192.168.0.254 --nameserver 8.8.8.8,8.8.4.4 --hostname centos6.drive.ne.jp

rootpw  --iscrypted $6$pV5qkbTpryea/aS4$z17eF8FIaRnonwHyj9N.P5du0hgcZN2fDUb/Ms.3BfBgKN5VqQQ5gdV6NrTwzgboQF735.5X0G0wNU7DPsc.k/

# iptables 初回は無効にしておく
firewall --disabled
authconfig --enableshadow --passalgo=sha512

# selinux は無効化
selinux --disabled

timezone Asia/Tokyo

# ハードディスクは自動で初期化 (デフォルト no)
zerombr yes

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
#
# Partition
#
clearpart --all --drives=sda
part /boot --fstype=ext4 --size=500
part pv.008002 --grow --size=1
volgroup VolGroup00 --pesize=4096 pv.008002
logvol swap --fstype=swap --name=LogVol00 --vgname=VolGroup00 --size=512 --grow --maxsize=1024
logvol / --fstype=ext4 --name=LogVol01 --vgname=VolGroup00 --size=1024 --grow

# パッケージ 以下の様なルールで書く
# apache を追加したい場合 -> httpd
# apache を除外したい場合 -> -httpd
%packages
@Base
@development
@japanese-support

# ここからセットアップ用のスクリプト (shell とか perl)
%post --log=/root/install-post.log

#set env
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin

# /etc/ssh/sshd_config
# listen 22
# パスワードログイン -> 有効
# root ログイン -> 無効
# 空パスログイン -> 無効
perl -i -ne 's/#Port 22/Port 22/; print $_;' /etc/ssh/sshd_config
perl -i -ne 's/#PasswordAuthentication yes/PasswordAuthentication yes/; print $_;' /etc/ssh/sshd_config
perl -i -ne 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/; print $_;' /etc/ssh/sshd_config
perl -i -ne 's/#PermitRootLogin yes/PermitRootLogin no/; print $_;' /etc/ssh/sshd_config

# /etc/sysconfig/network-scripts/ifcfg-eth0
# ssh ログイン等を行うので eth0 を 起動時に有効化しておく
perl -i -ne 's/ONBOOT="no"/ONBOOT="yes"/; print $_;' /etc/sysconfig/network-scripts/ifcfg-eth0

# /etc/ntp.conf
# ntp は ntp.nict.jp に合わせておく
perl -i -ne 's/server 0.centos.pool.ntp.org/server ntp.nict.jp/; print $_;' /etc/ntp.conf
perl -i -ne 's/server 1.centos.pool.ntp.org\n//; print $_;' /etc/ntp.conf
perl -i -ne 's/server 2.centos.pool.ntp.org\n//; print $_;' /etc/ntp.conf

# add user
# ログイン用ユーザー作成とパスワードの設定
useradd user
echo 'userpass' | passwd user --stdin

# chkconfig
# ntpd の自動起動
chkconfig ntpd on

# インストール・セットアップ完了後に yum update
yum -y update

# end
reboot
2013/10/21 追記

NW スタティック設定の行を \ で折り返していましたが、これだと ks.cfg を読み込んだ途端にエラーで止まるので、一行で書く必要があります。記入例は修正しました。

2014/02/18 追記

ハードディスクからパーティションテーブルが読み込めないと、初期化するかどうか聞いてくるが “zerombr yes” を追加するとハードディスクを自動で初期化するようになる。

作成した ks.cfg は、エンコードに UTF-8 改行コードは LF を指定して保存します。

セットアップスクリプトの部分は好きにカスタマイズできるので、予めやっておきたい処理を書いて置くと便利です。

ks.cfgの配置とBootメディアの準備

今回は ks.cfg を HTTP 経由で参照させるので、どこかの Web 参照領域に ks.cfg をアップロードしておきます。

Boot メディアは ks.cfg で指定したものに合わせ以下から持ってきます。

これで準備は完了です。

CentOSのkickstartインストール手順

Boot メディアを DVD Rom なり IPMI なりで対象機器にセットして起動します。

Boot後の画面

centos-kickstart-04

起動後、[TAB キー] を押します。

TAB キーを押した後の画面

centos-kickstart-05

ここで以下のように ks.cfg の場所を指定します。

ks=http://192.168.0.1/ks.cfg

DHCP が利用できる環境での入力例

centos-kickstart-06

DHCP 環境がない場合は一時的に利用する IP を指定します。

ks=http://192.168.0.1/ks.cfg ip=192.168.0.100 netmask=255.255.255.0 gateway=192.168.0.254 

ks.cfg の場所を IP ではなく、ドメイン名で指定したい場合にはこのように。また、NIC を複数搭載しているとどれを使うか聞いてくるので最初に指定しおくと良いです。

ks=http://example.jp/ks.cfg ip=192.168.0.100 netmask=255.255.255.0 gateway=192.168.0.254 ksdevice=eth0 dns=8.8.8.8
2013/10/21 追記

起動後の表示例を追加し補足を追加しました。

ks.cfg が読み込まれると以下のようにインストールが始まります。

インストール中の画面

centos-kickstart-02

後は特にやることはありませんのでインストール完了まで待ちます。

インストール完了後は以下のように表示されますので、メディアを外して OS 再起動します。

インストール完了後

centos-kickstart-03

インストール完了後はセットアップ内容を確認したりという感じです。

ks.cfg は一度作って置くと便利なので楽したい人にはオススメです。

関連記事

コメント

  1. あいば より:

    今更ですが CentOS6 の kickstart 環境構築の参考にさせてもらいました。
    あと typo を見つけました。

    # apaceh を追加したい場合 -> httpd
    # apaceh を除外したい場合 -> -httpd

    取り急ぎ、ご報告します。

    • miura より:

      あいばさん

      ご指摘ありがとうございました。修正しました!
      渡した ks.cfg の方が細かいはずですけど、hdd の初期化周りは書いてなかったのでまだなら追加もお忘れなく!

コメントを残す

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間