# প্রথম অধ্যায় - প্যাকেজ ম্যানেজমেন্ট

#### অধ্যায় - এক

## প্যাকেজ ম্যানেজমেন্ট

জিএনইউ/লিনাক্সের বৈচিত্র্যময় জগতের সমৃদ্ধির মূুলে সম্ভবত শেয়ারিং। এখানে আপনি অধিকাংশ জিনিস আপনি বিনামূল্যে পাবেন। আর পাবেন স্বাধীনতা। সেটিকে নিজের মত তৈরী করে নিতে এবং আরো মানুষের সাথে শেয়ার করতে। তাই দেখা যায় এমন হতে পারে অনেককিছুই আপনি আগে থেকেই পেয়ে যাচ্ছেন, তৈরী করতে হচ্ছে না। লিনাক্স সিস্টেমে তাই শেয়ার্ড ফাইল বহুলাংশে ব্যবহৃত হয়। এই লাইব্রেরী খাটনি ও খরচ দুটোই কমায়। যে সফটওয়্যার তৈরী করছে তার যেমন আগেই তৈরী হয়েছে এমনকিছু পুনরায় তৈরী করতে হয়না এজন্য খাটনি কমে তেমনি সফটওয়্যারের আকার হয় ছোট। কারন একই লাইব্রেরী অনেকে ব্যবহার করে।

বুঝতেই পারছেন তাই অনেক সফটওয়্যারই অন্য সফটওয়্যার বা লাইব্রেরীর উপর নির্ভরশীল। তাই সেটিকে ব্যবহার করতে গেলে আরো অনেককিছু ইন্সটল করতে হতে পারে। একসময় যা ছিল একটি গুরুতর সমস্যা। বাস্তবিকই আপনি কতগুলো সফটওয়্যারের নাম মনে রাখতে পারবেন যেগুলো হয়ত আপাতদৃষ্টিতে আপনার কাজে লাগবে না? অথচ লিনাক্স সিস্টেম হাজার হাজার ছোট-বড় সফটওয়্যারের সমন্বয়ে তৈরী হয়।

এই সমস্যার সমাধান হচ্ছে প্যাকেজ মানেজার। প্যাকেজ ম্যানেজার হিসেব রাখে কোথায় প্রয়োজনীয় সফটওয়্যারের প্যাকেজ পাওয়া যাবে, সেটির সাথে আর কী কী লাগবে। হিসেব রাখে সিস্টেম কোন সফটওয়্যারের কোন ভার্শন ইন্সটল করা আছে।

এই অধ্যায়ে আমরা প্রধানদুটি প্যাকেজ ম্যানেজমেন্ট সিস্টেম নিয়ে কথা বলবো। একটি ডেবিয়ান ও ডেবিয়ান এর ফর্করা ব্যবহার করে। অন্যটি রেডহ্যাট ও ফেডোরা ব্যবহার করে।

এবার প্যাকেজ ম্যানেজমেন্ট সম্পর্কিত কিছু তথ্য জেনে নেবো:

#### প্যাকেজ

প্রত্যেক সফটওয়্যার বা লাইব্রেরী বিশেষভাবে তৈরী করে রাখা হয় যেন প্যাকেজ ম্যানেজার তা সঠিকভাবে ব্যবহার করতে থাকে। প্রত্যেক প্যাকেজে সফটওয়্যারটি ছাড়াও কিছু তথ্য দেয়া থাকে যাকে মেটাডাটা বলে। তারমধ্যে সফটওয়্যারের নাম, বর্ননা, এবং এর ডিপেন্ডেন্সি(কোন কোন সফটওয়্যার বা লাইব্রেরীর উপর এটি নির্ভরশীল।) বলা থাকে। বিভিন্ন প্যাকেজ ম্যানেজার বিভিন্ন প্যাকে ব্যবহার করে। যেমন: ডেবিয়ানের প্যাকেজ ম্যানেজারসমূহ ডেব ফাইল ব্যবহার করে যার শেষে এক্সটেনশন হয় .deb আবার rpm ব্যবহার করে আরপিএম ফাইল যার এক্সটেনশন .rpm।

#### রিপোজিটরি

রিপোজিটরি হল প্যাকেজের ভাণ্ডার। রিপোজিটরি বিভিন্নরকমের হতে পারে। যেমন সিডিতে বা ব্যক্তিগত স্টোরেজে রাখা রিপোজিটরি। কিন্তু সবচেয়ে বহুল ব্যবহৃত হল অনলাইন রিপোজিটরি। এই অনলাইন রিপোজিটরিগুলো লিনাক্স ডিস্ট্রিবিউশন পরিচালনাকারী প্রতিষ্ঠানগুলো পরিচালনা করে। প্রায় সব ডিস্ট্রিবিউশনেরই নিজস্ব রিপোজিটরি থাকে। প্যাকেজ ম্যানেজার দিয়ে রিপোজিটরিতে থাকা যেকোনো প্যাকেজ ডিপেন্ডেসিসহ ইন্সটল করা হয়। রিপজিটরিতে একটি ফাইল থাকে যেখানে রিপোজিটরিতে থাকা সব প্যাকেজ ও এর ভার্শন সম্পর্কিত তথ্য থাকে। প্যাকেজ ম্যানেজার এই ফাইলটি পড়ে সোর্স আপডেট করে অর্থাৎ জেনে নেয় ওই রিপোজিটরিতে কী কী প্যাকেজ আছে।

