結果が気に入らない場合、apt-get upgrade
をした後に最後のアップグレードをロールバックしたり、元に戻したりする方法はUbuntuにありますか?
28 jjclarkson 2009-09-09
Debian パッケージ管理に従って利用可能であれば、aptitude
はすべてのバージョンのパッケージにアクセスできるようになります
5 user28725 2010-02-18
ハルトマンさんのBlogstaticブログに出くわしました。Ubuntu Lucidでアップデートを元に戻す方法
問題のあるアップデートを元に戻すための最初のステップは、それが正確にどのようなアップデートなのかを調べることでした。いくつかのフォーラムを検索した後、更新履歴を見る方法を見つけました。synaptic パッケージマネージャを開く(ターミナルで “sudo synaptic “を実行)。メニューバーから「ファイル -> 履歴」をクリックすると、日付順にソートされたすべてのアップデートが表示されます
残念なことに、今日は20個ほどのアップデートをインストールしていましたが、どれが問題の原因になっているのかわかりませんでした。履歴リストで名前の挙がったパッケージをそれぞれ検索することで、問題が解決して問題のあるアップデートを特定できるまで、数個ずつダウングレードすることができました。これを行うには
検索バーを使って、ダウングレードしたいパッケージを見つけます。探しているものが見つかったら、パッケージをクリックして選択します。メニューバーから「パッケージ -> 強制バージョン」をクリックし、ドロップダウンメニューからパッケージの旧バージョンを選択します。適用」ボタンをクリックしてダウングレードを適用します
5 Manav Brar 2012-06-14
今日、私は Debian システムでこれをしなければなりませんでした。まず、問題のあるアップグレードが発生した時間帯を特定し、アップグレードされたパッケージの新旧バージョン番号を示すログエントリを取得しました
$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1
次に、まだキャッシュされているパッケージファイルをディスク上で見つけようとしました (私にとっては幸いにもオートクリーンを実行していませんでした)
$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root 28820 Dec 18 2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar 3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb 7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root 983174 Mar 3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
なぜか古い ethtool のパッケージが入っていないようだ。それでも古いパッケージファイルを強制的にインストールして進めていきましょう
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
Package libwebkitgtk-3.0-common is not installed.
dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
libwebkitgtk-3.0-0:amd64
エラーメッセージにあったように、私のパッケージの一つはアップグレードの直前に -common パッケージに依存していましたが、アップグレードによって削除されてしまいました (そして apt-get はそれを見つけることができなくなりました)。幸いにも、そのパッケージファイルはまだ /var/cache/apt にあるので、リストに追加してもう一度試してみることができます
$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
成功しました。実はこれでは問題は解決しませんでした。しかし、パッケージのダウングレードに成功しました
5 aecolley 2016-03-21
私もまた、今日、いくつかの Debian サーバでパッケージのアップグレードを元に戻さなければなりませんでした。aptitute を使ってパッケージを前のバージョンに戻すことに成功しましたが、以下の awk コマンドは非常に役に立ちました
(以下のコマンドでは、日付の文字列をアップグレードを元に戻したい日の日付に置き換えてください)
awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log
出力を確認して、これらが元に戻すパッケージとバージョンであることを確認してください。次に aptitute を使って、リストアップされたパッケージのダウングレードを行います
aptitute install [paste output here]
他の方の時間短縮にも役立てていただければと思います
4 Andreas Kohlbecker 2017-06-20
関連するファイルシステム(/
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
, /boot
(ファイルシステム上にあるかもしれない)と起動記録を含むファイルシステム)の完全なバックアップを取って、マシンを後でロールバックすることができるようにすることを除けば、そうはならないと思います
2 David Spillett 2009-09-09
私は、仮想化された環境でlinuxサーバーを動かし、apt-getアップグレードや、サードパーティのメジャーなアップデート/アップグレードの直前にシャップショットを実行しています
そして、何かあったときには、単に元に戻して、より多くの情報が得られるようになるまで人生が続く
これは、私は私のUbuntuのボックスを12.04にアップグレードしたときに非常にハンドルに来て、なぜかMySQLは、アップグレード後に完全に非機能だった。私はロールバックし、後で答えを見つけ、アップグレードを再実行し、MySQLを修正し、人生は良かったです
2 Brain2000 2013-05-31
checkinstall を試してみてください
./configure; プログラムを作成した後、CheckInstall は make install (またはそれを実行するように指示したもの) を実行し、このインストールによって変更されたすべてのファイルを追跡し、Excelent installwatch … を使用します
aptitude saf-upgradeを実行するように指示すれば、アップグレードによって行われたすべての変更を追跡することができるでしょう
1 solarc 2009-10-03
OpenSolarisカーネルとUbuntuユーザ空間を組み合わせたNexentaというプロジェクトがあります。SolarisのZFSとDebianのaptを統合して、アップグレードのための元に戻すボタンを提供するツールを提供しています。こちらを参照してください。http://www.nexenta.org/os/TransactionalZFSUpgrades
より一般的に必要なのは、バージョニングファイルシステムです。Linux 用の Btrfs は開発中です
1 Ryan C. Thompson 2009-10-05
Apt-Undo を使用することも可能ですが、パッケージのインストールやアンインストールに使用している場合にのみ機能します。すでに通常の方法でソフトウェアをアンインストールしてしまった場合には何の役にも立ちません
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a-simple-way-of-undoing-apt-actions/
1 Rucent88 2013-08-10
私はそれを何度か成功させたことがありますが、私はそれをお勧めしません。これは私がやったことです(私の記憶が正しければ)
1)デフォルトのubuntuのリポジトリに含まれていない非公式なソフトウェアを削除します(必須ではないかもしれませんが、邪魔になるかもしれないのでお勧めします)
2) /etc/apt/sources.list (およびsources.list.d/*) を以前のバージョンに変更します (非公式リポジトリはすべてコメントしてください)
3) apt-get update / aptitude update
4) aptitudeを使って、コアパッケージ(X11やライブラリなど)をダウングレードする。壊れたパッケージを大量に発射し始めるので…それぞれのケースを解決する必要があります(aptitudeでのやり方を知っておく必要があります)。ダウングレードする方法は、説明パネルに行って、下の方にあるバージョンをインストール(+を押して)することです
5)すべてのソフトウェアがターゲットバージョンに属するようになるまで#4を繰り返します(適性のバージョン欄を確認してください)
以上が、私がこの方法をおすすめしない理由です
- それは多くの時間がかかります(その痛みを伴うプロセス)
- アプリケーションによっては、正しく動作しない場合があります(最新の設定が残っている場合があります)。その場合は、「パージ」して再インストールする必要があります
- ダウングレードしても動かないシステム関連のアップデートがあります
- そのため、使用不可能なシステムで終わる可能性があるため、非常にリスクが高いです
クリーンインストールをして、少しずつ設定を動かしていくことを強くお勧めします。また、時間はかかりますが、最後には安定したバージョンを手に入れることができます
やった理由は主に実験として、自暴自棄になった結果です
0 lepe 2015-09-07
DPkg::Pre-Install-PkgsとLinuxスナップショット上のZFS
オペレーティングシステムを ZFS ファイルシステム (ZFS on Linux など) にインストールした場合、何かをインストールしたりアップグレードしたりする前に apt-get
が zfs snapshot
を実行するように設定すれば、ファイルシステムを瞬時にバックアップすることができます。ZFSスナップショット以外のバックアップ機構でも動作するかもしれませんが、そのテストは他の人に任せることにします
The Script
のようなファイルを作成します
/etc/apt/apt.conf.d/71backup
with contents
// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};
ここで rpool/ROOT/debian
は、オペレーティングシステムがマウントされている ZFS ファイルシステムの名前に置き換えてください。OS を最初にインストールしたときにこの名前をつけていますが、それは NAME
属性の下にコマンドで見つけることができます
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
しかし、それは効果があるのでしょうか?
適当なネット民の設定アドバイスに従う前に、スナップショットを撮った方がいいですよ
# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test
そこにあります。error: fn_borked
がすぐに発生した場合、システムを至福の現在の状態に戻すことができます
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test
今、あなたのレポで利用可能な可能性が高い2つの小さなゲームをインストールして、それを試してみてください
# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614
このスナップショットには、2つのゲームがインストールされる前のファイルシステムが含まれています
# exit
$ sudoku
おばあちゃんの楽しい時間、でもあなたはスドクが嫌いなんですね
$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found
複数のスナップショットを取得した後、-r
フラグを追加することで、以前のスナップショットにロールバックすることができます。私たちの場合は、例えば、試してみてください
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
しかし、これはファイルシステムを rpool/ROOT/debian@2018-08-01-230001_test
が撮影されたときの状態に戻すだけでなく、その後のすべてのスナップショットを取り返しのつかない形で削除することになるので注意してください。この投稿に従うと、スナップショット rpool/ROOT/debian@apt-get_2018-08-02-033614
は消えてしまいます
Debian GNU/Linux で apt-get upgrade
をテストしました
# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get
動作しています。install
コマンド用に1つのスナップショットが作成され、upgrade
コマンド用にもう1つのスナップショットが作成されました
因みに、今日は初めてこれをテストしてみましたが、aptの内部構造についてはほとんど知りませんでした。このように、「あなたのために何かを壊す」とか、「私の心が考えていないリスクを伴う」というのであれば、以下にコメントをお願いしたいと思います
0 LaTeX2enub1336 2018-08-14
Debian を使用している場合、apt-revert というツールがあり、どの apt 呼び出しを元に戻すかを選択する CLI があります
もちろん、これは一般的には、すでにローカルで削除されていても、すべての古いパッケージのバージョンがまだ利用可能な場合にのみ機能します。これは Debian では、apt-revert が使用している snapshots.debian.org で可能です
このようなものがUbuntuにも存在するのであれば、apt-revertをUbuntuでも動作するように適応させるのは、おそらくそれほど手間ではないでしょう
0 Patrick Häcker 2020-06-10