Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【Ubuntu】apt update / upgrade の更新履歴を確認し、変更を取り消す(ロールバック)方法

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

Ubuntuで定期的に行う sudo apt update && sudo apt upgrade

システムを最新状態に保つために不可欠な作業ですが、稀に以下のようなトラブルが発生することがあります。

  • 「アップデート後、特定のアプリが起動しなくなった……」

  • 「依存ライブラリのバージョンが上がり、開発環境が壊れた!」

  • 「直前に更新したパッケージだけを前のバージョンに戻したい」

実は、RedHat系の dnf history undo のような「1コマンドで一括ロールバックする機能」は標準の apt にはありません。

しかし、更新履歴の調べ方特定バージョンへのダウングレード(個別にダウングレード)キャッシュや外部パッケージを使った復元方法を知っておけば冷静に対処可能です。

今回は、実用上の注意点(リポジトリの仕様やキャッシュの注意点)も含めて、Ubuntuでパッケージ更新を取り消す具体的な手順を分かりやすく解説します!

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

1. パッケージ更新の履歴を確認する

まずは「何がいつ、どのバージョンからどのバージョンへ更新されたか」を特定しましょう。

方法①:ログファイルを直接確認する(一番おすすめ)

apt の操作履歴は /var/log/apt/history.log にすべて記録されています。

直近の更新履歴を確認するには、以下のコマンドを実行します。

Bash

cat /var/log/apt/history.log

過去のログ(圧縮されたログファイル)も含めて検索したい場合は、zgrep を使います。

Bash

zgrep -A 5 "Start-Date" /var/log/apt/history.log*

出力例:

Plaintext

Start-Date: 2026-08-10  14:30:00
Commandline: apt upgrade
Upgrade: python3:amd64 (3.10.6-1, 3.10.12-1), curl:amd64 (7.81.0-1, 7.81.0-1ubuntu1.15)
End-Date: 2026-08-10  14:30:15

ログ内の Upgrade: の行を見ると、「元のバージョン」と「更新後のバージョン」が (3.10.6-1, 3.10.12-1) のように記録されています。

方法②:dpkgのログから詳細を調べる

より詳細なインストール時の挙動を見たい場合は、/var/log/dpkg.log を確認します。

Bash

grep "upgrade " /var/log/dpkg.log

2. 特定のパッケージを【個別】にロールバックする方法

不具合の原因となっているパッケージが特定できている場合は、過去のバージョンを指定してダウングレードします。

ステップ①:リポジトリ内に旧バージョンがあるか確認する

まずは、リポジトリに古いバージョンが残っているか調べます。

Bash

apt-cache policy <パッケージ名>

出力例(curlの場合):

Plaintext

curl:
  Installed: 7.81.0-1ubuntu1.15
  Candidate: 7.81.0-1ubuntu1.15
  Version table:
 *** 7.81.0-1ubuntu1.15 500
        500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
     7.81.0-1 500
        500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages

ステップ②:バージョンを指定してインストールする

Version table に目的の旧バージョンが表示されていれば、バージョンを指定してインストールを実行します。

Bash

sudo apt install curl=7.81.0-1

💡【重要】リポジトリに旧バージョンがない場合

Ubuntuの公式リポジトリでは、セキュリティ更新などで新しいバージョンが出ると、古いバージョンがリポジトリ上から削除されることがよくあります

もし apt-cache policy で旧バージョンが表示されない場合は、以下の方法で .deb ファイルを直接入手してインストールします。

  1. packages.ubuntu.comLaunchpad で対象パッケージの旧版 .deb ファイルを検索・ダウンロード

  2. sudo dpkg -i <ダウンロードしたファイル名.deb> でインストール

  3. 依存関係のエラーが出た場合は sudo apt --fix-broken install を実行

ステップ③:再び自動更新されないように固定する

ダウングレードしたままだと、次回の sudo apt upgrade で再び最新版に書き換わってしまいます。一時的に更新をストップ(ホールド)しておきましょう。

Bash

# パッケージの自動更新を固定
sudo apt-mark hold curl

# (問題を解決して元に戻したいとき)固定解除
sudo apt-mark unhold curl

3. 直前の更新を【まとめて】ロールバックする方法

apt upgrade で複数のパッケージが一度に更新され、それらをまとめて元に戻したい場合の作業手順です。

1.1. 履歴ログから対象パッケージを確認する:ログから更新前のパッケージ一覧を特定。

/var/log/apt/history.log を開き、直前の apt upgrade で変更されたパッケージ名と更新前のバージョン番号をメモします。

2.2. ローカルキャッシュから旧バージョンの.debを探す:ローカルキャッシュの確認とインストール。

/var/cache/apt/archives/ に以前インストールした際の旧バージョン .deb ファイルが残っている場合は、これらを指定して一括インストール(ダウングレード)できます。

Bash

# キャッシュ内にある旧バージョンの.debファイルを指定して一括適用
sudo dpkg -i /var/cache/apt/archives/curl_7.81.0-1_amd64.deb /var/cache/apt/archives/libcurl4_7.81.0-1_amd64.deb

⚠️ 注意:キャッシュに関する重要な注意点

apt upgrade 時に自動ダウンロードされるのは「最新バージョンの .deb」のみです。

旧バージョンの .deb/var/cache/apt/archives/ に存在するのは、「過去にそのバージョンをダウンロードした履歴があり、かつ apt clean や自動クリーン機能で削除されていない場合」のみです。

キャッシュがない場合は、前述の「Launchpad等から旧版 .deb を個別取得する」か、バックアップからの復元が必要です。

3.3. 依存関係のエラーを修復する:依存関係の整合性を保つ。

ダウングレードによって依存関係の矛盾が生じた場合は、修正コマンドを実行します。

Bash

sudo apt --fix-broken install

4. 今後のトラブルを防ぐ!安全な運用のポイント

Linuxでの手動ダウングレードは依存関係の不整合を起こしやすいため、「アップデート前の予防策」を講じておくのが最も安全です。

  1. Timeshift(スナップショットツール)を導入しておく

    • GUIで簡単にOS全体の復元ポイント(スナップショット)を作成できるツールです。

    • apt upgrade の前にスナップショットを作成しておけば、万が一不具合が起きてもボタン一つで完全に元の状態へ巻き戻せます。

  2. 仮想マシンやクラウドなら事前スナップショットを徹底する

    • Proxmox、VMware、AWS(EBSスナップショット)などを使用している場合は、apt upgrade 実行直前にスナップショットを撮る習慣をつけましょう。

  3. apt-listchanges を入れて変更点を事前に把握する

    • sudo apt install apt-listchanges をインストールしておくと、更新実行時に「具体的に何が変更されるか」のニュースを表示してくれるため、予期せぬ大きな変更に気づきやすくなります。

まとめ

  • 更新履歴の確認: /var/log/apt/history.log をチェック

  • 個別のロールバック: apt-cache policy で確認し sudo apt install <pkg>=<ver>(無ければ Launchpad等から .deb を取得)

  • 勝手な再更新を予防: sudo apt-mark hold <pkg> でバージョン固定

  • まとめてロールバック: /var/cache/apt/archives/ に旧 .deb キャッシュが残っていれば dpkg -i で適用可能

手動でのロールバックは「旧バージョンやキャッシュが残っているか」に左右される部分が大きいため、日頃から Timeshift などでバックアップ環境を整えておくことをおすすめします!

タイトルとURLをコピーしました