#### ডিপেন্ডেন্সি

ডিপেন্ডেসি সম্পর্কে আমরা প্যাকেজ সম্পর্কে কথা বলার সময় বলেছি। কোনো সফটওয়্যার অন্য যেসব লাইব্রেরীর উপর নির্ভরশীল সেগুলো ওই সফটওয়্যারের ডিপেন্ডেন্সি।

#### উচ্চ ও নিম্নস্তরের প্যাকেজ টুল

প্যাকেজ ম্যানেজমেন্ট ব্যবস্থায় সাধারনত দুইধরনের টুল থাকে। নিম্নস্তরের টুল যেগুলো ইন্সটল বা রিমুভের কাজ করে এবং উচ্চস্তরের টুল যা প্যাকেজ খোঁজা এবং ডিপেন্ডেন্সি সমাধান করে।

আমরা যে দুইধরনের প্যাকেজ ম্যানেজমেন্ট সিস্টেম নিয়ে কথা বলবো তাদের উচ্চ ও নিম্নস্তরের টুলগুলো জেনে নেয়া যাক:

| ডিস্ট্রিবিউশন                                                     | নিম্নস্তরের টুল | উচ্চস্তরের টুল    |
| ----------------------------------------------------------------- | --------------- | ----------------- |
| ডেবিয়ান, ডেবিয়ানের ফর্কসমূহ যেমন: উবুন্টু, লিনাক্স মিন্ট ইত্যাদি। | dpkg            | apt-get, aptitude |
| ফেডোরা, সেন্টওএস, রেডহ্যাট এন্টারপ্রাইজ লিনাক্স                   | rpm             | yum               |

### কীভাবে প্যাকেজ ম্যানেজমেন্ট সিস্টেম কাজ করে?

প্যাকেজ ম্যানেজারকে আগে জানতে হয় কোথায় কোথায় সে প্রয়োজনীয় প্যাকেজগুলো পেতে পারে। এরজন্য তারকাছে একটি রিপোজিটরির লিস্ট থাকে। সোর্স আপডেট করলে লিস্টের প্রত্যেকটি রিপোজিটরিতে সে প্যাকেজের লিস্ট ফাইলটি খুঁজে নেয়। তখন তার জানা হয়ে যায় রিপোজিটরিতে কোন কোন ফাইলের কোন কোন ভার্শন আছে। তাছাড়া তার নিজের একটি ডাটাবেজ আছে যেখানে সিস্টেমে ইন্সটল করা সব প্যাকেজের লিস্ট থাকে।

প্যাকেজ ম্যানেজার এরপর প্রস্তুত। তাকে প্যাকেজ খুঁজতে বললে সে এখন খুঁজতে পারে। রিমুভ করতে বললে সে প্যাকেজটি রিমুভ করতে পারে। আবার ইন্সটল করতে বললে আগে সে প্যাকেজের মেটাডাটা পড়ে, জেনে নেয় এর ডিপেন্ডেন্সি গুলো। তারপর মোট কী কী ইন্সটল করতে হবে, তাতে কতটুকু ডাটা খরচ হবে এসব তথ্য উজারকে জানিয়ে দেয়। ইউজার সম্মতি দিলে সে ইন্সটল করে। একইভাবে সে সিস্টেমে যেসব প্যাকেজ পুরনো ভার্শনে আছে, নতুন ভার্শন পেলে আপডেট করে নিতেও সক্ষম।

### প্যাকেজ ম্যানেজারের সাধারণ ব্যবহার

#### সোর্স আপডেট

রেডহ্যাট ও ফেডরা অর্থাৎ যারা yum ব্যবহার করে তাদের সোর্স স্বয়ংক্রিয়ভাবে আপডেট হয়। apt-get ব্যবহারকারীরা সোর্স আপডেট করেতে পারেন এই কমান্ড দিয়ে:

```
apt-get update
```

