結果が気に入らない場合、apt-get upgrade
を実行した後、Ubuntuで最後のアップグレードをロールバックまたは元に戻す方法はありますか?
今日、これを私の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
次に、ディスク上にまだキャッシュされているパッケージファイルを見つけようとしました(幸い、私はautocleanを実行していませんでした)。
$ 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
エラーメッセージが言ったように、私のパッケージの1つはアップグレードの直前に-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
成功!実際、これで私の問題は解決しませんでした。しかし、QEDはパッケージのダウングレードに成功しました。
aptitude
は、 Debianパッケージ管理 に従って、パッケージのすべてのバージョンにアクセスできるようにします。
HartmanのBlogstaticブログに遭遇しました: buntu Lucidで更新を元に戻す方法
問題のある更新を元に戻す最初の手順は、正確な更新を確認することでした。いくつかのフォーラムを検索した後、更新履歴を確認する方法に出くわしました:シナプスパッケージマネージャーを開きます(ターミナルでは "Sudo synaptic")。メニューバーから[ファイル]-> [履歴]をクリックすると、すべての更新が日付順に表示されます。
残念ながら、今日は約20のアップデートをインストールしましたが、どれが問題の原因であるのかわかりませんでした。履歴リストで指定された各パッケージを検索することで、問題が解決されて問題のある更新が特定されるまで、一度にいくつかをダウングレードすることができました。これをする:
検索バーを使用して、ダウングレードするパッケージを見つけます。探しているものが見つかったら、パッケージをクリックして選択します。メニューバーから[パッケージ]-> [バージョンを強制]をクリックし、ドロップダウンメニューからパッケージの以前のバージョンを選択します。 「適用」ボタンをクリックしてダウングレードを適用します。
また、本日、いくつかの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]
これが他の人にとっても便利な時間節約になることを願っています。
関連するファイルシステム(/
、/bin
、/lib
、/sbin
、/usr
、/var
、/etc
および/boot
(これらはすべてファイルシステム上にある場合があります)およびブートレコード)。これにより、後でマシンをロールバックできます。
私はLinuxサーバーを仮想化環境で実行し、apt-getアップグレード、またはそのための主要なサードパーティの更新/アップグレードの直前にスナップショットを実行します。
その後、問題が発生した場合は、元に戻して、さらに情報が見つかるまで生活を続けます。
これは、Ubuntuボックスを12.04にアップグレードしたときに非常にうまくいきました。アップグレード後、MySQLはどういうわけか完全に機能しなくなりました。私はロールバックし、後で答えを見つけ、アップグレードを再実行し、MySQLを修正しました。
Apt-Undo の使用は可能なオプションですが、パッケージのインストールおよびアンインストールに使用している場合にのみ機能します。通常の方法でソフトウェアを既にアンインストールしている場合は、役に立ちません。
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.htmlhttp://lkubuntu.wordpress.com/ 2011/07/27/apt-undo-a-simple-way-of-undoing-apt-actions /
OpenSolarisカーネルとUbuntuユーザースペースを組み合わせるNexentaというプロジェクトがあります。アップグレードの元に戻すボタンを提供するために、SolarisのZFSとDebianのaptを統合するツールを提供します。ここを参照してください: http://www.nexenta.org/os/TransactionalZFSUpgrades
より一般的には、必要なのはバージョン管理ファイルシステムです。 Linux用のBtrfsは開発中です。
あなたは試すことができます checkinstall
./configure;した後プログラムを作成すると、CheckInstallはmake install(または実行するように指示したもの)を実行し、優れたinstallwatchを使用して、このインストールによって変更されたすべてのファイルを追跡します...
したがって、aptitude safe-upgradeを実行するように指示すると、アップグレードによって行われたすべての変更を追跡できます。
何度か成功していますが、お勧めしません。これは私がやったことです(私が正しく思い出せば):
1)デフォルトのubuntuリポジトリに含まれていない非公式のソフトウェアを削除します(必須ではないかもしれませんが、邪魔になる可能性があるためお勧めします)。
2)/etc/apt/sources.list(およびsources.list.d/*)を以前のバージョンに変更します(すべての非公式リポジトリにコメントを付けます)。
3)apt-get update/aptitude update
4)aptitudeを使用して、コアパッケージ(X11、ライブラリなど)をダウングレードします。それは多くの壊れたパッケージの起動を開始します...したがって、それぞれのケースを解決する必要があります(aptitudeでそれを行う方法を知る必要があります)。ダウングレードする方法は、説明パネルに移動し、下部にあるバージョンをインストールすることです(+を押す)。
5)すべてのソフトウェアがターゲットバージョンに属するまで、#4を繰り返します(aptitudeのバージョン列を確認してください)。
これらが私がこの方法をお勧めしない理由です:
クリーンインストールを行い、構成を少しずつ移動することを強くお勧めします。時間もかかりますが、最終的には安定版になります。
私がそれをした理由は、主に実験としてと絶望の結果でした。
オペレーティングシステムをZFSファイルシステムにインストールした場合(例: LinuxのZFS )、何かをインストールまたはアップグレードする前にapt-get
を実行してzfs snapshot
を実行できます。ファイルシステムを瞬時にバックアップします。 ZFSスナップショット以外のバックアップメカニズムでも動作する可能性がありますが、そのテストは他に任せます。
次のようなファイルを作成します
/etc/apt/apt.conf.d/71backup
内容付き
// 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
できます。 1つのスナップショットはinstall
コマンド用に作成され、別のスナップショットはupgrade
コマンド用に作成されました。
警告:私は今日これを初めてテストしましたが、aptの内部動作についてはほとんど知りません。これが何かを壊すか、私の生まれ変わった心が考慮しなかったリスクを伴うならば、以下でそれについてコメントしてください。