Pacman
مدیر بستهٔ pacman یکی از بزرگترین وجوه تمایز آرچ لینوکس با باقی توزیعها است. مکانیزم pacman از ترکیب بستههای ساده باینری و یک سیستم ساخت، - Build System - با استفاده آسان بهره میبرد. هدف pacman مدیریت آسان بستهها، چه بستههای دریافت شده از مخازن رسمی و چه بستههای ساخته شده توسط کاربر است. pacman به وسیله همگامسازی لیست بستهها با سرور اصلی سیستم را بهروز نگهمیدارد. این روش سرویس دهنده/سرویس گیرنده - server/client- به کاربران اجازه میدهد تا با دستورات سادهای اقدام به بارگیری و نصب بستههای مورد نیاز خود بههمراه پیشنیازهای آنها بنمایند.
pacman به زبان برنامهنویسی C نوشته شده، و از بستههایی با فرمت pkg.tar.xz. استفاده میکند.
محتویات
پیکربندی
تنظیمات pacman در مسیر /etc/pacman.conf
قرار دارد. در این مسیر کاربر میتواند برنامه را برای کارکرد دلخواه پیکربندی کند. اطلاعات جامع درباره جزئیات نحوه پیکربندی را در man pacman.conf ببینید.
تنظیمات عمومی
تنظیمات عمومی در قسمت [options]
قرار دارد، برای اطلاعات بیشتر به man Page یا به فایل pacman.conf
مراجعه کنید .
جلوگیری کردن از بهروز رسانی بسته ای خاص
برای جلوگیری از بهروز رسانی بسته ای خاص، میتوان بسته را طبق الگوی زیر در فایل pacman.conf
مشخص کرد :
به عنوان مثال با اضافه کردن این کد به فایل پیکربندی،بسته linux دیگر بهروز رسانی نمیشود.
IgnorePkg=linux
برای مشخص کردن بستههای متعدد از کلید SPACE استفاده کنید. همچنین میتوان در چند خط از IgnorePkg
استفاده کرد. اگرچه میتوان از این روش برای جلوگیری از بهروز رسانی پکیج بصورت دائمی استفاده کرد، اما درصورتیکه تنها برای یکبار در شرایط خاص میخواهد از بهروز رسانی یک برنامه جلوگیری کنید،میتوان از سوئیچ ignore--
در خط فرمان بهره برد.
درصورتیکه نیاز داشته باشید بسته خاصی که در IgnorePkg مشخص کردهاید بهروز رسانی کنید، میتوانید از pacman -S :
استفاده کنید. در این حالت pacman اسامی بسته هایی که در لیست IgnorePkg
قرار دادهاید به شما یادآوری میکند.
جلوگیری از بهروزرسانی یک گروه نرمافزاری
همانند یک بسته خاص، میتوان یک گروه بسته را نیز برای جلوگیری کردن از بهروز رسانی مشخص کرد:
به عنوان مثال با اضافه کردن این کد در فایل پیکربندی، بسته نرم افزاری gnome دیگر بهروز رسانی نمیشود.
IgnoreGroup=gnome
جلوگیری از نصب فایلها در سیستم
برای جلوگیری دائمی از نصب شدن فایلهای موجود در یک دایرکتوری خاص، میتوان آنها را در ذیل NoExtract
لیست کرد. به عنوان مثال، برای جلوگیری از نصب شدن واحدهای systemd میتوان از کد زیر استفاده کرد:
*/NoExtract=usr/lib/systemd/system
مخازن
این قسمت (Repositories) برای مشخص کردن مخازن نرمافزاری در فایل /etc/pacman.conf
مورد استفاده قرار میگیرد. لیست مخازن میتواند بصورت مستقیم در این فایل قرار داده شود یا شامل اعلام یک فایل دیگر ( مانند etc/pacman.d/mirrorlist/
) باشد. بنابراین برای داشتن تنها یک لیست مخازن نرمافزاری، ساخت این فایل لازم است.
امنیت بستهها
نسخه چهارم برنامه pacman از امضای بستهها پشتیبانی میکند، که یک لایه امنیتی جدید به بستهها اضافه میکند. در تنظیمات پیشفرض SigLevel = Required DatabaseOptional
باعث فعال شدن تاییدیه امضا در تمامی بستهها میشود. در تنظیمات پیش فرض، SigLevel = Required DatabaseOptional
تنظیم شده است که دریافت امضا را برای تمام بستهها فعال میکند. این تنظیم به وسیله تغییر در SigLevel
میتواند باطل شود. برای اطلاعات بیشتر در اینباره به pacman-key مراجعه نمائید.
کارکرد
آنچه در ادامه میآید،تنها مثالهای سادهای برای نمایش کارکرد pacman هستند، برای مطالعه بیشتر به man pacman مراجعه فرمائید.
نصب بستهها
نصب بستهای خاص
برای نصب یک بسته یا یک لیست از بستهها (بههمراه پیشنیازهای آن بستهها) از دستور زیر استفاده میشود:
# pacman -S package_name1 package_name2
برای نصب یک لیست از بستهها که در یک کلید واژه مشترک هستند از دستور زیر استفاده میشود:
# (pacman -S $(pacman -Ssq package_regex
بعنوان مثال دستور زیر، تمام بستههای حاوی عبارت gcc را نصب میکند:
# (pacman -S (pacman -Ssq gcc
در بعضی مواقع چندین نسخه از یک برنامه در مخازن مختلف ( مانند مخازن testing یا مخازن extra) قرار دارد، برای نصب نسخه مخصوص از یک مخزن خاص میتوان بصورت زیر عمل کرد. ( دستور زیر برنامه را از مخزن extra نصب میکند):
# pacman -S extra/package_name
نصب گروه برنامه
بعضی از بستهها به یک گروه بسته تعلق دارند که باید بطور همزمان نصب شوند، به عنوان مثال گروه بستههای gnome:
# pacman -S gnome
در بعضی مواقع یک گروه بسته،حاوی تعداد زیادی بسته است که شما تنها تعدادی از آنها را نیاز دارید، بجای اینکه شماره تمامی بستههای مورد نیاز را وارد کنید، گاهی سادهتر است شماره یا رنج عدد بستههای مورد نیاز و یا شما یا رنج بستهایی که نمیخواهید را وارد کنید:
Enter a selection (default=all): 1-10 15
بستههای شماره ۱ تا ۱۰ به همراه بسته شماره ۱۵ نصب خواهد شد.
Enter a selection (default=all): ^5-8 ^2
بجز بستههای شماره ۲ و بستههای شماره ۵ تا ۸ مابقی بستههای نصب خواهند شد.
برای دیدن بستههای موجود در یک گروه بسته از دستور زیر استفاده میشود:
# pacman -Sg gnome
که برنامههای موجود در بسته gnome را نمایش میدهد. همچنین برای دیدن گروه بستههای موجود به این پیوند مراجعه فرمائید.
حذف بستهها
برای حذف یک بسته با نگهداشتن تمام وابستگیها:
# pacman -R package_name
حذف یک بسته به همراه وابستگیهایی که مورد نیاز دیگر برنامهها نیستند:
# pacman -Rs package_name
برای حذف یک بسته به همراه وابستگیها و تمام بستههایی که به آن وابسته هستند بصورت زیر عمل میشود:
# pacman -Rsc package_name
حذف یک بسته که مورد نیاز باقی بستهها است، بدون حذف بستههای وابسته:
# pacman -Rdd package_name
برنامه pacman فایلهای مهم تنظیمات هر بسته را بعد از حذف آن در قالب pacsave. نگهداری میکند، برای جلوگیری از نگهداری فابلهای مربوط به تنظیمات بعد از حذف یک بسته میتوانید از سوئیچ n-
استفاده نمائید:
# pacman -Rn package_name
ارتقاء بستهها
پیشنهاد میشود کاربران آرچ سیستم خود را بطور منظم بهروز رسانی کنند ( حداقل هفته ای یکبار). هنگامی که یک درخواست از جامعه کاربری داشته باشید، فرض میشود سیستم شما کاملا بهروز رسانی شده است.
انتظار میرود که قبل از ارتقاء سیستم، کاربران با مراجعه به Arch Linux home page از آخرین اخبار مطلع شوند، به عنوان یک جایگزین از RSS feedو arch-announce mailing list استفاده کنید، یا توئیتر @archlinux را دنبال کنید.
هنگامی که عملیات بهروز رسانی به مداخله غیرطبیعی کاربر احتیاج پیدا میکند،(بیشتر از مدیریت ساده بستهها توسط دستوراتی که در ادامه میآید.) در یک پست خبری مناسب اطلاع رسانی میشود. کاربران باید به همان اندازه آگاهی داشته باشند که هر بهروزرسانی بستهها میتواند باعث بروز مسائل غیرمنتظره شود، که باید به صورت فوری برای حل آنها مداخله کرد. این موضوع که یک سیستم پایدار به سرعت میتواند ناپایدار شود، دلسردکننده است، اما کار خردمندانه اندکی صبر در به روز رسانی فوری بستهها بعد از انتشار نسخه جدید بجای صرف وقت فراوان برای مقابله با مشکلات پس از ارتقاء سیستم است.
pacman میتواند تمامی بستههای موجود یک سیستم را با یک دستور به روزرسانی کند. که البته این مورد به روش استفاده ازدستورات بهروز رسانی بستگی دارد. این دستور میتواند پایگاه داده مخازن را همگام سازی کند( با سرور مخازن آرچ) و بستههای یک سیستم را بهروز رسانی کند. ( بجز بستههای local که در تنظیمات مخازن قرار ندارند. )
# pacman -Syu
pacman یک ابزار مدیریت بسته قدرتمند است، اما تلاشی برای رسیدگی به تمام حالات نمیکند. در صورتیکه این موضوع باعث سردرگمی شما شده است لطفا به صفحه راه و رسم آرچ مراجعه نمائید. کاربران باید هوشیار و نسبت به نگهداری سیستم خود مسئول باشند، pacman هنگام آغاز بروزرسانی سیستم، اطلاعاتی را نمایش خواهد داد که کاربر باید با هشیاری آنها را مطالعه کرده و سپس اقدام به ادامه بروزرسانی کند. هنگامی که فایل تنظیمات اصلاح شده توسط یک کاربر نیاز به، ارتقاء نسخه جدیدی از یک بسته داشته باشد، یک فایل با فرمت pacnew.، برای جلوگیری از بازنویسی تنظیمات ایجاد شده توسط کاربر،ساخته میشود. pacman بلافاصله فایلها را در هم ادغام میکند. این فایلها نیاز به ویرایش دستی کاربر دارد و میتواند یک عمل مناسب برای رسیدگی به فایلها بعد از هربار بهروز رسانی یا حذف بستهها باشد. برای اطلاعات بیشتر به Pacnew and Pacsave files مراجعه فرمائید.
درصورتیکه به مشکل غیر قابل حلی برخورد کردید، سوال خود را در انجمن مطرح نمائید، احتمال اینکه کسی از اعضای انجمن قبلا با این مشکل روبرو شده باشد و بتواند در حل مشکل شما کمک کند وجود دارد.
ارتقاء بخشی پشتیبانی نشده است
آرچ لینوکس یک توزیع غلطان با جدیدترین نسخه از کتابخانهها در مخازن خود است. توسعهدهندگان و کاربران مورد اعتماد (Trusted User) تمامی بستههای موجود در مخازن را که احتیاج به کامپایل و ساخت دوباره بسته دارند با کتابخانههای بهروز دوباره میسازند.در صورتیکه بستههایی در سیستم کاربر موجود باشد، با تغییر وابستگیها بستهها باید دوباره ساخته شوند.
به این معنی که آرچ لینوکس از ارتقاء جزئی و بخشی بستهها پشتیبانی نمیکند. هرگز از دستوراتی مانند pacman -Sy package
یا بطور معادل pacman -Sy
و بدنبال آن pacman -S package
که بخشی از بستهها از کتابخانههای جدید بهره میبرند و بخشی از کتابخانههای قدیمی، استفاده نکنید. همیشه قبل از نصب یک بسته جدید سیستم را ارتقاء ( با دستور pacman -Syu
) دهید. به دلیل مشابه در استفاده از IgnorePkg
و IgnoreGroup
جانب احتیاط را رعایت کنید. همواره بهجای pacman -Sy
از دستور pacman -Syu
استفاده نمائید.
در صورتیکه ارتقاء بخشی سیستم اتفاق بیفتد، بستههای دودویی به مشکل خواهند خورد،زیرا لینک کتابخانههای مورد نیاز آنها یافت نخواهد شد، در این صورت هرگز با لینک کردن کتابخانهها بصورت دستی، در صدد حل مشکل نباشید. در صورت مواجهه با این مشکل با اجرای دستور pacman -Syu
به حل مشکل بپردازید. در صورتیکه بسته pacman دچار مشکل نشده باشد، برنامه pacman با همگام سازی لیست برنامهها مشکل را مرتفع میکند.
نوشتن یک Bash Script شامل برنامه pacman برای بررسی بهروز رسانی سیستم به صورت منظم، یک راه مطمئن برای ارتقاء سیستم است و از بروز بسیاری از این مشکلات جلوگیری میکند.
جستجو در پایگاه داده بستهها
pacman با استفاده از سوئیچ Q- بستههای موجود را نمایش میدهد، همچنین میتوانید گزینههای بیشتر را ببینید :
$ pacman -Q --help
همچنین گزینههای مربوط به پایگاههای داده همزمان را مشاهده نمائید:
$ pacman -S --help
pacman توانایی جستجوی یک بسته در پایگاهداده بستهها را میدهد، برای جستجو از نام بسته یا از توضیحات مربوط به آن میتوان استفاده کرد:
$ pacman -Ss string1 string
برای جستجو در بین بستههای نصب شده در سیستم:
$ pacman -Qs string1 string2
برای دریافت اطلاعات گستردهتر از یک بسته:
$ pacman -Si package_name
درباره بستههای نصب شده برروی رایانه کاربر:
$ pacman -Qi package_name
قراردادن ۲ عدد i باعث نمایش لیست فایلهای پشتیبانی به همراه اصلاحیههای آن را نمایش میدهد:
$ pacman -Qii package_name
جهت بازبینی لیست فایلهای نصب شده به همراه بستهها:
$ pacman -Ql package_name
برای بستههای نصب نشده از pkgfile استفاده کنید.
برای تایید وجود فایلهای نصب شده توسط بسته:
$ pacman -Qk package_name
با استفاده از یک سوئیچ K دوم میتوان یک بسته را بررسی و تاییدیه کامل گرفت.
با استفاده از دستور زیر میتوان فهمید فایل مذکور به کدام بسته تعلق دارد:
$ pacman -Qo /path/to/file_name
لیست تمام بستههایی که وابستگی هیچ برنامهای نیستند:
$ pacman -Qdt
لیست بستههایی که صریحا نصب شدهاند و وابستگی هیچ بستهدیگری نبودهاند:
$ pacman -Qet
ایست درختی وابستگیهای یک بسته:
$ pacman -Qdt
نمایش درخت وابستگیها بصورت معکوس:
$ pactree -r package_name
لیست تمام بستههایی که یک بسته، بصورت بازگشتی وابستگی آنها بشمار میآید (این برنامه در بسته Pkgtools قرار دارد) :
$ whoneeds package_name
برای مشاهده موارد بیشتر به صفحه نکات pacman مراجعه نمایید.
ساختار پایگاه داده
پایگاه داده pacman در حالت عادی در آدرس /var/lib/pacman/sync
قرار دارد. برای هر مخزن مشخص در /etc/pacman.conf
یک فایل پایگاه داده متناظر وجود دارد.فایلهای پایگاه داده با فرمت tar-gzip بایگانی (Archive) شده و شامل یک دایرکتوری برای هر بسته میباشند، به عنوان مثال بسته which:
% tree which-2.20-6
which-2.20-6
|-- depends
`-- desc
قسمت depends
لیست وابستگیهای این بسته را نمایش میدهد و قسمت desc
توضیحاتی مانند حجم فایل و MD5 فایل بسته را نمایش میدهد.
پاک کردن مخزن (cache) برنامه pacman
pacman بستههای دانلود شده را در آدرس /var/cache/pacman/pkg/
ذخیره میکند و بستههای مربوط به نسخه های قدیمی برنامهها را که از سیستم حذف میشوند، بصورت خودکار از مخزن پاک نمیکند، به همین دلیل لازم است که فولدر مربوط به مخزن بستههای pacman بصورت دورهای پاکسازی شود تا از افزایش حجم نامحدود این پوشه جلوگیری شود.
برای پاکسازی بستههایی که در حال حاضر بر روی سیستم نصب نیستند از مخزن pacman دستور زیر استفاده میشود:
# pacman -Sc
به دلایل محدودیتهای مطرح شده در بالا احتیاج به یک جایگزین داریم، یک اسکریپت اختصاصی به کنترل بیشتر اینکه چه تعداد بسته از مخزن پاک شدهاند کمک میکند.
- دستور paccache بهوسیله pacman فراهم شده است، و تمامی بستههای موجود در مخزن را، به جز ۳ نسخه آخر حذف میکند:
$ paccache -r
با استفاده از این روش، با توجه به اینکه paccache توانایی تفاوت قائل شدن بین بستههای نصب شده و بستههای نصب نشده را ندارد، تمامی بستههای نصب نشده را در مخزن رها میکند. برای پاک کردن تمامی بستههای نصب نشده از مخزن باید این دستوررا در مرتبه دوم به صورت زیر بهکار ببرید:
$ paccache -ruk0
برای مشاهده باقی گزینههای دردسترس از paccache -h
استفاده کنید.
- به عنوان یک جایگزین از pkgcachecleanAUR استفاده کنید.
# pkgcacheclean
- یک انتخاب دیگر pacleanerAUR است که بجز ۳ نسخه آخر هر بسته، بقیه را پاک میکند:
$ pacleaner -m
برای بررسی بستههای مربوط به برنامههای پاک شده از دستور زیر استفاده میشود:
$ pacleaner -u
درصورتیکه دستور بالا به وسیله کاربر root و به همراه delete --
بهکار رود، عملا بستهها را پاک میکند. تنظیمات پیشفرض مانند تعداد بستههایی که باید نگهداری شوند یا مسیر مخزن در فایل تنظیمات قرار دارند.
دستورات بیشتر
بارگیری و دریافت بستهها از اینترنت بدون نصب آنها:
# pacman -Sw package_name
نصب یک بسته قبلا دریافت شده از محلی بهغیر از آدرس مخازن توزیع آرچ ( مانند بستههای موجود در AUR )
# pacman -U /path/to/package/package_name-version.pkg.tar.xz
نصب یک بسته از طریق اینترنت از سایتی غیر از سایتهای مربوط به مخازن رسمی توزیع آرچ:
# pacman -U http://www.example.com/repo/example.pkg.tar.xz
یادداشت عمومی
pacman همواره بستههای کاندیدای نصب شدن یا حذف شدن را لیست کرده و از کاربر برای نصب یا حذف آنها اجازه میگیرد. برای بی اثر کردن سوئیچهای S- و R- و U- از کلید p- استفاده میشود.
عیب یابی
به روز رسانی بستههایی که باعث مشکل در سیستم میشود
آرچ لینوکس یک توزیع غلطان است. به روز رسانیهای جدید برای هربسته بعد از اینکه به پایداری کافی، جهت مصارف عمومی رسیدند ارائه میشوند. اگرچه بهروز رسانیهااغلب توجه بیشتر کاربر را میطلبد: فایلهای تنظیمات گاهی نیازمند بهروز رسانی هستند، وابستگیهای اختیاری ممکن است تغییر کنند و ... .
نکته مهم این است که همواره به یاد داشته باشید، کورکورانه سیستم خود را بهروزرسانی نکنید. همواره لیست بستههایی که بهروز رسانی خواهند شد را ملاحظه نمائید. به بستههای حیاتی سیستمی (مانند linuxAUR و xorg-serverAUR) که بهروزرسانی میشوند توجه بیشتری نمایید. اگر چه یک ایده خوب دنبال کردن مداوم اخبار https://www.archlinux.org و بررسی پستهای جدید انجمن برای آگاه شدن از تجربه دیگران در بهروزرسانی سیستم است .