aptitude upgrade
apt-get upgrade
問題が発生した場合にシステムを実際のアップグレード前の「適切な」状態に「簡単に」ロールバックできるように、ブート時またはブート前に何かを設定する方法はありますか?
たとえば、このプロセス中にアップグレードされた以前のバージョンのパッケージを再インストールします。
(編集する)いくつかのヒント:わかりましたetckeeper
たとえば、パッケージがインストールまたは削除されたときに通知を受け取るには、apt
いくつかのフックを使用します。キャッシュ()から再インストールapt
できるように、新しくインストールされたパッケージのリストと以前のバージョン番号を保存するスクリプトの種類があると思いました。しかもapt
/var/cache/apt/archives
checkinstall
ファイルの変更を追跡できます。
これを正しく達成する方法の詳細は何ですか?
ベストアンサー1
今、この問題に対する答えを見つけなければなりません。これはapt-get upgrade
、Debian サーバーの最後の問題のため、busybox の外部から最新のカーネルを起動し、zfs ルートパーティションをマウントすることができないためです。少なくとも古いカーネルはまだ起動できますが、他のソフトウェアと互換性がありません。したがって、ロールバックが必要です。
短い答え - 次のコマンドを使用できます。
$ apt-get -s install $(apt-history rollback | tr '\n' ' ')
必要に応じて機能する場合は、削除し-s
てやり直してください。操作するためにとったステップは次のとおりです。
一時的にまとめて
/var/log/dpkg.log
今日のアップグレードだけを残しました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 ...
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
}