ppa 패키지를 이전 시점에서 사용 가능한 버전으로 다운 그레이드


14

기본 인텔 GPU 드라이버는 내 취미 코딩 및 일부 게임에서 원하는 다양한 OpenGL 확장 기능을 수행하지 않는다는 배경이 있습니다. 그래서 xorg-edgers를 설치하고 행복해야합니다. 그러나 지난 수요일에 xorg-edgers (많은 패키지)에 대한 업데이트가있었습니다. 드라이버가 잠기고 전체 컴퓨터를 가져옵니다. 하드 리셋이 필요합니다.

그렇다면 PPA에서 과거의 시점을 나타내는 패키지 버전을 선택하여 다운 그레이드 할 수있는 방법은 무엇입니까?

답변:


17

일상 업무에 xorg-edgers ppa를 사용하는 것은 꽤 나쁜 생각 일 수 있습니다.

최신 드라이버를 제공 할 수도 있지만 작동하지 않는 드라이버를 얻을 수도 있습니다.

PPA를 제거하고 PPA 로 교체 한 패키지를 다운 그레이드하려면 (공식 저장소에서 사용 가능한 패키지로 돌아 가기) 먼저 ppa-purge를 설치하십시오.

sudo apt-get install ppa-purge

그런 다음 PPA를 제거하여 공식 패키지로 우아하게 다운 그레이드하십시오.

sudo ppa-purge ppaname

패키지를 다시 공식 패키지로 다운 그레이드해야합니다.

PPA에 있지만 공식 리포지토리에없는 다른 패키지는 제거되지 않습니다. 예를 들어 apt를 사용하여 패키지 관리자에게 수동으로 제거하도록 지시해야합니다.

sudo apt-get purge packagename

ppa의 이름은 Ubuntu Settings의 "Software Sources"섹션에서 확인하고 런치 패드 페이지에서 제공하는 패키지 목록을 참조하십시오 (또는 설치된 경우 Synaptic Package Manager의 "Origin"섹션 참조).


1
내가 말했듯이, 정상적인 드라이버는 나를 위해 작동하지 않습니다. 나는 xorg-edgers가 필요하다. 최신 버전의 드라이버를 회피하고 싶습니다.
Will

다음 번에 xorg edgers ppa를 사용하고 열 때 ppa (및 작동)는 ppa를 비활성화하고 해당 패키지 버전을 사용합니다
xangua

2
sudo ppa-purge ppa:someppa/ppa
DmitrySandalov

그것은 내 경우에 모든 것을 제거
아무도

2

나는 오늘 같은 문제가 있었는데 ~ 2 주 전에 시스템에 업데이트를 설치했지만 새로운 nvidia 드라이버가있는 ubuntu-x-swat ppa가 활성화되어 있음을 알았습니다. 오래된 것은 괜찮 았고 새로운 것은 내 시스템을 깨뜨 렸습니다 (약간만 알아 차리는데 시간이 걸렸습니다).

그래서 /var/log/apt/history.log에서 내가 설치 한 nvidia 드라이버 패키지의 이전 버전 번호를 찾은 다음 / var / cache / apt / archives에서 패키지를 찾으려고 시도했습니다. apt에서 다운로드 한 모든 패키지를 찾으십시오. 그리고 ppa는 이전 버전의 패키지를 최신 버전으로 대체하지 않으므로 거기에서 얻을 수 없었습니다.

그러나 이전 패키지 버전에서 최신 버전으로의 차이는 모든 버전의 ppa로 유지되며 원본 tarball 및 데비안 패치와 함께 최신 버전의 모든 변경 사항을 되돌리고 이전 버전 소스를 얻을 수 있습니다.

