Sysprepといえば、WindowsのOSクローンを行うにあたって欠かせない機能だ。
Windowsで持っている固有の情報(システムIDやネットワークに関する情報など)を削除し、次回起動時に設定ウィザードを起動してくれる。
応答ファイルというものを利用すれば、その設定ウィザードの内容を自動的に設定させることもできる。
そんな便利なSysprep、実はRedhat(CentOS)にも似たような機能がある。それが「sys-unconfig」コマンドだ。
残念ながら応答ファイルに相当する機能は存在しないようだが、それでもクローン元のイメージをつくるならば便利な機能。ただし、initの機能になるためかCentOS 7では利用出来ないので注意。
1.使い方
使い方は簡単で、クローン元とするマシンで以下のコマンドを実行するだけだ。
rm -f /etc/sysconfig/network-script/ifcfg-*
sys-unconfig
※実行すると、警告も何も出ずに速攻で設定を削除してシャットダウンするので注意が必要
再起動完了後、コンソール上に『system-config-*』が次々と実行されていき、それにそって設定していく。
設定ウィザードは以下の順に実行されていく。
- /usr/bin/system-config-keyboard(キーボード設定)
- /usr/bin/passwd root(rootのパスワード設定)
- /usr/sbin/system-config-network-tui(ネットワーク設定)
- /usr/sbin/timeconfig(タイムゾーン等の設定)
- /usr/sbin/authconfig-tui --nostart(セキュリティ設定)
- /usr/sbin/ntsysv --level 35(chkconfig設定)
2.仕組み
仕組みは単純。基本的に、「sys-unconfg」コマンドはルートディレクトリ直下に「.unconfigured」というファイルを設置しているだけだ。
で、OS起動時に読み込まれる「/etc/rc.d/rc.sysinit」上で、この「/.unconfigured」ファイルが存在していた場合に、以下の処理が実行される、といった流れ。
●/etc/rc.d/rc.sysinit
# Configure machine if necessary.
if [ -f /.unconfigured ]; then
if [ -x /bin/plymouth ]; then
/bin/plymouth quit
fi
if [ -x /usr/bin/system-config-keyboard ]; then
/usr/bin/system-config-keyboard
fi
if [ -x /usr/bin/passwd ]; then
/usr/bin/passwd root
fi
if [ -x /usr/sbin/system-config-network-tui ]; then
/usr/sbin/system-config-network-tui
fi
if [ -x /usr/sbin/timeconfig ]; then
/usr/sbin/timeconfig
fi
if [ -x /usr/sbin/authconfig-tui ]; then
/usr/sbin/authconfig-tui --nostart
fi
if [ -x /usr/sbin/ntsysv ]; then
/usr/sbin/ntsysv --level 35
fi
# Reread in network configuration data.
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
# Reset the hostname.
action $"Resetting hostname ${HOSTNAME}: " hostname ${HOSTNAME}
fi
rm -f /.unconfigured
fi
ということは、この「/etc/rc.d/rc.sysinit」をカスタマイズすれば、再起動後に初期設定させる項目も指定出来るという使い方もできる。
WindowsのSysprepやOSインストール時のKickstartと違って、応答ファイルやksファイル相当のものが無いのはちょっと悲しいけれど、この項目で任意のスクリプトをキックさせれば十分カスタマイズ可能だろう。
なお、Ubuntuの場合だと『oem-config』というパッケージが用意されているようだ。