আমি কীভাবে প্যাকেজগুলিকে তাদের নির্ভরশীলতা না সরিয়ে ডাউনগ্রেড করতে পারি?


17

আমার কাছে অনেকগুলি মেসা প্যাকেজ রয়েছে যা আমি পিপিএ সংস্করণে আপগ্রেড করেছি, পিপিএ পরিষ্কার করার আগে যাতে আমি আমার সিস্টেমটি আপগ্রেড করতে পারি। সংস্করণগুলির পার্থক্যগুলি সামান্য (তারা প্রযুক্তিগতভাবে একই, গ্রন্থাগারের এক সেট কেবল গিট থেকে এবং অন্যগুলি চূড়ান্ত সংস্করণ ছিল)।

যদি আমি সিনাপটিক, অ্যাপট-গেট বা অ্যাপটিউটিউডের মাধ্যমে ডাউনগ্রেড করার চেষ্টা করি তবে আমি নির্ভরতা নরকের মধ্যে নিক্ষিপ্ত হব।

প্যাকেজগুলি ম্যানুয়ালি ডাউনগ্রেড করার কোনও উপায় আছে (সম্ভবত একের পর এক) এবং তাদের সম্পন্ন প্যাকেজগুলি অস্থাবর হিসাবে চিহ্নিত করুন (যদি তা বোঝা যায়) যতক্ষণ না আমার কাজ শেষ হয়?

পিএস এই প্রশ্ন: কীভাবে প্যাকেজটি এপ্টি-গেইনের মাধ্যমে ডাউনগ্রেড করবেন? কিছুটা আলাদা এবং এই পরিস্থিতিতে সাহায্য করে না।


তুমি কেন আগে না ppa-purge?
ল্যান্ড্রোনি

আপনি প্যাকেজটি পুনরায় ইনস্টল করতে পারেন example উদাহরণস্বরূপ আপনি যদি synapticxyz প্যাকেজটি নির্বাচন করেন তবে সমস্ত নির্ভরতা ডিফল্টরূপে নির্বাচিত হবে ut তবে আপনি সবসময় সমস্ত নির্ভরতা অনির্বাচিত করতে পারেন এবং কেবলমাত্র মূল প্যাকেজ ইনস্টল করতে পারেন ater তবে আপনি সমস্ত নির্ভরতা ইনস্টল করতে পারেন ut তবে আবার, আপনি কেবল পুনরায় ইনস্টল করতে প্রস্তুত থাকলে এটি কাজ করে।
নিবন্ধিত ব্যবহারকারী

@ ল্যান্ড্রোনি যদি আমি সাফ করি তবে এটি প্যাকেজগুলি সরিয়ে ফেলতে চাইবে না remove
RolandiXor

উত্তর:


13

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


অন্য কিছু যদি না কাজ করে তবে আপনি এই উত্তরে প্রস্তাবিত ম্যানুয়াল পদ্ধতিটি গ্রহণ করতে পারেন: কীভাবে প্যাকেজটি এপ-গেটের মাধ্যমে ডাউনড্রেড করবেন? । মূলত, প্রয়োজনীয় ডাউনলোড .debপ্যাকেজ নিজে, তারপর তাদের এক নিম্ন স্তরের ব্যবহার করে ইনস্টল dpkgএবং তার জোরালো আর্গুমেন্ট এক: --ignore-depends,--force-depends , --force-depends-version, অথবা এমনকি --force-all

উপরের মত একই চেতনায় আপনার --force-downgradeযুক্তি রয়েছে:

          downgrade(*): Install a package, even if newer version of
          it is already installed.

          Warning:  At  present  dpkg  does  not  do any dependency
          checking on downgrades and therefore will not warn you if
          the  downgrade  breaks the dependency of some other pack‐
          age. This can  have  serious  side  effects,  downgrading
          essential system components can even make your whole sys‐
          tem unusable. Use with care.

তবে এটি ধরে নেয় যে আপনি পড়েছেন man dpkgএবং আপনি কী করেন তা আপনি বুঝতে পেরেছেন:

          Warning: These options are mostly intended to be used  by
          experts  only.  Using  them  without  fully understanding
          their effects may break your whole system.

