DNF History: Fedoraをシステム崩壊の不安なくいじくり回せる「タイムマシン」

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

テスト用のパッケージをいくつかインストールした直後に、システムが競合し始めた経験はありませんか?さらに悪いことに、sudo dnf upgradeを実行した後、突然NVIDIAドライバーが動かなくなり、画面が真っ暗になってしまうこともあります。焦ってOSを再インストールしたり、手動でパッケージを一つずつ削除したりする代わりに、ベテランのFedoraユーザーは「時間を巻き戻す」ための非常に便利なツール、dnf historyを活用します。

Fedoraをメインの仕事用マシンとして2年間使ってきた中で、パッケージの更新が早いことは大きなメリットだと感じていますが、時としてパッケージの更新がワークフローを中断させてしまうことがあります。そんな時、dnf historyはわずか数行の簡単なコマンドでシステムを安定した状態に戻してくれる救世主となります。

30秒でシステムを救う方法

直前に行った操作を至急取り消したい場合は、以下の3つのステップに従ってください:

  1. 最近の操作を一覧表示する:
    sudo dnf history

    リストが表示されます。一番左側のID列を見て、処理したいセッションを特定します。

  2. そのIDが何を行ったかを確認する(例:ID 42):
    sudo dnf history info 42

    DNFはその回に追加または削除された詳細なパッケージリストを表示します。

  3. 即座にアンドゥ(Undo)を実行する:
    sudo dnf history undo 42

    システムは自動的に計算を行い、ステップ42で追加されたものを削除するか、削除されたものを復元します。

dnf historyの仕組み

DNFは単にファイルをインストールするだけではありません。システムを変更するコマンドを実行するたびに、DNFはTransaction(トランザクション)を作成します。依存関係(dependencies)のリストから実行時間に至るまで、あらゆる詳細は/var/lib/dnf/history.sqliteにあるSQLiteデータベースに保存されます。

Action列の記号を読み解く

sudo dnf history listを入力した際、何が起きたかを知るために以下の略称に注目してください:

  • I (Install): 新規インストール。
  • U (Update): 新バージョンへのアップグレード。
  • E (Erase): マシンから削除。
  • D (Downgrade): 旧バージョンへのダウングレード。

補足:Actionの横に*マークが付いている場合、そのトランザクションが途中で中断されたことを意味します(電源断やCtrl+Cによる強制終了など)。

UndoとRollbackの違い:正しい使い分け方

これら2つのコマンドは混同されがちですが、システムへの影響の仕方は全く異なります。

1. dnf history undo

このコマンドは特定の1つのトランザクションのみに焦点を当てます。例えばID 20でhttpdをインストールした場合、undo 20はそれを削除します。ID 21や22でインストールしたものには一切干渉しません。

2. dnf history rollback

これこそが真の意味で「過去に戻る」コマンドです。rollback 15を使用すると、システムはID 15時点の状態に正確に戻るよう、すべてを削除・再インストールします。ID 16以降のすべての変更は破棄されます。

ヒント:キャッシュが完全にクリアされていたり、古いリポジトリが利用できなくなっている場合、ロールバックは失敗することがあります。

上級者向けの履歴管理テクニック

長すぎる履歴リストに惑わされないようにしましょう。以下のフィルタリング方法を試してみてください:

特定のパッケージの履歴を追跡する:nginxがいつ更新されたか知りたい場合は、次のように入力します:

sudo dnf history list nginx

自分で直接インストールしたパッケージのみを表示する:数千もの雑多な依存パッケージを表示する代わりに、自分が能動的に入力してインストールしたパッケージのみを表示します:

sudo dnf history userinstalled

Fedoraの「現場」から得た実践的なアドバイス

dnf historyを最大限に活用するために、いくつかのアドバイスがあります:

  1. 過度なキャッシュ削除を控える:sudo dnf clean allを乱用しないでください。キャッシュ内のメタデータは、DNFがundoを成功させるために非常に重要です。ディスク容量に余裕があるなら、予備としてキャッシュを保持しておきましょう。
  2. 実行前に詳細を確認する:undoを実行する前に、必ずdnf history infoを確認してください。もしそのトランザクションがkernelglibcに関連している場合は、システムが起動しなくなる可能性があるため、細心の注意が必要です。
  3. サードパーティ製リポジトリに注意:RPM Fusionなどからアプリをインストールした後にそのリポジトリを無効化すると、undoコマンドはエラーになります。関連するリポジトリが有効であることを確認してください。

dnf historyをマスターすれば、Fedoraで新しいツールを試す際の自信が格段に高まります。常に安全な復旧手段があることを知っていれば、コマンドを打つのを恐れる必要はありません。このテクニックが、あなたのシステム管理をより快適にすることを願っています。

Share: