6.2.6. トランザクション履歴の活用

yum history のコマンドを使用すると、ユーザーは Yum のトランザクションのタイムライン、トランザクションの発生日時、影響を受けたパッケージ数、トランザクション成功の有無、RPM データベースがトランザクション中に変更されたかどうかに関する情報を確認することができます。さらには、このコマンドを使うと、特定のトランザクションを元に戻す/やり直すことが可能です。

トランザクションの一覧表示

最近発生した 20 件のトランザクションの一覧を表示するには、 root として引数なしで yum history を実行するか、シェルプロンプトで以下を入力して下さい:
yum history list
すべてのトランザクションを表示するには、all のキーワードを追加します:
yum history list all
特定の範囲内のトランザクションのみを表示したい場合は、以下の形式でコマンドを使用します:
yum history list start_id..end_id
特定のパッケージに関するトランザクションのみを一覧表示することも可能です。そのためには、パッケージ名か glob 表現を付けてコマンドを実行します:
yum history list glob_expression
例えば、最初の 5 件のトランザクションを示した一覧は以下のようになります。
~]# yum history list 1..5
Loaded plugins: product-id, refresh-packagekit, subscription-manager
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     5 | Jaromir ... <jhradilek>  | 2011-07-29 15:33 | Install        |    1
     4 | Jaromir ... <jhradilek>  | 2011-07-21 15:10 | Install        |    1
     3 | Jaromir ... <jhradilek>  | 2011-07-16 15:27 | I, U           |   73
     2 | System <unset>           | 2011-07-16 15:19 | Update         |    1
     1 | System <unset>           | 2011-07-16 14:38 | Install        | 1106
history list
yum history list コマンドのすべての形式は、以下のカラムで構成される各行を含む表形式出力を生成します。
  • ID — 特定のトランザクションを識別する整数値です。
  • Login user — ユーザー名です。このログインセッションはトランザクションを開始するために使用されました。この情報は、通常 Full Name <username> の形式で表示されます。ユーザーにより発行されなかったトランザクションに関しては (システムの自動更新など)、代わりに System <unset> が使用されます。
  • Date and time — トランザクションが発生した日時です。
  • Action(s)表6.1「Action 欄の指定可能な値」 の説明のとおり、トランザクション中に実行された動作の一覧です。
  • Altered表6.2「Altered 欄の指定可能な値」 の説明のとおり、トランザクションにより影響を受けたパッケージ数、場合によっては追加情報も含まれます。

表6.1 Action 欄の指定可能な値

Action 省略形 詳細
Downgrade D 1 つ以上のパッケージが旧バージョンにダウングレードされました。
Erase E 1 つ以上のパッケージが削除されました。
Install I 1 つ以上の新しいパッケージがインストールされました。
Obsoleting O 1 つ以上のパッケージが廃止として記録されました。
Reinstall R 1 つ以上のパッケージが再インストールされました。
Update U 1 つ以上のパッケージが新しいバージョンに更新されました。

表6.2 Altered 欄の指定可能な値

