最新のアップグレードをロールバックする方法はありますか?


54

これは過去5年間で何度も起こりました。アップグレードによってシステムが壊れました。このような状況に陥るたびに、システム全体を再インストールする必要があり、これは非常に面倒です。

再インストールせずに機能するシステムを使用できるように、最新のアップグレードをロールバックする方法はありますか?そうでない場合、これを最優先のアイデアとして提案する最良の方法はどれですか?

このアイデアはBrainstorm.ubuntu.comで説明されていましたが、死んでいるように感じます...そして、フォーラムは物事を壊すアップグレードの例でいっぱいです。ありがとう!


17
この質問に投票するためだけにサインインしています。2011デスクトップOSに一貫したロールバックツールがないことは哀れです。Windowsには5年以上前にシステムの復元がありましたが、これはかなり遅れています。ユーザーは、セキュリティ更新プログラムをインストールするように(正しく)トレーニングされていますが、ドライバーに障害が発生したためにこれを行っていることを常に罰しています。
ゲイツVP

@GatesVPあなたが8年以上前に言ったこの点は、まだUbuntuを悩ませています(他のディストリビューションについて話すことはできませんが、おそらく彼らは良くないでしょう)。これは完全にイライラするものです。誰かがあなたの言葉を64 ptフォントで印刷し、Linuxの世界に飛び込もうとするすべての初心者の前でハングアップするべきです。
horaceT

代替画像が道であることに同意する必要があります。これが「本番」システムであるかどうかは述べられていません。クローンテストシステムを使用することが可能であり、実行可能である場合は、イメージバックアップを使用する方法が最適です。単にアプリを更新する場合、最も速い解決策は「強制」オプションの有無にかかわらずダウングレードすることです。
JHPArizona

回答:


14

シナプスでは、少なくとも、最近の更新(ファイルメニュー、履歴)を制御できます。

(シナプスが起動可能で、システムが壊れている場合)。したがって、apt -...-コマンドを使用して、更新を元に戻すには、それほど難しくないはずです。

コマンドライン用の履歴コマンドもあると思います。

パッケージ全体を削除して、特定のバージョンをインストールする必要があるかもしれません。Afaik、特定のバージョンをインストールすることは可能ですが、そうする必要はありませんでした。

更新:aptの使用方法を調べました:

最後の3x24hにインストールされたパッケージを検索します。

find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' 

apt-cacheポリシーを使用すると、プログラムの利用可能なバージョンが表示されます。

sudo apt-cache policy PROGRAM:
 *** 3.6.7+build3+nobinonly-0ubuntu0.10.04.1 0
        500 http://de.archive.ubuntu.com/ubuntu/ lucid-updates/main Packages
        500 http://security.ubuntu.com/ubuntu/ lucid-security/main Packages
        100 /var/lib/dpkg/status
     3.6.3+nobinonly-0ubuntu4 0

こちら3.6.7および3.6.3。これで、以前のバージョンがインストールされる可能性があります(多くの場合、直前のバージョンではありません):

sudo apt-get install PROGRAM=3.6.3

次に、将来の更新を防ぐために、適切なピン留めを行う必要があります。

/etc/apt/preferences.d/に新しいファイルを作成します(> 10.4の場合)、プログラムにちなんだ名前を付けます。

Package: program
Pin: version 3.6.3*
Pin-Priority: 1000

情報をありがとう。私はubuntuがすぐにzfsを管理するのを待つことができません!
マルセロルイス

ごめんなさい-zfsとは何の関係がありますか?zfsはロールバックを管理しますか?または、更新によってzfs-installが壊れますか?または、zfs-updateは何かを壊しますか?
ユーザー不明

バージョンが1.0.2g-1ubuntu4.12aptに従っている場合はどうなりますか?ただし、それをバージョン番号として受け入れることは拒否します。私は、フォームをダウングレードする1.0.2g-1ubuntu4.13には1.0.2g-1ubuntu4.12
チャバ・トス

おかげで、suuuuuuuuuuuuuuuchの痛み。全く破壊されたコントローラ入力は、に記載されている正確に80のパッケージ持って私の最後の更新find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' この時点では、それは私のシステム全体を再インストールする手間が少ないです
タツ

7

ほとんどの場合/var/log/apt/history.log、apt / synapticによる変更について相談できます。それはほんの少しの法医学であり、カット/ペーストがたくさんあります。

システムがまだ正常に動作していた日付に戻ります。

最初にインストールされたすべてのパッケージを取得し、アンインストールスクリプトにまとめます。スクリプトが終了したら、削除されたすべてのパッケージの再追加を再開します。

例:
ログファイル:

