CentOS 6.3のKickstartファイルに指定するインストールパッケージの名前を調べる
CentOS 6.3をインストールするためにKickstartファイルを作成していたのですが、@development-toolsグループがインストールできない現象に遭遇しました。調べてみるとパッケージグループの名前が変わっているらしく、CentOS 5の@development-toolsは、CentOS 6で@developmentという名前になっているようです。そこでパッケージグループの名前を調べる方法をまとめてみました。
パッケージやパッケージグループの名前はcomps.xmlと呼ばれるXMLファイルで定義してあります。このXMLファイルはCentOSレポジトリのrepodataディレクトリに含まれています。例えば以下のような場所に置いてあります。
http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/repodata/
ファイル名は*-comps.xmlという形式になっているようです。例えば、今は以下のようなファイル名で置いてありました。IDか何かでしょうかね。
0dae8d32824acd9dbdf7ed72f628152dd00b85e4bd802e6b46e4d7b78c1042a3-c6-x86_64-comps.xml
中身はただのXMLファイルです。
<group> <id>development</id> <name>Development tools</name> ...
Kickstartファイルの%packagesセクションには、このidかnameの値を設定することになります。
%packages @development @japanese-support
ちなみにCentOS6のKickstartファイルでは、@Baseグループと@Coreグループはデフォルトでインストールされるため、明示的に指定する必要はありません。
CentOSのレポジトリをミラーリングする
先日、CentOSのインストールをしようと思ったのですが、rikenのミラーサイトがメンテナンス中だったのか、つながらない状態になっていました。他にもミラーサイトはあるので、そちらを使って事なきを得ましたが、自分でコントロールできないのは不安です。
そこで、CentOSのミラーレポジトリをローカルに作っておくことにしました。毎回、外部のミラーサイトに負荷をかけるのも良くないですし、LAN内にミラーがあれば転送速度の向上も期待できそうです。
ローカルのミラーサイトはHTTPのみ対応とします。レポジトリを置くマシンで、ApacheなどのHTTPサーバを立ち上げておきます。
ファイルの取得には lftp コマンドを使います。リスト 1 のように、サブコマンド mirror を使うことで、ミラーリングすることができます。今回はftp.riken.jpで公開されているCentOS 6.3 x86_64のレポジトリを丸ごとミラーリングします。
リスト 1 : lftpによるミラーリング
# lftp -e 'mirror --delete --only-newer Linux/centos/6.3/os/x86_64 /var/www/html/mirror/Linux/centos/6.3/os/x86_64 && exit' ftp.riken.jp
常に最新の状態を保ちたい場合には、リスト 1 のコマンドをcronで1日1回ほど実行すればよいでしょう。
ローカルサイトのDocumentRootは /var/www/html の設定にしてありますので、ローカルミラーのURLは下記のようになります。ホスト名はlocal_mirrorとしてあります。
リスト 2 : ローカルミラーサイトのURL
http://local_mirror/mirror/Linux/centos/6/os/x86_64
Kickstartインストールで、このミラーレポジトリを使う場合は、Kickstartファイルに下記のように設定します。
リスト 3 : Kickstartファイルのインストールメディア指定
url --url http://local_mirror/mirror/Linux/centos/6/os/x86_64
lftpコマンドによる初回のミラーリングでは、大量のダウンロードが実行されるので時間はかかりますが、CentOSを何度もインストールする可能性があるなら、メリットは大きいと思います。
CentOS全自動インストールUSBメモリの最小構成
前回の記事「USBメモリでCentOS 6.3の全自動インストールメディアを作成する」で、インストーラの起動に必要なファイルをUSBメモリにコピーしました。その時はisolinuxディレクトリにあるファイルを全てコピーしたのですが、インストール方法を全自動インストールに限れば、もっとファイルを少なくすることができます。
全自動インストールメディアに必要なのは、以下の4つのファイルだけです。
全自動インストーラの最小構成
- syslinux.cfg (Syslinux設定ファイル)
- vmlinuz (インストーラカーネル)
- initrd.img (インストーラファイルシステム)
- ks.cfg (Kickstartファイル)
ブートローダであるSyslinuxがメニューを表示する場合にはvesamenu.c32などのファイルも必要になるのですが、全自動インストールをする場合にはこれらは不要です。必要なのは、インストーラのカーネル(vmlinuz)とファイルシステムのイメージ(initrd.img)、インストール構成を記述したKickstartファイル(ks.cfg)だけになります。
ちなみに、syslinux.cfgの記述も、全自動インストールに限れば、リスト 1 のようにかなりシェイプアップすることができます。
リスト 1 : syslinux.cfg
default kickstart label kickstart kernel vmlinuz append initrd=initrd.img ks=hd:sda1:/ks.cfg
ファイルは全て、USBメモリのルートフォルダに置きましょう。
USBメモリでCentOS 6.3の全自動インストールメディアを作成する
PCに挿して起動すると、CentOSを全自動でインストールすることができるUSBメモリを作ります。インストールパッケージはUSBメモリに含めず、HTTPで取得する方法をとります。ブートローダにはsyslinuxを使い、自動インストールはKickstartの仕組みを使います。
作業はWindows7 64bit環境で行いました。インストールの確認は64bit機を使って、CentOS 6.3 x86_64で行いました。
インストールメディアの作成に入る前に、USBメモリブートによるCentOSのインストールがどんな流れで行われるかを見ておきましょう。
(1) BIOS起動
(2) USBメモリのMBRを参照
(3) ブートローダ(syslinux)をロード・起動
(4) インストーラのカーネル(vmlinuz)をロード・起動
(5) Kickstartファイルに従って自動インストール
+------+ +----------+ +---------+ | BIOS | ==> | syslinux | ==> | vmlinuz | +------+ +----------+ +----+----+ | +-------+--------+ | Kickstart file | +----------------+
インストールメディアとなるUSBメモリには、ブートローダやインストーラのカーネル、Kickstartファイルなどが入っている必要があります。では、USBメモリでインストールメディアを作成する手順を見ていきましょう。
0. インストールメディア作成の手順
(1) Kickstartファイルを用意する
(2) インストーラをダウンロードする
(3) syslinux.cfgを用意する
(4) USBメモリにファイルをコピーする
(5) USBメモリにMBRをインストールする
(6) CentOSのインストールを開始する
1. Kickstartファイルを用意する
まずはじめに、Kickstartファイルを作成しておきます。Kickstartファイルは全自動インストールのキモとなる部分です。今回はリスト1のように定義して、ks.cfgとして保存しました。
リスト1 : ks.cfg
text autostep install url --url http://ftp.riken.jp/Linux/centos/6/os/x86_64 lang ja_JP.UTF-8 keyboard jp106 timezone --utc Asia/Tokyo rootpw testsvpw network --onboot yes --device eth0 --bootproto dhcp --noipv6 --hostname testsv firewall --enabled --service=ssh selinux --disabled authconfig --enableshadow --passalgo=sha512 bootloader --location=mbr --driveorder=sdb --append="nomodeset crashkernel=auto rhgb quiet" clearpart --initlabel --all --drives=sdb part /boot --fstype=ext4 --size=500 --ondrive=sdb part / --fstype=ext4 --size=50000 --ondrive=sdb part swap --size=2016 --ondrive=sdb %packages @base @core @japanese-support %end
ポイントはパーティションを作成するドライブ名です。USBメモリがsdaとして認識されるので、HDDはsdb以降のドライブとなります。今回はsdbにインストールします。その他の構成について、簡単に説明しておきましょう。
- インストールパッケージは http://ftp.riken.jp/Linux/centos/6/os/x86_64 から取得します。
- ネットワーク設定はDHCPを使います。
- ファイアウォールは有効です。
- SELinuxは無効です。
- パッケージは基本的なものだけをインストールします。
2. インストーラをダウンロードする
インストーラのカーネルなどをダウンロードします。インストーラのセットはCentOSのisolinuxディレクトリにまとめられていますので、そのディレクトリにあるファイルを全て保存します。CentOSの適当なミラーサイトからダウンロードするとよいでしょう。
CentOS 6.3 x86_64 : isolinuxダウンロード
ミラー 1 : http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/isolinux/
ミラー 2 : http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.3/os/x86_64/isolinux/
isolinuxのファイル一覧
- boot.msg
- grub.conf
- initrd.img
- isolinux.bin
- isolinux.cfg
- memtest
- splash.jpg
- vesamenu.c32
- vmlinuz
3. syslinux.cfgを用意する
ダウンロードしたファイルの中にisolinux.cfgがあります。このisolinux.cfgをsyslinux.cfgにリネームします。
続いて、syslinux.cfgを以下のように変更します。
リスト2 : syslinux.cfg.patch
--- syslinux.cfg.orig 2012-08-13 18:52:08.253137037 +0900 +++ syslinux.cfg 2012-08-13 18:53:59.405341327 +0900 @@ -1,4 +1,4 @@ -default vesamenu.c32 +default kickstart #prompt 1 timeout 600 @@ -35,4 +35,7 @@ menu label ^Memory test kernel memtest append - +label kickstart + kernel vmlinuz + append initrd=initrd.img ks=hd:sda1:/ks.cfg
4. USBメモリにファイルをコピーする
必要なファイルがそろったので、USBメモリにコピーします。isolinuxのファイル、syslinux.cfg、ks.cfgを全てルートディレクトリに保存します。USBメモリはUドライブとして認識されているものとします。
U:\+ +-boot.msg +-grub.conf +-initrd.img +-isolinux.bin +-ks.cfg +-memtest +-splash.jpg +-syslinux.cfg +-vesamenu.c32 +-vmlinuz
5. USBメモリにMBRをインストールする
MBRのインストールにはsyslinuxを使います。syslinuxはkernel.orgかミラーサイトからダウンロードすることができます。現在の最新版はsyslinux-4.05.zipでしたので、これをダウンロードします。
syslinuxダウンロード
kernel.org : http://www.kernel.org/pub/linux/utils/boot/syslinux/
ミラー : http://ring.nict.go.jp/archives/linux/kernel.org/utils/boot/syslinux/
ダウンロードしたsyslinux-4.05.zipを展開します。コマンドプロンプトから、展開したフォルダにあるsyslinux-4.05\win64\syslinux64.exeを実行してMBRをインストールします。この時、コマンドプロンプトは「管理者として実行」してください。USBメモリはUドライブとして認識されているものとします。
> syslinux-4.05\win64\syslinux64.exe -ma U:
6. CentOSのインストールを開始する
PCにUSBメモリを挿して起動します。設定が正しくできていれば、全自動でインストールが完了します。
USBメモリブートでCentOS 6.3 x86_64をネットワークインストールする
CentOSでサーバを構築することが多いのですが、バージョンが上がるたびにインストールDVDを作り直すのはDVD-Rがもったいないと思うようになりました。PXEによるネットワークインストールという手段もあるのですが、環境作りの手間がかかりすぎます。
そこで、USBメモリからブートして、ネットワークインストールをする方法を試してみました。これならバージョンが上がっても、USBメモリを上書きすれば済みますし、常に最新のパッケージをインストールすることができます。ただし、インストールするPCのBIOSが、USBメモリからのブートに対応していることが前提となります。
1. PCとネットワーク環境を用意する
インストールするPCは普通のものでかまいません。今回は64bit機を用意しました。あとでネットワークインストールをするので、DHCPが使えるネットワーク環境が必要です。
2. USBメモリを用意する
使用するUSBメモリはFATフォーマットされている通常のものでかまいません。空き領域は50MBもあれば充分ですので、机の引き出しの隅に転がっているような、古いものを再利用するとよいかもしれません。
3. 必要なファイルをコピーする
インストールディスクとして起動するために必要なファイルをCentOSの適当なミラーサイト(2)からダウンロードします。今回はCentOS 6.3 x86_64をインストールするので、 Linux/centos/6.3/os/x86_64/isolinux/ にある全てのファイルをダウンロードしてください。
ファイル一覧
- boot.msg
- grub.conf
- initrd.img
- isolinux.bin
- isolinux.cfg
- memtest
- splash.jpg
- vesamenu.c32
- vmlinuz
ダウンロードしたファイルはUSBメモリのルートフォルダにコピーしてください。また、isolinux.cfgはsyslinux.cfgにリネームしておきます。
4. ブートディスク化する
USBメモリにMBRをインストールします。MBRのインストールにはsyslinuxを使います。syslinuxはkernel.orgやミラーサイトから、最新のものをダウンロードしてください。
現時点での最新はsyslinux-4.05.zipでした。これを展開したら、コマンドプロンプトでsyslinux-4.05\win64フォルダに移動し、syslinux64コマンドを実行します。USBメモリは E: ドライブにマウントされているものとします。コマンドプロンプトは管理者として実行しておく必要があります。
syslinux-4.05\win64> syslinux64.exe -ma E:
これでUSBメモリにMBRがインストールされ、ブートディスクとして使えるようになりました。
参考 : The Syslinux Project
KickstartでCentOSを自動インストールする
Kickstartインストールを利用することで、CentOSのインストールを自動化することができます。確認した環境はCentOS6.3(x86_64)です。
1. Kickstartファイルを作成する
Kickstartファイルはテキストファイルなので、テキストエディタで一から自作することもできます。でも、典型的なパターンのテンプレートがあれば、それをカスタマイズするのが手っ取り早くて楽な方法です。
CentOSはインストール時の設定を以下の場所に保存しています。
/root/anaconda-ks.cfg
このファイルはKickstartファイルのフォーマットになっています。ですので、これを改造して、汎用的に使えそうな設定でKickstartファイルを作成しました。
text autostep install cdrom lang ja_JP.UTF-8 keyboard jp106 timezone --utc Asia/Tokyo rootpw hogesvpw network --onboot yes --device eth0 --bootproto dhcp --noipv6 --hostname hogesv firewall --enabled --service=ssh selinux --disabled authconfig --enableshadow --passalgo=sha512 bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet" clearpart --initlabel --all --drives=sda part /boot --fstype=ext4 --size=500 part / --fstype=ext4 --grow --size=200 part swap --size=2016 # repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 %packages @base @core @japanese-support %end
Kickstartファイルの書式や定義の詳細については別の記事に譲ります。
参考 : Kickstart Options
2. Kickstartファイルを設置する
OSのインストール時、作成したKickstartファイルにアクセスする必要があります。アクセスする方法はいくつか用意されているのですが、今回はHTTPでアクセスする方法を使います。LAN内のHTTPサーバにKickstartファイルを設置して、以下のURLでアクセスできるようにしました。
http://setupsv/ks.cfg
3. Kickstartファイルを指定してインストールを開始する
では実際にCentOSをインストールしましょう。今回はインストールDVDを用意しました。DVDから起動すると、インストールメニューが表示されます。Tabキーを押してオプション編集モードになったら、以下のオプションを追加してインストールを開始します。
ks=http://setupsv/ks.cfg
Kickstartファイルに誤りがなければ、あとは自動でインストールが進むはずです。インストールが完了すると、再起動するようにメッセージが表示されますので、インストールDVDを取り出してから再起動をすれば完了です。
Kickstartインストールとは : CentOSのインストールを自動化する方法
サーバ機にCentOSをインストールする時、手っ取り早いのはインストールDVDを使う方法です。インストールDVDから起動して、メニューに従って設定を行うだけです。その場で柔軟に設定を決められるので、とりあえずセットアップしたい場合に便利ではあります。
ですが、複数のサーバ機にインストールするとなると、一台ずつメニューで設定していくこの方法は面倒です。インストール作業を手順化する時にも、手作業が多く、ヒューマンエラーが発生しやすいこの方法はあまり適しているとは言えません。
そんな問題を解決するために、CentOS(というかRHEL)にはKickstartインストールという方法が用意されています。メニューの設問に答えていく代わりに、Kickstartファイルと呼ばれる設定ファイルを用意しておくと、その設定に従って自動でインストールが行われます。
複数のサーバにインストールする場合にも、設定が同じならば、同じKickstartファイルを利用できますし、多少、設定が違ってもファイルをコピーして少し書き換えればよいので、それほど手間もかかりません。何より、インストール作業が手順化できるので、後でインストール時の設定を確認することができたり、同じ構成のサーバを構築するのが簡単になったりと、いいことずくめです。