記号 詳細
< トランザクションが終了する前に、rpmdb データベースが Yum 以外で変更されました。
> トランザクションが終了した後に、rpmdb データベースが Yum 以外で変更されました。
* トランザクションは失敗して終了しました。
# トランザクションは正常に終了しましたが、yum はゼロ以外の終了コードを返しました。
E トランザクションは正常に終了しましたが、エラーまたは警告が表示されました。
P トランザクションは正常に終了しましたが、rpmdb データベースに問題がすでに存在していました。
s トランザクションは正常に終了しましたが、--skip-broken コマンドラインオプションが使用され、特定のパッケージが省略されました。
Yum を使用すると、過去に発生したすべてのトランザクションのサマリを表示することもできます。そのためには、root として以下の形式でコマンドを実行して下さい:
yum history summary
特定の範囲内でのトランザクションのみを表示するには、以下を入力します:
yum history summary start_id..end_id
yum history list コマンドと同様に、パッケージの名前または glob 表現を指定することで、特定のパッケージに関するトランザクションのサマリを表示することも可能です:
yum history summary glob_expression
例えば、上記に表示されたトランザクションの履歴のサマリは以下のようになります:
~]# yum history summary 1..5
Loaded plugins: product-id, refresh-packagekit, subscription-manager
Login user                 | Time                | Action(s)        | Altered 
-------------------------------------------------------------------------------
Jaromir ... <jhradilek>    | Last day            | Install          |        1
Jaromir ... <jhradilek>    | Last week           | Install          |        1
Jaromir ... <jhradilek>    | Last 2 weeks        | I, U             |       73
System <unset>             | Last 2 weeks        | I, U             |     1107
history summary
yum history summary コマンドの全形式は、yum history list の出力に似た、簡略化した表形式出力を生成します。
上記のとおり、yum history list 及び yum history summary とも、トランザクション向けに設定されています。特定のパッケージに関連するトランザクションのみを表示することができますが、パッケージバージョンのような重要な詳細は表示されません。パッケージに関連するトランザクションを一覧表示するには、root で以下のコマンドを実行して下さい:
yum history package-list glob_expression
例えば、subscription-manager 及び関連パッケージの履歴を調べるには、シェルプロンプトで以下を入力します:
~]# yum history package-list subscription-manager\*
Loaded plugins: product-id, refresh-packagekit, subscription-manager
ID     | Action(s)      | Package
-------------------------------------------------------------------------------
     3 | Updated        | subscription-manager-0.95.11-1.el6.x86_64
     3 | Update         |                      0.95.17-1.el6_1.x86_64
     3 | Updated        | subscription-manager-firstboot-0.95.11-1.el6.x86_64
     3 | Update         |                                0.95.17-1.el6_1.x86_64
     3 | Updated        | subscription-manager-gnome-0.95.11-1.el6.x86_64
     3 | Update         |                            0.95.17-1.el6_1.x86_64
     1 | Install        | subscription-manager-0.95.11-1.el6.x86_64
     1 | Install        | subscription-manager-firstboot-0.95.11-1.el6.x86_64
     1 | Install        | subscription-manager-gnome-0.95.11-1.el6.x86_64
history package-list
上記の例では、初期のシステムインストール時に subscription-managersubscription-manager-firstbootsubscription-manager-gnome の 3 パッケージがインストールされました。3 つ目のトランザクションでは、これらの全パッケージはバージョン 0.95.11 から 0.95.17 に更新されました。

トランザクションの検証

1 つのトランザクションのサマリを表示するには、root として以下の形式で yum history summary コマンドを使用します:
yum history summary id
特定のトランザクションを詳しく調べたい場合は、root で以下のコマンドを実行して下さい:
yum history info id
id の引数はオプションです。これを省略する場合は、yum は自動的に最後のトランザクションを使用します。複数のトランザクションを指定する場合は、範囲を指定することもできます:
yum history info start_id..end_id
以下は、2 つのトランザクションに関する出力のサンプルです。それぞれ新しいパッケージを 1 つインストールしています:
~]# yum history info 4..5
Loaded plugins: product-id, refresh-packagekit, subscription-manager
Transaction ID : 4..5
Begin time     : Thu Jul 21 15:10:46 2011
Begin rpmdb    : 1107:0c67c32219c199f92ed8da7572b4c6df64eacd3a
End time       :            15:33:15 2011 (22 minutes)
End rpmdb      : 1109:1171025bd9b6b5f8db30d063598f590f1c1f3242
User           : Jaromir Hradilek <jhradilek>
Return-Code    : Success
Command Line   : install screen
Command Line   : install yum-plugin-fs-snapshot
Transaction performed with:
    Installed     rpm-4.8.0-16.el6.x86_64
    Installed     yum-3.2.29-17.el6.noarch
    Installed     yum-metadata-parser-1.1.2-16.el6.x86_64
