최신 업그레이드를 롤백 할 방법이 있습니까?


54

지난 5 년 동안 이런 일이 여러 번있었습니다. 업그레이드로 시스템이 고장났습니다. 이 상황이 생길 때마다 전체 시스템을 다시 설치해야하는데, 이는 정말 성가신 일입니다.

다시 설치하지 않고 기능 시스템을 사용할 수 있도록 최신 업그레이드를 롤백 할 수있는 방법이 있습니까? 그렇지 않다면, 이것을 최우선 순위 아이디어로 제안하는 가장 좋은 방법은 무엇입니까?

이 아이디어가 brainstorm.ubuntu.com에 설명되어 있지만, 그 아이디어는 죽었다고 생각합니다. 포럼은 업그레이드를 깨뜨리는 사례로 가득 차 있습니다. 감사!


17
이 질문에 투표하기 위해 로그인하고 있습니다. 2011 데스크탑 OS에서 일관된 롤백 도구가 없다는 것은 한심한 일입니다. Windows는 5 년 이상 전에 시스템 복원을 수행했습니다 . 보안 업데이트를 설치 하도록 사용자에게 ( 정확한 ) 교육을 받았지만, 드라이버가 실패하여이를 수행 한 것에 대해 지속적으로 처벌을받습니다.
Gates VP

@GatesVP 8 년 전이 시점에서이 시점은 여전히 ​​우분투를 괴롭 히고 있습니다. 나는 이것이 완전히 좌절감을 느낍니다. 누군가 당신의 말을 64pt 글꼴로 인쇄하고 리눅스 세계로 뛰어 들기 위해 모든 초보자 앞에서 매달 아야합니다.
horaceT

백업 이미지가 나아갈 길이라는 데 동의해야합니다. 이것이 '생산'시스템인지는 명시되어 있지 않습니다. 복제 테스트 시스템을 갖추는 것이 가능하고 가능하다면 이미지 백업을 사용하는 것이 좋습니다. 앱 업데이트 일 경우 가장 빠른 해결책은 'force'옵션을 사용하거나 사용하지 않고 다운 그레이드하는 것입니다.
JHPArizona

답변:


14

시냅틱에서는 최소한 최근 업데이트 인 파일 메뉴, 기록을 제어 할 수 있습니다.

(손상된 시스템으로 시냅스가 시작 가능한 경우). 따라서 apt -...- command를 사용하여 업데이트를 되돌리려면 너무 어렵지 않아야합니다.

커맨드 라인에 대한 히스토리 명령도 있다고 생각합니다.

전체 패키지를 삭제하고 특정 버전을 설치해야 할 수도 있습니다. 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/(if> = 10.4)에 새 파일을 만듭니다.

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

정보 주셔서 감사합니다. 우분투가 zfs를 즉시 관리 할 때까지 기다릴 수 없습니다!
Marcelo Ruiz

죄송합니다-zfs와 어떤 관련이 있습니까? zfs는 롤백을 관리합니까? 아니면 업데이트로 인해 zfs-install이 손상됩니까? 아니면 zfs-update에서 문제가 발생합니까?
사용자가 알 수 없음

버전이 1.0.2g-1ubuntu4.12apt에 따른 경우 어떻게 합니까? 그러나 버전 번호로 수락하지 않습니다. 나는 양식을 다운 그레이드 할 1.0.2g-1ubuntu4.131.0.2g-1ubuntu4.12
사바 토스

고마워, suuuuuuuuuuuuuch 고통. 컨트롤러 입력을 완전히 파괴 한 마지막 업데이트 find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' 는이 시점에서 정확히 80 개의 패키지가 나열되어 있습니다. 전체 시스템을 다시 설치하는 번거 로움이 없습니다
tatsu

7

대부분 /var/log/apt/history.logapt / synaptic에 의해 수행 된 변경 사항에 대해 상담 할 수 있습니다 . 그것은 단지 법 의학적이며 많은 잘라 내기 / 붙여 넣기입니다.

시스템이 여전히 잘 작동했던 날짜로 돌아갑니다.

먼저 그 이후에 설치된 모든 패키지를 제거 스크립트로 정리하십시오. 스크립트가 완료되면 제거 된 모든 패키지를 다시 추가하십시오.

예를 들어 :
logfile :

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:amd64시냅틱에 의해 제거 된 것처럼 .

역순으로 진행되었으므로 먼저 새로 설치된 패키지를 제거하고 제거 된 패키지를 다시 추가합니다.

이 경우 작동하는 명령은 다음과 같습니다.

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"몇 번 확인하는 동안 대부분 손가락을 finger 지 않을 것입니다.

대부분의 경우 이러한 방식으로 롤백이 가능하지만 종속성이 이미 손상된 경우 더 큰 문제가 발생할 수 있습니다.


6

대부분 시스템이 고장난 경우 커널 문제입니다.

이전 커널을 부팅하고 올바르게 업데이트되지 않은 최신 패키지 (특히 커널 패키지)를 다시 설치하십시오. 몇 가지 참고 사항 :

/var/log/dpkg.log

최근 업데이트 / 설치된 패키지 목록을 확인하는 친구입니까?

sudo apt-get -f install

대부분의 경우 반 설치된 패키지를 수정할 수 있습니다


4

불행히도 아직이를 수행 할 방법이 없습니다. 파일 시스템 수준 스냅 샷 / 롤백은 다음 btrfs의 기능 중 하나이지만 기본 파일 시스템으로 사용할만큼 기능이 완전하고 안정적이되는 방법이 있습니다.


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.