2008/01/24

Anaconda Kickstartの%postスクリプトの動作を観察する

注意: 訂正記事も併せて読んでください。

Xen DomUインストールでAnaconda Kickstartを使う』『Kickstart中のパスワードの暗号化』でAnaconda Kickstartを使った自動インストールを紹介した。

このKickstartでは、設定ファイル中に、OSインストール直後(あるいは直前)に自動実行させたいスクリプトを記述できる。これを%postスクリプト(あるいは%preスクリプト)と呼ぶ(Postscriptとは関係ない。念の為)
例えば、SSHDについて、/etc/ssh/sshd_configを編集してパスワードログインやrootログインを禁止したり、~ユーザ/.ssh/authorized_keys2を作成して、公開鍵でログイン可能にしたり、という設定作業を自動化する等の応用が考えられる。その場合、設定ファイル中に、
%post
/usr/bin/patch /etc/ssh/sshd_config <<EOL
39a40
> PermitRootLogin no
60c61
< PasswordAuthentication yes
---
> PasswordAuthentication no
EOL


/bin/mkdir ~ユーザ/.ssh
/bin/chmod 600 ~ユーザ/.ssh
/bin/cat > ~ユーザ/.ssh/authorized_keys2 <<EOL
ssh-dss AAAAB3NzaC1kc3MAAACBAIsk92QYQGB8GRK+zHp/7JaXjBA+Jglm2MR3mO1uJtGncof+O/89
<<略>>
DxgLIXtME7riQMSVp3ImnMT9Q7bNJUWiGaZB6v5BBDYe86blSw/Wl/JSDg8= whoami@whereishere
EOL
/bin/chmod 644 ~ユーザ/.ssh/authorized_keys2
/bin/chown -R ユーザ.グループ ~ユーザ/.ssh
%end
と記述する。

では、このスクリプトをデバッグするにはどうすればよいだろうか?これにはいくつかの方法がある。

最初の方法は、Kickstartのログをとることだ。これは、Kickstart設定ファイル中にSYSLOGサーバのアドレスを
logging --host=192.168.55.10
の様に指定すればよい。ただし、このログには、%postスクリプトが出力するエラーメッセージは含まれない。

次に、%postスクリプトのログをファイルに書き出すことも可能だ。これは、%postコマンドに--log=ファイル名を指定すればよい。例えば、
%post --log=/mnt/sysimage/root/anaconda-post.log --erroronfail
ここでファイルのパスに注目して欲しい。ここで指定するのは、Anacondaから認識されているパス名なので、OSインストール後のパス名の前に/mnt/sysimageを付加する必要がある。
オプション--erroronfailは、スクリプトにエラーがあった場合にインストールを失敗させるための指定だ。
ただ、この方法は、実行の様子をリアルタイムに見れるわけではない。バッファリングの関係で、標準出力と標準エラーの内容が前後してしまうことがある。

最後は、ターミナルに表示させる方法だ。これは、%postスクリプトの最初に、
%post
exec < /dev/tty3 > /dev/tty3
/usr/bin/chvt 3
最後に、
/usr/bin/chvt 1
%end
と記述すればよい。この指定によって、スクリプトの出力をtty3へ送り、表示する画面をchvtコマンドで切替えている。この方法の利点は、実行の様子をリアルタイムに観察できることだ。

なお、Kickstartインストール中は、tty1がテキストインストール画面、tty6がGUIインストール画面で、tty2には対話的なシェルが立ち上がっている。[Ctrl]+[Fn]で切替えることができる。

参考:『Tips and tricks for anaconda and kickstart

0 件のコメント: