URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

Kickstart後の初回起動時にスクリプトを実行する

 複数の仮想マシンへCentOS 7をインストールするのにKickstartを使っていたのですが、単純な"ks.cfg"の設定ではできない処理があって、その対応のメモです。

 前述のように環境はCentOS 7が対象。

 通常、インストール後の追加処理はKickstartの設定ファイル"ks.cfg"の中の"%post"に実行したいコマンド等を記述します。
 例えば、該当部分を抜粋するとこんな感じです。
 (これは"/etc/ssh/sshd_config"に"PermitRootLongin no"という設定を追加しています。)

%post sed -i 's/^\(\#PermitRootLogin.*\)$/\1\nPermitRootLogin no/g' /etc/ssh/sshd_config %end

 これが実行されるタイミングはOSの基本的なインストールが完了した後ですが、まだ初回の再起動がされていないタイミングなのでできないこともあります。また、Kickstartの処理の一部なので、最後に生成される"/root/anaconda-ks.cfg"ファイルをここで削除するようなこともできません。

 それを解決するために、この"%post"の中でスクリプトを生成し、初回起動時のみに実行するという処理を組み込みます。
 具体的には以下のようにします。
 (単純な例として、前述の"anaconda-ks.cfg"を削除します。)

%post cat <<EOF > /var/tmp/firstboot.sh #/bin/bash rm -f /root/*ks.cfg cat /etc/crontab | grep -v firstboot > /etc/crontab.tmp rm -f /etc/crontab mv /etc/crontab.tmp /etc/crontab rm -f \$0 EOF echo "@reboot root /bin/bash /var/tmp/firstboot.sh" >> /etc/crontab %end

 要はヒアドキュメントでスクリプトを生成し、そのスクリプトをCronの機能で初回起動時に実行します。スクリプトの後ろの部分は不要になったCronの設定や実行したスクリプトを削除する処理です。

 これでKickstartの使い勝手がだいぶ向上するのと、この仕組みは割と他のことにも流用できますね。

【参考】
Have Script Run on Firstboot - CentOS