IPS では、インストール済みパッケージが正しくインストールされていることを検証したり、検証の問題を修正したり、インストール済みファイルをそれらがパッケージされた状態に復元したりする操作が提供されています。
pkg fix コマンドと pkg revert コマンドは両方とも、インストール済みパッケージのコンポーネントを再インストールします。次の表に、これら 2 つのコマンドについてのいくつかの類似点と相違点を示します。
|
イメージ内のパッケージのインストールを検証するには、pkg verify コマンドを使用します。関連するパブリッシャーの現在の署名ポリシーが ignore でない場合、各パッケージの署名がポリシーに基づいて検証されます。署名ポリシーが適用されるしくみについては、署名付きパッケージのイメージプロパティーを参照してください。インストール済みパッケージの内容は、独自の内容解析に基づいて検証されるため、ほかのプログラムの場合とは異なる結果が返されることがあります。
パッケージ名を指定しない場合、すべてのインストール済みパッケージが検査されます。-v オプションは、インストール済みパッケージごとに少なくとも 1 行の情報メッセージを提供します。次の例には、出力の少量のサンプルのみが表示されています。pkg/depot パッケージのインストールにエラーがあります。
$ pkg verify -v PACKAGE STATUS pkg://solaris/archiver/gnu-tar OK pkg://solaris/audio/audio-utilities OK pkg://solaris/benchmark/x11perf OK ... pkg://solaris/package/pkg/depot ERROR dir: var/cache/pkg/depot Group: 'pkg5srv (97)' should be 'bin (2)' file: var/log/pkg/depot/access_log editable file has been changed file: var/log/pkg/depot/error_log editable file has been changed ... pkg://solaris/security/sudo OK file: etc/sudoers editable file has been changed ... pkg://solaris/x11/xlock OK pkg://solaris/x11/xmag OK pkg://solaris/x11/xvidtune OK
pkg verify コマンドで報告されたパッケージエラーを修正するには、pkg fix コマンドを使用します。修正がライブイメージで変更できないファイルに影響を与える場合、修正は新しい BE で実行されます。-nv オプションを指定すると、どのような変更が行われるかを確認できます。ブート環境オプションの説明に従って BE オプションを指定することもできます。
pkg verify の出力には、インストールされた sudo パッケージのコンポーネントはパッケージされたコンポーネントと異なるということが表示されますが、これらの相違点は検証エラーとして報告されません。pkg fix は変更を行いません。/etc/sudoers ファイルは置換されません。
$ pkg fix pkg://solaris/security/sudo No repairs for this image.
/etc/sudoers ファイルを削除すると、検証は失敗し、pkg fix によってファイルが置換されます。
$ pkg fix pkg://solaris/security/sudo Verifying: pkg://solaris/security/sudo ERROR file: etc/sudoers Missing: regular file does not exist Created ZFS snapshot: 2014-03-13-22:05:42 Repairing: pkg://solaris/security/sudo Creating Plan (Evaluating mediators): DOWNLOAD PKGS FILES XFER (MB) SPEED Completed 1/1 1/1 0.0/0.0 990B/s PHASE ITEMS Updating modified actions 1/1 Updating package state database Done Updating package cache 0/0 Updating image state Done Creating fast lookup database Done
1 つのファイルをダウンロードし、1 つのアクション (file アクション) を変更したという記述が示すように、欠落したファイルのみが置換されます。その他の sudo パッケージ内容は影響を受けていません。修復を実行する前に、操作によって現在のインストールのスナップショットが保存されています。pkg fix 出力の「Created ZFS snapshot」の行を参照してください。修復は現在のイメージ内で実行されました。
$ zfs list -r rpool/ROOT/s11 NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/s11 16.3G 22.5G 26.1G / rpool/ROOT/s11@2014-03-13-23:52:19 249M - 26.1G -
pkg verify の出力は、インストールされている pkg/depot パッケージ内のディレクトリの所有権にエラーがあることを示しています。pkg fix の出力は、「Verifying」セクションにのみエラーを表示しています。パッケージ化されたコンポーネントとのほかの相違点は表示されません。
$ ls -ld /var/cache/pkg/depot drwxr-xr-x 3 pkg5srv pkg5srv 3 Dec 2 19:47 /var/cache/pkg/depot/ $ pkg fix pkg://solaris/package/pkg/depot Verifying: pkg://solaris/package/pkg/depot ERROR dir: var/cache/pkg/depot Group: 'pkg5srv (97)' should be 'bin (2)' Created ZFS snapshot: 2014-03-13-22:18:52 Repairing: pkg://solaris/package/pkg/depot Creating Plan (Evaluating mediators): PHASE ITEMS Updating modified actions 1/1 Updating package state database Done Updating package cache 0/0 Updating image state Done Creating fast lookup database Done
次の出力は、エラーのみが修正されたことを示します。インストールされたコンポーネントとパッケージ化されたコンポーネントのその他の相違点は、そのまま残っています。
$ ls -ld /var/cache/pkg/depot drwxr-xr-x 3 pkg5srv bin 3 Dec 2 19:47 /var/cache/pkg/depot/ $ pkg verify -v pkg://solaris/package/pkg/depot PACKAGE STATUS pkg://solaris/package/pkg/depot OK file: var/log/pkg/depot/access_log editable file has been changed file: var/log/pkg/depot/error_log editable file has been changed
pkg verify の出力をプログラムで評価するには、--parsable 0 オプションを指定します。--parsable オプションを使用する場合は、-v オプションを使用しないでください。
pkg verify コマンドは、インストール済みパッケージの検証に加えて、インストール済みのディレクトリ、ファイル、およびリンクを検証できます。
次の例では -p オプションを使用して、前のセクションでインストール済みのすべてのパッケージの完全な検証を実行して表示したものと同じ情報を表示します。
$ pkg verify -p var/cache/pkg/depot PACKAGE STATUS pkg://nightly/package/pkg/depot ERROR dir: var/cache/pkg/depot ERROR: Group: 'pkg5srv (97)' should be 'bin (2)'
次の例では、ファイル検証ステータスが OK であるため、-v オプションを追加しないかぎり出力は表示されません。
$ pkg verify -vp etc/sudoers PACKAGE STATUS pkg://nightly/security/sudo OK file: etc/sudoers editable file has been changed
次の例のメッセージは、ファイルがパッケージから提供されていないことを示しています。
$ pkg verify -p etc/resolv.conf PACKAGE STATUS etc/resolv.conf is not found in the image
ファイル /etc/resolv.conf はシステム上に存在しますが、パッケージ化されていません。ファイルには次のコメントが含まれており、ファイルは SMF データから生成されたことを示しています。
# _AUTOGENERATED_FROM_SMF_V1_ # # WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # See resolv.conf(5) for details.
パッケージから提供されたものでないファイルシステムの内容をインストール済みパッケージ検証のレポートに含めるには、--unpackaged オプションを使用します。
$ pkg verify -v --unpackaged
パッケージから提供されたものでないファイルシステムの内容のみレポートするには、--unpackaged-only オプションを使用します。
$ pkg verify --unpackaged-only
ファイルをパッケージ化されたときの状況に復元する場合は、pkg revert コマンドを使用します。ファイルの所有権および保護も復元されます。
![]() | 注意 - 一部の編集可能ファイルを元に戻すと、システムがブート不可になったり、その他の異常動作の原因になったりする可能性があります。重要な編集可能ファイルを元に戻すには、--require-backup-be オプションを使用します。 |
次の例は、パッケージ化されたバージョンとは異なる pkg/depot パッケージからの 2 つのインストール済みファイルの 1 つを指定します。
$ pkg revert -v /var/log/pkg/depot/access_log Packages to fix: 1 Estimated space available: 21.08 GB Estimated space to be consumed: 460.87 MB Create boot environment: No Create backup boot environment: No Rebuild boot archive: No Changed packages: solaris package/pkg/depot 0.5.11,5.11-0.175.2.0.0.33.0:20140217T134751Z DOWNLOAD PKGS FILES XFER (MB) SPEED Completed 1/1 1/1 0.0/0.0 50B/s PHASE ITEMS Updating modified actions 1/1 Updating package state database Done Updating package cache 0/0 Updating image state Done Creating fast lookup database Done
指定されたファイルはパッケージ化されたバージョンで置き換えられました。pkg.depot パッケージのほかのコンポーネントは変更されていません。
次の操作を実行するには、--tagged オプションを使用します。
指定されたタグ名でタグ付けされたすべてのファイルを元に戻します。
指定したタグ名を持つディレクトリの下にあり、指定されたパターンに一致する、パッケージ化されていないファイルまたはディレクトリを削除します。
詳細については、Oracle Solaris 12 でのImage Packaging System を使用したソフトウェアのパッケージ化と配布 の File ActionsおよびOracle Solaris 12 でのImage Packaging System を使用したソフトウェアのパッケージ化と配布 の Directory Actionsの revert-tag 属性の説明を参照してください。
次の例は、タグ名 system:sysconfig-profile でタグ付けされたディレクトリを表示します。sysconfig(8) のマニュアルページに記載されているように、sysconfig unconfigure コマンドに --remove-profiles オプションを指定して使用すると、パッケージ解除されたファイルはこれらのディレクトリから削除されます。
$ pkg contents -H -a revert-tag='system:sysconfig-profile*' '*' etc/svc/profile/enterprise etc/svc/profile/incoming etc/svc/profile/node etc/svc/profile/site etc/svc/profile/sysconfig etc/svc/profile/system
次のコマンドは、タグ名 system:dev-init でタグ付けされたファイルを表示します。これらのファイルはそのシステムに固有の構成を含んでおり、回復用アーカイブに含まれるべきではないため、回復用アーカイブの作成時にこれらのファイルはパッケージ化された状態に戻されます。詳細は、archiveadm(8) のマニュアルページを参照してください。
$ pkg contents -Ha revert-tag='system:dev-init*' '*'
クローンアーカイブの作成時に、次のファイルはパッケージ化された状態に戻されます。前の例で説明されているインスタンス固有の情報に加えて、ログファイルの内容やいくつかの構成ファイルなどの情報も、クローンアーカイブでは元に戻されます。
$ pkg contents -H -a revert-tag='system:dev-init*' -a revert-tag='system:clone*' '*'
次のコマンドは、タグ名 system:dev-init を持つすべてのファイルを元に戻す操作のプレビューを示します。元に戻されるファイルは -v オプションで一覧表示されますが、この例では示されていません。ブートアーカイブが再構築される点に注意してください。--be-name オプションを使用して、わかりやすい名前を持つ新規ブート環境を作成することをお勧めします。
$ pkg revert -nv --tagged system:dev-init Packages to fix: 5 Estimated space available: 852.20 GB Estimated space to be consumed: 470.42 MB Create boot environment: Yes Activate boot environment: Yes Create backup boot environment: No Rebuild boot archive: Yes