スクリプトに使用可能なソースを知るには、初回ブート時にどのツールが AI クライアントにインストールされているかを知る必要があります。デフォルトでは、solaris-large-server パッケージがインストールされています。そのグループパッケージをインストールした場合は、Python、bash、ksh、およびその他のツールが初回ブート時に使用可能です。solaris-large-server グループパッケージに含まれるパッケージの完全なリストについては、Oracle Solaris 11.3 ソフトウェアの追加と更新 の グループパッケージ内のすべてのインストール可能なパッケージの一覧表示で説明されているように、pkg contents コマンドを使用します。solaris-large-server パッケージに用意されていないソースをスクリプトに使用する場合は、必要なパッケージを特定し、それを AI マニフェストに指定します。インストールする可能性があるほかのパッケージの名前を検索する方法については、Oracle Solaris 11.3 ソフトウェアの追加と更新を参照してください。
すべての初回ブートスクリプトに次のテキストを含めるようにしてください。
初回ブートスクリプトでは、SMF メソッドの終了コードなどの定義を使用するために /lib/svc/share/smf_include.sh を読み込む必要があります。
スクリプトでは、前のブートですでに実行されたかどうかを検査するようにしてください。completed プロパティーがすでに true に設定されている場合、スクリプトは start メソッドを終了し、サービスを一時的に無効にすべきです。
スクリプトの次の行は、site/first-boot-script-svc:default サービスインスタンスの config プロパティーグループ内の completed プロパティーの値を取得し、その値をローカルの completed 変数に割り当てます。
completed=`svcprop -p config/completed site/first-boot-script-svc:default`
completed 変数が true に設定された場合、スクリプトの次の行は、SMF_EXIT_TEMP_DISABLE 終了コードとともに、終了の簡単な理由として method_completed を、終了の理由を示す長い説明として "Configuration completed" を、サービスの start メソッドに送ります。
smf_method_exit $SMF_EXIT_TEMP_DISABLE script_completed "Configuration completed"
初回ブートスクリプトでは、AI インストールによって作成されたばかりのブート環境 (BE) のコピーを保存するようにしてください。初回ブートスクリプトで変更される前に BE のコピーを保存しておくと、スクリプトによって何らかの問題が発生した場合に、保存された BE にブートするだけで簡単に回復できます。次のテキストは、beadm list 出力の R フラグによって実行中の BE を特定したあと、その BE をコピーします。
bename=`beadm list -Hd|nawk -F ';' '$3 ~ /R/ {print $1}'` beadm create ${bename}.orig echo "Original boot environment saved as ${bename}.orig"
スクリプトでは、その作業が完了したときに、completed プロパティーの値を true に設定し、新しいプロパティー値でサービスをリフレッシュし、start メソッドを終了してサービスを一時的に無効にする必要があります。svccfg コマンドを使用して completed プロパティーを true に設定し、svcadm コマンドを使用してサービスをリフレッシュします。これにより、以降のリブート時にスクリプトが再実行されないようになります。
smf_method_exit $SMF_EXIT_TEMP_DISABLE script_completed "Configuration completed"
デフォルトでは sh が ksh93 であることを覚えておいてください。
#!/bin/sh # Load SMF shell support definitions . /lib/svc/share/smf_include.sh # If nothing to do, exit with temporary disable completed=`(svcprop -p config/completed site/first-boot-script-svc:default` [ "${completed}" = "true" ] && \ smf_method_exit $SMF_EXIT_TEMP_DISABLE completed "Configuration completed" # Obtain the active BE name from beadm: The active BE on reboot has an R in # the third column of 'beadm list' output. Its name is in column one. bename=`beadm list -Hd|nawk -F ';' '$3 ~ /R/ {print $1}'` beadm create ${bename}.orig echo "Original boot environment saved as ${bename}.orig" # Place your one-time configuration tasks here # Record that this script's work is done svccfg -s site/first-boot-script-svc:default setprop config/completed = true svcadm refresh site/first-boot-script-svc:default smf_method_exit $SMF_EXIT_TEMP_DISABLE method_completed "Configuration completed"
$ ksh -n first-boot-script.sh
この例は、2 つの IP インタフェースのアドレスを構成し、デフォルトルートを追加する first-boot-script.sh という名前の初回ブートスクリプトを示しています。
#!/bin/sh # Load SMF shell support definitions . /lib/svc/share/smf_include.sh # If nothing to do, exit with temporary disable completed=`svcprop -p config/completed site/first-boot-script-svc:default` [ "${completed}" = "true" ] && \ smf_method_exit $SMF_EXIT_TEMP_DISABLE completed "Configuration completed" # Obtain the active BE name from beadm: The active BE on reboot has an R in # the third column of 'beadm list' output. Its name is in column one. bename=`beadm list -Hd|nawk -F ';' '$3 ~ /R/ {print $1}'` beadm create ${bename}.orig echo "Original boot environment saved as ${bename}.orig" # Create and configure addresses on two IP interfaces /usr/sbin/ipadm create-ip net0 /usr/sbin/ipadm create-ip net1 /usr/sbin/ipadm create-addr -a 10.153.125.222/24 net0 /usr/sbin/ipadm create-addr -a 169.254.182.77/24 net1 # Add a default route with net0 as the gateway /usr/sbin/route add default 10.153.125.1 -ifp net0 # Record that this script's work is done svccfg -s site/first-boot-script-svc:default setprop config/completed = true svcadm refresh site/first-boot-script-svc:default smf_method_exit $SMF_EXIT_TEMP_DISABLE method_completed "Configuration completed"
初回ブートスクリプトの別の適切な使用方法は、useradd コマンドを使用して複数のユーザーをシステム上に構成する方法です。