web-dev-qa-db-ja.com

Ubuntuで「apt-get upgrade」コマンドを元に戻すまたはロールバックするにはどうすればよいですか?

結果が気に入らない場合、apt-get upgradeを実行した後、Ubuntuで最後のアップグレードをロールバックまたは元に戻す方法はありますか?

27
jjclarkson

今日、これを私の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はパッケージのダウングレードに成功しました。

5
aecolley

aptitudeは、 Debianパッケージ管理 に従って、パッケージのすべてのバージョンにアクセスできるようにします。

5
user28725

HartmanのBlogstaticブログに遭遇しました: buntu Lucidで更新を元に戻す方法

問題のある更新を元に戻す最初の手順は、正確な更新を確認することでした。いくつかのフォーラムを検索した後、更新履歴を確認する方法に出くわしました:シナプスパッケージマネージャーを開きます(ターミナルでは "Sudo synaptic")。メニューバーから[ファイル]-> [履歴]をクリックすると、すべての更新が日付順に表示されます。

残念ながら、今日は約20のアップデートをインストールしましたが、どれが問題の原因であるのかわかりませんでした。履歴リストで指定された各パッケージを検索することで、問題が解決されて問題のある更新が特定されるまで、一度にいくつかをダウングレードすることができました。これをする:

検索バーを使用して、ダウングレードするパッケージを見つけます。探しているものが見つかったら、パッケージをクリックして選択します。メニューバーから[パッケージ]-> [バージョンを強制]をクリックし、ドロップダウンメニューからパッケージの以前のバージョンを選択します。 「適用」ボタンをクリックしてダウングレードを適用します。

5
Manav Brar

また、本日、いくつかの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

関連するファイルシステム(//bin/lib/sbin/usr/var/etcおよび/boot(これらはすべてファイルシステム上にある場合があります)およびブートレコード)。これにより、後でマシンをロールバックできます。

2
David Spillett

私はLinuxサーバーを仮想化環境で実行し、apt-getアップグレード、またはそのための主要なサードパーティの更新/アップグレードの直前にスナップショットを実行します。

その後、問題が発生した場合は、元に戻して、さらに情報が見つかるまで生活を続けます。

これは、Ubuntuボックスを12.04にアップグレードしたときに非常にうまくいきました。アップグレード後、MySQLはどういうわけか完全に機能しなくなりました。私はロールバックし、後で答えを見つけ、アップグレードを再実行し、MySQLを修正しました。

2
Brain2000

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 /

1
Rucent88

OpenSolarisカーネルとUbuntuユーザースペースを組み合わせるNexentaというプロジェクトがあります。アップグレードの元に戻すボタンを提供するために、SolarisのZFSとDebianのaptを統合するツールを提供します。ここを参照してください: http://www.nexenta.org/os/TransactionalZFSUpgrades

より一般的には、必要なのはバージョン管理ファイルシステムです。 Linux用のBtrfsは開発中です。

1

あなたは試すことができます checkinstall

./configure;した後プログラムを作成すると、CheckInstallはmake install(または実行するように指示したもの)を実行し、優れたinstallwatchを使用して、このインストールによって変更されたすべてのファイルを追跡します...

したがって、aptitude safe-upgradeを実行するように指示すると、アップグレードによって行われたすべての変更を追跡できます。

1
solarc

何度か成功していますが、お勧めしません。これは私がやったことです(私が正しく思い出せば):

1)デフォルトのubuntuリポジトリに含まれていない非公式のソフトウェアを削除します(必須ではないかもしれませんが、邪魔になる可能性があるためお勧めします)。

2)/etc/apt/sources.list(およびsources.list.d/*)を以前のバージョンに変更します(すべての非公式リポジトリにコメントを付けます)。

3)apt-get update/aptitude update

4)aptitudeを使用して、コアパッケージ(X11、ライブラリなど)をダウングレードします。それは多くの壊れたパッケージの起動を開始します...したがって、それぞれのケースを解決する必要があります(aptitudeでそれを行う方法を知る必要があります)。ダウングレードする方法は、説明パネルに移動し、下部にあるバージョンをインストールすることです(+を押す)。

5)すべてのソフトウェアがターゲットバージョンに属するまで、#4を繰り返します(aptitudeのバージョン列を確認してください)。

これらが私がこの方法をお勧めしない理由です:

  • 時間がかかる(苦痛なプロセス)
  • 一部のアプリケーションは正しく動作しない可能性があります(まだ最新の構成が残っている可能性があるため)。その場合、「パージ」して再インストールする必要があります。
  • ダウングレード後に機能しないシステム関連のアップデートがあります
  • 使用できないシステムになる可能性があるため、非常にリスクが高い

クリーンインストールを行い、構成を少しずつ移動することを強くお勧めします。時間もかかりますが、最終的には安定版になります。

私がそれをした理由は、主に実験としてと絶望の結果でした。

0
lepe

LinuxスナップショットのDPkg :: Pre-Install-PkgsおよびZFS

オペレーティングシステムを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の内部動作についてはほとんど知りません。これが何かを壊すか、私の生まれ変わった心が考慮しなかったリスクを伴うならば、以下でそれについてコメントしてください。

0
LaTeX2enub1336