방법은 시작하기 전에, 거기에 aptitude upgrade
또는 apt-get upgrade
뭔가 잘못되면 당신이 “쉽게”는 실제 업그레이드 전에했다 “쉽다”상태로 시스템을 롤백 할 수 있도록 뭔가를 설정하려면?
예를 들어, 프로세스 중에 업그레이드 된 이전 버전의 패키지를 다시 설치하십시오.
(편집) 몇 가지 힌트 : etckeeper
예를 들어 패키지를 설치하거나 제거 apt
할 때마다 알림을 받도록 후크를 사용 한다는 것을 알고 apt
있습니다. apt
캐시 에서 다시 설치할 수 있도록 새로 설치된 패키지 목록과 이전 버전 번호를 저장할 수있는 일종의 스크립트가 있다고 가정합니다 /var/cache/apt/archives
. checkinstall
파일 수정을 추적 할 수있는 것도 있습니다 …
제대로 달성하는 방법에 대한 자세한 내용은 무엇입니까?
답변
apt-get upgrade
데비안 서버 에서 마지막 은 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
}
답변
로그 파일 /var/log/apt/history.log
과 /var/log/apt/term.log
설명에 사용 가능한 가장 가까운 것들 :
새로 설치된 패키지 목록과 이전 버전 번호를 저장할 수있는 일종의 스크립트가 있다고 가정합니다.
history.log
apt
다음 형식으로 수행되는 모든 작업의 요약 목록을 제공 합니다.
Start-Date: 2013-06-21 16:05:05
Commandline: apt-get install rdiff-backup
Install: python-pyxattr:i386 (0.5.0-3, automatic), rdiff-backup:i386 (1.2.8-6), python-pylibacl:i386 (0.5.0-3, automatic
), librsync1:i386 (0.9.7-7, automatic)
End-Date: 2013-06-21 16:05:42
특히 새로 설치된 패키지 또는 제거 된 패키지 목록을 제공합니다. 또한 term.log
작업 중에 터미널에 실제로 표시된 내용을 표시하므로 이전 및 새 버전의 패키지가 표시됩니다. 내 무작위 샘플 history.log
:
Preparing to replace gnupg 1.4.10-4 (using .../gnupg_1.4.10-4+squeeze1_i386.deb) ...
Unpacking replacement gnupg ...
Processing triggers for install-info ...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 changed doc-base file(s)...
Registering documents with scrollkeeper...
Setting up gnupg (1.4.10-4+squeeze1)
apt
자동 롤백 시도 는 권장되지 않지만, 로그를 사용하는 경우 실패한 조치로 인해 조치를 방해하는 항목 ( apt
예 : 일치하지 않는 dpkg 데이터베이스) 이 손상된 경우를 제외하고 수동으로 수행 할 수 있습니다 . 이 경우 계속하기 전에 문제를 해결해야합니다.
답변
아니요, apt는 그렇게 쉽게하지 않습니다.
가장 좋은 옵션은 일부 유형의 스냅 샷입니다. lvm / zfs / btrfs를 통한 파일 시스템 스냅 샷 또는 어떤 종류의 VM을 사용하는 경우 인스턴스 스냅 샷.
다른 옵션은 설치 패키지 (dpkg -l)의 인벤토리를 전후로 가져 오는 것입니다. “롤백”하려면 이전 버전을 명시 적으로 설치해야합니다.