問題が発生した場合は、apt-getアップグレードをロールバックできますか?

問題が発生した場合は、apt-getアップグレードをロールバックできますか?

aptitude upgradeapt-get upgrade問題が発生した場合にシステムを実際のアップグレード前の「適切な」状態に「簡単に」ロールバックできるように、ブート時またはブート前に何かを設定する方法はありますか?

たとえば、このプロセス中にアップグレードされた以前のバージョンのパッケージを再インストールします。

(編集する)いくつかのヒント:わかりましたetckeeperたとえば、パッケージがインストールまたは削除されたときに通知を受け取るには、aptいくつかのフックを使用します。キャッシュ()から再インストールaptできるように、新しくインストールされたパッケージのリストと以前のバージョン番号を保存するスクリプトの種類があると思いました。しかもapt/var/cache/apt/archivescheckinstallファイルの変更を追跡できます。

これを正しく達成する方法の詳細は何ですか?

ベストアンサー1

今、この問題に対する答えを見つけなければなりません。これはapt-get upgrade、Debian サーバーの最後の問題のため、busybox の外部から最新のカーネルを起動し、zfs ルートパーティションをマウントすることができないためです。少なくとも古いカーネルはまだ起動できますが、他のソフトウェアと互換性がありません。したがって、ロールバックが必要です。

短い答え - 次のコマンドを使用できます。

$ apt-get -s install $(apt-history rollback | tr '\n' ' ')

必要に応じて機能する場合は、削除し-sてやり直してください。操作するためにとったステップは次のとおりです。

  1. 一時的にまとめて/var/log/dpkg.log今日のアップグレードだけを残しました

  2. apt-historyこの小さなスクリプトをインストールしました。ここ入って~/.bashrc走った

    $ apt-history rollback > rollback.txt
    ...
    libzfs2:amd64=0.6.4-4~wheezy 
    zfsutils:amd64=0.6.4-4~wheezy 
    zfs-initramfs:amd64=0.6.4-4~wheezy
    ...
    
  3. apt-get installこれにより、必要に応じてテキストエディタで入力して切り取ることができる正しい形式のバージョン付きパッケージのリストが表示されます。それから実行してください(ドライランの最初-s):

    $ apt-get -s install $(cat rollback.txt | tr '\n' ' ')
    $ apt-get install $(cat rollback.txt | tr '\n' ' ')
    

Aptは予想されるダウングレードに対して警告を発行します。次のアップグレードがこのロールバックを上書きしないようにするには、元の問題が解決されるまでパッケージを固定する必要があります。たとえば、apt-mark hold zfsutils libzfs2 ...


function apt-history(){
    case "$1" in
      install)
            cat /var/log/dpkg.log | grep 'install '
            ;;
      upgrade|remove)
            cat /var/log/dpkg.log | grep $1
            ;;
      rollback)
            cat /var/log/dpkg.log | grep upgrade | \
                grep "$2" -A10000000 | \
                grep "$3" -B10000000 | \
                awk '{print $4"="$5}'
            ;;
      *)
            cat /var/log/dpkg.log
            ;;
    esac
}

おすすめ記事