KickStartを使ったインストールをやってみる
RedHat系のLinuxOSのインストールを自動化するKickStartという仕組みがあります。
今回はこれを使って、そこそこ安全にLinuxインストールする方法を試してみようと思います。
どんな風にインストールする?
今回のコンセプトは「そこそこ安全に初期インストール」です。
ポイントはこんな感じです
- インストールするパッケージについては
- 初期状態で使わないサービスは極力停止する
- Xは使わないので関連サービスは止める
- NFSは使わないので関連サービスは止める
- メールは使わないので関連サービスは止める
- その他今回の環境で必要としないものは止めてしまう(LVM関係/ソフトウェアRAID関係など)
- iptablesを有効にしてSSHだけ許可する
- SELinuxを有効にする(targetedモード)
他には…
用意した環境
同一セグメントにWebサーバーを立てて、ここにCentOSのメディアのデータを配置した
簡易リポジトリを作成してこれを利用しました。
IPは以下のものを使いました。
-
- リポジトリサーバーのIP:XXX.XXX.XXX.5
- KickStartでインストールするサーバーのIP:XXX.XXX.XXX.10
- デフォルトゲートウェイおよびネームサーバ:XXX.XXX.XXX.1
Webサーバー内のディレクトリ構成は以下のようにしました。
Document Root/ +- cfg/ KickStart設定ファイルの配置用ディレクトリ | +- centos4.cfg CentOS4用のKickStart設定ファイル | +- centos5.cfg CentOS5用のKickStart設定ファイル +- centos4/ CentOS4用メディア配置用ディレクトリ | +- disc1/ メディア1枚目 | +- disc2/ メディア2枚目 | +- disc3/ メディア3枚目 | +- disc4/ メディア4枚目 +- centos5/ CentOS5用メディア配置用ディレクトリ +- disc1/ メディア1枚目 +- disc2/ メディア2枚目 +- disc3/ メディア3枚目 +- disc4/ メディア4枚目 +- disc5/ メディア5枚目 +- disc6/ メディア6枚目
※注意
メディアの中に「.」で始まる隠しファイルとして.discinfoというファイルがあるのですが、
これをコピーしておかないとKickStartを走らせることができませんでした。
(404 Not Foundになってしまいそこから先に進まない)
ちなみに配置する場所がCentOS4, CentOS5で異なりましたことを補足しておきます。
CentOS4の場合 disc[X]/ +-CentOS/ +-.discinfo CentOS5の場合 disc[X]/ +-CentOS/ +-.discinfo
そしてKickStart用の設定ファイルです。
KickStart用設定ファイル:CentOS4の場合
CentOS4の場合はこんな感じで作ってみました。
install url --url http://XXX.XXX.XXX.5/centos4 text lang ja_JP.UTF-8 langsupport --default=ja_JP.UTF-8 ja_JP.UTF-8 keyboard jp106 network --device eth0 --bootproto static --ip XXX.XXX.XXX.10 --netmask 255.255.255.0 --gateway XXX.XXX.XXX.1 --nameserver XXX.XXX.XXX.1 --hostname centos4 rootpw --iscrypted [yourpassword] firewall --enabled --ssh selinux --enforcing authconfig --enableshadow --passalgo=md5 timezone Asia/Tokyo bootloader --location=mbr clearpart --all part /boot --fstype ext3 --size=100 part swap --size=256 part / --fstype ext3 --size=100 --grow reboot %packages @ japanese-support autoconf automake cpp e2fsprogs e2fsprogs-devel gcc gcc4 gcc-c++ gcc4-c++ glibc-headers glibc-kernheaders grub kernel-smp krb5-devel libgomp libstdc++-devel ntp openssl-devel zlib-devel %post # Remote User Add groupadd -g 1000 [youruser] useradd -u 1000 -g 1000 -d /home/[youruser] -s /bin/bash [youruser] echo [yourpassword] | passwd --stdin [youruser] # Disabled services DISABLED_SERVICES="apmd autofs cpuspeed cups iiim irqbalance isdn lvm2-monitor mdmonitor mdmpd netfs nfslock pcmcia portmap rhnsd rpcgssd rpcidmapd sendmail xfs" for SERVICE in ${DISABLED_SERVICES} do /etc/init.d/${SERVICE} stop chkconfig --level 123456 ${SERVICE} off done # Enabled services ENABLED_SERVICES="auditd psacct" for SERVICE in ${ENABLED_SERVICES} do /etc/init.d/${SERVICE} start chkconfig --level 345 ${SERVICE} on done # Update Packages yum update -y
CentOS4の場合は、KickStart自身にオプションが無いようだったので、
初期サービスの有効化/無効化を%postに書く形にしてみました。
KickStart用設定ファイル:CentOS5の場合
CentOS5の場合はこんな感じで作ってみました。
install url --url http://XXX.XXX.XXX.5/centos5 text lang ja_JP.UTF-8 langsupport --default=ja_JP.UTF-8 ja_JP.UTF-8 keyboard jp106 network --device eth0 --bootproto static --ip XXX.XXX.XXX.10 --netmask 255.255.255.0 --gateway XXX.XXX.XXX.1 --nameserver XXX.XXX.XXX.1 --hostname centos5 rootpw --iscrypted [yourpassword] firewall --enabled --ssh selinux --enforcing authconfig --enableshadow --passalgo=md5 timezone Asia/Tokyo bootloader --location=mbr clearpart --all part /boot --fstype ext3 --size=100 part swap --size=256 part / --fstype ext3 --size=100 --grow services --enabled auditd,psacct --disabled apmd,autofs,avahi-daemon,cpuspeed,cups,iiim,irqbalance,isdn,lvm2-monitor,mdmonitor,mdmpd,netfs,nfslock,pcmcia,portmap,rhnsd,rpcgssd,rpcidmapd,sendmail,xfs reboot %packages @ japanese-support autoconf automake cpp e2fsprogs e2fsprogs-devel gcc gcc-c++ glibc-headers glibc-kernheaders grub krb5-devel libgomp libstdc++-devel ntp openssl-devel zlib-devel %post # Remote User Add groupadd -g 1000 [youruser] useradd -u 1000 -g 1000 -d /home/[youruser] -s /bin/bash [youruser] echo [yourpassword] | passwd --stdin [youruser] # Update Packages yum update -y
CentOS5の場合はオプションでサービスの有効化/無効化が指定できるので楽ちん。
実行してみる
実行はそんなに難しくありません。
CentOS4,CentOS5のインストールメディア1枚目を用意して、CDブートを行います。
boot :
となったところで、
boot : linux ks=http://XXX.XXX.XXX.5/cfg/centos4( or centos5).cfg ip=XXX.XXX.XXX.10 gateway=XXX.XXX.XXX.1 netmask=255.255.255.0
などと入力してやれば、後は自動でインストールが始まり、
インストールが終われば勝手にリブートまで行くはず。
後半のip, gateway, netmask はインストール時に仮に割り当てるネットワーク設定ですので、
DHCPの環境であれば特に必要もないと思います。
(今回は設定を明示してインストールしました)
今後やってみようと思っていること
- ブート方法
今回の方法だと最初の1枚目はインストールメディアが必要になってしまいます。
全部ネットワーク経由にするためにPXEブートの環境を作ってみようと思います。
Cobblerというツールがよさげで、かなり気になったので使ってみようかなぁと。
- 利用するリポジトリ
今回はyumを使うときのリポジトリはネット上のミラーを見に行きますが、
内部にリポジトリ作ってそっちを見にいくようにしておきたい。
- 設定ファイルの配布など
パッケージやサービスは初期インストール時にある程度カスタマイズをしてみましたが、
個別の設定をもう少し自動でやりたいなと思っています。
こっちはPuppetなどの構成管理ツールと組み合わせてみようかなと思っています。
(%postにシェルスクリプト並べてもできるんでしょうが、力技になるので工夫しようかと)
- SELinuxをstrictモードで最初から動かす
オプションを見る限りはモードを指定する方法は無いように見えるので、
何かうまいことやって初期インストール完了時点からstrictモードで動かせると楽しい。
今日はこんなところで。