Go to main content

Oracle® Solaris 11.4 のシステムの更新およびソフトウェアの追加

印刷ビューの終了

更新: 2018 年 8 月
 
 

インストール済みパッケージの問題の修正

IPS では、インストール済みパッケージが正しくインストールされていることを検証したり、検証の問題を修正したり、インストール済みファイルをそれらがパッケージされた状態に復元したりする操作が提供されています。


注 -  セキュリティーベストプラクティスでは、定期的に pkg verify -v を実行して、パッケージ化されたファイルシステムオブジェクトが危険に変更されていないことを確認することをお勧めします。

pkg fix コマンドと pkg revert コマンドの比較

pkg fix コマンドと pkg revert コマンドは両方とも、インストール済みパッケージのコンポーネントを再インストールします。次の表に、これら 2 つのコマンドについてのいくつかの類似点と相違点を示します。

表 3  pkg fixpkg revert の比較
pkg fix
pkg revert
  • パッケージに対して操作が行われます。パッケージ名に一致する 1 つ以上のパッケージ名またはパターンをオペランドとして指定します。

  • pkg verify で失敗したパッケージについてのみ操作が行われます。

  • pkg verify で報告されたエラーのみ修正します。ほかの内容またはメタデータをパッケージからふたたび提供しません。

  • ファイルに対して操作が行われます。1 つ以上のパッケージ名またはタグ名をオペランドとして指定します。

  • オペランドで識別されたファイルをふたたび提供します。ほかの内容またはメタデータをパッケージからふたたび提供しません。

パッケージの検証と検証エラーの修正

イメージ内のパッケージのインストールを検証するには、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 コマンドを使用します。ファイルの所有権および保護も復元されます。


Caution

注意  -  一部の編集可能ファイルを元に戻すと、システムがブート不可になったり、その他の異常動作の原因になったりする可能性があります。重要な編集可能ファイルを元に戻すには、--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 Actionsrevert-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