キックスタートの使用方法
(Anacondaのリモート制御)
執筆者: Shannon Hughes
原文(英語/2006年10月)
概要
Anacondaは、Fedora ProjectとRed Hat Enterprise Linuxで使用されている、きわめて柔軟なインストールプログラムです。ローカルメディア(ハードドライブ、CD/DVD、USBキーなど)からのインストールのサポートに加えて、Anacondaでは、ネットワークソース(FTP、HTTP、NFSなど)からもインストールできます。また、Anacondaはキックスタートという自動メカニズムも備えています。この機能を利用すれば、ユーザはスクリプトでインストールを実行でき、手動操作は必要ありません。VNCコールのサポートによって、管理者はリモートサーバのインストールに使用する強力なユーティリティを得ることができます。この記事では、Anacondaインストーラをリモートで使用し、インストールの進捗状況をリアルタイムでモニタする2つの方式を説明します。
Anaconda
Anacondaは基本的にPythonベースであり、一部のモジュールはCで作成されています。Anacondaの動作には2つの段階があります。第1段階では、第2段階でインストールソースにマウントしてアクセスできるように、すべてのカーネルモジュールがロードされます。第2段階では、pythonインストーラが実行され、X Windowのインストール画面が表示されます(グラフィカルインストールの場合)。ローカルインストールの場合、ユーザはインストールソース、タイムゾーン、キーボードなどに関する質問への回答を開始します。リモートインストールの場合は、この情報は第2段階より前に、Anacondaのコマンドラインオプションを使用して指定されます。これらのオプションは、GRUBブートローダを使用して指定でき、ネットワーク構成とリモートインストールのタイプ(インタラクティブまたはキックスタート)によって異なります。
GRUBによる変更
最初のステップは、initrd.img(RAMディスク)ファイルとvmlinuz(カーネル)ファイルをインストールソース(isolinuxディレクトリ)からターゲットリモートサーバの/bootディレクトリへコピーすることです。これを行うには、rootであることが必要です。isolinuxディレクトリは、第1のFedora CDのルートディレクトリにあります。
GRUBからAnacondaのコマンドラインオプションを渡すために、/etc/grub.conf内に新しいエントリを作成します。次の表に、Anacondaのコマンドラインオプションの一部を示します。
| lowres | GUIインストーラを640×480で実行します。 |
| vnc |
NCベースのインストールを有効にします。VNCクライアントアプリケーションを使用してマシンに接続することが必要になります。 |
| vncpassword=<password> | VNC接続のパスワードを有効にします。これにより、VNCベースのインストールに誤って接続することを防止できます。「vnc」オプションもあわせて指定する必要があります。 |
| vncconnect=<host>[:<port>] |
インストールが実行されると、VNCクライアントに接続し、オプションでポートを使用します。「vnc」オプションもあわせて指定する必要があります。 |
| ks=cdrom: | CDROMからのキックスタート。 |
| ks=nfs:<path> | NFSからのキックスタート。 |
| ks=<url> | HTTPを介したキックスタート。 |
| ks=hd:<dev> | ハードドライブを介したキックスタート(例:dev = 'hda1') |
| ks=file:<path> | ファイルからのキックスタート(例:path = 'fd0/ks.cfg')。 |
| ks=ftp://<path> | FTPからのキックスタート。 |
| ks=http://<path> | HTTPからのキックスタート。 |
| lang=<lang> | インストールに使用する言語。「lang」キックスタートコマンドで使用できる有効な言語を指定します。 |
| keymap=<keymap> | 使用するキーボードレイアウト。「keyboard」キックスタートコマンドで使用できる有効な値を指定します。 |
| ip=<ip> | ネットワークインストールで使用するIP。DHCPには「dhcp」を使用します。 |
| netmask=<nm> | ネットワークインストールで使用するネットマスク。 |
| gateway=<gw> | ネットワークインストールで使用するゲートウェイ。 |
| dns=<dns> | ネットワークインストールで使用するネームサーバのカンマ区切りリスト。 |
| method=nfs:<path> | NFSインストール用の<path>を指定します。 |
| method=http://<path> | HTTPインストール用の <path>を指定します。 |
| method=ftp://<path> | FTPインストール用の<path>を指定します。 |
| method=hd://<dev>/<path> | ハードドライブインストール用の <path> を指定します。 |
| method=cdrom | CDROMベースのインストールを行います。 |
表:Anacondaのブート時のコマンド引数
インタラクティブリモートインストールでは、lang、keymap、method、vnc、vncconnect、およびipの各オプションを使用します。たとえば、インタラクティブリモートインストールでhttpソースツリーとダイナミックip割り当てを使用すると、次のようになります。
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.9-5.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-5.ELsmp ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.9-5.ELsmp.img
title Remote Install
root (hd0,0)
kernel /vmlinuz_remote lang=en_US keymap=us method=http://<your_domain>/<path_to_tree>/i386/tree vnc vncconnect=<observing ip> ip=dhcp
initrd /initrd_remote.img
注
vncconnectはデフォルトでポート5500です。ファイアウォールを運用している場合は、監視用サーバがこのポートにアクセスできるようにします。vncconnectが指定されていない場合、anacondaはパスワードを確認せずにそのホスト名でvncclient接続を受け入れます。
Anacondaに必要な情報の大部分は、すでにキックスタートコンフィギュレーションに含まれているため、リモートキックスタート実行時に渡されるAnacondaのオプションの数を減らすことができます。
title Remote Install
root (hd0,0)
kernel /vmlinuz_remote ks=http://<domain>/<path_to_file>/<kickstart_config> vnc vncconnect=<observing_ip>
initrd /initrd_remote.img
# Barebones demo remote kickstart configuration
#
install
network --bootproto dhcp
url --url http://<domain>/<path_to_file>/i386/tree
lang en_US
langsupport --default en_US en_US
keyboard us
mouse none
zerombr yes
clearpart --all
part pv.01 --size=1000 --grow
part /boot --fstype=ext3 --size=200
part swap --size=1000 --maxsize=2000
volgroup myvg pv.01
logvol / --vgname=myvg --name=rootvol --size=1000 --grow
bootloader --location mbr
timezone America/New_York
auth --enablemd5 --enableshadow
rootpw --iscrypted <encryptedpasswdstring>
selinux --permissive
reboot
firewall --enabled --http --ssh --smtp
skipx
%packages --resolvedeps
@ Base
%post
# MOTD
echo << /etc/motd
echo "Remote kickstart on $(date +'%Y-%m-%d')" << /etc/motd
echo << /etc/motd
注
Red Hat Enterprise Linuxのシステム管理ガイドには、キックスタートの詳細な説明が含まれています。
注
rootパスワードはキックスタートファイルに平文で挿入できます。また、暗号パスワードを指定することもできます。キックスタートコンフィギュレーションファイル内で暗号化されていないパスワードを使用する場合は、次のように、rootpwキーワードのあとに平文のパスワードを指定します。
rootpw mypasswd
暗号パスワードを使用する場合は、grub-md5-cryptまたはopenssl passwdモジュールを使用して、MD5ハッシュパスワードを生成します。たとえば、opensslを使用して暗号パスワードを生成するには、次のように入力します。
openssl passwd -1 -salt "shaker" "your_password"
/etc/shadowファイル内のエントリにも、MD5ハッシュパスワードが含まれます。次のように、--iscryptedオプションと暗号パスワードをキックスタートファイルに追加します。
rootpw --iscrypted encryptedpasswdstring
リモートサーバを再起動せずに、新しいgrub.confファイルを保存します。GRUBには、次のセクションで説明する安全策が用意されています。
フォールバック
デフォルトのブートエントリが失敗した場合、GRUBは1つまたは複数のエントリをブートします。通常、それらのフォールバックエントリは、システムに適合しないカーネルがブートされた場合に、システムで問題なくブートされると期待されるカーネルエントリです。リモートインストールの場合、GRUBではデフォルトエントリを設定し、そのエントリへ1回ブートする必要があるだけです。
grub.confファイルに変更を加えるのではなく、GRUBコマンドラインツールでデフォルトエントリを保存し、そのエントリへブートします。rootとして、コマンドラインからコマンド「grub」を入力します。これによって、bashに似たgrubツールがロードされます。GRUBエントリには、0で始まるインデックスが付けられています。リモートインストールがgrub.conf内の第2のエントリである場合は、次のコマンドを入力します。
grub> savedefault --default=1 --once
grub> quit
これで、GRUBはリモートインストールエントリへ1回だけブートします。
grub> help savedefault
savedefault: savedefault [--stage2=STAGE2_FILE] [--default=DEFAULT] [--once]
Save DEFAULT as the default boot entry in STAGE2_FILE. If
'--once' is specified, the default is reset after the next reboot.
ブートするデフォルトのgrubエントリを保存すると、--onceフラグによって、次のリブートのあとにデフォルトがリセットされます。これによって、ブートが失敗した場合でも、問題のない既知のブートエントリへ戻ることができます。
注
GRUBのフォールバックメカニズムを、インストールテストの代わりに利用することは避けてください。リモートインストールのテストは、ローカル環境で行うことが常に得策です。リモートインストールは、スペルミスや未指定の引数があった場合、第2段階に必要な情報を待ち受けて停止することがあります。このようなエラーのデバッグは、物理的に操作できるテスト環境で行う方がはるかに容易です。
リモートインストールの開始
次のように、監視用システムでvncviewerを起動します。
vncviewer --listen
次に、サーバをリブートし、クライアントがVNC接続を受け入れることができるようにします。
shutdown -r now
リモートサーバがリブートし、カーネルパラメータが読み込まれて実行されるには、数分間かかります。ヒューストンのコントロールセンターでスペースシャトルの再突入を待つNASAの技術者のような心境になるかもしれません。その待ち時間が終わると、Anacondaローダが起動し、実際のvnc接続がアクティブになる第2段階が開始されます。VNC接続が確立されると、監視用システムではVNCウィンドウが開きます。これで、インタラクティブなリモートインストール手順を進めるか、または(リモートキックスタートの場合は)インストールの進捗状況をモニタリングできます。
結論
これでリモートインストールは問題なく完了するはずです。好きな飲み物でも買いに行き、余ったインストールディスクを敷き皿として使ってください。
執筆者について
Shannon HughesはRed Hat Network(RHN)の技術者であり、オープンソースソフトウェアを使用して最も骨の折れるソフトウェアプロジェクトを解決することを楽しみとしています。コードを作成したり、サーバを調整したり、新しいRHNプロジェクトを考案したりしていないときは、彼は奥さんとガーデニングを楽しんだり、2人の子供と犬と一緒にScooby Dooの再放送を観たり、彼の教会のために最新のオープンソースプロジェクトを具体化したりしています。