লিনাক্স প্যাকেজ ম্যানেজার, যেমন Apt এবং DNF, অত্যন্ত পাওয়ারফুল এবং ইন্টুইটিভ, কিন্তু সেটি মানে নয় যে জিনিসগুলো ভুল হতে পারে না। কখনও কখনও একটি প্যাকেজ ইনস্টলেশন ভুল হয়ে যায়, এবং আপনাকে টুকরোগুলো সংগ্রহ করতে ছেড়ে দেওয়া হয়। প্যাকেজ ম্যানেজারগুলোর ব্রোকেন প্যাকেজ ফিক্স করার এবং ব্রোকেন আপডেট স্কিপ করার ক্ষমতা আছে যাতে আপনার সিস্টেম আবার কাজ করতে পারে এবং ভবিষ্যতে সমস্যা এড়াতে পারে। এই আর্টিকেলে লিনাক্সে ব্রোকেন প্যাকেজ ফিক্স করার পদ্ধতি কভার করা হয়েছে।
এই টিপস এবং ট্রিকস অধিকাংশ ক্ষেত্রে আপনাকে আনস্টাক করতে সাহায্য করবে। সেগুলো সার্বিকভাবে প্রযোজ্য, কিন্তু প্রতিটি সিচুয়েশন ভিন্ন, তাই আপনার নিজস্ব সিচুয়েশন ডিবাগ করার সময় সেটি মনে রাখুন।
Ubuntu/Mint/Debian-এ ব্রোকেন প্যাকেজ ফিক্স করা
Apt-এ কয়েকটি ফ্ল্যাগ আছে যা আপনি ব্যবহার করতে পারেন মিসিং ডিপেন্ডেন্সি বা প্যাকেজ ফিক্স করতে যেগুলো যেকোনো কারণে ইনস্টল করার সময় ব্রেক হয়েছে। একটি কমন ইউজ কেস হবে একটি থার্ড-পার্টি .deb ইনস্টল করা এবং খুঁজে পাওয়া যে তার ডিপেন্ডেন্সি ছিল যা আপনি জানতেন না। সেসব ডিপেন্ডেন্সি প্রোবাবলি নিজে থেকেই পুল হবে না, এবং dpkg কামপ্লেইন করবে যে প্যাকেজটি সেসব এ মিসিং। যাইহোক, আপনি নিচের ধাপগুলো ট্রাই করতে পারেন।
প্রথমে, একটি আপডেট চালান নিশ্চিত করতে যে প্রয়োজনীয় প্যাকেজগুলোর নতুন ভার্সন আছে কিনা।
sudo apt --fix-missing update
এরপর, আপনি চেষ্টা করতে পারেন Apt-কে বাধ্য করতে মিসিং ডিপেন্ডেন্সি বা ব্রোকেন প্যাকেজ খুঁজে বের করে সেগুলো কোরেক্ট করার জন্য আপনি অফেন্ডিং প্যাকেজটি আবার ইনস্টল করার চেষ্টা করলে। এটি আসলে মিসিং ডিপেন্ডেন্সি ইনস্টল করবে এবং এক্সিস্টিং ইনস্টলেশন রিপেয়ার করবে।
sudo apt install -f
প্যাকেজ ইনস্টলেশনে এরর পপ আপ করার আরেক জায়গা হলো কনফিগারেশন প্রসেস। পর্দার পেছনে, dpkg এই অংশটি যত্ন নেয়, Apt নয়, তাই এটিリーズনেবল যে যখন একটি প্যাকেজ কনফিগারেশন সময়ে ফেল করে, dpkg হলো টুল যেটি ফিক্স করার জন্য সেটি ব্যবহার করা উচিত।
চেষ্টা করুন dpkg-কে বাধ্য করতে যেকোনো ব্রোকেন বা আংশিকভাবে কনফিগারড প্যাকেজ রিকনফিগার করার জন্য।
sudo dpkg --configure -a
যদি সেটি সমস্যা সমাধান না করে, আপনি একটি більш বলবান পদ্ধতি अपना পারেন। শুরু করুন যেকোনো প্যাকেজ লিস্ট করে যা dpkg রিইনস্টল রিকোয়ার করেছে বলে মার্ক করেছে।
sudo dpkg -l | grep ^..r
আপনার সেখানে সমস্যাযুক্ত প্যাকেজ(গুলা) দেখতে পাবেন। যতক্ষণ না সেখানে কিছু আছে যা সেখানে হওয়ার উচিত নয়, আপনি ব্রোকেন প্যাকেজগুলো ফোর্স-রিমুভ করতে পারেন।
sudo dpkg --remove --force-remove-reinstreq [package name]
dpkg হয়ে গেলে, Apt-এ ক্লিন আপ করার চেষ্টা করুন।
sudo apt clean sudo apt update
কোনো ভাগ্য থাকলে, সেটি আপনাকে সেখানে ফেরত দেবে যেখান থেকে আপনি শুরু করেছিলেন। এটি আপনাকে যে ব্রোকেন প্যাকেজগুলো ইনস্টল করার চেষ্টা করেছিলেন সেগুলো দেবে না, কিন্তু অন্তত Apt আবার ফাংশনাল হবে, এবং আপনি এটিকে ব্যবহার করতে পারবেন প্যাকেজ এবং এর ডিপেন্ডেন্সি ইনস্টল করার চেষ্টা করতে।
পার্মানেন্ট DPKG লক
একটি কম कॉमन ইস্যু আছে dpkg লকের সাথে যা আপনাকে যেকোনো কিছু করার থেকে বাধা দেয়। প্রতিবার আপনি Apt বা dpkg ব্যবহার করার চেষ্টা করলে, আপনি একটি এরর পাবেন অন্য একটি অ্যাপ্লিকেশন ইতিমধ্যে... যখন সেটি নয়।
এটি আসলে লক ফাইল ডিলেট করা সহজ যা আপনাকে Apt ব্যবহার করার থেকে বাধা দিচ্ছে এবং আপনার দরকারের কাজে ফিরে যাওয়া। কখনও কখনও এই লক ফাইলগুলো ইনস্টল এরর বা পাওয়ার আউটেজের পর জায়গায় থাকে, প্রসেসকে ডিরেইল করে এবং ফাইলটি অটোমেটিক্যালি রিমুভ হওয়া থেকে বাধা দেয়। এই কেসে, আপনাকে নিজে করতে হবে।
sudo rm /var/lib/apt/lists/lock
ভালো মেজার্মেন্ট হিসেবে, ক্যাশে-এ লকটি ডিলেট করুন।
sudo rm /var/cache/apt/archives/lock
Fedora/CentOS/RHEL-এ ব্রোকেন প্যাকেজ ফিক্স করা
Fedora/CentOS/RHEL-এ ব্রোকেন প্যাকেজ ফিক্স করা কম কমন, কারণ yum এবং dnf খুব ভালো কাজ করে নিশ্চিত করতে যে প্যাকেজগুলো সঠিকভাবে ইনস্টল হচ্ছে। তবে, কখনও কখনও প্যাকেজ ইউজে জিনিসগুলো মিক্সড আপ হয়ে যায়। rpm-ভিত্তিক সিস্টেমে সেটি করার কমান্ড হলো:
sudo rpm -Va
-V অপশনটি verify-এর জন্য, অর্থাৎ এটি যাবে এবং ইনস্টলড ফাইলগুলোর ইনফরমেশন তুলনা করবে rpm ডাটাবেসে স্টোর করা ইনফরমেশনের সাথে। এটি কিছুটা আনহেল্পফুল, কারণ এটি সাধারণত ফাইলগুলোর একটি লম্বা লিস্ট দেবে, কিন্তু এটি আপনাকে কোথা থেকে শুরু করতে হবে সেটি দিতে পারে আপনি যদি একটি নির্দিষ্ট অ্যাপ্লিকেশনের সাথে সমস্যা হয়। আপনি সেটি লিস্টে যে প্যাকেজগুলো দেখেন সেগুলোর যেকোনো ওপর dnf reinstall চালাতে পারেন যেগুলো আপনাকে ত্রাস দিচ্ছে।
sudo dnf --refresh reinstall PACKAGE_NAME
এটি সকল মেটাডেটা এক্সপায়ার্ড হিসেবে সেট করবে, তাই এটি আপনার সকল ইনেবলড রিপোজিটরি ক্রল করবে এবং সেই প্যাকেজের একটি নতুন ভার্সন খুঁজবে। আপনি যদি খুঁজে পান যে সেটির সাথে ব্রোকেন ডিপেন্ডেন্সি আছে, DNF প্রোবাবলি কামপ্লেইন করবে এবং আপনাকে --skip-broken ফ্ল্যাগ ব্যবহার করতে বলবে। এটিও মানে হতে পারে যে আপনার কাছে একটি নির্দিষ্ট রিপোজিটরি ইনেবলড নেই ডিপেন্ডেন্সি পুল করার জন্য, তাই আপনাকে সেখানে কিছু রিসার্চ করতে হতে পারে।
Arch-এ ব্রোকেন প্যাকেজ ফিক্স করা
যদিও Arch-এর প্যাকেজ ম্যানেজারের Debian-এর সাথে অনেক সাদৃশ্য আছে, এটি সম্পূর্ণ একটি আলাদা বিস্তার। প্রথম ধাপ আপনার ইস্যু ডায়াগনোস্টিক করার জন্য হলো নিশ্চিত করা রিপোজিটরিগুলো আপ-টু-ডেট এবং একটি ফুল আপগ্রেড চেষ্টা করা:
sudo pacman -Syu
আপনার প্যাকেজ ইনস্টল করার চেষ্টা বা সিস্টেম আপগ্রেড করা এখনও যদি ফেল করে, তবে আমাদের টার্মিনাল আপনাকে যা বলল তার অনুযায়ী কারণটি আইসোলেট করতে হবে:
"Invalid or Corrupted Package"
"pacman.conf"-এ যেকোনো ভাবে পরিবর্তন আনার ফলে সমস্যা হতে পারে যা pacman-কে প্যাকেজগুলোকে ভুলভাবে করাপ্ট হিসেবে লেবেল করতে বাধ্য করে। এখানে সবচেয়ে লাইকлі কালপ্রিট হলো প্যাকেজ ম্যানেজার ক্যাশে-এ একটি পারশিয়াল (".part") ফাইল, এবং আপনার সমাধান হলো সেটি রিমুভ করা:
sudo find /var/cache/pacman/pkg/ -iname "*.part" -delete
একটা চান্স সবসময় থাকে যে আপনি যে প্যাকেজটি ইনস্টল করার চেষ্টা করছেন সেটি আসলে করাপ্ট এবং Arch-কে ভ্যালিড মেটাডেটা প্রদান করে না। সেটি কেসে, আপনাকে প্যাকেজ মেইনটেইনার আপডেট করার পর্যন্ত অপেক্ষা করতে হবে। যদি প্যাকেজ আপনার সিস্টেমে ইনস্টলড থাকে এবং আপগ্রেড করার সময় সমস্যা সৃষ্টি করে, সেটি রিমুভ করুন:
sudo pacman -Rns [package name]
"Unable to Lock Database"
Debian-এর apt-এর মতো, Arch-এর প্যাকেজ ম্যানেজারও অপারেশন время একটি লক ফাইল তৈরি করে। আপনি যদি পাওয়ার আউটেজ অনুভব করেন বা pacman একটি হার্ড ইন্টারাপ্ট অনুভব করে যা সেটি রিমুভ করতে পারেনি লকটি, এটি খুব লাইক্লি একটি লক ফাইল পিছনে ছেড়ে দেবে।
প্রথমে, খুঁজে বের করুন আপনার কম্পিউটারে কোনো প্রসেস এখনও সেটি ফাইলটি ব্যবহার করছে কিনা:
sudo fuser /var/lib/pacman/db.lck
উপরোক্ত ছবিতে, PID 121497 সহ একটি প্রসেস ফাইল লকটি ব্যবহার করছে। আপনি যদি প্রসেস সম্পর্কে কৌতূহলী হন এবং আরও ইনফরমেশন চান, ps ব্যবহার করুন:
ps -p [PID#]
আমার কেসে, একটি অন্য pacman ইনস্ট্যান্স লক ফাইলটার মালিক। লক রিমুভ করার সবচেয়ে সেফ পদ্ধতি হলো প্রথমে সেই প্রসেসকে কিল করা:
sudo kill [PID#]
এখন প্রসেসটি মরেছে, লক ফাইল রিমুভ করুন:
sudo rm /var/lib/pacman/db.lck
আপনি এখন ভালো আছেন!
"Conflicting Files/File Exists in Filesystem"
এটি আপগ্রেড সময় ঘটে যখন pacman একটি কনফ্লিক্ট ডিটেক্ট করে। যেকোনো কিছু ফিক্স করার আগে, প্যাকেজ ম্যানেজার যে ফাইলের পথ নিয়ে কামপ্লেইন করছে সেটিতে মনোযোগ দিন।
প্রথম জিনিস যা আমাদের খুঁজে বের করতে হবে সেটি হলো ফাইলটি কার মালিকানা:
pacman -Qo [path to the file]
যদি এটি একটি ইউজারের মালিকানাধীন থাকে অন্য প্যাকেজের নয়, শুধু সেটি রিমুভ করুন:
sudo rm [path to the file]
যদি এটি অন্য একটি প্যাকেজের মালিকানাধীন থাকে, আপনি করতে পারেন সবচেয়ে সেফ জিনিস হলো প্যাকেজের মেইনটেইনার এই কনফ্লিক্ট নিজে ফিক্স করার জন্য অপেক্ষা করা। কখনও কখনও সেটি অপশন নয়, কিন্তু, এবং আপনি এখনই জিনিসগুলো করতে চান।
এটি সম্পন্ন করার সবচেয়ে সহজ পদ্ধতি হলো --overwrite ফ্ল্যাগ ব্যবহার করা pacman-এ। শুধু জানুন যে এটি সাধারণত আনসেফ এবং আপনার সিস্টেমে কিছু অ্যাপ্লিকেশন সঠিকভাবে কাজ না করার দিকে নিয়ে যেতে পারে। আমি সাজেস্ট করব রান করার আগে ব্যাকআপ নেওয়া।
--overwrite ফ্ল্যাগ Arch-এর প্যাকেজ ম্যানেজারকে একটি নির্দিষ্ট ফাইলের জন্য মালিকানার রুল ইগনোর করতে দেয় এবং আপডেটের মাধ্যমে স팀রোল করে। উদাহরণ:
pacman -Syu --overwrite [file name]
যদি উপরের কমান্ড কাজ না করে, ফাইল নামকে এর অ্যালসোলিউট পাথ দিয়ে রিপ্লেস করুন। কিছু ইউজার রিপোর্ট করেছেন যে পাথের সামনে থাকা লিডিং স্ল্যাশ ("/") রিমুভ করলে কমান্ডটি কাজ করে যখন সেটি জিদ्दी হয়ে যায়।
প্রশ্নোত্তর
১. কি আমি AUR হেল্পারের সাথে Arch ফিক্সগুলো অ্যাপ্লাই করতে পারি?
সাধারণত, হ্যাঁ। এই গাইডের কমান্ডগুলতে "pacman"-কে আপনার AUR হেল্পার দিয়ে রিপ্লেস করুন। উদাহরণ:
yay -Qo /path/to/file
২. কি এই ইনস্ট্রাকশনগুলো নিরাপদ?
অধিকাংশ অংশে, এখানে প্রতিটি ইনস্ট্রাকশন অন্য যেকোনো প্যাকেজ ম্যানেজমেন্ট অপারেশনের মতো নিরাপদ। বড় এক্সসেপশন হলো যখন আপনি লক ফাইল রিমুভ করছেন। আপনার কাছে যদি উপায় থাকে, তবে সেসব ফাইল যেসব প্রসেস ব্যবহার করছে সেগুলো কিল করা সবসময় গুরুত্বপূর্ণ সেটি রিমুভ করার আগে। আপনার সিস্টেম কী করছে সেটি সম্পর্কে সচেতন থাকুন। আপনি কোথাও apt বা pacman এর একটি ইনস্ট্যান্স রানিং রেখে ভুলে গেছেন!
বেস্ট প্র্যাকটিস হবে সবসময় আপনার সিস্টেম ব্যাকআপ নেওয়া যেকোনো আপগ্রেডের আগে।
৩. আপডেট বাধা দিলে কী করব?
একটি আপডেট প্রসেস ভাঙা হয় Ctrl + C চাপা, প্যাকেজ ম্যানেজারের প্রসেস কিল করা, বা টার্মিনাল প্রিমেচুরলি বন্ধ করা যেকোনো ফলে আপনার প্যাকেজ ডাটাবেসে কিছু লেভেলের করাপশন হবে যা জটিল করতে পারে আপনার জন্য যখন আপনি কিছু অন্য জিনিস ইনস্টল করার চেষ্টা করবেন। এটা ফিক্স করতে, ক্যাশে ক্লিয়ার করুন এবং আপডেট রিপিট করুন।
Debian/Ubuntu/Mint/Pop!_OS/etc.-এ:
sudo apt-get clean
Fedora/CentOS/RHEL-এ:
sudo dnf clean all
Arch-এ:
sudo pacman -Scc
উপসংহার
আশা করি, এই ফিক্সগুলোর একটি আপনার জন্য কাজ করল, এবং আপনি আপনার লিনাক্স সিস্টেমে সাধারণভাবে কাজে ফিরে গেলেন। মনে রাখুন যে একটি potpuno আউট-অফ-হ্যান্ড সিচুয়েশন হ্যান্ডেল করার সেরা পদ্ধতি হলো চেষ্টা করা সেটাকে আগের অবস্থায় ফেরত আনার। চেষ্টা করবেন না পাওয়ার থ্রু করতে এবং আরও জিনিস যোগ করতে একটি ব্রেকেজ সমাধান করার জন্য আরও জিনিস যোগ করে। চান্স আছে আপনি ব্রোকেন জিনিসগুলোর একটি tangled mess-এ শেষ হবেন যেটি সর্ট আউট করা হ্যার্ডার হবে।
আপনাকে আপনার লিনাক্স সিস্টেম ক্লিন আপ করতে হতে পারে অপ্রয়োজনীয় এবং ব্রোকেন প্যাকেজ রিমুভ করার জন্য। কারণ যদি পুরনো PC যা nieuver সফটওয়্যার সাপোর্ট করতে পারে না, আপনি এই তিনটি পদ্ধতিও ব্যবহার করতে পারেন আপনার পুরনো PC-কে ভালো কাজে লাগাতে।