সময় পূর্ববর্তী পয়েন্টে উপলব্ধ পিপিএ প্যাকেজগুলিকে ডাউনগ্রেড করে


15

ব্যাকস্টোরিটি হ'ল আমার শখের কোডিং এবং কিছু গেমগুলি যে সাধারণ ওপেন জিএল এক্সটেনশানগুলি সাধারনত ইনটেল জিপিইউ ড্রাইভাররা করে না। সুতরাং আমাকে xorg-edgers ইনস্টল করতে হবে এবং তারপরে এটি খুশি। যাইহোক, গত বুধবার বা তাই xorg-edgers - আপডেটের প্রচুর প্যাকেজ ছিল - এবং এটি খারাপভাবে ভেঙে গেছে; ড্রাইভারগুলি লকআপ করে এবং পুরো কম্পিউটারটি তাদের সাথে নিয়ে যায়; হার্ড রিসেট প্রয়োজন।

সুতরাং আপনি কীভাবে ডাউনগ্রেড করতে পারেন - পিপিএতে প্যাকেজ সংস্করণগুলি নির্বাচন করুন যা অতীতের কোনও পয়েন্ট উপস্থাপন করে, এর চেয়েও নতুন সংস্করণ উপেক্ষা করে?

উত্তর:


18

প্রতিদিনের কাজের জন্য xorg-edgers পিপিএ ব্যবহার করা বেশ খারাপ ধারণা হতে পারে।

এটি আপনাকে সর্বশেষতম ড্রাইভার প্রদান করতে পারে সত্য, তবে আপনি চালিত ড্রাইভারও পেতে পারেন।

একটি পিপিএ সরানোর জন্য এবং এর দ্বারা প্রতিস্থাপিত প্যাকেজগুলি ডাউনগ্রেড করতে (তাই সরকারী সংগ্রহস্থলগুলিতে উপলব্ধ যেগুলিতে ফিরে যেতে পারে), প্রথমে পিপিএ-পার্জ ইনস্টল করুন:

sudo apt-get install ppa-purge

এবং তারপরে পিপিএ সরান, সরকারী প্যাকেজগুলিতে করুণভাবে ডাউনগ্রেড করুন:

sudo ppa-purge ppaname

এটি আপনার প্যাকেজগুলি অফিসিয়ালগুলিতে ফিরে যেতে হবে।

অন্যান্য প্যাকেজগুলি যে পিপিএতে ছিল তবে সরকারী সংগ্রহস্থলগুলিতে নেই তা আনইনস্টল করা হবে না। প্যাকেজ ম্যানেজারকে ম্যানুয়ালি তাদের মুছে ফেলার জন্য বলা উচিত, উদাহরণস্বরূপ এপটি ব্যবহার করে:

sudo apt-get purge packagename

আপনি উবুন্টু সেটিংসের "সফটওয়্যার সোর্স" বিভাগটি দেখছেন এবং তার লঞ্চপ্যাড পৃষ্ঠায় এটি সরবরাহ করে এমন প্যাকেজগুলির একটি তালিকা (অথবা ইনস্টল করা থাকলে সিনাপটিক প্যাকেজ ম্যানেজারের "উত্স" বিভাগটি দেখছেন) পিপিএর নামটি পেতে পারেন।


1
আমি যেমন বলেছি, সাধারণ ড্রাইভাররা আমার পক্ষে কাজ করে না। আমার xorg-edgers দরকার। আমি কেবল আমার ড্রাইভারগুলির অতি সাম্প্রতিকতম সংস্করণটিকেই পাশ কাটাতে চাই।
উইল

পরের বার আপনি xorg edgers পিপিএ ব্যবহার করুন (এবং কাজ করে) কেবল পিপিএ অক্ষম করুন এবং সেই প্যাকেজ সংস্করণগুলি সহ আটকে দিন
xangua

2
sudo ppa-purge ppa:someppa/ppa
দিমিত্রিসান্ডালভ

এটা আমার ক্ষেত্রে সবকিছু মুছে ফেলার পদ্ধতি
Noone

2

