답변:
일상 업무에 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"섹션 참조).
sudo ppa-purge ppa:someppa/ppa
나는 오늘 같은 문제가 있었는데 ~ 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
[...]
[원래 포스터]
별로 재미가 없었기 때문에 차이점을 계산하고 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
있습니까?
dpkg
직접 사용하는 것은 무엇입니까 ? 시냅틱은의 프론트 엔드입니다 apt-get
.