Packages Altered:
    Install screen-4.0.3-16.el6.x86_64
    Install yum-plugin-fs-snapshot-1.1.30-6.el6.noarch
history info
また、トランザクション時に使用された設定オプション、特定のパッケージをインストールしたリポジトリ及びその理由などの追加情報も閲覧できます。特定のトランザクションに関して入手可能な追加情報を知りたい場合は、root としてシェルプロンプトで以下を入力して下さい:
yum history addon-info id
yum history info と同様に、id が指定されていない場合は、yum は自動的に最新のトランザクションを使用します。別の方法として、最新のトランザクションを参照するには、last キーワードを使用することもできます:
yum history addon-info last
例えば、前述の例にある最初のトランザクションでは、yum history addon-info コマンドにより以下の出力が生成されます:
~]# yum history addon-info 4
Loaded plugins: product-id, refresh-packagekit, subscription-manager
Transaction ID: 4
Available additional history information:
  config-main
  config-repos
  saved_tx

history addon-info
この例では、3 種類の情報があります。
  • config-main — トランザクション時に使用された Yum のグローバルオプションです。グローバルオプションを変更する方法の詳細については、「[main] オプションの設定」 を参照して下さい。
  • config-repos — 個々の Yum リポジトリ用のオプションです。個々のリポジトリ用のオプションを変更する方法については、「[repository] オプションの設定」 を参照して下さい。
  • saved_tx — 別のマシンでトランザクションを繰り返すために yum load-transaction コマンドにより利用できるデータです (下記参照)。
選択した種類の追加情報を表示するには、root で以下のコマンドを実行して下さい:
yum history addon-info id information

トランザクションを元に戻す/繰り返す方法

トランザクション履歴の確認以外に、yum history コマンドは選択したトランザクションを元に戻す/繰り返す方法を提供します。トランザクションを元に戻すには、root としてシェルプロンプトで以下を入力して下さい:
yum history undo id
特定のトランザクションを繰り返すには、root で以下のコマンドを実行します:
yum history redo id
どちらのコマンドでも last キーワードを使用して、最新のトランザクションを元に戻す/繰り返すことができます。
yum history undo および yum history redo コマンドともトランザクション中に実行された手順を元に戻す/繰り返すだけである点に注意してください。トランザクションにより新しいパッケージがインストールされた場合、yum history undo コマンドはそれをアンインストールします。トランザクションによりパッケージがアンインストールされた場合、このコマンドは再度インストールします。また、このコマンドはすべての更新済みパッケージを以前のバージョンにダウングレードする試行も行います (古いパッケージが引き続き利用可能な場合)。システムを更新前の状態に復旧する必要がある場合は、「プラグインの詳細」 の説明のとおり fs-snapshot プラグインの使用を検討してください。
複数の同一システムを管理する場合、Yum を使用すると、1 つのシステム上でトランザクションを実行して、そのトランザクションの詳細をファイルに格納し、テスト期間の終了後に残りのシステム上で同じトランザクションを繰り返すことが可能です。トランザクションの詳細をファイルに格納するには、root としてシェルプロンプトで以下を入力します:
yum -q history addon-info id saved_tx > file_name
このファイルを目的のシステムにコピーしたら、root で以下のコマンドを使用してトランザクションを繰り返すことができます:
yum load-transaction file_name
ただし、ファイルに格納されている rpmdb バージョンは目的のシステムのバージョンと同一でなければならない点に注意してください。rpmdb のバージョンを調べるには、yum version nogroups コマンドを使用します。

新しいトランザクション履歴の開始

Yum は単一の SQLite データベースファイルにトランザクション履歴を格納します。新しいトランザクションの履歴を開始するには、root で以下のコマンドを実行して下さい:
yum history new
これにより /var/lib/yum/history/ ディレクトリ内に新しい空のデータベースファイルが作成されます。古いトランザクション履歴は保存されますが、新しいデータベースファイルがディレクトリにある限りアクセスすることはできません。