আমার আজ একই সমস্যা ছিল, আমি লক্ষ্য করেছি যে ~ 2 সপ্তাহ আগে আমি আমার সিস্টেমে আপডেটগুলি ইনস্টল করেছি এবং এখনও উবুন্টু-এক্স-সোয়াট পিপিএ সক্ষম করেছি যার একটি নতুন এনভিডিয়া ড্রাইভার রয়েছে। পুরানো ভাল ছিল, নতুনটি আমার সিস্টেমটি ভেঙে ফেলেছে (কেবলমাত্র সামান্য, এটি খেয়াল করতে আমাকে কিছুটা সময় লাগল)।

সুতরাং আমি ইনস্টল করা এনভিডিয়া ড্রাইভার প্যাকেজের আগের সংস্করণ নম্বরটি অনুসন্ধান করার জন্য /var/log/apt/history.log সন্ধান করেছি এবং তারপরে / var / cache / apt / সংরক্ষণাগারে প্যাকেজটি সন্ধান করার চেষ্টা করেছি, যেখানে আপনি সাধারণত অ্যাপ দ্বারা ডাউনলোড করা সমস্ত প্যাকেজ সন্ধান করুন, কিন্তু এটি সেখানে ছিল না। এবং পিপিএ তার প্যাকেজগুলির পূর্ববর্তী সংস্করণটি প্রায় একবার রাখে না যখন সেগুলি একটি নতুন সংস্করণ দ্বারা বাতিল করা হয় সুতরাং আমি সেখান থেকে এটি পেতাম না।

তবে, পূর্বের প্যাকেজ সংস্করণ থেকে নতুনের পরিবর্তিত সংস্করণগুলি সমস্ত সংস্করণের জন্য পিপিএতে রাখা হয়েছে এবং মূল টার্বল এবং এর ডিবিয়ান প্যাচগুলির সাথে একসাথে নতুন সংস্করণের সমস্ত পরিবর্তনগুলি বিপরীত করা এবং পূর্ববর্তী সংস্করণ উত্সগুলি পাওয়া সম্ভব।

আমি সংক্ষেপে প্রয়োজনীয় পদক্ষেপগুলি বর্ণনা করব:

  • পিপিএ-তে যান, নতুন প্যাকেজ সংস্করণটি সন্ধান করুন এবং মূল টার্বল এবং (alচ্ছিক) ডিবিয়ান প্যাচগুলি ডাউনলোড করুন, আমার ক্ষেত্রে সেগুলি এই পৃষ্ঠায় পাওয়া গেছে:

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

    প্যাচিংয়ের সময় আপনার কোনও প্রত্যাখ্যাত খণ্ডগুলি পাওয়া উচিত নয়।

  • একই পিপিএ পৃষ্ঠায় আপনি পূর্ববর্তী প্যাকেজ সংস্করণ থেকে আপনি যেটির দিকে তাকিয়েছেন তার থেকে একটি আলাদা পাওয়া যাবে, "উপলব্ধ ডিফস" বিভাগের অধীনে।

    আমার জন্য ছিল:

    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

ভবিষ্যতে, আপনি যদি সিন্যাপটিক ব্যবহার করে থাকেন (ধরে নিচ্ছেন যে আপনি এক্সে বুট করতে পারেন) আপনি প্যাকেজটি পরিবর্তন করতে হাইলাইট করে এবং তারপরে মেনু থেকে 'ফোর্স সংস্করণ' নির্বাচন করে উপলভ্য সংস্করণগুলি থেকে নির্বাচন করতে পারেন। সেখান থেকে আপনার ডাউনগ্রেড করতে সক্ষম হওয়া উচিত।


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 একই তথ্য তবে অ্যাপ্লিকেশন ব্যতীত অন্যান্য অ্যাপ্লিকেশন সহ।
উইল

অন্য কোন অ্যাপস dpkgসরাসরি তখন ব্যবহার করেন ? সিনাপটিক একটি ফ্রন্ট-এন্ড apt-get
লেকেনস্টেইন

ব্যবহারকারী সরাসরি dpkg ব্যবহার করতে পারেন; পরিবর্তে ব্যবহারকারী gdebi বা অন্য কোনও সরঞ্জাম ব্যবহার করতে পারেন। পার্স করার জন্য আমাকে একটি ফাইল বাছাই করতে হয়েছিল, তাই আমি একটি সঠিক ফাইলটি বেছে নিয়েছি - dpkg.log log এটি ঘটে থাকে আমি একচেটিয়াভাবে, তবে একই তফাতটি ব্যবহার করি।
উইল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.