উইন্ডোজ, macOS, এবং অ্যান্ড্রয়েডের বিপরীতে, উবুন্টুতে—এবং সাধারণত লিনাক্সে—সফ্টওয়্যার একটি একক প্যাকেজ হিসেবে ডিস্ট্রিবিউট হয় না। বরং, আপনি যখন একটি অ্যাপ্লিকেশন ইনস্টল করেন, আপনার সিস্টেমের প্যাকেজ ম্যানেজার মেইন অ্যাপ প্যাকেজ এবং এর ডিপেন্ডেন্সি (dependencies) সহ একাধিক প্যাকেজ ডাউনলোড করে। তবে, এটি শুধু ট্র্যাডিশনাল প্যাকেজ ইনস্টলেশন-এ লিনাক্সে সত্য অর্থাৎ প্যাকেজ ম্যানেজার ব্যবহার করে।
ইনস্টলেশন време কী অডিশনাল ডিপেন্ডেন্সি ডাউনলোড হচ্ছে সেটা জানা বिगিনার (beginner) এবং অ্যাডভান্সড (advanced) ব্যবহারকারী দুজনের জন্যও উপকারী। এইভাবে, একজনের আপনার সিস্টেমে ইনস্টল করা প্যাকেজগুলোর পুরো কন্ট্রোল থাকে।
আসুন দেখি উবুন্টুতে একটি প্যাকেজের ডিপেন্ডেন্সি কীভাবে চেক করবেন।
প্যাকেজ ডিপেন্ডেন্সি কী?
ডিপেন্ডেন্সি হলো লিনাক্সে একটি অ্যাপ্লিকেশন সঠিকভাবে কাজ করার জন্য প্রয়োজনীয় সাপোর্টিং প্যাকেজ। উদাহরণস্বরূপ, আপনি যদি উবুন্টুতে VLC মিডিয়া প্লেয়ার ডাউনলোড করতে চান, APT কিছু অডিশনাল প্যাকেজ ইনস্টল করবে যেনে libc6 এবং gcc, প্রাইমারি "vlc" প্যাকেজের পাশাপাশি। একটি ডিপেন্ডেন্সির ওপরও অন্য প্যাকেজ ডিপেন্ডেন্সি হিসেবে থাকতে পারে, তাই একটি হায়েরার্কিক্যাল (hierarchical) স্ট্রাকচার ফর্ম (form) হয়।
যেহেতু লিনাক্স প্যাকেজগুলো পারস্পরিকভাবে নির্ভরশীল (interdependent), প্রায় সকল সফ্টওয়্যার কিছু অডিশনাল প্যাকেজ চায় যা আপনাকে আপনার সিস্টেমে ইনস্টল করতে হয়।
যদিও APT যেন প্যাকেজ ম্যানেজার ডিপেন্ডেন্সি ম্যানেজমেন্ট এবং ইনস্টলেশন অটোমেট করে, তবুও ত্রুটি (errors) ঘটে যখন আপনি সোর্স থেকে প্যাকেজ ম্যানুয়ালি বিল্ড (build) করার চেষ্টা করেন। যাইহোক, আপনি এররগুলো সমাধান করতে পারেন সIMPLY প্রয়োজনীয় ডিপেন্ডেন্সি আপনার সিস্টেমে apt install কমান্ড দিয়ে ইনস্টল করে।
লিনাক্সে প্যাকেজ ডিপেন্ডেন্সি চেক করার পদ্ধতি
خوشকিসমতভাবে, উবুন্টুতে একটি প্যাকেজের ডিপেন্ডেন্সির তালিকা পাওয়ার জন্য বেশ কিছু পথ আছে। APT, উবুন্টু এবং ডেবিয়ান-ভিত্তিক ডিস্ট্রোর ডিফল্ট প্যাকেজ ম্যানেজার, ডিপেন্ডেন্সি-রিলেটেড ইনফরমেশন পাওয়ার জন্য একাধিক কমান্ড অফার করে।
APT প্যাকেজ ম্যানেজার ব্যবহার করা
আপনি উবুন্টুতে APT ব্যবহার করে একটি প্যাকেজের সাথে যুক্ত ডিপেন্ডেন্সির তালিকা পেতে পারেন। কমান্ডের বেসিক সিনট্যাক্স (syntax):
sudo apt depends packagename
উদাহরণস্বরূপ, rhythmbox প্যাকেজের ডিপেন্ডেন্সি চেক করতে:
sudo apt depends rhythmbox
ডিপেন্ডেন্সির তালিকার পাশাপাশি, আউটপुटে রিকমেন্ডেড (recommended) এবং সাজেস্টেড (suggested) প্যাকেজও থাকবে যা আপনি rhythmbox-এর সাথে ইনস্টল করতে পারেন।
বিকল্পভাবে, আপনি apt-cache কমান্ডও ব্যবহার করতে পারেন একই আউটপুট পাওয়ার জন্য।
sudo apt-cache depends rhythmbox
একটি নির্দিষ্ট প্যাকেজের সংক্রান্ত অতিরিক্ত ইনফরমেশন পেতে, depends-এর বদলে show মেথড ব্যবহার করুন।
sudo apt show rhythmbox
sudo apt-cache show rhythmbox
আউটপুট:
dpkg ব্যবহার করে ডিপেন্ডেন্সি লিস্ট করা
আপনি যদি আপনার সিস্টেমে একটি DEB প্যাকেজ ডাউনলোড করে থাকেন এবং জানতে চান প্যাকেজের সাথে কোন ডিপেন্ডেন্সি ইনস্টল হবে, তবে -I (ক্যাপিটাল i, نه lowercase L) বা --info ফ্ল্যাগ (flag) কমান্ডের সাথে ব্যবহার করুন।
sudo dpkg -I /path/to/package.deb
sudo dpkg --info /path/to/package.deb
...যেখানে /path/to/package.deb DEB ফাইলের অ্যাবসোলিউট (absolute) বা রিলেটিভ (relative) পাথ।
আউটপুটে প্যাকেজের সাইজ, সোর্স, এবং অন্যান্য ব্যবহারিক ইনফরমেশন ডিপেন্ডেন্সির তালিকার পাশাপাশি দেখাবে।
ইনস্টল করা একটি প্যাকেজের ডিপেন্ডেন্সির তালিকা পেতে, -s ফ্ল্যাগ dpkg-র সাথে ব্যবহার করুন। উদাহরণস্বরূপ:
sudo dpkg -s firefox
আউটপুট:
apt-rdepends ব্যবহার করা
একটি আরও বিস্তারিত আউটপুট পেতে, আপনি apt-rdepends ইউটিলিটি ব্যবহার করতে পারেন। যেহেতু এটি অধিকাংশ লিনাক্স ডিস্ট্রিবিউশনে প্রি-ইনস্টল্ড (pre-installed) আসে না, আপনাকে উবুন্টুতে APT দিয়ে ম্যানুয়ালি ইনস্টল করতে হবে।
sudo apt install apt-rdepends
একটি প্যাকেজের ডিপেন্ডেন্সি ট্রি (dependency tree) পেতে নিচের কমান্ড ফরম্যাট ব্যবহার করুন:
apt-rdepends packagename
উদাহরণস্বরূপ:
apt-rdepends vlc
আউটপুট:
জেনারেটেড আউটপুট সাধারণত লম্বা হয় কারণ apt-rdepends ডিপেন্ডেন্সির কমপ্লিট হায়েরার্কিক্যাল ট্রি (complete hierarchical tree) দেখায়, যার মানে আপনি একটি ডিপেন্ডেন্সির ডিপেন্ডেন্সির লিস্টও পায়।
আপনি একটি নির্দিষ্ট প্যাকেজের ওপর ডিপেন্ডেন্ট (dependent) প্যাকেজের লিস্টও পেতে পারেন। উদাহরণস্বরূপ, চেক করতে কোন প্যাকেজগুলো libc-কে ডিপেন্ডেন্সি হিসেবে চায়:
apt-rdepends -r libc
আউটপুট:
reverse-depends ইউটিলিটি
যদিও apt-rdepends-এর রিভার্স ডিপেন্ডেন্সি ফিচার (-r ফ্ল্যাগ) আশা থেকে ভালো কাজ করে, তবুও একটি আরেকটি ইউটিলিটি আছে যা আপনি ব্যবহার করতে পারেন একটি প্যাকেজের রিভার্স ডিপেন্ডেন্সি এক্সট্র্যাক্ট (extract) করার জন্য। reverse-depends কমান্ড ubuntu-dev-tools প্যাকেজের অংশ, এবং ডাউনলোড করা যায়:
sudo apt install ubuntu-dev-tools
কমান্ডের ডিফল্ট সিনট্যাক্স:
reverse-depends options packagename
...যেখানে options হলো কমান্ডের সাথে ব্যবহার করা ফ্ল্যাগগুলো এবং packagename হলো সেই প্যাকেজের নাম যার জন্য আপনি রিভার্স চেক করতে চান।
আপনি উপরে উল্লিখিত কমান্ডের সাথে বিভিন্ন ফ্ল্যাগ যোগ করে আউটপুট মডিফাই (modify) করতে পারেন। সবচেয়ে উপকারী অপশনগুলো:
- -R: শুধু ডায়রেক্ট ডিপেন্ডেন্সি লিস্ট করুন (সাজেস্টেড বা রিকমেন্ডেড প্যাকেজ না)
- -s: সাজেস্টেড প্যাকেজ ইনক্লুড করুন
- -l: আউটপুট একটি ক্লিনার ফরম্যাটে প্রেজেন্ট করুন, স্ক্রিপ্টে ব্যবহার উপযোগী
যদি আপনি কীভাবে টুলটি ব্যবহার করবেন সেটা বুঝতে না পারেন এবং কমান্ড-লাইন হেল্প দরকার হয়, তবে --help বা -h ফ্ল্যাগ ব্যবহার করুন।
reverse-depends -h
reverse-depends --help
সিমুলেটেড ইনস্টলেশন/রিমУভাল (simulated installation/removal) ব্যবহার করে ডিপেন্ডেন্সি লিস্ট পাওয়া
যারা সিস্টেমে বর্তমানে ইনস্টল না থাকা সকল ডিপেন্ডেন্সির একটি সংক্ষিপ্ত তালিকা চান, তারা একটি নির্দিষ্ট প্যাকেজের সিমুলেটেড ইনস্টলেশন (simulated installation) (অথবা আনইনস্টলেশন) চালাতে পারেন।
উদাহরণস্বরূপ, PHP প্যাকেজের প্রয়োজনীয় ডিপেন্ডেন্সি চেক করতে, নিচের কমান্ড চালান:
sudo apt install -s php
আউটপুটে একটি "The following additional packages will be installed" সেকশন থাকবে। আধিক লিস্ট করা সকল প্যাকেজ নাম ডিপেন্ডেন্সি যেগুলো আপনার সিস্টেমে পাওয়া যায়নি।
আপনি যদি উবুন্টুতে ইতিমধ্যে ইনস্টল করা একটি প্যাকেজের ডিপেন্ডেন্সির তালিকা চান, তবে একটি সিমুলেটেড আনইনস্টল (simulated uninstall) করুন চেক করতে কোন অডিশনাল প্যাকেজ সেটার সাথে রিমুভ হবে।
sudo apt remove -s packagename
উদাহরণ:
sudo apt remove -s rhythmbox
আউটপুট:
লিনাক্স প্যাকেজ পারস্পরিকভাবে নির্ভরশীল
এই গাইড থেকে আপনি যথার্থভাবে অনুমান করতে পারেন, প্রায় সকল লিনাক্স প্যাকেজ অন্য একটি প্যাকেজের ওপর নির্ভরশীল। এই কনসেপ্টের পিছনে প্রাইমারি প্রিন্সিপেল (primary principle) হলো লিনাক্স-ভিত্তিক অপারেটিং সিস্টেমে, প্রতিটি প্যাকেজ একটি একক কাজ করার জন্য সাপPOSED (supposed), এবং সেটা ভালো করে।
যদি একটি প্যাকেজ অডিও সার্ভিস ম্যানেজ করার জন্য ডেভেলপড হয়, তবে অন্যান্য প্রোগ্রামগুলো শুধু সেই প্যাকেজকে তাদের ডিপেন্ডেন্সি হিসেবে লিস্ট করবে, এবং তাদের অডিও রিকোয়ারমেন্ট পূরণ করতে সেটা ব্যবহার করবে।
এছাড়া, যদি একাধিক অ্যাপ্লিকেশন একই প্যাকেজ চায়, তবে সেটা সিস্টেমে শুধু একবার ইনস্টল হয়, ডেটা রिडান্ডেন্সি (data redundancy) প্রতিরোধ করে এবং ডিস্কে স্টোরেজ স্পেস বাঁচায়। আপনি APT ব্যবহার করে আপনার সিস্টেমে বর্তমানে ইনস্টল করা সকল প্যাকেজের তালিকাও পেতে পারেন।