আপনি সাধারন ইউজার হিসেবে এই কমান্ড দিলে পার্মিশন ডিনাইড দেখাবে। আপনার ডিস্ট্রিবিউশনে যদি রুট এক্যাউন্ট এনাবেল করা থাকে তাহলে লিখুন `su` এবং এন্টার দিন, রুট এক্যাউন্টের পাসওয়ার্ড চাইবে। এটি দিলে আপনি রুট হিসেবে কাজ করতে পারবেন। আবার আপনি যদি উবুন্টু বা মিন্ট বা sudo ব্যবহার করে এমন কোনো ডিস্ট্রিবিউশন ব্যবহার করেন তাহলে আপনি কমান্ডের আগে sudo লাগাবেন। অর্থাৎ, `sudo apt-get update` এই অধ্যায়ের অধিকাংশ কমান্ডই আপনাকে রুট বা এ্যাডমিনিস্ট্রেটর হিসেবে দিতে হবে।

#### প্যাকেজ খোঁজা

উচ্চস্তরের টুল ব্যবহার করে আমরা কোনো প্যাকেজ খুঁজতে পারি এভাবে:

| ধরন       | কমান্ড                          |
| --------- | ------------------------------- |
| ডেবিয়ান   | `apt-cache search serch_string` |
| রেড হ্যাট | `yum search search_string`      |

**search\_string** এর জায়গায় আপনি যা খুঁজতে চান লিখবেন।

#### প্যাকেজ ইন্সটল

প্যাকেজ ইন্সটলের কমান্ডগুলি হল:

| ধরন       | কমান্ড                              |
| --------- | ----------------------------------- |
| ডেবিয়ান   | `apt-cache install package_name...` |
| রেড হ্যাট | `yum install package_name...`       |

অর্থাৎ, আপনি যদি vim ইন্সটল করতে চান তাহলে ডেবিয়ানের ধরনের ডিস্ট্রিবিউশনে লিখবেন: `apt-get install vim` এবং রেড হ্যাট এর ধরনে `yum install vim`। এরপর প্যাকেজ ম্যানেজার আপনাকে হিসেব করে বলে দেবে ডিপেন্ডেন্সিসহ মোট কতটুকু ডাউনলোড করতে হবে এবং সম্মতি চাইবে। আপনি 'y' চাপলে সে ডাউনলোড শুরু করবে এবং ডাউনলোড শেষে ইন্সটল করে নেবে।

**আলাদাভাবে ডাউনলোড করা প্যাকেজ ইন্সটল**

আলাদাভাবে ডাউনলোড করা প্যাকেজ আপনি নিম্নস্তরের টুল দিয়ে ইন্সটল করতে পারেন এভাবে:

| ধরন       | কমান্ড                 |
| --------- | ---------------------- |
| ডেবিয়ান   | `dpkg -i package-file` |
| রেড হ্যাট | `rpm -i package-file`  |

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

#### প্যাকেজ রিমুভ করা

আপনি যেকোনো প্যাকেজ রিমুভ করতে পারেন এভাবে:

| ধরন       | কমান্ড                        |
| --------- | ----------------------------- |
| ডেবিয়ান   | `apt-get remove package_name` |
| রেড হ্যাট | `yum erase package_name`      |

#### সিস্টেম আপডেট করা

আপনি আপনার সিস্টেমের সব প্যাকেজ আপডেট করতে পারেন এভাবে:

| ধরন       | কমান্ড            |
| --------- | ----------------- |
| ডেবিয়ান   | `apt-get upgrade` |
| রেড হ্যাট | `yum update`      |

এক্ষেত্রেও আপনার কাছে ইন্সটলের মতই সম্মতি চাওয়া হবে।

উবুন্টুতে আপনাকে সিস্টেম সম্পূর্ণরূপে আপডেট করতে `apt-get upgrade` এর পর `apt-get dist-upgrade` দিতে হবে।

#### ইন্সটল করা প্যাকেজের লিস্ট করা

আমরা সিস্টেমে ইন্সটল করা সকল প্যাকেজের লিস্ট পেতে পারি এভাবে:

| ধরন       | কমান্ড        |
| --------- | ------------- |
| ডেবিয়ান   | `dpkg --list` |
| রেড হ্যাট | `rpm -qa`     |

#### প্যাকেজ ইন্সটল করা আছে কিনা নিশ্চিত হওয়া

দীর্ঘ লিস্টে আপনার ইন্সটল করা প্যাকেজটি আছে কিনা দেখার চেয়ে এই পদ্ধতিতে দেখা সহজ:

| ধরন       | কমান্ড                          |
| --------- | ------------------------------- |
| ডেবিয়ান   | `apt-get --status package_name` |
| রেড হ্যাট | `rpm -q package_name`           |

#### ইন্সটল করা প্যাকেজ সম্পর্কে তথ্য জানা

ইন্সটল করা প্যাকেজ সম্পর্কে তথ্য জানতে ব্যবহার করুন:

| ধরন       | কমান্ড                        |
| --------- | ----------------------------- |
| ডেবিয়ান   | `apt-cache show package_name` |
| রেড হ্যাট | `yum info package_name`       |