Start-Date: 2014-05-28  21:28:11
Commandline: synaptic
Install: libfglrx-amdxvba1:amd64 (13.12-3kali1, automatic), libgl1-fglrx-glx:amd64 (13.12-3kali1), glx-alternative-fglrx:amd64 (0.4.1kali1, automatic), libfglrx:amd64 (13.12-3kali1, au$
Remove: fglrx-glx-ia32:amd64 (12-6+point-3)
End-Date: 2014-05-28  21:28:27

あなたが見ることができます、

libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64 

Synapticによってインストールされました。libfglrx:amd64Synapticによって削除されたように。

逆順で行ったため、最初に新しくインストールしたパッケージを削除し、削除したパッケージを再度追加しました。

この場合の作業コマンドは次のようになります。

sudo apt-get remove -y libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 libfglrx:amd64 && sudo apt-get install -y libfglrx:amd64

おそらく、-yスイッチを使わずにプロセスを制御する(壊れた依存関係を避けるため)のは、最良のアイデアではないでしょう。あなたのほとんどは、いくつかの検証「y」をしている間、彼らの指を壊しません

ほとんどの場合、この方法でロールバックが可能ですが、依存関係が既に壊れている場合は、さらに大きな問題が発生する可能性があります。


6

ほとんどの場合、システムが壊れている場合はカーネルの問題です。

古いカーネルを起動し、おそらく正しく更新されなかった最新のパッケージ(特にカーネルパッケージ)を再インストールするだけです。いくつかのメモ:

/var/log/dpkg.log

最近更新/インストールされたパッケージのリストを確認するための友達です

sudo apt-get -f install

ほとんどの場合、半分インストールされたパッケージを修正できます


4

残念ながら、これを行う方法はまだありません。ファイルシステムレベルのスナップショット/ロールバックは、今後のbtrfsの機能の1つですが、デフォルトのファイルシステムとして使用するのに十分な機能と安定性を実現する方法がまだあります。


1
ファイルシステムのスナップショットの場合は、代わりにext3またはext4でLVMを使用できます。
Flimm

@Flimm、今ではできますが、あまりうまく機能せず、最初にインストールするときにLVMをセットアップする必要があります。
psusi

3

メジャーアップグレードを行うとき、Clonezillaを使用してディスクのクローンを作成します。CDに書き込み、予備の(外部)HDDを用意し、Clonezilla LiveCDの指示に従います。partition-imageモードを選択します。これにより、使用するスペースが最小になります。

システムが壊れた(または変更を元に戻したい)と思われる場合は、Clonezilla LiveCDで起動し、(外部)HDDのイメージを選択して復元します。これらのイメージはディスク上のすべてのビットの文字通りのコピーであるため、ディスクの速度と接続速度(通常は外部USB HDDとコンピューター間の接続)に応じて数時間かかる場合があります。

ところで、これはバックアップ方法と呼ばれます。


3

あなたはできるのaptやdpkgを簡単に与えられたパッケージ(ダウングレード)の古いバージョンをインストールします。古いバージョンのパッケージを見つけることは問題です。これらは多くの場合、更新がロールインするとプールとミラーから消えます。

インストールCDまたは古いミラーまたはキャッシュからパッケージをインストールする場合は、許可するまでアップグレードされないように、古いバージョンに固定したままにする必要もあります。つまり、更新プログラムを監視し、問題が解決するまでテストする必要があります。これはもちろん問題です。その間(おそらく永遠に)固定されていない、おそらく安全でないパッケージが残されます。つまり、何らかのシステムの問題があるすべてのユーザーは、解決できるまでランダムな状態のままになります。

また、すべてのソフトウェアは上位互換性がないため、新しいバージョンの構成ファイルやデータファイルを入力しても、古いバージョンのバージョンが正しく動作しない場合があります。もちろん、すべてのユーザーデータをアップグレード前の状態にロールバックしない限り、これを解決することはできません。

これを行う方法があれば素晴らしいと思いますが、それは大きな問題です。首尾一貫した解決策があると思う人は誰でも、提案を書いてコメントを誘うか、もっと良いことに、概念実証の解決策(コード、スクリプト、文書)を作成する必要があります。トローリングと泣き言は建設的ではありません。

明確な技術的解決策がないため、ほとんどのソフトウェアは「唯一の方法は前進」という考え方で開発(および統合)されています。古くなったバージョンを管理しようとすると、みんなの時間の無駄です。発見された問題は、できるだけ新しいバージョンで修正されます。マイナーな解決策として、一時的な一時的な回避策のために、以前のパッケージバージョンのアーカイブをどこかに保存したいと思います。

その間、バグを報告することができ、最先端のソフトウェアが決して失敗しないことを期待しないでください。修正が見つかったら、次のアップデートで修正する必要があります。開発者は人間であり(ほとんど)、したがって誤解されやすい。コンピューターは手間がかかり、非常識な多様性と細部に満ちています。十分にサポートされたコンポーネントと安定した統合ソフトウェア配布を使用して防御的に保守されたシステムは、これにもかかわらず安全でなく、アップグレードできないことなく、非常に安定しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.