آموزش لینوکس LPIC1-101 – مدیریت بسته ها با rpm
مدیریت بسته ها با rpm
برای شروع فرض کنید یک نرم افزار به نام sinداریم و می خواهیم به یک فرد دیگر هم این نرم افزار را بدهیم.
در فصل قبل با توجه به معرفی Shared Objectها فهمیدیم که کپی نمی گیریم.
آیا با نرم افزار tar بک آپ بگیریم و آن را به فرد بدهیم روی سیستم آن فرد مشکلی به وجود نمی آید؟
ممکن است آن فرد هم یک نرم افزار sin داشته باشد و با هم Conflict کند و ممکن است با سخت افزار سیستم سازگار نباشد.
به عبارتی پس اگر خواستید حتّی یک فایل را هم backup بگیرید و انتقال دهید بهتر است از جنس Package باشد.
در دنیا چندین Package Manager وجود دارد از جمله آنهاrpm در CentOS و dpkg در Debian هستند.
دو روش برای نصب بسته های نرم افزاری وجود دارد :
- یک راه قرار دادن بسته نرم افزاری بر روی سیستم و ترجمه برنامه ها و سپس اجرای اسکریپت های متعدد برای نصب که معمولاً نیاز به تخصص بالا کاملا محسوس است.
- راه دیگر انتخاب یک نرم افزار است که بتواند بر روی بسته نرم افزاری مدیریت نموده و به تخصص کمتری برای نصب و ارتقاء نیاز داشته باشد.
در این بخش بر روی این روش تمرکز خواهیم کرد.
روش اول در مواقعی که Source و یا Object بسته نرم افزاری در اختیار بوده
و یا محصول مستقل از سخت افزار نوشته شده است به کار گرفته می شود
و البته تعداد این گونه بسته های نرم افزاری کم نیست و معمولا بایستی ابزارهای توسعه مانند مترجم ها نیز بر روی سیستم نصب باشد.
این روش مثل این است که شما مواد اولیه را از فروشگاه بگیرید
و در منزل تهیه کنید. برخی از این ابزارها عبارت اند از gcc ,g++ ,make و برخی کتابخانه ها که بسته نرم افزاری
ممکن است به آن وابسته باشد مثل libclang که پرکاربرد است.
روش دوم مثل این است که بروید رستوران و غذا سفارش دهید.
مزایایی که rpm دارد این است که می شود با یک خط فرمان ده نوع Package را با هم نصب کرد.
و Database ی دارد که باعث می شود شما به تناقض نخورید و بسته های مختلف باهم تداخل پیدا نکنند.
فرمت کلی نحوه نام گذاری محصول در لینوکس بسیار متفاوت با مایکروسافت است.
در لینوکس نام گذاری Package ها قانون خاصی دارد که مطابق زیر است :
Package name-version-build. architecture.ending
(Example: farsilinux-1.0.5-2.i686.rpm(or.deb
در بعضی از Packageها در قسمت architecture داریم noarch که یعنی به architect خاصّی نیاز ندارد.
برای نصب این Package از طریق rpm به این صورت عمل می کنیم :
rpm -i farsilinux-1.0.5-2.i686.rpm
پس ما الآن متوجه شدیم که مثلا وقتی که می خواهیم از اینترنت Package دانلود کنیم و نصب کنیم
۲ تا راه حل داریم، یک راه این است که RPM آن را بیاوریم و با یک فرمان ساده آن را نصب کنیم،
ولی این زیاد مد روز دنیا نیست چون نرم افزارهایی که در دنیا می نویسند با rar و zip شده بیرون می دهند
البته راه دیگر استفاده از دستور yum است که به طور مستقيم به Repository های موجود در اینترنت متصل می شود و بسته ها را دانلود و نصب می کند.
به عنوان مثال :
yum install cmake
با اجرای فرمان بالا، بسته cmake و بسته های پیش نیاز آن از مخزن های اینترنتی یا محلی که برای yum
در مسیر etc/yum.repos.d/ تنظیم شده است ، دانلود شده و بر روی سیستم نصب خواهد شد.
نکته : یادتان باشد که ممکن است به خاطر ملاحظات امنیتی کامپیوترهایی که شما مسئول آن هستید به اینترنت متصل نباشد.
با این حال می توانید مخزن هایی را برای بسته های مختلف در کامپیوترهای محلی خاصی که به اینترنت متصل هستند دانلود کنید
و سپس کامپیوترهای دیگری که به اینترنت متصل نیستند،
از آن ها برای نصب بسته ها با استفاده از دستور yum استفاده کنند.
برای این کار لازم است که آدرس مخزن محلی را برای آن سیستم در مسیر etc/yum.repos.d/ تنظیم کنید.
مدیریت بسته ها با rpm
ابزار yumdownloader
yumdownloader ابزاری جهت دانلود کردن بسته های RPM برای مخزن های yumاست.
این ابزار از پیکربندی های صورت گرفته برای yum به خصوص فایل etc/yum.conf/ استفاده می کند.
فایل پیکربندی etc/yum.conf/
این فایل پیکربندی yum است. دو بخش در این فایل وجود دارد
Main و Repository قسمت Main تمامی پیکربندی های سراسری را مشخص می کند.
قسمت Main تنها باید در یک جا تعریف شده باشد، قسمت Repository پیکربندی مربوط به هر سرور مخزن را تعریف می کند،
امکان داشتن یک یا چند قسمت Repository وجود دارد.
در قسمت Main امکان مشخص کردن دایرکتوری Logfile ,Cache و موارد دیگر وجود دارد.
توصیه می کنیم که حتما صفحه راهنمای man yum.conf را مطالعه نمایید.
توانایی های RPM مختص Root
Userid ادمین (Root) با فرمان rpm خیلی کارها می تواند انجام دهد :
- مشاهده لیست محتویات بسته نرم افزاری
- مشاهده لیست همه محتویات بسته های نرم افزاری
- مشاهده شرح بسته نرم افزاری
- بررسی و بازبینی بسته نرم افزاری (مثلاً کمبود)
- بازبینی فایل در بسته نرم افزاری
عناصر تشکیل دهنده ی یک rpm
- نام و نسخه محصول
۲. تاریخ تولید و نام کامپیوتر مولد
٣. شرح محصول
۴ اندازه و ( checksum ( md5 محتویات هر فایل
- مشخصه شخص و یا سازمان تولید کننده و …
پس ما متوجه شدیم که اگر یک فایل 1k داشته باشیم کلی اطلاعات ابتدا و انتهای آن می آید. حالا این فرمان را با هم می زنیم :
cd /var/lib/rpm
ls -l | less
مدیریت بسته ها با rpm
تحت این دایرکتوری بانک اطلاعاتی RPM قرار دارد.
در زیر این دایرکتوری ما اطلاعات و مشخصات Package ها و اینکه Install شده اند یا نه را داریم
و معمولا Admin هیچ وقت زیر این دایرکتوری را دستکاری نمی کند.
در زیر این دایرکتوری ما Conflict ها را هم داریم که مثلا وقتی یک نرم افزار داریم
و می خواهیم یک نرم افزار دیگر با همان نام هم بگذاریم Conflict می دهد و یکی از آنها را اینجا می آورد چون برنامه نویس را گیج می کند.
پس این طور جمع بندی کنیم که rpm زیر دایرکتوری var تعداد زیادی فایل راجع به فایل هایش دارد
و می توانیم حجم، نام و تعداد فایل هایی که زیر این دایرکتوری داریم را ببینیم.
پس یادتان باشد که اگر این دایرکتوری را دستکاری کنید و یک فایل را مخدوش کنید.
یک Package جدید نمی توانید نصب کنید و می گوید من نمی دانم اگر این Package جدید را نصب کنم تناقض دارد یا خیر.
بنابراین ما متوجه شدیم که RPM از Database استفاده می کند.
پس زمانی که مثلا می گوید Sin Already Installed از کجا می فهمد چون در Database وجود دارد.
با فرمان خیلی ساده rpm می توانیم این کارها را انجام دهیم :
- نصب بسته ها
- استعلام قایل متعلق به بسته
- حذف بسته ها
- تولید بسته فایل از کد ميع Source
- بروز در آوردن بسته ها
- کنترل صحت بسته
- پرس و جو با استفاده از بانک اطلاعاتی RPM
- کنترل صحت فایل و فعالیت های دیگر
به عنوان مثال ناگهان یک فایل از بین می رود و با یک فرمان ساده می پرسیم که این فایل مثلا game متعلق به کدام Package می باشد.
rpm در زمان نصب و ارتقاء و حذف بسته نرم افزاری فعالیت و کنترل های زیادی انجام می دهد به طور مثال :
۱) آیا فضای کافی بر روی دیسک سخته برای نصب وجود دارد؟
۲) آیا نرم افزارهای موردنیاز وجود دارند ؟
3) آیا نصب نرم افزار باعث بازنویسی فایل های موجود خواهد شد؟
فرمانی که برای نصب بسته نرم افزاری به کار می بریم به این صورت است :
… rpm -i package-filename
rpm -i zip-2.3-18.rpm
i مخفّف install
اگر صفحه manفرمان rpm را بخوانید می بینید که چه آپشن هایی دارد.
به عنوان مثال برخی از Optionهای آن به شرح ذیل می باشد :
force– را زمانی به کار می بریم که نتوانیم یک Package را نصب کنیم و بخواهیم حتماً نصب شود.
ولی همیشه نباید –forceرا به کار ببریم.
force– یعنی مجبور هستی که بعضی از خطاها را نادیده بگیری که ممکن است مشکل ساز شود.
نکته : اگر بخواهیم یک Package را از روی سیستم حذف کنیم هم می توانیم از فرمان rpmاستفاده کنیم.
rpm -e package name
آپشن دیگری که در حذف یک Package داریم nodeps- است.
هر Package یک سری وابستگی هایی دارد که اگر آنها Install نباشند کار نمی کند،
nodeps یعنی مجبور هستی که وابستگی ها را کنترل نکنی و از داخل Database می فهمد که چه چیزی به چه بسته ای وابسته است.
زمانی که به این صورت یک Package را از سیستم حذف کنید به طور کامل حذف می شود.
نکته به شرطی یک Package را Install یا Upgrade کنید که دلیل موجهی برای کارتان داشته باشید.
دلایل Upgrade کردن: شما به شرطی Update کنید که نیاز داشته باشید. دلایلی مثل :
- برطرف نمودن اشکالات
- اضافه نمودن امکانات بیشتر
- حذف نمودن بعضی از امکانات که در عمل لازم نبوده و یا مشکل زا می باشد.
rpm -uvh package-name
Upgrade هم مثل Installاست. اگر در زمان Upgrade آپشن nodeps- را بزنید یعنی اینکه هیچ وابستگی را چک نکند.
به وسیله همین فرمان rpm می توان اطلاعات مختلفی راجع به بسته های نرم افزاری نصب شده بدست آورد.
که از جمله می توان به آپشن q- که مخفف query به معنای پرس و جو می باشد اشاره کرد.
آپشن f- در این مثال اختیاری است.
rpm -qf package-name
نکته : اگر یک فایلی را اشتباهاً پاک کردیم به وسیله فرمان rpm با آپشن q- و fمی توانیم بفهمیم که متعلق به چه Packageای است.
چون در Database اطلاعات را نگه می دارد.
اگر فایل passwd را اشتباها پاک کرده باشیم با این فرمان آن را پیدا کرده و پکیج آن را دوباره نصب می کنیم.
rpm -qf /etc/passwd
q:query f:file
نکته جالب اینکه در صورتی که استفاده از rpmرا فراموش کرده باشید، از دستور cpio برای نصب می توانید استفاده کنید :
man rpm2cpio
rpm2cpio careutils-5 +TAB > file_name
توجه کنید که TAB+ به معنای این است که کلید tab را فشار دهید.
cpio -itv < file_name
برای print گرفتن فرمان prکه مخفف (printer) است را به کار می بریم :
man pr
pr file_name
نمایش مشخصات بسته نرم افزاری: مشخصه و توضیحات مختصری از بسته نرم افزاری که با فرمان rpm نصب می گردند، نمایش داده می شود :
rpm -qi package name
مدیریت بسته ها با rpm – نویسنده : موسی رشوند
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.