名前 | 形式 | 機能説明 | オプション | オペランド | キーストアの場所 | キーストアおよび証明書の形式 | 使用例 | 終了ステータス | 属性 | 診断 | 関連項目 | 注意事項
patchadd は、Solaris 2.x オペレーティング環境、および Solaris 2.x と互換性がある、2.x 以降の Solaris オペレーティング環境 (Solaris 9 など) を稼動しているシステムにパッチパッケージを適用します。patchadd は、Solaris 1.x システム用のパッチを適用するためには使用できません。patchadd を実行するには、スーパーユーザーになる必要があります。
patchadd コマンドには、次の使用方法があります。
1 つめの形式は、1 つまたは複数のパッチを、1 つのシステム、クライアント、サービス、またはネットインストールイメージの miniroot にインストールします。
2 つめの形式は、>クライアント、サービス、またはネットインストールイメージの miniroot にインストールされたパッチを表示します。
以下のオプションを指定できます。
パッチのバックアウト ( 削除) 時に利用されるデータ (バックアウトデータ) を、パッケージデータベース以外のディレクトリに保存します。backout_dir は絶対パス名で指定してください。
パッチが適用されるファイルのバックアップを作成しません。このオプションを指定すると、適用されたパッチを後で削除 (バックアウト) することはできません。
各パッチ内に見つかったデジタル署名を検証するのに、認証局の信頼された証明書を入手するための場所を keystore で指定します。キーストアが指定されていない場合、デフォルトのキーストアの場所で信頼された有効な証明書を探します。 詳細は、pkgadd(1M) の キーストアの場所 を参照してください。
署名を無視してその検証を行いません。これは、パッチの内容が既知で信頼されている場合にのみ使用するべきです。本来、Solaris 8 のように、パッチ署名を検証する機能がないシステムにパッチを適用するためのオプションです。
2 つめの形式で使用され、現在適用されているパッチのリストを表示します。
必要に応じて、-k で指定したキーストアを復号化するのに使用するパスワードを指定します。このオプションの引数の書式について詳細は、pkgadd(1M) の パスフレーズの引数 を参照してください。
パッチ適用前にファイルを検証せずに、パッチを無条件に適用します。パッチの適用によって変更されるファイルがある場合でも、パッチを適用します。
パッケージをダウンロードする場合に使用する HTTP[S] プロキシを指定します。プロキシの書式は host:port で、ここで host は HTTP[S] プロキシのホスト名、port はプロキシに関連するポート番号です。このスイッチは、プロキシを指定するほかのすべての方法より優先します。デフォルトのプロキシを指定する代わりの方法について詳細は、pkgadd(1M) の 環境 を参照してください。
次のオペランドがサポートされています。
patchadd は、パッチを抽出するために、ソースを指定する必要があります。次のソースおよび構文が受け入れられます。
patch_id の絶対パス名または署名付きパッチを指す URI。/var/sadm/spool/patch/104945-02 は patch の一例です。https://syrinx.eng:8887/patches/104945-02 は、署名付きパッチを指す URI の一例です。
インストールするパッチをディレクトリの場所または URL、およびパッチ番号で指定します。
ディレクトリの場所または URL、およびパッチ番号を使用するためには、patch_dir をスプールされるパッチを含むディレクトリの絶対パス名で指定します。スプールされたパッチを含むサーバー名およびパス名を URL で指定します。該当するパッチのパッチ番号は patch_id で指定します。複数の patch_id を指定することが推奨されます。patch_id は該当するパッチのパッチ番号です。104945-02 は patch_id の一例です。
インストールするパッチをディレクトリの場所または URL、およびパッチリストを含むファイル名で指定します。
ディレクトリの場所または URL、およびパッチリストを含むファイル名を使用する場合、patch_dir はスプールされるパッチを含むディレクトリの絶対パス名を指定します。URL は、スプールされるパッチを含むサーバー名およびパス名を指定します。patch_list は、インストールするパッチを含むファイル名を指定します。
デフォルトでは、patchadd は指定した宛先にパッチを適用します。宛先が指定されていない場合、現在のシステム (そのルートファイルシステムが / にマウントされているシステム) がパッチの宛先と仮定されます。次の方法で宛先を指定することもできます。
setup_install_server で作成されたネットインストールイメージ上のミニルート上に置かれたファイルにパッチを適用します。net_install_image にはSolaris 8 またはそれと互換性のあるバージョンの起動ディレクトリへの絶対パス名を指定します。 使用例 を参照してください。
ミニルートへのインストールに推奨されているパッチをインストールする場合のみ、-C オプションを使用してください。ミニルートへのインストールが推奨されているパッチはに、通常、パッケージコマンド、Sun 製インストールツールおよびパッチインストールツールのようなインストール関連のパッチが含まれています。 ミニルートにパッチをたくさん適用しすぎると、ミニルートが大きくなり、Solaris のネットインストール時にメモりが足りなくなる可能性があります。ミニルートが大きくなりすぎないように、 -B オプションと -C オプションをいっしょに使用してください。上記の -B オプションの説明を参照してください。
patchadd で生成されたすべてのパッチファイルを client_root_path の下のディレクトリに配置します。client_root_path は、サーバーから見たクライアントのブート可能なルートを含むディレクトリです。 client_root_path にはディレクトリツリーの先頭の絶対パスを指定します。この下に patchadd で生成されたすべてのパッチファイルがあります。-R オプションは -S オプションといっしょに指定することはできません。注意事項 を参照してください。
代わりとなるサービスを指定します (たとえば、Solaris_8)。このサービスはサーバーモデルおよびクライアントモデルの一部で、サーバーのコンソールからのみ使用可能です。サーバーには、ホストマネージャで作成された共有の /usr ファイルシステムを含むことができます。これらのサービス領域は、それらが扱うクライアントに使用可能にすることができます。-S オプションは -R オプションといっしょに指定することはできません。注意事項 を参照してください。
詳細は、pkgadd(1M) の「キーストアの場所」を参照してください。
詳細は、pkgadd(1M) 「キーストアおよび証明書の形式」を参照してください。
以下に示す例では、/usr/sbin ディレクトリのコマンドを使用しているものとします。
スタンドアロンマシンに 1 つのパッチをインストールする例を示します。
example# patchadd /var/spool/patch/104945-02 |
サーバーのコンソールからクライアントに 1 つのパッチをインストールする例を示します。
example# patchadd -R /export/root/client1 /var/spool/patch/104945-02 |
サーバーのコンソールからサービスに 1 つのパッチをインストールする例を示します。
example# patchadd -S Solaris_8 /var/spool/patch/104945-02 |
1 回の patchadd の実行で複数のパッチをインストールする例を示します。
example# patchadd -M /var/spool/patch 104945-02 104946-02 102345-02 |
インストールするパッチのリストが記述されたファイルを指定して、複数のパッチをインストールする例を示します。
example# patchadd -M /var/spool/patch patchlist |
クライアントに複数のパッチをインストールし、パッチのバックアウト時に利用されるデータ (バックアウトデータ) をデフォルト以外のディレクトリに保存する例を示します。
example# patchadd -M /var/spool/patch -R /export/root/client1 -B /export/backoutrepository 104945-02 104946-02 102345-02 |
Solaris 8 およびその互換バージョンのネットインストールイメージにパッチをインストールする例を示します。
example# patchadd -C /export/Solaris_8/Tools/Boot /var/spool/patch/104945-02 |
クライアント上にインストールされているパッチを表示する例を示します。
example# patchadd -R /export/root/client1 -p |
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
使用条件 | SUNWswmt, SUNWcsu |
インタフェースの安定性 |
開発中 |
パッチのインストール時によく発生する問題、出力されるエラーメッセージ、その対処方法について説明します。
The prepatch script exited with return code retcode. patchadd is terminating. |
パッチに付属している prepatch スクリプトが 0 以外の終了コードで終了しました。prepatch スクリプトのトレースを実行して、prepatch スクリプトが不正な終了コードで終了した原因を調べてください。問題を修正するには、prepatch スクリプトの先頭行に -x オプションを追加して再度 patchadd を実行してください。
The signature on patch patch_id was unable to be verified. patchadd is terminating. |
使用しているキーストアおよびパッチの署名が与えられたのですが、パッチのデジタル署名が検証できませんでした。パッケージの署名を検証するのに必要なトラストアンカーがあるかどうか、またパッケージが勝手に変更されていないかどうか、キーストアを確認してください。
The postpatch script exited with return code retcode. Backing out patch. |
パッチに付属している postpatch スクリプトが 0 以外の終了コードで終了しました。このスクリプトはおもに、パッチパッケージのオブジェクトに対応しないファイルを一掃するため (つまりパッケージの所有権およびアクセス権に問題があるとき) に使用されます。出力された検証エラーをすべて確認し、それぞれについて適切な処置を行なった後、-u オプション付きで再度 patchadd を実行してください。検証エラーを無視してパッチがインストールされます。
Insufficient space in /var/sadm/patch to save old files. (Solaris 2.4 およびそれ以前のシステム) |
パッチ適用前のファイルを保存するための容量が /var/sadm/patch ディレクトリにありません。3 つの対処法があります。(1) -B オプション付きで patchadd を実行して、指定したファイルシステムにバックアウトデータ (パッチのバックアウト時に利用されるデータ) を保存します。(2) 不要なファイルを削除することによってディスク容量を確保します。(3) -d オプション付きで patchadd を実行して、パッチ適用前のファイルを保存しないようにします。
パッチ適用前のファイルを保存しないように選択した場合、後に patchrm を使用してパッチを削除することはできなくなります。以前に適用したパッチの保存領域を削除することによって、システム領域を確保するという方法もあります。後にパッチを削除する可能性はないと判断した場合は、patchadd によって保存されたファイルを削除しても構いません。パッチ patch_id について保存されたファイルを削除するには、次のように実行してください。
cd /var/sadm/patch/patch_id rm -r save/* rm .oldfilessaved |
Insufficient space in /var/sadm/pkg/PKG/save to save old files. (Solaris 2.5 およびそれ以降のシステム) |
/var/sadm/pkg/PKG/save ディレクトリに容量が不足しているため、パッチ適用前のファイルを保存できません。次の 3 つの対処方法があります。(1) -B オプション付きで patchadd を実行して、指定したファイルシステムにバックアウトデータ (パッチのバックアウト時に利用されるデータ) を保存します (1 つ前のメッセージに関する説明を参照してください)。(2) 不要なファイルを削除することによってディスク領域を確保します。(3) -d オプション付きで patchadd を実行して、パッチ適用前のファイルを保存しないようにします。
パッチ適用前のファイルを保存しないように選択した場合、後に patchrm を使用してパッチを削除することはできなくなります。以前に適用したパッチの保存領域を削除することによって、システム領域を確保するという方法もあります。後にパッチを削除する可能性がないと判断した場合は、patchadd によって保存されたファイルを削除しても構いません。patch_id について保存されたファイルを削除するには、次のように実行してください。
cd /var/sadm/pkg/pkgabbrev/save rm -r patch_id |
Save of old files failed. (Solaris 2.4 およびそれ以前のシステム) |
パッチを適用する前に、パッチインストールスクリプトは cpio を使用してパッチ適用前のファイルを保存します。このエラーメッセージは、cpio が失敗したことを示します。このエラーメッセージの前に cpio からの出力が表示されているはずです。cpio の失敗を修正するために適切な処置を行う必要があります。次の 2 つの対処方法があります。 (1) 不要なファイルを削除してディスク領域を確保します。(2) -d オプション付きで patchadd を実行してパッチ適用前のファイルを保存しないようにします。ただし、パッチ適用前のファイルを保存しないように選択した場合、パッチを削除することはできなくなります。
Pkgadd of pkgname package failed with error code code. See /tmp/log.patch_id for reason for failure. |
メッセージ中に示されたパッチパッケージのインストールに失敗しました。patchadd はパッチをバックアウトして、システムをパッチ適用前の状態にします。ログファイルを参照してインストールに失敗した原因を確認し、必要な処置を行なって問題を解決した後、再度パッチを適用してください。
Pkgadd of pkgname package failed with error code code. Will not backout patch...patch re-installation. Warning: The system may be in an unstable state! See /tmp/log.patch_id for reason for failure. |
メッセージ中に示されたパッチパッケージのインストールに失敗しました。patchadd はパッチをバックアウトしません。ログファイルを参照して pkgadd が失敗した原因を確認し、必要な処置を行なって問題を解決してください。その後、patchrm を使用して手動でパッチをバックアウトしてから、再度パッチを適用してください。
patchadd is unable to find the INST_RELEASE file. This file must be present for patchadd to function correctly. |
システムに INST_RELEASE ファイルがありません。このファイルは初期インストール中またはアップグレード中に作成されます。
A previous installation of patch patch_id was invoked that saved files that were to be patched. Since files were saved, you must run this instance of patchadd without the -d option. |
以前に -d オプションを使用しないでパッチがインストールされている場合、パッチを再インストールするときにも -d オプションなしで実行する必要があります。-d オプションを付けずに patchadd を実行してください。
A previous installation of patch patch_id was invoked with the -d option. (i.e. Do not save files that would be patched) Therefore, this invocation of patchadd must also be run with the -d option. |
以前に -d オプションを使用してパッチがインストールされている場合、パッチを再インストールするときにも -d オプションを使用する必要があります。-d オプション付きで patchadd を実行してください。
以下に示すパッチインストール時のメッセージは、「説明・対処方法」で説明しているように必ずしもエラーではありませんが、パッチインストールのログファイルに記録されます。
Package not patched: PKG=SUNxxxx Original package not installed |
メッセージに示されているパッチコンポーネントは、システムにインストールされていないパッケージに対するパッチです。これは必ずしもエラーではありません。1 つのパッチが 1 つのバグを複数のパッケージに対して修正することもあります。
たとえば、オンラインバックアップと fddi パッケージの両方に対する 1 つのバグを修正するパッチを例として考えます。オンラインバックアップはインストールされているけれども fddi パッケージがインストールされていない場合、次のようなメッセージが出力されます。:
Package not patched: PKG=SUNWbf Original package not installed |
システム上に fddi パッケージがインストールされている場合には、このメッセージをエラーとして対処する必要があります。必要な処置を行なってパッケージをインストールし、(パッチによって他のパッケージがインストールされている場合は) パッチをバックアウトし、再度パッチをインストールしてください。
Package not patched: PKG=SUNxxx ARCH=xxxxxxx VERSION=xxxxxxx Architecture mismatch |
メッセージに示されているパッチコンポーネントは、ユーザーが使用しているシステムとは異なるアーキテクチャのパッケージに対するパッチです。これは必ずしもエラーではありません。アーキテクチャ固有のパッケージに対するパッチには、該当する各アーキテクチャごとに 1 つのコンポーネントが含まれている場合もあります。たとえば sun4m アーキテクチャのシステムを使用している場合に SUNWcar パッケージに対するパッチをインストールしようとすると、次のようなメッセージが出力されます。
Package not patched: PKG=SUNWcar ARCH=sparc.sun4c VERSION=11.5.0,REV=2.0.18 Architecture mismatch Package not patched: PKG=SUNWcar ARCH=sparc.sun4u VERSION=11.5.0,REV=2.0.18 Architecture mismatch Package not patched: PKG=SUNWcar ARCH=sparc.sun4e VERSION=11.5.0,REV=2.0.18 Architecture mismatch Package not patched: PKG=SUNWcar ARCH=sparc.sun4 VERSION=11.5.0,REV=2.0.18 Architecture mismatch |
Package not patched: PKG=SUNxxxx ARCH=xxxx VERSION=xxxxxxx Version mismatch |
パッチが適用されるソフトウェアバージョンがシステムにインストールされていません。たとえば Solaris 8 を実行している場合に Solaris 9 に対するパッチをインストールしようとすると、次のようなメッセージが出力されます。
Package not patched: PKG=SUNWcsu ARCH=sparc VERSION=10.0.2 Version mismatch |
Re-installing Patch. |
インストールしようとしているパッチはすでに適用されていますが、追加インストールされるパッケージが少なくとも 1 つパッチに含まれています。たとえば、AnswerBook がインストールされていないシステムに、 OpenWindows と AnswerBook の両方のコンポーネントが含まれているパッチを適用すると、そのパッチの AnswerBook コンポーネント部分は適用されません。後に pkgadd を使って AnswerBook をインストールしてパッチを再度適用すると、そのパッチの AnswerBook コンポーネント部分がシステムに適用されます。
patchadd Interrupted. patchadd is terminating. |
patchadd の実行が中断されました (通常 CTRL-c が押されたため)。patchadd は処理中のファイルを削除し、終了します。
patchadd Interrupted. Backing out Patch... |
patchadd の実行が中断されました (通常 CTRL-c が押されたため)。patchadd は処理中のファイルを削除し、パッチをバックアウトし、終了します。
cpio(1), pkginfo(1), patchrm(1M), pkgadd(1M), pkgchk(1M), pkgrm(1M), smpatch(1M), showrev(1M), attributes(5)
クライアントまたはサーバーにパッチをインストールするには、patchadd を 2 回実行する必要があります。 1 回は -R オプションを付けて実行し、もう 1 回は -S オプションを付けて実行します。これによって、パッチが /usr と / (ルート) パーティションの両方に確実にインストールされます。パッチに /usr と / (ルート) のパッケージが含まれている場合に、上記の方法を実行する必要があります。
patchadd を実行すると、pkgadd が起動され、pkg/install ディレクトリにあるインストールスクリプトを実行します。checkinstall スクリプトは、所有権を install というユーザー名に設定して実行されます。ユーザー名が install に設定されていない場合、pkgadd は checkinstall スクリプトを nobody として実行します。SVR4 ABI には、checkinstall は情報収集を行うスクリプトとしてのみ使用されると記述されています。checkinstall スクリプトのアクセス権を初期設定から変更すると、pkgadd はファイルをオープンして読み取ることができなくなり、次のようなメッセージが出力されてパッチのインストールが異常終了します。
pkgadd: ERROR: checkinstall script did not complete successfully. |
このため、checkinstall スクリプトのアクセス権は変更しないでください。パッチが正しくインストールされたときのパッチインストールログファイルの内容は、patchadd が pkgadd の出力をリダイレクトしたものになります。パッチが正しくインストールされると、pkgadd は次のようなメッセージを出力し、それがログファイルに書き込まれます。
This appears to be an attempt to install the same architecture and version of a package which is already installed. This installation will attempt to overwrite this package. This message does not indicate a failure, it represents the correct behavior by pkgadd when a patch installs correctly. |
このメッセージは処理の失敗を示しているものではありません。パッチが正しくインストールされたときの pkgadd による正しい動作を示しています。
クライアント・サーバーマシンでは、既存のクライアントにまたはクライアントのルートディレクトリ (templates 領域) にパッチパッケージは適用 (インストール) されません。このため、すべてのクライアントマシンにおいて直接 patchadd を使用して、適切な時にクライアントマシンにパッチを適用する必要があります。パッケージユーティリティ (pkgadd, pkgrm, pkgchk) に影響するバグは、patchadd または patchrm の動作に影響する場合があります。patchadd および patchrm は、上記のパッケージユーティリティを使用してパッチパッケージをインストールおよびバックアウトしています。これらのパッケージユーティリティのバグを修正するパッチが提供されているかどうかを確認し、提供されている場合はそのパッチを先に適用してから、他のパッチを適用することをお勧めします。現在提供されている、パッケージユーティリティに対するパッチは、次のとおりです。
104578
104579
106292
106293
名前 | 形式 | 機能説明 | オプション | オペランド | キーストアの場所 | キーストアおよび証明書の形式 | 使用例 | 終了ステータス | 属性 | 診断 | 関連項目 | 注意事項