ডেবিয়ান-ভিত্তিক লিনাক্স ডিস্ট্রিবিউশনে প্রথম قدم রাখা অনেকের জন্য প্যাকেজ ম্যানেজমেন্ট জটিল মনে হতে পারে। কেউ বলে "apt" ব্যবহার করুন, কেউ "apt-get", আর কেউ কেউ পুরনো বা নির্দিষ্ট টিউটোরিয়ালে "aptitude" বলেন। এই লিনাক্স বিশ্বের এই ছোট কোণে "কেন, কোথায়, কী, এবং কীভাবে" — এই সব ব্যাখ্যা করার সময় এসে গেছে।
apt-এর বিভ্রান্তি দূর করা
সকল ছোট বিবরণات বিচারে, apt, apt-get, এবং aptitude — এগুলো সবই ডেবিয়ানের প্যাকেজ ম্যানেজমেন্ট সিস্টেমের ভিন্ন ভিন্ন কলিং কার্ড (calling cards) যারা অনলাইন রিপোজিটরির সাথে ইন্টারঅ্যাক্ট করে। মনে হচ্ছে এগুলোই কম নয়, এছাড়াও ডেবিয়ানে একটি আরো প্যাকেজ ম্যানেজমেন্ট টুল আছে যা অন-ডিস্ক ইনস্টলেশন নিয়ে কাজ করে: dpkg।
যখন আপনি ওয়েব থেকে .deb প্যাকেজ ডাউনলোড করে ডাবল-ক্লিক করে ইনস্টল করেন, তখন আপনি dpkg ব্যবহার করছেন — উইন্ডোজে MSI প্যাকেজ ইনস্টল করার মতোই। Solus-এ EOPKG, Fedora-এ RPM, Arch-এ AUR আছে। এমনকি Android-র প্যাকেজই APK, এবং তার সবচেয়ে বড় রিপোজিটরি হলো Google Play Store। আশা করি এখন আপনি বুঝতে পেরেছেন লিনাক্সের কাঠামো অন্যান্য অপারেটিং সিস্টেমের (ডেস্কটপ/ল্যাপটপ ছাড়া অন্যদেরও) সাথে কতটুকু পরিচিত।
Aptitude কী?
Aptitude হলো APT-এর স্নায়ু কেন্দ্র (nerve center), যা একটি ফ্রন্ট-এন্ড (front-end) হিসেবে কাজ করে। আপনি যদি আপনার ডিস্ট্রোর রিপোজিটরিতে কী কী প্যাকেজ আছে এবং আপনি কী কী যোগ করেছেন সেগুলোর বিস্তারিত দরকার হয়, তবে Aptitude ব্যবহার করুন। এটি টার্মিনালের ভিতরেই চলে এমন थोड़े পুরনো স্কুলের ক্লিকযোগ্য GUI-র একটি।
APT কী?
Advanced Packaging Tool (APT) হলো ডেবিয়ানের সমাধান, যা অপারেটিং সিস্টেমে ইনস্টল করা विविध অ্যাপ্লিকেশন রিমুভ, ইনস্টল, সার্চ, এবং ম্যানেজ করার প্রক্রিয়াকে মেইনস্ট্রিমে আনতে। এপিটি ভিত্তিক প্রতিটি ডিস্ট্রো APT ব্যবহার করে, যদিও সব जगह APT-এর অ্যাপ্লিকেশন সমান নয়। এখানেই বিষয়টি আসছে।
এখন স্মরণ রাখা গুরুত্বপূর্ণ: প্যাকেজ ম্যানেজার হিসেবে APT নয় apt কমান্ড। বরং এটি APT-সম্পর্কিত কমান্ডের একটি সমষ্টি যেমন apt-get, apt-mark, apt-cache কে ঘেরে রাখে।
কौন ডিস্ট্রো APT ব্যবহার করে?
আপনার ডিস্ট্রো যদি "Debian-based" বলে বর্ণনা করা হয়, তবে এটি APT টুলটি কোনো না কোনো রূপে ব্যবহার করে। এতে অন্তর্ভুক্ত (এवं সীমাবদ্ধ নয়):
- Debian
- Ubuntu
- Linux Mint
- MX Linux
- Grml
- Kali Linux
- Tails
- PureOS
- Raspberry Pi OS
- Elementary OS
- SteamOS (২০২১ সালে আর্চ-এ স্থানান্তরিত)
ডেবিয়ান-ভিত্তিক আরও অনেক ডিস্ট্রিবিউশন আছে। যদি আপনার ডিস্ট্রো এখানে না থাকে, তবে টার্মিনালে apt-get টাইপ করে চেক করুন। যদি "command not found" মেসেজ আসে, তবে আপনি নিশ্চিতভাবেই ডেবিয়ান-স্পর্শিত কোনো সিস্টেমে নন।
Apt-get বনাম Apt
অনলাইনে অনেক টিউটোরিয়ালে প্যাকেজ ইনস্টলেশনে apt-get এবং apt একসাথে ব্যবহার করা দেখবেন। ইনস্টল এবং রিমুভ করার ক্ষেত্রে দুটোর মধ্যে কোনো পার্থক্য নেই। কিন্তু এজন্য এদের একে অপরের ভার্সন বুঝবেন না।
যেমন আমি বলেছিলাম, apt-get APT-এর কয়েকটি কমান্ডের মাত্র একটি। APT-এ নতুন কাউকে apt-get, apt-mark, apt-cache — কোন কমান্ড কোন জিনিসের জন্য আপাতত মনে রাখা একটু ডিজঅরিয়েন্টিং (disorienting) হতে পারে। উদাহরণস্বরূপ, জানতেন কি প্যাকেজ সার্চ করার কমান্ড হলো apt-cache search?
যদি এই তিনটি কমান্ডের সবচেয়ে উপযোগী ফাংশনগুলো একত্রিত করা যেত? apt কমান্ডটি ঠিক একই কাজ করে। এই তিন অক্ষর টার্মিনালে টাইপ করলে APT ইকোসিস্টেমের একটি "র্যাপার" (wrapper) হিসেবে কাজ করে, যারা টার্মিনালে অনেক সময় কাটান তাদের জন্য প্রক্রিয়াটি সরল করে দেয়।
প্যাকেজ সার্চ করার সময় apt search প্রায়শই apt-cache search-এর মতো ফলাফল দেয়।
APT ফ্ল্যাগস (Flags) সম্পর্কে একটি কথা
উপরের দুটি সার্চ কমান্ডের আউটপুট চাইলে খেয়াল করলে দেখবেন তারা কিছুটা ভিন্ন ইনফো দেখাচ্ছে। কারণ apt কমান্ড apt-cache search-এর আউটপুটের পাশাপাশি আপনার সিস্টেমে অ্যাপ্লিকেশনটির স্ট্যাটাস সম্পর্কিত ইনফোও আনে।
apt search-এর আউটপুটে প্যাকেজ নামের পাশে যে "i" লেটারটি দেখলেন, সেটা কী? এটি Aptitude (ডেবিয়ান প্যাকেজ টুলের ফ্রন্ট-এন্ড) দ্বারা বসানো একটি ফ্ল্যাগ।
টার্মিনালে দেখানো ফ্ল্যাগগুলো এবং তাদের অর্থ নিচে দেওয়া হলো:
A— স্বয়ংক্রিয়ভাবে ইনস্টলড (হয়তো একটি বড় মেটা-প্যাকেজ বা ওএস ইনস্টলেশনের অংশ হিসেবে)।B— প্যাকেজটি ব্রোকেন (broken) হিসেবে ফ্ল্যাগড, রি-ইনস্টল দরকার।H— হাফ-ইনস্টলড (Half-installed)। প্যাকেজ ইনস্টলেশন শেষ করতে হবে।c— প্যাকেজ রিমুভ করা হলেও এর "ভূত" (ghost) কনফিগারেশন ফাইল হিসেবে আছে।apt-get purgeবাapt purgeদিয়ে সমাধান করুন।p— প্যাকেজ পার্জ (purge) করা হয়েছে বা কখনো ইনস্টলড ছিল না।v— ভার্চুয়াল প্যাকেজ। অন্যদের দ্বারা ব্যবহৃত একটি ফাংশন প্রদান করে (যেমন Firefox ব্রাউজিং ক্যাপাবিলিটি দেয়)।i— এই প্যাকেজ আপনার সিস্টেমে ইনস্টলড আছে।h— এই প্যাকেজে হোল্ড (hold) আছে, এটি nieuwer ভার্সনে আপডেট হবে না।
সকল Apt সমান নয়!
আরো আগে যাওয়ার আগে একটা জরুরি কথা: apt কমান্ডে একটি ডিস্ট্রোর চেয়ে অন্য ডিস্ট্রোতে বেশি আর্গুমেন্ট থাকতে পারে। উদাহরণস্বরূপ, উবুন্টুরে "hold" নেই কিন্তু মিন্টে আছে।
এটি বুঝতে উবুন্টু এবং মিন্টের apt-এ কী কী আর্গুমেন্ট পাস করা যায় সেটার লিস্ট দেখুন — দুটোর মধ্যে বিশাল ফাঁক পাবেন।
এটি আমার নতুন টেস্ট-বেড উবুন্টু (pun intended)।
এবং এটি লিনাক্স মিন্ট।
আমার দেখা সব ডেবিয়ান-ভিত্তিক ডিস্ট্রোর মধ্যে মিন্টের apt র্যাপার সবচেয়ে পরিপূর্ণ। এটা আশ্চর্য নয়, কারণ এটি মিন্ট রক্ষক কমিউনিটির দ্বারা টেইলর-মেড (tailor-made) করা হয়েছে — নতুন ব্যবহারকারীদের শর্ট কমান্ড দিয়ে শান্তিতে অ্যাপ ইনস্টল করার সুবিধা দেওয়া থেকে শুরু করে টার্বো-গিকরা যারা মিলিমিটার প্রিসিশনে সব টিউন করতে চান তাদের জন্যও।
APT কমান্ডের চূড়ান্ত গাইড
APT প্যাকেজ সিস্টেমের শক্তি বুঝতে কিছু গুরুত্বপূর্ণ কমান্ডে দাঁত গাড়া দাও। নিচের লিস্টে APT কমান্ড থাকবে এবং適用UBLE簡化 (apt wrapper) থাকবে যেখানে প্রযোজ্য। আপনার ডিস্ট্রোতে সরলীকরণ কাজ না করলে, এর মানে আপনার ডিস্ট্রোতে সেটা নেই অথবা আপনি মিন্টের বিশাল র্যাপার চালাচ্ছেন না। সেক্ষেত্রে ভ্যানিলা (vanilla) কমান্ডে ফিরে যান, আপনি বেশি কিছু হারাবেন না।
add-apt-repository(apt add-repository) — একটি প্যাকেজ মেইনটেইনারের সফ্টওয়্যার সোর্স থেকে নতুন রিপোজিটরি আপনার লিস্টে যোগ করে।
উদাহরণ: Mint 20-এ Lutris-এর বর্তমান রিপো যোগ করতেsudo add-apt-repositoryবাsudo apt add-repositoryলিখেppa:lutris-team/lutrisদিন। প্রতিটি রিপো অনন্য, এবং অফিসিয়াল রিপোতে না থাকা অধিকাংশ অ্যাপ ডেভেলপার নির্দেশনা দেয়।
apt-get clean&apt-get autoremove(apt clean&apt autoremove) — এই দুটো প্রায় একসাথে ব্যবহৃত হয়।cleanলিঙ্গারিং ইনস্টল স্ক্রিপ্ট এবং আর দরকার নেই এমন ইনস্টলেশন মিডিয়া পরিষ্কার করে;autoremoveকেউ ব্যবহার বা ডিপেন্ড না করে এমন প্যাকেজها স্বয়ংক্রিয়ভাবে রিমুভ করে স্টোরেজ ফรี করে।
উদাহরণ:sudo apt autoremove && sudo apt clean— এক লাইনে মেইন ড্রাইভের সব কোবওয়েব পরিষ্কার।
apt-get changelog(apt changelog) — একটি প্যাকেজের লেটেস্ট চেঞ্জলগ দেখুন।
উদাহরণ:apt-get changelog brave-browser— ব্রেভ ব্রাউজারের লেটেস্ট ভার্সনে কী কী আছে পिछले রিভিশনের চেয়ে।
apt contains— শুধু লিনাক্স মিন্ট এবং কয়েকটি উবুন্টু-ডেরাইভড ডিস্ট্রোতে পাওয়া যায়। যখন কোনো প্রোগ্রামে "file not found" টাইপ এরর দেখেন, তখন এই কমান্ড সেটি কোনো দূরে থাকা কোনো অ্যাপ্লিকেশন থেকে খুঁজে বের করতে পারে!
উদাহরণ:apt contains gettext.sh—gettext-এর শেল স্ক্রিপ্ট যেই অ্যাপে আছে সেটা খুঁজে বের করবে। আপনার মিন্টেgettext-baseইনস্টলড থাকলে তুরুন্ত পেয়ে যাবেন!
apt-get install(apt install) — নাম অনুযায়ী, একটি প্যাকেজ ইনস্টল করে।apt-get-এ--reinstallফ্ল্যাগ দিলে টার তুরুণ রি-ইনস্টল হবে।
ইনস্টল উদাহরণ:sudo apt-get install firefox। রি-ইনস্টল:sudo apt-get install --reinstall firefox।aptর্যাপারের সহজ ভার্সন:sudo apt reinstall firefox।
apt-get remove(apt remove) — টার্মিনাল কেভ-ডাইভারদের (cave-diver) আর্শনালের একটি প্রায়ই ব্যবহৃত টুল। এটি APT ইকোসিস্টেম বা DPKG প্যাকেজ ম্যানেজার দ্বারা ইনস্টল করা যেকোনো জিনিস আনইনস্টল করে।
উদাহরণ:sudo apt remove grub-customizer।
apt-get update(apt update) — এই কমান্ড আপনার সিস্টেমের অ্যাপ্লিকেশন আপডেট করে না। এটি শুধু APT ক্যাশ রিফ্রেশ করে যাতে আপনার সিস্টেম রিপোজিটরিতে উপলব্ধ ভার্সন এবং বর্তমান ইনস্টলড ভার্সন তুলনা করতে পারে। এটি আপডেট চেক করে, আপডেট করে না।
apt-get upgrade(apt upgrade) — আপনার সিস্টেম যদি আপডেট খুঁজে পায়, তবে সেগুলো ডাউনলোড করে। সাধারণত চলমান কোনো অ্যাপ বন্ধ করার দরকার নেই।
apt-mark hold/unhold/showhold(apt hold/unhold/showhold) — এই সিরিজ আপনার হেল্ড (held) অ্যাপ্লিকেশন ম্যানেজ করে। একটি প্যাকেজ হোল্ড করা মানে আপনার ওএস কে বলা যে ভবিষ্যতে এটাকে আপডেট করবে না।hold/unholdদিয়ে আপডেট হোল্ড শুরু বা বাতিল করুন।showholdবর্তমান হোল্ড লিস্ট দেখাবে।
উদাহরণ:sudo apt hold pulseaudio। সতর্কতা: অন্য প্যাকেজ которых ডিপেন্ড করে সেগুলো হোল্ড করলে লং টার্মে সিস্টেম ভাঙতে পারে যদি আপনি নিশ্চিত না হন।
apt-cache search/show(apt search/show) — এই সুন্দর জোড়া একসাথে খুব ভালো কাজ করে। প্রথমটা দিয়ে প্যাকেজ খুঁজুন, তারপরshowদিয়ে প্যাকেজের পূর্ণ নাম দিয়ে বিস্তারিত জানুন।
উদাহরণ:sudo apt search gimp।
আপনার নির্দিষ্ট ডিস্ট্রোর জন্য APT-এর জটিলতা সম্পর্কে আরও জানতে চাইলে তাদের ম্যানুয়াল টার্মিনালেই আছে। শুধু কমান্ডের আগে man লিখে কোনো আর্গুমেন্ট ছাড়া এন্টার চাপুন, হয়ে গেলো!
"apt-get command not found" ভয়ঙ্কর সমস্যা
যদি APT হঠাৎ চলে গিয়ে টার্মিনালে কিছু ইনস্টল করতে না পারেন, তবে এটা বিশ্বের শেষ নয়। একটু मेহনত করলে আপনার প্রিয় প্যাকেজ ম্যানেজার ফিরে আসবে।
প্রথমে, নতুন সিস্টেম হলে ডাবল-চেক করুন যে এটি আপটিই APT ব্যবহার করার জন্য বানানো। Fedora: DNF/yum, Arch: Pacman, Solus: EOPKG, openSUSE: zypper, Mandriva: urpmi — আরও আছে এই চিটশিটে। টার্মিনালে সেগুলো টাইপ করে নিশ্চিত হন।
এখন নিশ্চিত হলাম আপনি ডেবিয়ান-ভিত্তিক সিস্টেমে আছেন এবং APT মিসিং। পরবর্তী ধাপে যান।
আমি আমার উবুন্টু সিস্টেমকে ক্রিপল (cripple) করলাম এবং আমার জানালা দিয়ে সহজে OS রি-ইনস্টল করার পথ বন্ধ করে দিলাম!
ফলাফল: "command not found" এরর বা কমান্ড প্রসেস করতে অক্ষমতা।
এখন আমাদের সিস্টেমের জন্য উপযুক্ত APT প্যাকেজ খুঁজে বের করে ইনস্টল করতে হবে। APT নেই বলে অটোমেটিক্যালি ডিপেনডেন্সি ডাউনলোড করা যাবে না।
خوشকিস্মتی से ডেবিয়ানের অন-ডিস্ক প্যাকেজ ম্যানেজার (dpkg) দিন বাঁচাতে এসেছে! আমি উবুন্টুর মেইন রিপো থেকে আমার CPU আর্কিটেকচারের লেটেস্ট APT প্যাকেজ ডাউনলোড করলাম এবং dpkg -I চালিয়ে ডিপেনডেন্সি লিস্ট বের করলাম।
আমার কেসে, লেটেস্ট APT ইনস্টল করার চেষ্টায় ডিপেনডেন্সিগুলো তো ছিল কিন্তু সেগুলো পর্যাপ্ত রিসেন্ট ছিল না।
এটা জানা যায় dpkg -i /path/to/your/apt/deb/file টাইপ করলে। অবশ্যই সেই ফেক পাথটি আপনার ডাউনলোড করা .deb ফাইলের আসল পাথ দিয়ে রিপ্লেস করুন।
ভার্সন ২.৩.১১-এর বদলে ২.০.৬ বেছে নিলাম, যা লেখার সময় মিন্টে ইনস্টলড ছিল।
ভার্সনগুলোতে কতক্ষণ ফিজুল বিতর্ক করার পর একটা বারের মত কাজ করার ভার্সন পেলাম। sudo dpkg -i এবং প্যাকেজ নাম দিয়ে যাদুকরীভাবে স্মুথলি ইনস্টল হল।
সাধারণত APT-এর সবচেয়ে ডায়ার ডিপেনডেন্সিগুলো এমন জিনিস যা আপনার সিস্টেমে মিসিং থাকবে না। কিন্তু APT মিসিং থাকলে কিছুই সম্ভব। যেকোনো ডিপেনডেন্সি কম পেলে (যেমন আগে dpkg -I দিয়ে দেখলাম) রিপোটির প্যারেন্ট ফোল্ডারগুলো চেক করুন। সেগুলো তাদের আলফাবেটিক ফোল্ডারে থাকবে।
প্রশ্নোত্তর (FAQ)
১. কোনো অনিরাপদ APT কমান্ড আছে কি?
সাধারণত APT-সম্পর্কিত যেকোনো কমান্ড টার্মিনালে টাইপ করার আগে আপনাকে জানতে হবে সেটি কী করতে যাচ্ছে। বড় আপডেটের আগে (বিশেষত কernel ইনস্টলের সময়) সিস্টেমের ফুল ব্যাকআপ নিন।
সব কিঙ্কা বলারপর, যেসব কমান্ডে আপনাকেwirklich সতর্ক থাকতে হবে সেগুলো হলো apt hold এবং apt full-upgrade/dist-upgrade। প্রথমটিই আগে বলা মতে সিস্টেম ভাঙাতে পারে। দ্বিতীয়টি শুধু তখন কাজে লাগে যখন আপনার ডিস্ট্রো একটি নতুন LTS ভার্সন রিলিজ করে এবং আপনি সেখানে মাইগ্রেট করতে চান, কিন্তু এটি আপনার অভ্যাসগত ইনস্টলড প্যাকেজগুলোকেও রিমুভ করতে পারে। নরমাল apt upgrade করে পরে apt autoremove করলে অনেক নিরাপদে থাকবেন।
২. Apt, Apt-get-से ভালো কি?
জানি এটি একটি ক্লিশে (cliché) স্টেটমেন্ট, কিন্তু সত্যিই এটা নির্ভর করে আপনি কী করছেন। আপনার আঙুল কমান্ড টাইপ করতে করতে জালিয়ে গেছে? apt শর্টকাট হিসেবে ব্যবহার করুন যদি আপনাকে এমন কিছু ספেসিফিক দরকার নেই যা apt-get আরও ভালো করে। অনেক ক্ষেত্রে apt শুধু প্যাকেজ ম্যানেজমেন্ট সরল করে না, বরং অতিরিক্ত ইনফোও দেয় (যেমন আমরা apt-get search এবং apt search তুলনা করলে দেখেছিলাম)।
কিন্তু আপনি মিন্টে নন (যেখানে apt-এর গর্বিত আর্গুমেন্ট লিস্ট প্রায় apt-get-কে অপ্রাসঙ্গিক করে দিয়েছে), তবে আপনি পুরনো স্কুল ফলব্যাক (fallback) পেয়ে ভালো লাগতে পারেন।
৩. রিপোজিটরি এবং অ্যাপ স্টোরের পার্থক্য কী?
দিনদিনের ব্যবহারকারীর জন্য পার্থক্য কোনো বড় ব্যাপার নয়। faktually এগুলো অত্যন্ত তুলনামূলক। পার্থক্য শুরু হয় সফ্টওয়্যার "ফানজিবিলিটি" (fungibility)-এ। লিনাক্সে খুব ফ্লুইড (fluid) সফ্টওয়্যার মার্কেট আছে যেখানে ব্যবহারকারীদের কখনো কখনো আক্রান্তকর পরিমাণ চয়েস দেওয়া হয়। স্মার্টফোন অ্যাপ স্টোর প্রায় সেট ইন স্টোন (set in stone), এবং ব্যবহারকারীর বিকল্প খুঁজে পাওয়া কঠিন।
একই সময়, তত্ত্বে, উবুন্টুর পারসোনাল প্যাকেজ আর্কাইভ (PPA)-গুলো কমপ্রোমাইজড (compromised) হতে পারে এবং দুরাচারী আচরণকারীদের দ্বারা ম্যালিশিয়াস সফ্টওয়্যার প্রসারিত হতে পারে।
এখান থেকে একটা জিনিস নিয়ে যান: ডিসেন্ট্রালাইজেশন (decentralization) ব্যবহারকারীর দায়বদ্ধতা নিয়ে আসে। নিশ্চিত হন যে আপনি আপনার ডিস্ট্রোতে যে রিপোজিটরিগুলো যোগ করছেন সেগুলো বিশ্বস্ত সোর্স থেকে এবং দীর্ঘদিন দাঁড়িয়ে থাকা প্রজেক্ট থেকে।
উপসংহার
আশা করি এই মুহূর্তে আপনি পর্যবেক্ষণ করতে পেরেছেন যে APT-এর পূর্ণ স্যুট অফ কমান্ড ও টুলগুলো কী কী ক্ষমতা দেয় সেটা বুঝতে পারলে কতটুকু পাওয়ার আপনার হাতে আসে। এটা শুধু আপনার কম্পিউটার থেকে সফ্টওয়্যার যোগ/ব্যাগ করার উপায় নয়; এটা একটি পুরো জটিল ফ্রেমওয়ার্ক যা আপনাকে আবিষ্কার করতে এবং আপনি সেখানে কী রাখবেন সেটা নিয়ে আরও ইনফর্মড চয়েস করতে দেয়।
আরও শিখতে পড়ুন: লিনাক্সে ব্যাকগ্রাউন্ডে Bash কমান্ড চালানো এবং আপনার জানা দরকার ১৫ টি Linux LS কমান্ড।