CentOS 6.3のKickstartファイルに指定するインストールパッケージの名前を調べる

CentOS 6.3をインストールするためにKickstartファイルを作成していたのですが、@development-toolsグループがインストールできない現象に遭遇しました。調べてみるとパッケージグループの名前が変わっているらしく、CentOS 5の@development-toolsは、CentOS 6で@developmentという名前になっているようです。そこでパッケージグループの名前を調べる方法をまとめてみました。

確認した環境はCentOS 6.3 x86_64です。

パッケージやパッケージグループの名前は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セクションには、このidnameの値を設定することになります。

%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が使えるネットワーク環境が必要です。

今回インストールするのは、CentOS 6.3 x86_64です。

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

5. USBメモリからブートする

PCに先ほどのUSBメモリを挿し込んで起動します。必要ならばBIOSで起動優先順を確認し、USBメモリから起動するように変更しておきましょう。起動するとインストールメニューが表示されるので、ネットワークインストールを開始します。

Installation MethodにはURLを選択し、以下のように入力します。

http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/

後はいつもどおり、CentOSをインストールすればOKです。

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 Installations

Kickstartインストールとは : CentOSのインストールを自動化する方法

サーバ機にCentOSをインストールする時、手っ取り早いのはインストールDVDを使う方法です。インストールDVDから起動して、メニューに従って設定を行うだけです。その場で柔軟に設定を決められるので、とりあえずセットアップしたい場合に便利ではあります。

ですが、複数のサーバ機にインストールするとなると、一台ずつメニューで設定していくこの方法は面倒です。インストール作業を手順化する時にも、手作業が多く、ヒューマンエラーが発生しやすいこの方法はあまり適しているとは言えません。

そんな問題を解決するために、CentOS(というかRHEL)にはKickstartインストールという方法が用意されています。メニューの設問に答えていく代わりに、Kickstartファイルと呼ばれる設定ファイルを用意しておくと、その設定に従って自動でインストールが行われます。

複数のサーバにインストールする場合にも、設定が同じならば、同じKickstartファイルを利用できますし、多少、設定が違ってもファイルをコピーして少し書き換えればよいので、それほど手間もかかりません。何より、インストール作業が手順化できるので、後でインストール時の設定を確認することができたり、同じ構成のサーバを構築するのが簡単になったりと、いいことずくめです。