この章では、カスタム JumpStart インストールのオプション機能について説明します。
この章の手順は、カスタム JumpStart ファイルの提供に使用される SPARC サーバーと x86 サーバーの両方 (「プロファイルサーバー」と呼ばれる) に利用できます。プロファイルサーバーは、異なる種類のプラットフォームのシステムにカスタム JumpStart ファイルを提供できます。たとえば、SPARC サーバーは、SPARC ベースのシステムと x86 ベースのシステムの両方に、カスタム JumpStart ファイルを提供できます。
開始スクリプトは、rules ファイル内に指定する、ユーザー定義の Bourne シェルスクリプトです。Solaris ソフトウェアがシステムにインストールされる前に作業を実行します。開始スクリプトは、カスタム JumpStart インストールで Solaris をインストールするときのみ使用できます。
開始スクリプトは、次のような場合に使用してください。
派生プロファイルを作成する
アップグレード前にファイルのバックアップをとる
スクリプト内には、初期インストール時やアップグレードインストール時に /a に対して行われるファイルシステムのマウントを妨げるような記述をしないでください。JumpStart プロファイルが /a にファイルシステムをマウントできない場合は、エラーが発生してインストールは失敗します。
インストール中の開始スクリプトの出力は、/tmp/begin.log へ書き込まれます。インストール完了後に、このログファイルの出力先が /var/sadm/system/logs/begin.log へ変更されます。
開始スクリプト内では、カスタム JumpStart 環境変数を使用できます。環境変数のリストについては、「カスタム JumpStart の環境変数」を参照してください。
開始スクリプトは、JumpStart ディレクトリに保存してください。
Solaris 10 リリースでは、JumpStart インストール時にプロンプトが表示されないようにするための、サンプルの JumpStart スクリプト set_nfs4_domain が、メディアで提供されていました。このスクリプトは、インストール時に NFSv4 プロンプトが表示されないようにしていました。このスクリプトはもう必要ありません。Solaris 10 8/07 リリース以降では、sysidcfg のキーワード nfs4_domain を使ってプロンプトが表示されないようにします。set_nfs4_domain スクリプトには、プロンプトを抑制する機能がなくなりました。
非大域ゾーンがインストールされている場合に新しい nfs4_domain キーワードが sysidcfg ファイルに含まれていると、非大域ゾーンを最初にブートしたときにドメインが設定されます。それ以外の場合は、Solaris 対話式インストールプログラムが起動して、ブートプロセスが完了する前にドメイン名を入力するように促すプロンプトが表示されます。
『Solaris 10 5/08 インストールガイド (ネットワークインストール)』の「nfs4_domain キーワード」を参照してください。
カスタム JumpStart インストール時に開始スクリプトが動的に作成するプロファイルを「派生プロファイル」と呼びます。派生プロファイルは、特定のシステムを 1 つのプロファイルに対応させる rules ファイルを設定できない場合に必要となります。たとえば、異なるハードウェア構成要素を持つ同一のシステムモジュール (異なるフレームバッファーを持つシステムなど) には、派生プロファイルを使用する必要があります。
派生プロファイルを使用するルールの設定手順は次のとおりです。
システムが、プロファイルフィールドに等号 (=) があるルールと一致すると、開始スクリプトは、システムに Solaris ソフトウェアをインストールするのに使用する派生プロファイルを作成します。
次に、毎回同じ派生プロファイルを作成する開始スクリプトの例を示します。もちろん、ルールの評価に応じて異なる派生プロファイルを生成する開始スクリプトも作成できます。
#!/bin/sh echo "install_type initial_install" > ${SI_PROFILE} echo "system_type standalone" >> ${SI_PROFILE} echo "partitioning default" >> ${SI_PROFILE} echo "cluster SUNWCprog" >> ${SI_PROFILE} echo "package SUNWman delete" >> ${SI_PROFILE} echo "package SUNWolman delete" >> ${SI_PROFILE} echo "package SUNWxwman delete" >> ${SI_PROFILE} |
この例の開始スクリプトは、派生プロファイル名に環境変数 SI_PROFILE を使用する必要があります。この派生プロファイル名は、デフォルトでは /tmp/install.input に設定されています。
開始スクリプトを使って派生プロファイルを作成する場合は、スクリプトにエラーがないことを確認してください。派生プロファイルは、開始スクリプトが実行されてから作成されます。このため、check スクリプトで派生プロファイルの妥当性は検査されません。
終了スクリプトは、rules ファイル内に指定する、ユーザー定義の Bourne シェルスクリプトです。Solaris ソフトウェアがシステムにインストールされた後、システムがリブートする前に作業を実行します。終了スクリプトは、カスタム JumpStart インストールで Solaris をインストールするときのみ使用できます。
終了スクリプトは、次のような作業に利用できます。
ファイルの追加
パッケージまたはパッチの追加
ルート環境のカスタマイズ
システムのルートパスワードの設定
追加ソフトウェアのインストール
Solaris インストールプログラムは、システムのファイルシステムを /a にマウントします。ファイルシステムは、システムがリブートするまで /a にマウントされています。終了スクリプトを使用して、新しくインストールされたファイルシステムの階層 (/a) を変更し、ファイルの追加、変更、または削除ができます。
インストール中の終了スクリプトの出力は、/tmp/finish.log へ書き込まれます。インストール完了後に、このログファイルの出力先が /var/sadm/system/logs/finish.log へ変更されます。
終了スクリプト内では、カスタム JumpStart 環境変数を使用できます。環境変数のリストについては、「カスタム JumpStart の環境変数」を参照してください。
終了スクリプトは、JumpStart ディレクトリに保存してください。
終了スクリプトにより、JumpStart ディレクトリにあるファイルをインストールされたシステムへ追加できます。ファイルを追加できるのは、SI_CONFIG_DIR 変数で指定されるディレクトリに JumpStart ディレクトリがマウントされるためです。このディレクトリは、デフォルトで /tmp/install_config に設定されます。
インストールされたシステムにすでに存在するファイルに、JumpStart ディレクトリからファイルをコピーして、ファイルを置換することもできます。
たとえば、自分のサイトのすべてのユーザーを対象に開発された特別なアプリケーション site_prog があると仮定します。site_prog のコピーを JumpStart ディレクトリに置いた場合、終了スクリプト内の次の行は JumpStart ディレクトリからシステムの /usr/bin ディレクトリに site_prog をコピーします。
cp ${SI_CONFIG_DIR}/site_prog /a/usr/bin |
終了スクリプトを作成すると、Solaris ソフトウェアをシステムにインストールした後に、パッケージやパッチを自動的に追加できます。終了スクリプトを使用してパッケージを追加すると時間を節約できるだけでなく、サイトのさまざまなシステムにパッケージおよびパッチをインストールする上での整合性を維持できます。
終了スクリプト内で pkgadd(1M) コマンドや patchadd(1M) コマンドを使用するときは、-R オプションを使って、/a をルートパスとして指定します。
#!/bin/sh BASE=/a MNT=/a/mnt ADMIN_FILE=/a/tmp/admin mkdir ${MNT} mount -f nfs sherlock:/export/package ${MNT} cat >${ADMIN_FILE} <<DONT_ASK mail=root instance=overwrite partial=nocheck runlevel=nocheck idepend=nocheck rdepend=nocheck space=ask setuid=nocheck conflict=nocheck action=nocheck basedir=default DONT_ASK /usr/sbin/pkgadd -a ${ADMIN_FILE} -d ${MNT} -R ${BASE} SUNWxyz umount ${MNT} rmdir ${MNT} |
次に、この例のいくつかのコマンドの説明を示します。
次のコマンドは、インストールするパッケージを含むサーバー上にディレクトリをマウントします。
mount -f nfs sherlock:/export/package ${MNT} |
次のコマンドは、一時的なパッケージ管理ファイル admin を作成し、パッケージのインストール時に pkgadd(1M) コマンドがチェックも質問の表示も行わないようにします。この一時的なパッケージ管理ファイルは、パッケージの追加時に自動インストールを実施するために使用してください。
cat >${ADMIN_FILE} <<DONT_ASK |
次の pkgadd コマンドは、-a オプション (パッケージ管理ファイルを指定) と -R オプション (ルートパスを指定)を使用してパッケージを追加します。
/usr/sbin/pkgadd -a ${ADMIN_FILE} -d ${MNT} -R ${BASE} SUNWxyz |
#!/bin/sh ######## # # USER-CONFIGURABLE OPTIONS # ######## # The location of the patches to add to the system after it's installed. # The OS rev (5.x) and the architecture (`mach`) will be added to the # root. For example, /foo on a 8 SPARC would turn into /foo/5.8/sparc LUPATCHHOST=ins3525-svr LUPATCHPATHROOT=/export/solaris/patchdb ######### # # NO USER-SERVICEABLE PARTS PAST THIS POINT # ######### BASEDIR=/a # Figure out the source and target OS versions echo Determining OS revisions... SRCREV=`uname -r` echo Source $SRCREV LUPATCHPATH=$LUPATCHPATHROOT/$SRCREV/`mach` # # Add the patches needed # echo Adding OS patches mount $LUPATCHHOST:$LUPATCHPATH /mnt >/dev/null 2>&1 if [ $? = 0 ] ; then for patch in `cat /mnt/*Recommended/patch_order` ; do (cd /mnt/*Recommended/$patch ; echo yes | patchadd -u -d -R $BASEDIR .) done cd /tmp umount /mnt else echo "No patches found" if |
以前は終了スクリプト環境では、pkgadd コマンドや patchadd コマンドとともに chroot(1M) コマンドが使用されていました。まれに、一部のパッケージやパッチで -R オプションが正しく動作しないことがあります。chroot コマンドを実行する前には、/a ルートパスにダミーの /etc/mnttab ファイルを作成する必要があります。
ダミーの /etc/mnttab ファイルを作成するには、終了スクリプトに次の行を追加します。
cp /etc/mnttab /a/etc/mnttab
終了スクリプトでは、すでにシステムにインストールされたファイルをカスタマイズすることもできます。たとえば、例 4–5 の終了スクリプトは、ルート (/) ディレクトリの .cshrc ファイルに情報を追加することによってルート環境をカスタマイズします。
#!/bin/sh # # Customize root's environment # echo "***adding customizations in /.cshrc" test -f a/.cshrc || { cat >> a/.cshrc <<EOF set history=100 savehist=200 filec ignoreeof prompt="\$user@`uname -n`> " alias cp cp -i alias mv mv -i alias rm rm -i alias ls ls -FC alias h history alias c clear unset autologout EOF } |
Solaris ソフトウェアのシステムへのインストールが完了すると、システムは再起動します。ブートプロセス終了前に、システムは root パスワードを入力するように求めてきます。パスワードを入力するまで、システムはブート処理を終了できません。
set_root_pw という終了スクリプトが、auto_install_sample ディレクトリに保存されています。この終了スクリプトは、プロンプトを表示することなく root パスワードを自動的に設定する方法を示します。set_root_pw については、例 4–6 を参照してください。
システムの root パスワードを終了スクリプトで設定した場合、ユーザーが、終了スクリプト内にある暗号化されたパスワードからルートのパスワードを発見しようと試みる可能性があります。ユーザーに root パスワードを解読されないよう、対策を講じてください。
#!/bin/sh # # @(#)set_root_pw 1.4 93/12/23 SMI # # This is an example Bourne shell script to be run after installation. # It sets the system's root password to the entry defined in PASSWD. # The encrypted password is obtained from an existing root password entry # in /etc/shadow from an installed machine. echo "setting password for root" # set the root password PASSWD=dKO5IBkSF42lw #create a temporary input file cp /a/etc/shadow /a/etc/shadow.orig mv /a/etc/shadow /a/etc/shadow.orig nawk -F: '{ if ( $1 == "root" ) printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,passwd,$3,$4,$5,$6,$7,$8,$9 else printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9 }' passwd="$PASSWD" /a/etc/shadow.orig > /a/etc/shadow #remove the temporary file rm -f /a/etc/shadow.orig # set the flag so sysidroot won't prompt for the root password sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE} > /tmp/state.$$ mv /tmp/state.$$ ${SI_SYS_STATE} |
次に、この例のいくつかのコマンドの説明を示します。
次のコマンドは、PASSWD 変数に、システムの /etc/shadow ファイルの既存のエントリから取得した暗号化された root パスワードを設定します。
#create a temporary input file |
次のコマンドは、/a/etc/shadow の一時入力ファイルを作成します。
cp /a/etc/shadow /a/etc/shadow.orig |
次のコマンドは、$PASSWD をパスワードフィールドとして使用して、新しくインストールしたシステム用の /etc/shadow ファイルにある root エントリを変更します。
if ( $1 == "root" ) |
次のコマンドは、一時的な /a/etc/shadow ファイルを削除します。
rm -f /a/etc/shadow.orig |
次のコマンドは、状態ファイルのエントリを 0 から 1 へ変更します。これによりユーザーは root パスワードの入力を求められません。この状態ファイルには、SI_SYS_STATE 変数 (現在の値は /a/etc/.sysIDtool.state) を使用してアクセスします。この値の変更によってスクリプトで問題が発生することを防ぐには、必ず $SI_SYS_STATE を使用してこのファイルを参照してください。ここに示されている sed コマンドでは、0 の後ろと 1 の後ろにタブ文字が入っています。
sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE} > /tmp/state.$$ |
終了スクリプトを使用すると、Solaris OS のインストールに続いてさらにソフトウェアをインストールできます。Solaris インストールプログラムは、インストール中に情報を入力するプロンプトを表示します。自動インストールを行うには、-nodisplay オプションまたは -noconsole オプションを指定して Solaris インストールプログラムを実行します。
表 4–1 Solaris インストールオプション
オプション |
説明 |
---|---|
-nodisplay |
GUI を使用せずにインストーラを実行します。-locales オプションを用いてインストール条件を変更した場合を除き、デフォルトの設定に従って製品がインストールされます。 |
-noconsole |
対話形式のテキストコンソールデバイスを介さずにインストールを実行します。UNIX スクリプトで -nodisplay と共に使用すると便利です。 |
詳細については、installer(1M) のマニュアルページを参照してください。
add_install_client コマンドを使用してカスタム JumpStart 構成ファイルの場所を指定する代わりに、システムのブート時に構成ファイルの場所を指定することができます。ただし、指定できるファイル名は 1 つだけです。したがって、すべてのカスタム JumpStart 構成ファイルを 1 つのファイルに圧縮する必要があります。
SPARC システムの場合、boot コマンドにファイルの場所を指定します
x86 システムの場合、GRUB メニューの GRUB エントリを編集してファイルの場所を指定します
圧縮された構成ファイルの形式は、次のいずれかにしてください。
tar
compress で圧縮された tar
zip
bzip で圧縮された tar
プロファイルサーバー上の JumpStart ディレクトリに移動します。
# cd jumpstart_dir_path |
圧縮ツールを使って、すべてのカスタム JumpStart 構成ファイルを 1 つのファイルに圧縮します。
圧縮構成ファイルに相対パスを含めないでください。カスタム JumpStart 構成ファイルは、圧縮されたファイルと同じディレクトリに置かれている必要があります。
圧縮された構成ファイルには、次のファイルが含まれている必要があります。
プロファイル
rules
rules.ok
圧縮された構成ファイルに、さらに sysidcfg ファイルを入れることもできます。
圧縮された構成ファイルを NFS サーバー、HTTP サーバー、またはローカルハードディスク上に保存します。
次の例は、tar コマンドを使って、圧縮された構成ファイルを config.tar という名前で作成します。カスタム JumpStart 構成ファイルはすべて /jumpstart ディレクトリにあります。
# cd /jumpstart # tar -cvf config.tar * a profile 1K a rules 1K a rules.ok 1K a sysidcfg 1K |
この節では、単一ディスク構成ファイルおよび複数ディスク構成ファイルの作成方法を説明します。ディスク構成ファイルを作成すると、単一のシステムから pfinstall(1M) を使用して、異なるディスク構成に対してプロファイルをテストできます。
スーパーユーザーになるか、同等の役割になります。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
prtvtoc(1M) コマンドの出力をファイルにリダイレクトして、単一ディスク構成ファイルを作成します。
# prtvtoc /dev/rdsk/device_name >disk_config_file |
システムのディスクのデバイス名。device_name は、cwtxdys2 または cxdys2 の形式で指定する必要があります。
ディスク構成ファイルの名前。
Solaris ソフトウェアのインストールのテストを、複数ディスク上で実行するかどうか決定します。
実行しない場合は、ここで終了です。
実行する場合は、各ディスク構成ファイルを結合し、その出力を新しいファイルに保存します。
# cat disk_file1 disk_file2 >multi_disk_config |
新しいファイルは、次に示すように複数ディスク構成ファイルになります。
# cat 104_disk2 104_disk3 104_disk5 >multi_disk_test |
前の手順で作成した複数ディスク構成ファイル内で、ディスクデバイス名のターゲット番号がそれぞれ固有であるかどうか調べます。
固有である場合は、ここで終了です。
固有でない場合は、テキストエディタでファイルを開き、ターゲット番号を固有のものにします。
たとえば、次に示すように、異なるディスクデバイス名について同じターゲット番号 (t0) がファイルに含まれているとします。
* /dev/rdsk/c0t0d0s2 partition map ... * /dev/rdsk/c0t0d0s2 partition map |
この場合は次のように、2 番目のターゲット番号を t2 に設定します。
* /dev/rdsk/c0t0d0s2 partition map ... * /dev/rdsk/c0t2d0s2 partition map |
次の例では、104M バイトのディスクを持つ SPARC 搭載システムで、単一ディスク構成ファイル 104_test を作成します。
prtvtoc コマンドの出力を 104_test という単一ディスク構成ファイルに保存します。
# prtvtoc /dev/rdsk/c0t3d0s2 >104_test |
104_test ファイルは、次のようになります。
* /dev/rdsk/c0t3d0s2 partition map * * Dimensions: * 512 bytes/sector * 72 sectors/track * 14 tracks/cylinder * 1008 sectors/cylinder * 2038 cylinders* 2036 accessible cylinders * Flags: * 1: unmountable * 10: read-only * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 1 2 00 0 164304 164303 / 2 5 00 0 2052288 2052287 3 0 00 164304 823536 987839 /disk2/b298 5 0 00 987840 614880 1602719 /install/298/sparc/work 7 0 00 1602720 449568 2052287 /space |
これで SPARC システム用のディスク構成ファイルの作成が終了しました。ディスク構成ファイルを使ってプロファイルをテストする方法については、「プロファイルのテスト」を参照してください。
スーパーユーザーになるか、同等の役割になります。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
fdisk(1M) コマンドの出力をファイルに保存して、単一ディスク構成ファイルを部分的に作成します。
# fdisk -R -W disk_config_file -h /dev/rdsk/device_name |
ディスク構成ファイルの名前。
ディスク全体の fdisk レイアウトのデバイス名。device_name は、cwtxdys0 または cxdys0 の形式で指定する必要があります。
prtvtoc(1M) コマンドの出力をディスク構成ファイルの末尾に書き込みます。
# prtvtoc /dev/rdsk/device_name >>disk_config |
システムのディスクのデバイス名。device_name は、cwtxdys2 または cxdys2 の形式で指定する必要があります。
ディスク構成ファイルの名前。
Solaris ソフトウェアのインストールのテストを、複数ディスク上で実行するかどうか決定します。
実行しない場合は、ここで終了です。
実行する場合は、各単一ディスク構成ファイルを結合し、その出力を新しいファイルに保存します。
# cat disk_file1 disk_file2 >multi_disk_config |
新しいファイルは、次に示すように複数ディスク構成ファイルになります。
# cat 104_disk2 104_disk3 104_disk5 >multi_disk_test |
前の手順で作成した複数ディスク構成ファイル内で、ディスクデバイス名のターゲット番号がそれぞれ固有であるかどうか調べます。
固有である場合は、ここで終了です。
固有でない場合は、テキストエディタでファイルを開き、ターゲット番号を固有のものにします。
たとえば、次に示すように、異なるディスクデバイス名について同じターゲット番号 (t0) がファイルに含まれているとします。
* /dev/rdsk/c0t0d0s2 partition map ... * /dev/rdsk/c0t0d0s2 partition map |
この場合は次のように、2 番目のターゲット番号を t2 に設定します。
* /dev/rdsk/c0t0d0s2 partition map ... * /dev/rdsk/c0t2d0s2 partition map |
次の例では、500M バイトのディスクを持つ x86 システムで、単一ディスク構成ファイル 500_test を作成します。
最初に、fdisk コマンドの出力を 500_test という名前のファイルに保存します。
# fdisk -R -W 500_test -h /dev/rdsk/c0t0d0p0 |
この 500_test ファイルの内容は次のとおりです。
* /dev/rdsk/c0t0d0p0 default fdisk table * Dimensions: * 512 bytes/sector * 94 sectors/track * 15 tracks/cylinder * 1455 cylinders * * HBA Dimensions: * 512 bytes/sector * 94 sectors/track * 15 tracks/cylinder * 1455 cylinders * * systid: * 1: DOSOS12 * 2: PCIXOS * 4: DOSOS16 * 5: EXTDOS * 6: DOSBIG * 86: DOSDATA * 98: OTHEROS * 99: UNIXOS * 130: SUNIXOS * * Id Act Bhead Bsect Bcyl Ehead Esect Ecyl Rsect Numsect 130 128 44 3 0 46 30 1001 1410 2050140 |
次に、prtvtoc コマンドの出力を 500_test ファイルに追加します。
# prtvtoc /dev/rdsk/c0t0d0s2 >>500_test |
これで 500_test ファイルは、完全なディスク構成ファイルになりました。
* /dev/rdsk/c0t0d0p0 default fdisk table * Dimensions: * 512 bytes/sector * 94 sectors/track * 15 tracks/cylinder * 1455 cylinders * * HBA Dimensions: * 512 bytes/sector * 94 sectors/track * 15 tracks/cylinder * 1455 cylinders * * systid: * 1: DOSOS12 * 2: PCIXOS * 4: DOSOS16 * 5: EXTDOS * 6: DOSBIG * 86: DOSDATA * 98: OTHEROS * 99: UNIXOS * 130: SUNIXOS * * Id Act Bhead Bsect Bcyl Ehead Esec Ecyl Rsect Numsect 130 128 44 3 0 46 30 1001 1410 2050140 * /dev/rdsk/c0t0d0s2 partition map * * Dimensions: * 512 bytes/sector * 94 sectors/track * 15 tracks/cylinder * 1110 sectors/cylinder * 1454 cylinders * 1452 accessible cylinders * * Flags: * 1: unmountable * 10: read-only * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 2 5 01 1410 2045910 2047319 7 6 00 4230 2043090 2047319 /space 8 1 01 0 1410 1409 9 9 01 1410 2820 422987 |
これで x86 システム用のディスク構成ファイルの作成が終了しました。ディスク構成ファイルを使ってプロファイルをテストする方法については、「プロファイルのテスト」を参照してください。
開始スクリプトと終了スクリプトを使用すると、独自のインストールプログラムにより Solaris ソフトウェアをインストールできます。
プロファイルフィールドにマイナス記号 (-) を指定すると、プロファイルと Solaris インストールプログラムの代わりに、開始スクリプトと終了スクリプトが、Solaris ソフトウェアのインストール方法を制御するようになります。
たとえば次のルールに一致した場合は、開始スクリプト x_install.beg と終了スクリプト x_install.fin が、clover という名前のシステムに Solaris ソフトウェアをインストールします。
hostname clover x_install.beg - x_install.fin |