우분투 apt-get upgrade
에서 결과가 마음에 들지 않으면 마지막 업그레이드를 롤백하거나 취소하는 방법이 있습니까?
우분투 apt-get upgrade
에서 결과가 마음에 들지 않으면 마지막 업그레이드를 롤백하거나 취소하는 방법이 있습니까?
답변:
aptitude
데비안 패키지 관리 에 따라 사용 가능한 경우 모든 버전의 패키지에 액세스 할 수 있습니다 .
Hartman의 Blogstatic 블로그 : Ubuntu Lucid에서 업데이트를 취소하는 방법을 발견했습니다 .
문제가있는 업데이트를 실행 취소하기위한 첫 번째 단계는 정확히 어떤 업데이트인지 확인하는 것입니다. 일부 포럼을 검색 한 후 업데이트 내역을 볼 수있는 방법을 찾았습니다. 시냅틱 패키지 관리자 (터미널에서 "sudo synaptic")를 엽니 다. 메뉴 표시 줄에서 파일-> 히스토리를 클릭하면 모든 업데이트가 날짜별로 정렬되어 표시됩니다.
불행히도 나는 오늘 약 20 개의 업데이트를 설치했으며 어떤 업데이트가 문제의 원인인지 알지 못했습니다. History 목록에있는 각 패키지를 검색하여 문제가 해결되고 문제가되는 업데이트를 확인할 때까지 한 번에 몇 개씩 다운 그레이드 할 수있었습니다. 이것을하기 위해:
검색 창을 사용하여 다운 그레이드하려는 패키지를 찾으십시오. 원하는 것을 찾았 으면 패키지를 클릭하여 선택하십시오. 메뉴 표시 줄에서 패키지-> 버전 강제를 클릭하고 드롭 다운 메뉴에서 패키지의 이전 버전을 선택하십시오. 다운 그레이드를 적용하려면 "적용"버튼을 클릭하십시오.
오늘 데비안 시스템에서이 작업을 수행해야했습니다. 먼저 문제가되는 업그레이드가 발생한 시간 범위를 확인하고 업그레이드 된 패키지의 이전 및 새 버전 번호를 제공하는 로그 항목을 검색했습니다.
$ 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
다음으로 디스크에서 여전히 캐시 된 패키지 파일을 찾으려고 노력했습니다 (행운 적으로 자동 청소를 실행하지 않았습니다).
$ 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
오류 메시지에서 알 수 있듯이 내 패키지 중 하나가 업그레이드 직전에 -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를 성공적으로 다운 그레이드했습니다.
또한 오늘 데비안 서버 몇 대에서 패키지 업그레이드를 취소해야했습니다. 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]
이것이 또한 다른 사람들에게 유용한 시간 절약 도구가되기를 바랍니다.
나는 관련 파일 시스템의 전체 백업을 복용 제외하고, 믿지 아니하는 (그 포함하는 /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
과 /boot
(모든 파일 시스템에에있다)와 부트 레코드) 다시 나중에 기계를 롤백 할 수 있습니다.
/var
)과 관련 구성 파일이 저장되어 있는지 확인할 수 있습니다. 그런 다음 dpkg
해당 버전을 설치하도록 명시 적으로 지시 하여 롤백을 시도 할 수 있습니다. 정상적인 업그레이드를 원할 때 나중에해야 할 일이있을 수 있으므로 권장하지 않습니다.
당신은 checkinstall을 시도 할 수 있습니다
./configure 후; 프로그램을 설치하면 CheckInstall은 make install (또는 실행 명령)을 실행하고 탁월한 installwatch를 사용 하여이 설치로 수정 된 모든 파일을 추적합니다 ...
따라서 적절한 안전 업그레이드를 실행하도록 지시하고 업그레이드로 인한 모든 수정 사항을 추적 할 수 있습니다.
OpenSolaris 커널과 Ubuntu 사용자 공간을 결합한 Nexenta라는 프로젝트가 있습니다. 업그레이드를위한 실행 취소 버튼을 제공하기 위해 Solaris의 ZFS와 Debian의 apt를 통합하는 도구를 제공합니다. 여기를 참조하십시오 : http://www.nexenta.org/os/TransactionalZFSUpgrades
보다 일반적으로 필요한 것은 버전 관리 파일 시스템입니다. Linux 용 Btrfs가 개발 중입니다.
Apt-Undo를 사용 하는 것이 가능한 옵션이지만 패키지를 설치 및 제거하는 데 사용하는 경우에만 작동합니다. 일반적인 방법으로 소프트웨어를 이미 제거한 경우에는 도움이되지 않습니다.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -취소하기 쉬운 행동 /
나는 몇 번 성공적으로 그것을했지만 권장하지 않습니다. 이것이 내가 한 일입니다 (정확하게 기억한다면).
1) 기본 우분투 리포지토리에 포함되어 있지 않은 비공식 소프트웨어를 제거하십시오 (필요하지 않을 수도 있지만 방해가 될 수 있습니다).
2) /etc/apt/sources.list (및 sources.list.d / *)를 이전 버전으로 변경하십시오 (모든 비공식 저장소 주석 처리).
3) apt-get 업데이트 / 적성 업데이트
4) 적성을 사용하여 핵심 패키지 (X11, 라이브러리 등)를 다운 그레이드합니다. 깨진 패키지가 많이 발사되기 시작합니다. 따라서 각 경우를 해결해야합니다 (적절하게 그 방법을 알아야합니다). 다운 그레이드하는 방법은 설명 패널로 이동하여 하단에 +를 눌러 버전을 설치하는 것입니다.
5) 모든 소프트웨어가 대상 버전에 속할 때까지 # 4를 반복하십시오 (적절한 버전 열 확인).
이 방법을 권장하지 않는 이유는 다음과 같습니다.
새로 설치하고 구성을 조금씩 옮기는 것이 좋습니다. 또한 시간이 걸리지 만 결국에는 안정적인 버전이 있습니다.
내가 한 이유는 주로 실험과 절망의 결과였습니다.
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
했으며, 명령 에서 attribute 아래에 있습니다.
# 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
이제 repo에서 사용 가능한 두 개의 작은 게임을 설치하여 사용해보십시오.
# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614
이 스냅 샷에는 두 게임이 설치 되기 전과 같은 파일 시스템 이 포함되어 있습니다.
# 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
이제 스냅 샷 이 사라집니다.
apt-get upgrade
데비안 GNU / 리눅스에서 테스트 했습니다.
# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get
작동합니다. install
명령에 대한 스냅 샷 하나와 명령에 대한 스냅 샷 하나를 만들었습니다 upgrade
.
주의 사항 : 나는 이것을 오늘 처음으로 테스트했으며 apt의 내부 작업에 대해서는 거의 알지 못합니다. 이것이 당신을 위해 무언가를 깨뜨 리거나 나의 신념이 고려되지 않은 위험을 수반한다면, 아래에 그것에 대해 의견을 말하십시오.