ত্রুটি দেখুন : সংস্করণ নম্বরটি অঙ্কের সাথে শুরু হয় না এবং জাভা এর পুরানো সংস্করণটি কীভাবে ইনস্টল করা যায় এবং তরল ২.২.২ এর মতো প্যাকেজের পুরানো সংস্করণটি কীভাবে ইনস্টল করবেন? উদাহরণস্বরূপ:

sudo dpkg --force-downgrade -i your_mesa_package.deb

এবং দেখুন কিছু নির্ভরতা ইনস্টল না করে আমি কীভাবে একটি প্যাকেজ ইনস্টল করতে পারি? উদাহরণস্বরূপ (যথাযথ সতর্কতা সহ) এর জন্য:

sudo dpkg --force-all -i your_mesa_package.deb

তবুও আরেকটি উপায় হ'ল .debপ্যাকেজটি ব্যবহার করে একটি ডামি প্যাকেজ তৈরি করা equivs(এবং সম্ভবত কিছুটা আলাদা নাম)। তারপরে ডামি প্যাকেজটি ইনস্টল করা আপনাকে প্রাসঙ্গিক ডিপগুলি রাখার সময় "সত্য" প্যাকেজটি সরিয়ে ফেলতে এবং তারপরে পুরানো সংস্করণ ইনস্টল করা উচিত। এটি ঠিক কীভাবে কাজ করবে তা সম্পর্কে আমি নিশ্চিত নই, তবে বিশদটির জন্য এই প্রাসঙ্গিক থ্রেডটি পরীক্ষা করে দেখুন: কীভাবে কোনও ডেব এর নির্ভরতা অপসারণ ছাড়াই অপসারণ করা যায়


4

আপনি প্রথমে সিস্টেমে ইনস্টল করা apt-markসমস্ত লক্ষ্য প্যাকেজের নির্ভরতা (এবং সম্ভবত প্রস্তাবিত / প্রস্তাবিতগুলিও) ম্যানুয়াল ইনস্টল হিসাবে চিহ্নিত করতে ব্যবহার করতে পারেন । এটি করার পরে, সফ্টওয়্যারটির পূর্ববর্তী সংস্করণগুলি apt-getস্পষ্টভাবে উল্লেখ করে সংস্করণটি ইনস্টল করুন ।

  • নির্ভরতা তালিকাভুক্ত করতে, লক্ষ্য-প্যাকেজের জন্য প্রস্তাবিত প্রস্তাবিত প্যাকেজগুলি:

    apt-cache show <target-package-name>
    
  • প্যাকেজগুলি ম্যানুয়ালি ইনস্টল করা হিসাবে চিহ্নিত করা হচ্ছে :

    sudo apt-mark manual <package-name(s)>
    

    (এটি সমস্ত নির্ভরতাগুলির জন্য ব্যবহার করুন, প্রস্তাবিত এবং প্রস্তাবিত))

  • লক্ষ্য-প্যাকেজটি সরান:

    sudo apt-get remove <target-package-name>
    
  • আপনি যে প্যাকেজ সংস্করণগুলিকে ডাউনগ্রেড / আপগ্রেড করতে পারেন তার একটি তালিকা দেখতে, ব্যবহার করুন:

    apt-cache policy <target-package-name>
    
  • প্রয়োজনীয় প্যাকেজের লক্ষ্য সংস্করণটি ইনস্টল করুন:

    sudo apt-get install <target-package-name>=<target-package-version-number> 
    

    অথবা

    sudo apt-get -t=<target release> install <target-package-name>
    

পুনশ্চ. যদি নির্ভরতা / প্রস্তাবিত / প্রস্তাবিত প্যাকেজগুলির তালিকা অর্থাৎ যেগুলি চিহ্নিত করতে হয় সেগুলি apt-markবড় হয় তবে প্যাকেজড আউটপুটটির উদ্দেশ্যে তালিকাটি apt-cache show <target-package-name>কোনও ফাইলের মাধ্যমে সংরক্ষণ করুন /path/to/fooএবং apt-markকম্বোতে এটি ব্যবহার করুন :