필요한 단계를 간단히 설명하겠습니다.

  • ppa로 가서 최신 패키지 버전을 찾은 다음 원래 tarball 및 (선택적) 데비안 패치를 다운로드하십시오. 필자의 경우 해당 페이지에서 발견되었습니다.

    https://launchpad.net/~ubuntu-x-swat/+archive/x-updates/+sourcepub/2087970/+listing-archive-extra
    

    원래 타르볼의 이름은 다음과 같습니다.

    nvidia-graphics-drivers_290.10.orig.tar.gz
    

    tarball에서 빌드 가능한 패키지를 만드는 데비안 패치는 다음과 같습니다.

    nvidia-graphics-drivers_290.10-0ubuntu1~lucid~xup1.diff.gz
    
  • 새롭고 빈 디렉토리에있는 파일을 추출한 다음 소스 트리에 패치를 적용하십시오.

    ~/nvidia> tar xvzf nvidia-graphics-drivers_290.10.orig.tar.gz
    [...]
    ~/nvidia> gzip -d nvidia-graphics-drivers_290.10-0ubuntu1\~lucid\~xup1.diff.gz
    ~/nvidia> patch -p0 < nvidia-graphics-drivers_290.10-0ubuntu1\~lucid\~xup1.diff
    [...]
    

    패치 할 때 거부 된 청크가 없어야합니다.

  • 같은 페이지에서 "Available Diffs"섹션 아래에서 이전 패키지 버전과보고있는 버전과의 차이점을 찾을 수 있습니다.

    나를 위해 그것은 :

    diff from 285.05.09-0ubuntu1~lucid~xup1 to 290.10-0ubuntu1~lucid~xup1
    
  • 이를 다운로드하여 추출한 후 패치 된 원본 소스에 적용하십시오.

    ~/nvidia> gzip -d nvidia-graphics-drivers_285.05.09-0ubuntu1\~lucid\~xup1_290.10-0ubuntu1\~lucid\~xup1.diff.gz
    ~/nvidia> patch -R -p0 < nvidia-settings_285.05.09-0ubuntu1\~lucid\~xup1_290.10-0ubuntu1\~lucid\~xup1.diff
    [...]
    
  • 프레스토 악장! 이제 패키지를 빌드 할 준비가 된 이전 버전 소스 트리가 있어야합니다.

    ~/nvidia> mv nvidia-settings-290.10/ nvidia-settings-285.05.09
    ~/nvidia> cd nvidia-settings-285.05.09/
    ~/n/nvidia-settings-285.05.09> dpkg-buildpackage
    
  • dpkg와 함께 설치할 수있는 이전 버전 패키지를 제공해야합니다.

     ~/n/nvidia-settings-285.05.09> cd ..
     ~/nvidia> sudo dpkg -i nvidia-current_285.05.09-0ubuntu1\~lucid\~xup1_amd64.deb
     [...]
    

0

나중에 시냅틱을 사용하는 경우 (X로 부팅 할 수 있다고 가정) 변경할 패키지를 강조 표시 한 다음 메뉴에서 'force version'을 선택하여 사용 가능한 버전 중에서 선택할 수 있습니다. 거기서부터 다운 그레이드 할 수 있어야합니다.


0

[원래 포스터]

별로 재미가 없었기 때문에 차이점을 계산하고 restore 명령을 실행하는 스크립트를 작성했습니다. 약 100 개의 패키지가 관련되었습니다. 슬프게도 많은 패키지를 더 이상 사용할 수 없어 다운 그레이드에 실패했습니다.

#!/usr/bin/env python

import sys, getopt, os
from datetime import datetime
datefmt = "%Y-%m-%d %H:%M:%S"

dry_run = True
try:
    opts,args = getopt.getopt(sys.argv[1:],"y")
    if not args:
        raise Exception("no date specified")
    elif len(args) == 1:
        args.append("00:00:00") # default time
    elif len(args) != 2:
        raise Exception("unexpected arguments")
    snapshot = datetime.strptime(" ".join(args),datefmt)
    for opt,_ in opts:
        if opt == "-y":
            dry_run = False
        else:
            raise Exception("unsupported option %s"%opt)
except Exception as e:
    print "error:",e
    print "usage:",sys.argv[0],"[flags] YYYY-MM-DD [HH:MM:SS]"
    print "flags: -y = for real; don\'t just show it, restore it"
    sys.exit(1)

# work out what to do
history = {}
restore = set()
remove = set()
with open("/var/log/dpkg.log","r") as log:
    for line in log:
        date,time,action,line = line.split(None,3)       
        when = datetime.strptime("%s %s"%(date,time),datefmt)
        package,ver = line.strip().split(None,1)
        if when <= snapshot:
            if action in ("upgrade","install"):
                prev_ver,new_ver = ver.split()
                history[package] = new_ver
            elif action == "remove":
                if package in history:
                    del history[package]
                else:
                    print "(cannot remove %s)"%line
        else:
            if action == "install":
                remove.add(package)
            elif action == "upgrade":
                if package in history:
                    restore.add(package)
                elif package not in remove:
                    print "(cannot revert %s)"%line
            elif action == "remove":
                if package in history:
                    restore.add(package)
                elif package in remove:
                    remove.remove(package)
                else:
                    print "(cannot revert %s)"%line

# show what to do
for package in restore:
    print "restore",package,history[package]
for package in remove:
    print "remove",package

# do it
if not dry_run:
    print "======"
    def execute(cmd):
        print cmd
        os.system(cmd)
    #execute("apt-get remove "+" ".join(remove))
    execute("apt-get install "+" ".join("%s=%s"%(package,history[package]) for package in restore))

불쌍한 너. 설치 히스토리가에서 사용 가능하다는 것을 알고 /var/log/apt/history.log있습니까?
Lekensteyn 2016 년

dpkg.log는 동일한 정보이지만 apt 이외의 다른 앱도 포함합니다.

다른 앱에서 dpkg직접 사용하는 것은 무엇입니까 ? 시냅틱은의 프론트 엔드입니다 apt-get.
Lekensteyn 2016 년

사용자는 dpkg를 직접 사용할 수 있습니다. 사용자는 gdebi 또는 다른 도구를 대신 사용할 수도 있습니다. 구문 분석 할 파일을 선택해야하므로 적절한 파일 인 dpkg.log를 선택했습니다. apt를 독점적으로 사용하지만 동일한 차이점이 발생합니다.
Will
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.