2008/01/30

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

Anaconda Kickstartの%postスクリプトの動作を観察する』にウソを書いてしまったので訂正。

スクリプトの例の最後に
/bin/chown -R ユーザ.グループ ~ユーザ/.ssh
%end
と書いたが、最後の%endを書くと、bashにジョブの指定と解釈され、エラーになる(少なくとも現行バージョンでは)

言い訳:
公式ドキュメントには、%pre%packageおよび%postセクションの終わりに、%endと書く例がある。
のだが、よく読むと…
Postinstallation scripts should be closed with %end, though this is not yet required. It will be required in the future, however.
なんてこったい!今のバージョンでは、まだ%endって書くな、だそうです。

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

2008/01/23

Kickstart中のパスワードの暗号化

Xen DomUインストールでAnaconda Kickstartを使う』で、kickstartの使用法を紹介したが、この中のパスワードの扱いについて。
Kickstartファイル中では、ユーザrootのパスワードや、一般ユーザ生成時にそのパスワードを指定できる。閉鎖環境なら、これらのパスワードを平文で書いてもいいが、少しでも安全性を上げたい場合、これらを暗号化して指定することができる。たとえば、
rootpw --iscrypted $1$XRWJplIP$5sSckYBmFvtMzRi4ZKiPX.
user --name=user --iscrypted --password=$1$sHG7Mld2$D2490DxcHuYE79eAfm0Id.
と言った具合だ。

では、この暗号化したパスワードをどう生成するか?一番単純なのは、/etc/shadowのencrypted passwordフィールド(「:」(コロン)区切りの二番目のフィールド)をコピーすること。別の方法としては、opensslコマンドを利用する方法がある。
$ openssl passwd -1
Password:パスワード
Verifying - Password:パスワード
$1$GOdtVjHf$Udhy08p1PyutEO7QGcxzN/
$
四行目、'$1$'で始まる文字列が暗号化されたパスワードだ。

#遅くなりましたが、今年もよろしくご指導ご鞭撻の程を。