cat /path/to/foo | xargs -imarkthese sudo apt-mark manual markthese

এই পদ্ধতিটি কার্যকর হতে পারে তবে 100 টির বেশি প্যাকেজ চিহ্নিত করার পরিবর্তে আমি অন্য উত্তরটি দিয়ে চলেছি।
RolandiXor

@ রোল্যান্ডিওক্সোর, আপনি apt-cache policy <target-package-name>যে প্যাকেজ সংস্করণগুলিকে ডাউনগ্রেড / আপগ্রেড করতে পারেন তার একটি তালিকা থাকার জন্য আপনি ব্যবহার করতে পারেন
যথাযথ

.. দয়া করে পোস্টটিতে সম্পাদনাটি উল্লেখ করুন; যদি বৃহত সংখ্যক ফাইল চিহ্নিত করা হয় তবে আপনি অন্তর্ভুক্ত কমান্ড কম্বো ব্যবহার করতে পারেন ...
যথাযথ

আমি মনে করি না আপনি আমাকে বুঝতে পেরেছেন। যাইহোক, আমি এখনই এটি ঠিক করে ফেলেছি এবং আমি বরকতটি দিয়েছি (এটি স্যুইচ করতে পারে না)।
RolandiXor

1

আমি সবেমাত্র প্যাকেজের একটি প্রবাহ সংস্করণে আপগ্রেড করার ব্যথাটি পেরিয়েছি এবং তারপরে ডাউনগ্রেড করার সিদ্ধান্ত নিয়েছি। এটি ছিল একটি রক্ষণাবেক্ষণকারী বেসরকারী সংগ্রহস্থলের মাধ্যমে। আমার ক্ষেত্রে এটি সর্বশেষতম সিস্টেমেড 233 সংস্করণ চেষ্টা করে (এখনও অপ্রকাশিত)।

কীটি বুঝতে হবে যে আপনাকে যে সমস্ত প্যাকেজ ডাউনগ্রেড করা উচিত তা নির্দিষ্ট করতে হবে। আপনি যদি এই অধিকারটি পান তবে সম্ভাবনা যথাযথ যা আপনি চান তা করবে। আপনি যদি কিছু মিস করেন তবে অ্যাপ্ট আপনাকে বলে দেবে যে ক্রিয়াটি প্রচুর প্যাকেজ সরিয়ে ফেলবে। নিশ্চিত করার জন্য আমরা '-s' পতাকাটি ব্যবহার করার আগে ডাউনগ্রেড চেষ্টা করে দেখতে চেষ্টা করি।

আপনার যে পদক্ষেপগুলি নিতে হবে তা হ'ল:

1) আপস্ট্রিমে আপগ্রেড করা সমস্ত নির্ভরতা তালিকাভুক্ত করুন (আপনার পরিস্থিতি আলাদা হলে কিছু অন্যান্য কীওয়ার্ড ব্যবহার করুন):

dpkg -l|grep upstream

এটি আপনাকে প্রবাহের সংস্করণ নম্বর সহ প্যাকেজগুলির একটি তালিকা দেয়।

2) প্রতিটি প্যাকেজের জন্য সঠিক স্থিতিশীল সংস্করণটি তালিকাভুক্ত করুন:

for i in libnss-resolve:amd64 libsystemd0:amd64 libpam-systemd:amd64 libsystemd0:i386 libudev1:amd64 libudev1:i386 systemd systemd-sysv udev; do apt-cache show $i; done|grep Version

3) ডাবল চেক সব ভাল:

apt -s --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5

0 to upgrade, 0 to newly install, 9 to downgrade, 0 to remove and 0 not to upgrade.

(নিশ্চিত না - - ইনস্টলটি বিটিডব্লিউর দরকার ছিল কিনা, তবে আমি এটি করেছি)

4) -স সরান এবং এটি করুন।

apt --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.