আমি কীভাবে একটি দুর্নীতিগ্রস্থ dpkg স্থিতি ফাইলটি পুনর্নির্মাণ করব?


26

যখনই আমি টাইপ করি sudo apt-get removeএবং তারপরে Tabস্বয়ংক্রিয়ভাবে সমাপ্তির জন্য কী টিপব আমি নিম্নলিখিত বার্তাটি পাই:

grep-status: /var/lib/dpkg/status:15945: expected a colon
.

আমি স্ট্যাটাস ফাইলে 15945 লাইনে বিশেষ করে অদ্ভুত কিছু দেখতে পাচ্ছি না। এটি একটি মনো লাইব্রেরি প্যাকেজের বিবরণ ক্ষেত্রের একটি বিন্দুর চরিত্র এবং কোনও কোলন সন্নিবেশ করায় কোনও লাভ হয়নি। বিন্দুযুক্ত লাইনটি সরিয়ে ফেলাও কার্যকর হয়নি। স্ট্যাটাস-পুরানো ফাইলটি ওভাররাইটিংয়ের ফলে একই বার্তায় ফলস্বরূপ।

স্থিতি ফাইলটি পুনর্নির্মাণের কোনও উপায় আছে?


3
আমি মনে করি না আপনি statusফাইলটি পুরোপুরি পুনর্নির্মাণ করতে পারেন : এটি তথ্যের একটি প্রাথমিক উত্স এবং এর অনেকগুলি অনর্থক হলেও এটি সমস্ত নয়। তবে সম্ভবত ম্যানুয়ালি ফাইলটি মেরামত করা সম্ভব। সমস্যাযুক্ত লাইন প্রায় ফাইলের একটি খণ্ড পোস্ট করুন, অন্তত একটি সহ 20-40 লাইন বলে Package:আগে ও পরে লাইন লাইন 15945.
গিলেজ 'SO- স্টপ হচ্ছে মন্দ'

আমি তখন থেকে মনো আনইনস্টল করার চেষ্টা করেছি কিন্তু এটি সমস্তই ছিল লাইন নম্বরটি পরিবর্তন করে যা ত্রুটি হিসাবে প্রতিবেদন করা হয়। আপনি যদি পেস্ট লিঙ্কটি অনুসরণ করেন তবে আপত্তিজনক লাইন নম্বরটি 25, "বিভাগ: পাইথন" পেস্ট.বুন্টু.com
রামন

@ রামোন সুতরাং, apt-get, dpkgএবং বন্ধুদের এখনও সঠিকভাবে কাজ, এবং স্বয়ংক্রিয়-সমাপ্তি কি আউট erroring করা হয়?
রিকার্ডো মুরি

সঠিক। অটো-সম্পূর্ণকরণ ব্যবহার করার সময় কেবলমাত্র স্থিতি ফাইলটি পার্স করতে সমস্যা হচ্ছে বলে মনে হচ্ছে। আমি অন্যথায় কোনও স্পষ্ট ত্রুটি ছাড়াই প্যাকেজগুলি ইনস্টল এবং মুছে ফেলতে পারি।
রামন

একই সমস্যা হচ্ছে। আমি মনে করি না যে এই অ্যাপ্লিকেশনটির ডাটাবেসের কোনও পুরানো সংস্করণ অন্ধভাবে ব্যবহার করা এই সমস্যাটিকে নির্ধারণ না করেই এখানে কাজ করা সঠিক জিনিস ।
অলি

উত্তর:


7

আমি শেষ পর্যন্ত এই আমার সিস্টেম স্থির করেছি। এত দিন আমার সমস্যা থাকায় স্থিতি ফাইলটির ব্যাকআপ পুনরুদ্ধার করা কাজ করে না, এটি আমার সমস্ত ব্যাকআপে।

ফিক্সটি প্রকৃত বিন্যাস বিরতির জন্য গ্রেপিং এবং ম্যানুয়ালি তাদের ঠিক করা জড়িত। এটি যতটা শক্ত লাগে ততটা শক্ত নয়।

http://thepcspy.com/read/fixing-dpkg-status-corruption/


আপনি খুশি হলেন একটি সমাধান, ওলি এবং ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমার ক্ষেত্রে, সমস্যাযুক্ত লেক্সমার্ক দেবের পাশাপাশি, একটি ওয়েবমিন ডেবেও এর বিবরণটি ত্রুটিযুক্ত করেছিল কিন্তু সেই ক্ষেত্রে এটি কোনও স্বয়ংক্রিয়রূপে কাজ করার সময় কোনও পার্সিং সমস্যা সৃষ্টি করে না। রহস্যময়।
রামন

