डाउनग्रेड ppa संकुल समय में पिछले बिंदु पर उपलब्ध संस्करणों के लिए


15

बैकस्टोरी यह है कि सामान्य इंटेल जीपीयू ड्राइवर विभिन्न ओपनगेल एक्सटेंशन नहीं करते हैं जो मेरे शौक कोडिंग और कुछ गेम चाहते हैं। इसलिए मुझे xorg-edgers स्थापित करना है और फिर इसकी खुशी है। हालांकि, पिछले बुधवार या तो वहाँ एक अद्यतन करने के लिए किया गया था Xorg-edgers - बहुत सारे संकुल - और यह बुरी तरह से टूट गया; ड्राइवर लॉक हो जाते हैं और पूरे कंप्यूटर को अपने साथ ले जाते हैं; हार्ड रीसेट की आवश्यकता है।

तो आप डाउनग्रेड कैसे कर सकते हैं - एक पीपीए में पैकेज संस्करणों का चयन करें जो अतीत में एक बिंदु का प्रतिनिधित्व करते हैं, उस संस्करण को नए की तुलना में अनदेखा कर रहे हैं?

जवाबों:


18

दैनिक कार्य के लिए xorg-edgers ppa का उपयोग करना एक बहुत बुरा विचार हो सकता है।

यह आपको नवीनतम ड्राइवर दे सकता है, सच है, लेकिन आपको काम करने वाले ड्राइवर भी नहीं मिल सकते हैं।

एक पीपीए को हटाने के लिए और इसके द्वारा प्रतिस्थापित पैकेज को डाउनग्रेड करें (इसलिए आधिकारिक रिपॉजिटरी पर उपलब्ध लोगों के लिए वापस जा रहे हैं), पहले ppa-purge स्थापित करें:

sudo apt-get install ppa-purge

और फिर पीपीए को हटा दें, आधिकारिक पैकेजों पर इनायत से उन्नयन करें:

sudo ppa-purge ppaname

यह आपके पैकेज को आधिकारिक लोगों को वापस डाउनग्रेड करना चाहिए।

अन्य पैकेज जो PPA में थे, लेकिन आधिकारिक रिपॉजिटरी में नहीं थे, उन्हें अनइंस्टॉल नहीं किया जाएगा। आपको मैन्युअल रूप से पैकेज मैनेजर को उन्हें हटाने के लिए कहना चाहिए, उदाहरण के लिए apt का उपयोग करके:

sudo apt-get purge packagename

आप उबंटू सेटिंग्स के "सॉफ्टवेयर स्रोत" अनुभाग को देखने वाले पीपीए का नाम पा सकते हैं, और इसके लॉन्चपैड पेज पर प्रदान किए जाने वाले पैकेजों की एक सूची देख सकते हैं (या यदि स्थापित हो, तो सिनैप्टिक पैकेज मैनेजर के "मूल" अनुभाग को देख सकते हैं)।


1
जैसा कि मैंने कहा, सामान्य ड्राइवर मेरे लिए काम नहीं करते हैं। मुझे xorg-edgers की आवश्यकता है। मैं बस अपने ड्राइवरों के नवीनतम संस्करण को दरकिनार करना चाहता हूं।
विल

अगली बार जब आप xorg
edgers ppa का

2
sudo ppa-purge ppa:someppa/ppa
दिमित्रीसंडालोव

यह मेरे मामले में प्रत्येक को दूर कर रहा है
दोपहर

2

मुझे आज भी यही समस्या थी, मैंने देखा कि ~ 2 सप्ताह पहले मैंने अपने सिस्टम में अपडेट इंस्टॉल किया था और अभी भी ubuntu-x-swat ppa सक्षम था जिसमें एक नया nvidia ड्राइवर था। पुराना ठीक था, नए ने मेरी प्रणाली को तोड़ दिया (केवल थोड़ा सा, मुझे नोटिस करने में थोड़ा समय लगा)।

इसलिए मैंने nvidia ड्राइवर पैकेज के पिछले संस्करण संख्या को खोजने के लिए /var/log/apt/history.log में देखा था और फिर / var / cache / apt / अभिलेखागार में पैकेज खोजने की कोशिश की, जहां आप सामान्य रूप से होंगे उपयुक्त द्वारा डाउनलोड किए गए सभी पैकेज खोजें, लेकिन यह वहाँ नहीं था। और पीपा अपने पैकेजों के पिछले संस्करण को एक बार के आसपास नहीं रखता है, क्योंकि वे एक नए संस्करण से अलग हो जाते हैं, इसलिए मैं इसे वहां से प्राप्त नहीं कर सकता।

लेकिन, पिछले पैकेज संस्करण से नए में अलग-अलग सभी संस्करणों के लिए ppa में रखा गया है, और मूल टारबॉल और इसके डेबियन पैच के साथ नए संस्करण के सभी परिवर्तनों को उलट करना और पिछले संस्करण स्रोतों को प्राप्त करना संभव है।

मैं संक्षेप में neccessary चरणों का वर्णन करूँगा:

  • पीपीए पर जाएं, नवीनतम पैकेज संस्करण ढूंढें और मूल टारबॉल और (वैकल्पिक) डेबियन पैच डाउनलोड करें, मेरे मामले में जो उस पृष्ठ पर पाए गए थे:

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

    मूल टारबॉल का नाम है:

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

    डेबियन पैच, जो एक निर्माण योग्य पैकेज को टारबॉल से बाहर करते हैं:

    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
    [...]
    

    पैचिंग करते समय आपको कोई भी खारिज नहीं किया जाना चाहिए।

  • एक ही ppa पृष्ठ पर आपको "उपलब्ध डिफिक्स" पेक्टन के तहत पिछले पैकेज संस्करण से एक भिन्न मिलेगा, जिसे आप देख रहे हैं।

    मेरे लिए यह था:

    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
    [...]
    
  • Presto! अब आपके पास पैकेज बनाने के लिए पिछला संस्करण स्रोत ट्री तैयार होना चाहिए:

    ~/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 में बूट कर सकते हैं) आप उपलब्ध संस्करणों से चयन कर सकते हैं पैकेज को बदलने के लिए और फिर मेनू से 'बल संस्करण' का चयन कर सकते हैं। वहां से आपको डाउनग्रेड करने में सक्षम होना चाहिए।


0

[मूल पोस्टर]

बहुत मज़ा नहीं आ रहा है, मैंने अंतर की गणना करने और पुनर्स्थापना आदेश को निष्पादित करने के लिए एक स्क्रिप्ट लिखी; इसमें लगभग 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.log एक ही जानकारी है, लेकिन apt के अलावा अन्य ऐप्स भी शामिल हैं।
विल

दूसरे ऐप्स dpkgसीधे क्या उपयोग करते हैं? सिनैप्टिक का अग्र-छोर है apt-get
लेकेनस्टाइन

उपयोगकर्ता सीधे dpkg का उपयोग कर सकता है; उपयोगकर्ता इसके बजाय gdebi या किसी अन्य उपकरण का उपयोग कर सकते हैं। मुझे पार्स करने के लिए एक फ़ाइल चुननी थी, इसलिए मैंने एक उचित फ़ाइल - dpkg.log को चुना। ऐसा होता है कि मैं विशेष रूप से उपयुक्त है, लेकिन एक ही अंतर का उपयोग करें।
विल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.