Ubuntuで定期的に行う sudo apt update && sudo apt upgrade。
システムを最新状態に保つために不可欠な作業ですが、稀に以下のようなトラブルが発生することがあります。
-
「アップデート後、特定のアプリが起動しなくなった……」
-
「依存ライブラリのバージョンが上がり、開発環境が壊れた!」
-
「直前に更新したパッケージだけを前のバージョンに戻したい」
実は、RedHat系の dnf history undo のような「1コマンドで一括ロールバックする機能」は標準の apt にはありません。
しかし、更新履歴の調べ方や特定バージョンへのダウングレード(個別にダウングレード)、キャッシュや外部パッケージを使った復元方法を知っておけば冷静に対処可能です。
今回は、実用上の注意点(リポジトリの仕様やキャッシュの注意点)も含めて、Ubuntuでパッケージ更新を取り消す具体的な手順を分かりやすく解説します!
1. パッケージ更新の履歴を確認する
まずは「何がいつ、どのバージョンからどのバージョンへ更新されたか」を特定しましょう。
方法①:ログファイルを直接確認する(一番おすすめ)
apt の操作履歴は /var/log/apt/history.log にすべて記録されています。
直近の更新履歴を確認するには、以下のコマンドを実行します。
cat /var/log/apt/history.log
過去のログ(圧縮されたログファイル)も含めて検索したい場合は、zgrep を使います。
zgrep -A 5 "Start-Date" /var/log/apt/history.log*
出力例:
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 を確認します。
grep "upgrade " /var/log/dpkg.log
2. 特定のパッケージを【個別】にロールバックする方法
不具合の原因となっているパッケージが特定できている場合は、過去のバージョンを指定してダウングレードします。
ステップ①:リポジトリ内に旧バージョンがあるか確認する
まずは、リポジトリに古いバージョンが残っているか調べます。
apt-cache policy <パッケージ名>
出力例(curlの場合):
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 に目的の旧バージョンが表示されていれば、バージョンを指定してインストールを実行します。
sudo apt install curl=7.81.0-1
💡【重要】リポジトリに旧バージョンがない場合
Ubuntuの公式リポジトリでは、セキュリティ更新などで新しいバージョンが出ると、古いバージョンがリポジトリ上から削除されることがよくあります。
もし
apt-cache policyで旧バージョンが表示されない場合は、以下の方法で.debファイルを直接入手してインストールします。
packages.ubuntu.com や Launchpad で対象パッケージの旧版
.debファイルを検索・ダウンロード
sudo dpkg -i <ダウンロードしたファイル名.deb>でインストール依存関係のエラーが出た場合は
sudo apt --fix-broken installを実行
ステップ③:再び自動更新されないように固定する
ダウングレードしたままだと、次回の sudo apt upgrade で再び最新版に書き換わってしまいます。一時的に更新をストップ(ホールド)しておきましょう。
# パッケージの自動更新を固定
sudo apt-mark hold curl
# (問題を解決して元に戻したいとき)固定解除
sudo apt-mark unhold curl
3. 直前の更新を【まとめて】ロールバックする方法
apt upgrade で複数のパッケージが一度に更新され、それらをまとめて元に戻したい場合の作業手順です。
4. 今後のトラブルを防ぐ!安全な運用のポイント
Linuxでの手動ダウングレードは依存関係の不整合を起こしやすいため、「アップデート前の予防策」を講じておくのが最も安全です。
-
Timeshift(スナップショットツール)を導入しておく-
GUIで簡単にOS全体の復元ポイント(スナップショット)を作成できるツールです。
-
apt upgradeの前にスナップショットを作成しておけば、万が一不具合が起きてもボタン一つで完全に元の状態へ巻き戻せます。
-
-
仮想マシンやクラウドなら事前スナップショットを徹底する
-
Proxmox、VMware、AWS(EBSスナップショット)などを使用している場合は、
apt upgrade実行直前にスナップショットを撮る習慣をつけましょう。
-
-
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 などでバックアップ環境を整えておくことをおすすめします!