3
@ অলি আপনি কি লাইসেন্স ধারক? আপনি কি এখানে লিখতে পারেন?
ব্রায়াম

এটি সত্য, ভাল যে আমি আপনার পোস্টটি পড়েছি। আমার একটি ছিল missing package nameএবং আমি এটি জানতে পেরেছিলাম যে, কিছু অদ্ভুত কারণে আমি আমার সময়টি নষ্ট করার চেয়ে ভালভাবে Packaga: landscape-commonকাটছি না, আমার একটি লাইন ছিল যা অর্টোগ্রাফিকভাবে স্থির করে দেওয়া হয়েছিল, সমস্যা সমাধান হয়েছিল। কথাটি হ'ল, আমি এই ফাইলটি কখনও স্পর্শ করি নি, অন্য কারও কাছেও নেই। একটি কম্পিউটার কীভাবে বানানের ভুল নিয়ে গণ্ডগোল করতে পারে?
সেভেরো রাজ

আসল উত্তরটিও এখানে থাকা উচিত, এটিকে একটি লিঙ্ক-কেবল উত্তর হিসাবে এড়িয়ে চলতে [যদি ত্রুটিটি কোনও "ফাঁকা লাইন" প্যাকেজ: "এর আগে থাকে না তবে তার পরে .ফাঁকা রেখায় একটি যুক্ত করুন ]।
Xen2050

20

আপনার আগের কোনও ভাল ভাল স্ট্যাটাস ফাইল এবং সেখান থেকে আপডেটের সাথে কাজ করতে সক্ষম হওয়া উচিত। আপনি যখনই কোনও ইনস্টল বা আপডেট করেন, স্থিতি ফাইলটি / ভার / ব্যাকআপের আওতায় জিজেপড ব্যাকআপে সংরক্ষণ করা হয় । ডিরেক্টরিতে একটি ls -l dpkg * করা দেখায়:

-rw-r--r-- 1 root root   2266732 2010-09-30 08:35 dpkg.status.0
-rw-r--r-- 1 root root    624182 2010-09-29 08:49 dpkg.status.1.gz
-rw-r--r-- 1 root root    623844 2010-09-28 08:55 dpkg.status.2.gz
-rw-r--r-- 1 root root    620358 2010-09-24 11:04 dpkg.status.3.gz
-rw-r--r-- 1 root root    619021 2010-09-23 15:34 dpkg.status.4.gz
-rw-r--r-- 1 root root    619013 2010-09-23 08:03 dpkg.status.5.gz
-rw-r--r-- 1 root root    618968 2010-09-21 08:33 dpkg.status.6.gz

স্ট্যাটাস-ওল্ড নামের / var / lib / dpkg / ডিরেক্টরিতে তৈরি ফাইলটির একটি ব্যাকআপও রয়েছে। ডিরেক্টরিতে একটি ls -l অবস্থা * করা দেখায়:

-rw-r--r-- 1 root root 2266732 2010-09-30 08:35 status
-rw-r--r-- 1 root root 2267191 2010-09-30 08:35 status-old

সুতরাং, কোনও দুর্নীতি থেকে উদ্ধার পেতে, আপনার নিম্নলিখিতগুলি করতে সক্ষম হবেন:

1. দূষিত স্থিতি ফাইলটির একটি ব্যাকআপ নিন :

mv /var/lib/dpkg/status /var/lib/dpkg/status_bkup

২. উপরোক্ত উত্সগুলির মধ্যে থেকে একটি সাম্প্রতিক ডিপি কেজি স্থিতি ফাইলটি অনুলিপি করুন:

পারেন

cp /var/lib/dpkg/status-old /var/lib/dpkg/status

অথবা

cp /var/backups/dpkg.status.#.gz /var/lib/dpkg/
gunzip -d /var/lib/dpkg/dpkg.status.#.gz 
mv /var/lib/dpkg/dpkg.status.# /var/lib/dpkg/status

3. তারপরে অ্যাপটি-গেট আপডেট চালান:

sudo apt-get update

যা করা উচিৎ.


2
আমি / var / ব্যাকআপগুলিতে রাখা স্ট্যাটাস ফাইলগুলি সম্পর্কে জানতাম না। এটি আবার ঘটলে এটি ভাল তথ্য। ধন্যবাদ, জিম
রামন

তবে এটি কি পুরানো সংস্করণ ব্যবহার করা নিরাপদ? আমি বোঝাতে চাইছি, এটি কেবলমাত্র অটো-সম্পূর্ণ নয় যা এই ফাইলটি ব্যবহার করে এবং পুরানো প্যাকেজ তথ্য সহ একটি পুরানো সংস্করণ ব্যবহার করা অন্যান্য, আরও বেশি গুরুত্বপূর্ণ বিষয়গুলিকে স্ক্রু করতে চলেছে ... যেমন নিজেকে উপযুক্ত।
অলি

অলি আমি নিশ্চিত নই আমি কেবল একবার এটি করতে হয়েছিল। আমি মনে করি যে সমস্যাটি সৃষ্টি করে এমন অ্যাপটি আমাকে পুনরায় ইনস্টল করতে হয়েছিল তবে এটি এগিয়ে গিয়ে কাজ করেছে। যেমন ইন্টারনেটের সমস্ত পরামর্শের সাথে (বা কমপক্ষে আমার কাছ থেকে ইন্টারনেটে দেওয়া পরামর্শ), এটি আমার পক্ষে কাজ করেছিল। এর অর্থ এই নয় যে এটি অগত্যা আপনার পক্ষে কাজ করবে। আমি এটি কোনও ওয়ারেন্টি ছাড়াই এবং এটি আপনার সিস্টেমে কীভাবে আচরণ করবে তা প্রকাশের জ্ঞান ছাড়াই অফার করি। আপনার মাইলেজ পরিবর্তিত হতে পারে. আপনার নিজের ঝুঁকিতে চেষ্টা করুন।
জিম

এই সমাধানটি আমার সমস্যাগুলি স্থির করেছে বলে মনে হচ্ছে। কোনও পুরানো স্ট্যাটাস ফাইল ব্যবহার করে যদি কোনও সমস্যা দেখা দেয় তবে আমি আপডেট করব।
ম্যাথু

পুরানো ফাইলটিতে সিস্টেমে কিছু প্যাকেজ পরিবর্তন অনুপস্থিত রয়েছে তবে বেশিরভাগ ক্ষেত্রেই এটি ঠিক থাকবে। এরকম sudo apt update && sudo apt dist-upgradeবেশিরভাগ সমস্যার ঠিক করা উচিত পুরাতন যে statusফাইল হতে পারে। আপনার সিস্টেমে যদি আরও বড় গণ্ডগোল sudo aptitude dist-upgradeহয় তবে এর পরিবর্তে sudo apt ...মাঝে মাঝে ব্রেকটি ঠিক করার আরও ভাল উপায়ের পরামর্শ দেওয়া যেতে পারে।
মিক্কো রেন্টালাইনেন

6

আমি প্যাকেজগুলি স্থিতি ফাইলে প্রবেশের মাধ্যমে দূষিত প্যাকেজগুলি সরিয়ে এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি।

sudo dpkg -r handbrake-cli

Pcregrep- এর মাধ্যমে গৃহীত সমাধানটি কাজ করে না (প্যাকগ্রিপ কিছুই খুঁজে পায়নি)।


আপনাকে অনেক ধন্যবাদ এটি আমার পক্ষে কাজ করে এবং বাস্তবে এটি সঠিক পদ্ধতির জন্য ধন্যবাদ
ব্যবহারকারীর 27671192

6

আপত্তিজনক প্যাকেজটির জন্য একটি "dpkg -P" চেষ্টা করুন। এটি এটিকে স্থানীয় সংগ্রহস্থল থেকে মুছে ফেলবে এবং সমস্ত চিহ্ন সরিয়ে ফেলবে। আমার সিস্টেমে, এটি মুছে ফেলা (তবে এখনও মুছে ফেলা হয়নি) প্যাকেজগুলির জন্য এটি ঠিক করা ছিল যা সেই ত্রুটি তৈরি করেছিল।


5

এই ক্ষেত্রে আমি দূষিত /var/lib/dpkg/statusফাইলটির ব্যাকআপ নেব এবং তারপরে তথ্যটি ব্যবহার করে ম্যানুয়ালি (1888 এবং 9550 লাইনের আশেপাশে) সংশোধন করব

apt-cache show libssl0.9.8
apt-cache show udev

বুঝেছি । apt-get এখন সহজেই চলছে।
ündrük


2

ত জ্রত জ্রত র...

ঠিক আছে, আসল ত্রুটিটি 15266 লাইনে ছিল যদিও এটি আরও 700 লাইন নিচে নামার পরে জানা গেছে। স্ট্যাটাস ফাইলে সমস্যাযুক্ত এন্ট্রিটি একটি দীর্ঘ সময় আগে আমার লেক্সমার্ক প্রিন্টারটিকে কাজ করার জন্য ইনস্টল করা একটি ডেবের কারণে হয়েছিল। প্রবেশ প্যাকেজের জন্য ছিল lexmark-inkjet-08-driver.লাইন ব্রেকের জায়গায় বর্ণনা ক্ষেত্রটির একটিও ছিল না । এটি পার্সিংয়ের ত্রুটি ঘটায়।

এটি সন্ধান করার জন্য, আমি একটি শটগান সমস্যা সমাধানের পদ্ধতিটি অবলম্বন করেছি এবং এলোমেলোভাবে জিনিসগুলি চেষ্টা করতে শুরু করেছি। আমার বোকামির চেষ্টাগুলির মধ্যে একটি হ'ল grep-status -P eএটি ছিল যে বর্ণমালার মধ্যে সর্বাধিক সাধারণ অক্ষর। বোবা, আমি জানি, তবে একটি হারিয়ে যাওয়া কোলন সম্পর্কে অভিযোগ করার আগে শেষ স্থিতি রেকর্ডটি মুদ্রিত হয়েছিল লেকমার্ক প্যাকেজের জন্য এবং আমি .পর্দায় দেখার জন্য কয়েক মিনিট পরে তার চরিত্রের অভাব লক্ষ্য করেছি noticed

যদি সম্ভব হয় তবে আমি আরও একটি উত্তর চাই যা ভবিষ্যতে কেউ একই ধরণের সমস্যায় পড়লে এই ধরণের সমস্যাটি সন্ধানের জন্য আরও ভাল পদ্ধতির বর্ণনা দিতে পারে। ধন্যবাদ।


grep-status -r -P ^সর্বদা যে কোনও প্যাকেজটির সাথে মিল থাকা উচিত যাতে এটি পুরো ফাইলটিকে বিশ্লেষণ করে এবং পার্স করতে না পারলে তা বাতিল করে দেওয়া উচিত।
মিক্কো রেন্টালাইনেন

2

কারণ আমার স্ট্যাটাস-পুরানো এমনকি সমস্যাযুক্তও ছিল apt-get update,

এটি আমার পক্ষে বেশ ভালভাবে কাজ করেছে:

(মূল হিসাবে)

cd /var/lib/dpkg 

cp -avf status status.corrupt

tr -cd '\11\12\15\40-\176' < status.corrupt > status

এই কমান্ডটি ASCII অষ্টাল মানগুলি বাদ দিয়ে অন্য একক উদ্ধৃতিগুলির মধ্যে প্রদর্শিত সমস্ত ইনপুট স্ট্রিম থেকে সমস্ত অক্ষর অপসারণ করতে টিআর কমান্ডের -c এবং -d আর্গুমেন্ট ব্যবহার করে। এই কমান্ডটি বিশেষভাবে নিম্নলিখিত অক্ষরগুলিকে এই ইউনিক্স ফিল্টারটি দিয়ে যাওয়ার অনুমতি দেয়:

অক্টোবর 11: ট্যাব

অষ্টাল 12: লাইনফিড

অষ্টাল 15: গাড়ীর ফিরে

অষ্টাল 40 এর মাধ্যমে অষ্টাল 176: সমস্ত "ভাল" কীবোর্ডের অক্ষর

অন্য সমস্ত বাইনারি চরিত্রগুলি - আপনার ফাইলের "আবর্জনা" চরিত্রগুলি - এই অনুবাদ প্রক্রিয়া চলাকালীন ছড়িয়ে পড়ে।

ক্রেডিট: http://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix

আপনি যদি আগ্রহী হন তবে কী পরিবর্তন হয়েছে বা ক্ষতিটি কোথায় হবে: (সম্ভবত দীর্ঘ)

diff /var/lib/dpkg/{status-old,status} |less
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.