هر توزیع لینوکس، سیستم مدیریت بسته مربوط به خود را دارد. برای ردهت دو سیستم مدیریت بسته بنام YUM و RPM وجود دارد.
کار با RPM
هر بسته شامل یک ساختار دایرکتوری است که از فایل ها تشکیل شده است و نرم افزار کاربردی را می سازد. در ردهت بسته ها پسوند rpm. دارند و از روش های گوناگون قابل نصب هستند.
بسته ها در لینوکس معولا به شکل زیر نام گذاری می شوند:
Package_name-Version-release.arch.rpm
به عنوان یک نمونه اجازه دهید نگاهی به بسته postfix بیاندازیم که برای نصب یک سرور SMTP ایمیل استفاده می شود:
postfix-2.6.6-2.el6.x86_64.rpm
از ابتدا می توانید ببینید که نام این بسته postfix است، شماره نسخه 2.6.6 است که برای سیستم عامل 64 بیتی ساخته شده است. 2- انتشار است و el6 چیزی است که تنها در بسته های ردهت میبینیم چرا که این این یک شماره نسخه داخلی را برای انتشار ردهت مشخص می کند. توانایی خواندن یک بسته و درک اطلاعات نسخه آن برای یک مدیر سیستم مهم است. این به تعیین اینکه آیا بسته قدیمی است یا اینکه در معرض آسیب پذیری یک ریسک امنیتی خاص در نسخه گونان نرم افزار هستید کمک می کند. گاهی زمانی که یک بسته را نصب می کنید مستلزم نصب بسته دیگری نیز هست. از این به عنوان وابستگی یا dependency یاد می شود که در مایکروسافت و برای سیستم های ویندوزی معمولا با نام requirement میشناسیم.
بعضی از بسته ها برای اینکه مطمئن شوند در هنگام ارتقا وابستگی هایشان با شکست مواجه نمی شود ، نیاز به بسته های خاص دیگری دارند.( dependency )
تمام بسته ها جایی در داخل یک مخزن نگهداری می شوند که ردهت مخزن نرم افزاری مربوط به خود را دارد که بسته ها را برای سیستم عامل ردهت نگهداری می کند. هنگامی که بسته خود را بروزرسانی میکنید ، آنها نسخه بسته را در مخزن مقایسه می کنند تا ببینند که آیا یک نسخه جدید وجود دارد یا خیر. همچنین می توانید نسخه جدید بسته را که در خارج از مخزن است داشته باشید اما این نیاز به یک روش نصب کمی متفاوت دارد.
نصب و حذف بسته ها
نخستین ابزار مدیریت بسته که به اتن نگاه می کنیم RPM است. این ابزار برای مدیریت بسته های یکتا و خارح از مخزن استفاده می شود. این به این معنی است که می توانید از دستور YUM برای جست و جوی بسته ها در مخزن و نصب آن استفاده کنید در حالی که از ابزار RPM برای نصب بسته های rpm. که دانلود کرده اید یا بصورت دستی از مخزن یا وب استفاده می کنید.
هم برای RPM و هم YUM نحوه استفاده و گزینه ها فوق العاده زیاد هستند. تا زمانی که به کارکردن با انها عادت کنید می توانید به منوی help برای لیست کردن تمام گزینه ها مراجعه کنید. این بلخش تنها شامل رایج ترین گزینه ها است که نیاز دارید.
نحوه استفاده از دستور rpm [command options] package_name
در آموزش های مختلف از command option نام های مختلفی خواهید شنید. بعضی ها switch یا اپراتور یا option و … ترجمه می کنن. بهترین ترجمه میتوان گفت سوییچ است. برای مثال دستور rpm با سوییچ i برای نصب بسته.
لیستی از سوییچ های قابل استفاده برای دستور rpm رو براتون با کاربردهاشون در ادامه خواهیم گفت
e: حذف یک بسته
i: نصب یک بسته
h: نشان دادن پیشرفت hash در هنگام نصب
U: ارتقا یک بسته
v: ارائه خروجی کامل از فرایند نصب
گزینه هایی هم برای کوئری گرفتن یا پرس و جو از بسته داریم با q
c: لیست کردن تمام فایل های پیکربندی
d: لیست کردن تمام فایل های مربوط به فایل ها
و الی ماشالله سوئیچ که میتوانید پس از دستور خود برای مقاصد مختلف بکار بگیرید. و این ها در واقع گزینه های پرکاربرد و رایج هستند.
اجازه دهید به منظور نشان دادن نصب با دستور rpm یک بسته را دانلود کنیم. برای دانلود بسته در لینوکس از wget استفاده می شود.
در اینترنت nano rpm را جستجو کردیم و لینک دانلود فایل کپی شد. حالا باید وارد محیط CLI لینوکس خود شوید. منظور از CLI هم Command Line Interface یا همان Shell Access هست.
wget https://rpmfind.net/linux/opensuse/tumbleweed/repo/oss/x86_64/nano-4.5-1.1.x86_64.rpm
زمانی که بسته را دانلود کردید می توانید با دستور rpm و سوئیچ i آن را نصب کنید.
[root@pouyasazan ~]# rpm -ivh nano-2.3.1-10.el7.x86_64.rpm
Preparing… ################################# [100%] Updating / installing…
1:nano-2.3.1-10.el7 ################################# [100%]
همانطور که در تصویر بالا هم میبینید ما بعد از دستور rpm از سه سوئیچ ترکیبی هم استفاده کرده ایم.
با سوئیچ i گفتیم که بسته نصب شود و با سوئیچ v از rpm خواستیم تا خروجی و فرایند نصب را نشان دهد و از سوئیچ h هم خواستیم تا درصد پیشرفت کار را نمایش دهد.
همیشه اینطور زیبا نصب با rpm اتفاق نمی افتد. یکی از جنبه های منفی rpm این است که اگر بسته هرگونه وابستگی یا dependency داشته باشد متاسفانه rpm به شما خطا نمایش می دهد و میبایست ابتدا آن پیش نیازها را برطرف کنید و دوباره به مراحل نصب برگردید.
نکته:
ممکن است یک خطا در مورد بسته ای که در حال نصب آن هستید دریافت کنید که می گوید این با یک نسخه جاری از نرم افزار که هم اکنون بر روی سیستم وجود دارد در تعارض است. اگر این طور است برای یادگیری نحوه پاک کردن بسته قدیمی و سپس نصب بسته جدید به خواندن این اموزش ادامه دهید.
اگر میخواهید این بسته را ارتقا دهید چون می دانید که اهم اکنون نصب است می توانید از U بجای i استفاده کنید. این دستور بسته را ارتقا داده یا اگر هم اکنون نصب نیست آنرا نصب می کند.
rpm -Uvh nano-2.3.1-10.el7.x86_64.rpm
ممکن است تصمیم بگیرید که دیگر نمی خواهید بسته نصب شده باقی بماند. در این مورد می توانید از گزینه e برای حذف آن استفاده کنید.
rpm -evh nano
البته نیازی به سوئیچ vh نیست و می توانید فقط با rpm -e nano هم حذف را انجام دهید. فقط در این صورت هیچ خروجی نمایش نمی دهد.
تجربه دنیای واقعی
ممکن است نیاز به نصب یک بسته داشته باشید که هم اکنون بر روی سیستم عامل نصب است. لازم نیست که با حذف بسته و نصب دوباره آن خودتان رابه دردسر بیاندازید. می توانید از گزینه ای بنام replacepkgs هم استفاده کنید. نحوه استفاده از این پارامتر در دستورات بصورت زیر است:
rpm -ivh --replacepkgs nano-2.3.1-10.el7.x86_64.rpm
کوئری تایید بسته ها
آخرین نسخه از یک بسته را نصب کرده اید و میخواهید مطمئن شوید که به درستی نصب شده است. چگونه می توانیم آنرا بررسی کنیم؟ و یا بسته ای که نصب کرده ایم می خواهیم ورژن آن را بدانیم.
rpm -qa | grep nano
سوئیچ یا اپراتور q وظیفه کوئری گرفته یا پرس و جوی اطلاعات بسته را بر عهده دارد.
ما با دستور بالا از سیستم عامل خروجی زیر را دریافت می کنیم که اطلاعاتی درباره ورژن nano به ما ارائه می کند.
گزینه q به rpm می گوید که می خواهید چیزی را پرس و جو کنید و گزینه a می گوید که تمام بسته های نصب شده بر روی سیستم را جستجو کن. با این حال نمی خواهید که همه بسته های نصب شده را لیست کنید بنابراین می توانید از دستور grep برای انتخاب بسته ای که به دنبال آن هستید استفاده کنید. مزیت استفاده از grep این است که در وایع یک ابزار تطبیق الگو است و بنابراین چندین نتیجه که با مورد شما مطابقت دارد را نمایش می دهد.
مثال ساده تر آن زمانی است که به فروشگاه دیجیکالا مراجعه می کنید و محصول مورد نظرتان را جستجو می کنید. از جستجوگر میخواهید فقط کالاهای مربوط به مانیتور الجی را نمایش دهد و یا فقط محصولات موجود را نمایش دهد. این اعمال فیلتر یا الگو در لینوکس با دستور grep امکان پذیر است. از سیستم عامل میخواهیم وقتی تمام بسته های نصب شده را بررسی کرد فقط به ما خروجی مربوط به nano را برگرداند.
تجربه دیگری از دنیای واقعی
شما می توانید از rpm -q برای پیدا کردن بسته مورد نظرتان استفاده کنید ولی این زمانی کاربرد دارد که شما اسم کامل بسته را بدانید و اگر دستور nano -q nano را وارد کنید خروجی نمایش نخواهد داد.
این در حالی است که شما مطمئن هستید nano در سیستم شما نصب است. اما وقتی دستور را بصورت ترکیبی با پایپ grep بررسی می کنید نسخه نمایش داده می شود. در واقع grep از regex برای تهیه خروجی استفاده می کند که دیگر نیاز نیست شما نام کامل بسته را بدانید.
یک نوع کوئری دیگری که می توانیم برای پیدا کردن وابستگی فایل ها و فولدرها به یک بسته پیدا کنیم به صورت زیر است:
کوئری پیدا کردن وابستگی های یک فایل با سوئیچ f که می توانید در ادامه نام فایل را وارد کنید
rpm -qf /etc/ssh/sshd_config
خروجی چند فایل مختلف که در تصویر برای درک بهتر آورده شد. با دقت خروجی ها را مشاهده نمایید.
نوع دیگری از کوئری با نام بسته:
rpm -ql nano
سوئیچ l لیست تمام فایل هایی که به نحوی با بسته در ارتباط هستند را به شما نمایش میدهد. خروجی یک دستور را در تصویر زیر ببینید:
دستور rpm -qR هم میتونید برای وابستگی های اسناد بکار ببرید.
سوئیچ ها بسیار زیاد هستند که می توانید از man page برای اطلاعات بیشتر استفاده کنید. man rpm
دنیای YUM
دستور yum به مخازنی دسترسی دارد که در آنها مقدار زیادی بسته نگهداری می شود و می توانید آنها را به صورت خودکار نصب ارتقا یا حذف کند. YUM همچنین هرگونه وابستگی dependency را برای شما نصب می کند که دستور rpm نمی تواند این کار را انجام دهد.
تمام دستورهای مشابه که با rpm انجام میدادیم را با استفاده از yum نیز انجام می دهیم.
نحوه استفاده: yum [switch] command
گزینه های switch:
c- مشخص کردن محل فایل پیکربندی (فایل کانفیگ)
q- حالت بی صدا و بدون خروجی (لاگ)
y- اعلام پاسخ yes برای نصب بسته ها (سیستم yum برای نصب بسته از شما تاییدیه می خواهد که شما باید به نصب شود پاسخ بله یا خیر دهید.)
دستورها command:
clean برای حذف داده های ذخیره شده بصورت کش
erase برای حذف یک بسته از سیستم
groupolist نشان دادن گروهی از بسته های در دسترس
groupinstall نصب بسته های موجود در یک گروه از مخزن
info نمایش اطلاعات در مورد یک بسته
install نصب یک بسته بر روی سیستم
search جستجوی یک بسته
update بروزرسانی یک بسته
همچنین yum دارای یک فایل پیکربندی است که در etc/yum.conf/ قراردارد و شامل برخی از تنظیمات اساسی برای چگونگی رفتار کردن Yum است. این گزینه ها شامل اینکه کجا Yum بسته ها را پس از نصب ذخیره می کند ، چه مقدار خروجی برای فایل های لاگ تولید می کند و محل فایل لاگ و …. هست. معمولا تنظیمات پیش فرض خوب هستند اما باید در مواردی که می خواهید تنظیمات را برای Yum درست کنید محل این فایل ها را بدانید.
نصب و حذف بسته ها
با نصب بسته nano شروع می کنیم. با دستور زیر بطور مستقیم از مخازن ردهت بسته شما نصب خواهد شد. همچنین اگر برای نصب نیاز به کتابخانه یا Dependency داشته باشد بطور اتومات اول آنها را برطرف می کند و در نهایت بسته شما را install میکند:
yum install nano -y
دستور yum برای نصب بکار گرفته شد و کامند install صادر شد. نام بسته را تحت عنوان nano اعلام کردیم و در نهایت با سوئیچ y- از yum خواستیم تا در حین نصب از ما yes / no را نپرسد و از همان ابتدا پاسخ yes را داده ایم.
در نهایت خواهید دید که yum ابتدا metadata مخازن خود را بروزرسانی میکند. متادیتا به بیان ساده لیست موجودی انبار است. فرض کنید شما یک انباردار هستید. در این لیست متادیتا لیست آخرین موجودی ها ذکر شده است که بعدا در بحث ریپازیتوری مفصل درباره آن صحبت خواهیم کرد.
پس از آپدیت metadata مرحله ای بنام Dependencies resolved را طی خواهد کرد تا در نهایت لیست پکیج هایی که نصب می شود با ذکر ورژن و ریپازیتوری و حجم بسته و …. را اعلام خواهد کرد و نصب را به اتمام می رساند.
برای بروزرسانی یک بسته از دستور yum بصورت زیر استفاده می کنیم:
yum update -y nano
در صورتی که آخرین نسخه بسته نصب شده باشد، با پیام No packages marked for update مواجه می شوید.
برای حذف بسته ها در yum شما دو انتخاب remove و erase دارید. تفاوت این است که erase تمام بسته ها را پاک می کند اما فایل های پیکربندی را در زمانی که می خواهید آنها را دوباره نصب کنید برای بسته ها ذخیره می کند. اما دستور remove بطور کل بسته را به همراه تمام کانفیگ های مربوط به آن بسته پاکم می کند.
در اینجا از دستور remove استفاده کنید زیرا هم اکنون نمی خواهید چیزی در اطراف سیستم عامل مربوط به این بسته باقی بماند.
یکی از ویژگی های مهم در مورد yum این است که به جای بروزرسانی تنها یک بسته می توانید تمام بروزرسانی هایی که نیاز به نصب شدن بر روی سیستم عامل است را یکجا انجام دهید.
yum list update
از این لیست می توانید بسته ها را جداگانه یا به صورت کلی برای بروزرسانی انتخاب کنید. برای نصب بروزرسانی تمام بسته ها از دستور زیر استفاده می شود:
yum update -y
تجربه دنیای واقعی
اگر برخی از مهارت های اسکریپت نویسی را کسب کنید می توانید به منظور اجرای بروزرسانی لیست YUM و هدایت خروجی آن به یک فایل متنی ، یک اسکریپت کوچک راه اندازی کنید. سپس این فایل به صورت خلاصه بروزرسانی هفتگی به شما ایمیل شود و بنابراین می توانید ببینید که کدام وصله را می خوهید برای سیستم خود به کار ببرید. این یک کار معمول است که می خواهید به عنوان مدیر یک سیستم آنرا انجام دهید.
همچنین ابزار Yum یک لیست از گروه ها که شامل مجموعه ای از بسته ها است را نگه میدارد که نصب مجموعه ای از بسته ها را راحت تر می کند. متدوال ترین نمونه زمانی است که میخواهید یک بسته X server را نصب کنید به طوری که سیستم یک رابط گرافیکی دارد. به نظور گرفتن یک لیست از تمام گروه های در دسترس می توانید از دستور grouplist استفاده کنید.
yum grouplist
پس از آن می توانید آن گروه را با استفاده از دستور groupinstall نصب کنید. برای این بخش گروه Basic Web Server را می خواهیم نصب کنیم که بصورت زیر دستور را میبایست وارد کنیم:
yum groupinstall "Basic Web Server"
اگر اولین بار باشد که خروجی را مشاهده می کنید قطعا شگفت زده خواهید شد که نصب گروهی آن چه میزان پیش نیاز و همنیاز دارد:
دستور groupinstall مقدار زیادی از زمان شما را صرفه جویی خواهد کرد و تمام کارهایی که باید انجام دهید برایتان با همین دستور ساده انجام می دهد. تصور کنید این کار قرار باشد با rpm انجام شود. شما باید 79 پکیج نصب کنید که دارای 108 وابستگی است.
در بهترین حالت شما باید 200 بار rpm را اجرا کنید تا لیستی از وابستگی های آن را بدست آورید.
عمق فاجعه زمانی بود که تمام اینها بصورت سورس منبع باز در گذشته کامپایل می شدند و روزهای زیادی یک system admin میبایست زمان صرف کند. با yum شما می توانید طی 5 دقیقه و فقط با یک دستور … !!! ؟؟؟ :دی
نکته قوی
لینوکس فضای خالی را اجرا نمی کند. برای مثال دستور نصب گروهی Basic Web Server را مشاهده کنید. برای اینکه لینوکس متوجه منظور ما شود آن را در علامت کوتیشن قرار داده ایم.
نمونه دیگری از دستور نصب گروهی که اسم بسته دارای فاصله space است:
yum groupinstall "Development Tools"
فراموش نکنید که برای نصب بسته های گروهی که فاصله در نام بسته وجود دارد از کوتیشن استفاده کنید در غیر این صورت بسته شما نصب نخواهد شد و خطا دریافت می کنید.
جست و جوی بسته ها
بر خلاف RPM دستور YUM دسترسی به مخازن را می دهد که از طریق آن می توانید برنامه ها را نصب کنید. از دستور search برای جستجوی بسته های نرم افزاری از مخازن استفاده کنید:
yum search exim
در اینجا همانطور که میبینید چند برنامه منطبق با جستجوی ما در مخزن به همراه توضیح کوتاه از آنچه هر بسته انجام می دهد نمایش داده شد.در نظر داشته باشید با پارامترهای جستجو امکان وجود چندین بسته وجود داشته باشد. اگر به اطلاعات بیشتری نسبت به شرح کوتاهی که دستور search فراهم کرده است نیاز دارید میتوانید از دستور info استفاده کنید.
برای پیدا کردن اطلاعات بیشتر در مورد بسته exim از دستور زیر استفاده کنید:
yum info exim
یکی از دستورهای اضافی که می توانید با yum استفاده کنید و در rpm وجود ندارد دستور clean است. این دستور کش yum را پاک میکند و آنرا مجبور به هماهنگی با مخازن ردهت می کند و اطلاعات مربوط به بروزترین بسته ها را به شما می دهد. برای پاک کردن کش از دستور زیر استفاده کنید:
yum clean all
من yum را یک ابزار بسیار کارآمد برای مدیریت بسته می دانم که برای اضافه ، بروزرسانی و حذف نرم افزار به کار میگیرم. با این حال دستور rpm و گزینه های آن هنگامی که میخواهید یک بسته را بر روی سیستم جستجو کنید قابلیت بیشتری ارائه می کند. دانستن اینکه چه زمان از کدام دستور استفاده کنید یا اینکه چه وقت میان آنها سوئیچ کنید به شما در تبدیل شدن به یک مدیر خوب سرور کمک می کند. با افزایش آگاهی شما از سیستم لینوکس کاربرد بسیار زیاد rpm در پیکربندی سیستم را فرا خواهیم گرفت.
موفق و پیروز باشید