Product SiteDocumentation Site

6.2. aptitude, دستورات apt-get و apt

APT یک پروژه گسترده است، که اهداف اولیه آن شامل یک رابط گرافیکی نیز می‌شود. شامل کتابخانه‌ای است که عملکردهای پایه‌ای نرم‌افزار را دربر دارد و apt-get اولین پیاده‌سازی آن به حساب می‌آید -- بر اساس خط فرمان -- که درون خود پروژه توسعه یافته است. apt دومین پیاده‌سازی رابط خط فرمان APT به حساب می‌آید که بسیاری از مشکلات موجود در apt-get را بر طرف کرده است.
تعداد بسیاری رابط‌های گرافیکی نیز به عنوان پروژه‌های بیرونی تعریف شده‌اند: synaptic، aptitude (که شامل هر دو محیط متنی و گرافیکی می‌شود -- حتی اگر کافی نباشد)، wajig و پروژه‌های دیگر. رایج‌ترین رابط کاربری apt است که در مثال‌های این قسمت از آن استفاده شده است. نکته اینکه apt-get و aptitude نحو خط فرمان تقریبا یکسانی دارند. زمانی که بین apt، apt-get و aptitude تفاوت عمده‌ای وجود داشته باشد، به آن‌ها اشاره خواهد شد.

6.2.1. راه‌اندازی

به منظور انجام هر کاری با APT، ابتدا باید فهرست بسته‌های موجود در آن بروزرسانی گردد؛ که اینکار به سادگی از طریق apt update قابل انجام است. بر اساس سرعت اتصال شما، این عملیات ممکن است چند دقیقه زمان ببرد چرا که نیاز به دانلود تعداد مشخصی از فایل‌های Packages/Sources/Translation-language-code دارد، فایل‌هایی که طی زمان توسعه دبیان بزرگ و بزرگ‌تر شده‌اند (حداقل ۱۰ مگابایت برای قسمت ...). البته، نصب از طریق CD-ROM نیاز به دانلود ندارد -- که در این مورد عملیات با سرعت بیشتری انجام می‌شود.

6.2.2. نصب و حذف

با استفاده از APT، بسته‌ها می‌توانند به راحتی از طریق apt install package و apt remove package نصب یا حذف گردند. در هر دو مورد، APT به صورت خودکار اقدام به بررسی وابستگی‌های مربوط به هر بسته می‌کند. فرمان apt purge package یک حذف کامل را در پی خواهد داشت -- فایل‌های پیکربندی نیز حذف می‌گردند.
اگر فایل sources.list به توزیع‌های مختلف اشاره کرده باشد، امکان درج نسخه برای بسته مورد نصب وجود دارد. یک نسخه خاص از بسته با استفاده از apt install package=version می‌تواند درخواست شود اما نشان‌کردن توزیع مبدا آن ((Stable، (Testing یا (Unstable) -- با استفاده از apt install package/distribution -- معمولا مورد استفاده قرار می‌گیرد. با این فرمان، استفاده از یک نسخه قدیمی‌تر بسته ممکن می‌شود (اگر از عملکرد آن اطلاع داشته باشید)، در صورتی که منبع آن در فایل sources.list ذکر شده باشد. در غیر اینصورت، بایگانی snapshot.debian.org می‌تواند به کمک شما بیاید (قسمت یک قدم فراتر نسخه‌های قدیمی بسته: snapshot.debian.org را مشاهده کنید).

مثال 6.3. نصب نسخه unstable از بسته spamassassin

# apt install spamassassin/unstable

6.2.3. بروزرسانی سیستم

بروزرسانی‌های متداول توصیه می‌شوند، چرا که شامل آخرین اصلاحات امنیتی هستند. برای بروزرسانی سیستم، از apt upgrade، apt-get upgrade یا aptitude safe-upgrade استفاده کنید (البته پس از فراخوانی apt update). این فرمان به بسته‌های نصب شده نگاه می‌کند که بدون حذف بسته‌های دیگر قابلیت بروزرسانی داشته باشند. به عبارت دیگر، هدف دستیابی به کم‌هزینه‌ترین نوع بروزرسانی است. apt-get در مقایسه با apt و aptitude سخت‌گیری بیشتری دارد چرا که نسبت به بسته‌های جدید از خود مقاومت نشان می‌دهد.
apt به صورت عمومی از آخرین نسخه موجود استفاده می‌کند (به جز بسته‌های موجود در Experimental و stable-backports که به صورت پیش‌فرض استفاده نمی‌شوند). اگر شما در فایل sources.list خود به Testing یا Unstable اشاره کرده باشید، apt upgrade اکثر سیستم Stable شما را به Testing تبدیل می‌کند یا حتی Unstable، چیزی که شاید انتظارش را نداشته باشید.
برای اطلاع دادن به apt در جهت استفاده از یک توزیع خاص هنگام بروزرسانی، باید از گزینه -t یا --target-release به همراه نام توزیع مورد نظر خود استفاده کنید (برای نمونه: apt -t stable upgrade). برای پیشگیری از استفاده مجدد این گزینه در هر مرتبه فراخوانی apt، می‌توانید گزینه APT::Default-Release "stable"; را در فایل /etc/apt/apt.conf.d/local وارد کنید.
برای بروزرسانی‌های مهم‌تر، مانند تغییر از یک نسخه دبیان به دیگری، باید از apt full-upgrade استفاده کنید. با این فرمان، apt اقدام به بروزرسانی سیستم می‌کند حتی اگر لازم باشد برخی بسته‌ها را پاک کرده یا وابستگی‌های جدید را نصب کند. این فرمان همچنین از طرف کاربرانی که به صورت روزانه با توزیع Unstable کار می‌کنند مورد استفاده قرار می‌گیرد. به قدری آسان است که حتی نیاز به توضیح نیز ندارد. اعتبار APT بر اساس این قابلیت فوق‌العاده است.
برخلاف apt و aptitude، فرمان apt-get اطلاعی از full-upgrade ندارد. در عوض، باید از فرمان apt-get dist-upgrade استفاده کنید، دستور تاریخی که apt و aptitude به منظور سهولت دسترسی کاربران در استفاده از آن، شناخته می‌شود.

6.2.4. گزینه‌های پیکربندی

علاوه بر گزینه‌های پیکربندی اشاره شده، امکان پیکربندی جلوه‌های مشخصی از APT با اضافه کردن دستورات در فایلی به مسیر /etc/apt/apt.conf.d/ وجود دارد. برای نمونه، به یاد دارید که APT چگونه با dpkg اعلام می‌کرد که تداخل‌های بوجود آمده را توسط دستور DPkg::options { "--force-overwrite"; } در نظر نگیرد.
اگر وب تنها از طریق پراکسی قابل دسترسی است، یک خط مانند Acquire::http::proxy "http://yourproxy:3128" را اضافه کنید. برای پراکسی FTP، از Acquire::ftp::proxy "ftp://yourproxy" استفاده کنید. برای کشف گزینه‌های پیکربندی بیشتر، راهنمای apt.conf(5) را با استفاده از دستور man apt.conf مطالعه کنید (برای جزئیات بیشتر درباره صفحات راهنما، قسمت 7.1.1, “صفحات راهنما” را مشاهده کنید).

6.2.5. مدیریت اولویت بسته‌ها

یکی از جلوه‌های مهم در پیکربندی APT مدیریت اولویت مربوط به هر بسته و منبع آن است. برای نمونه، ممکن است بخواهید یک توزیع را با استفاده از یک یا چند بسته جدید از Testing، Unstable یا Experimental گسترش دهید. امکان اختصاص یک اولویت به هر بسته وجود دارد (همان بسته می‌تواند چندین اولویت مختلف با توجه به نسخه و توزیع فراهم‌کننده‌اش داشته باشد). این اولویت‌ها عملکرد APT را تحت تاثیر قرار می‌دهند: برای هر بسته، همیشه نسخه‌ای انتخاب می‌شود که بالاترین اولویت را داشته باشد (مگر حالتی که این نسخه قدیمی‌تر از نسخه نصبی باشد و اولویت آن کمتر از ۱۰۰۰ باشد).
APT چندین اولویت پیش‌فرض را تعریف می‌کند. هر بسته نصب شده اولویت ۱۰۰ دارد. یک نسخه نصب نشده اولویت ۵۰۰ دارد، اما می‌تواند به ۹۹۰ تغییر یابد اگر قسمتی از انتشار نهایی شود (که با استفاده از گزینه -t یا دستور پیکربندی APT::Default-Release تعریف می‌شود).
می‌توانید این اولویت‌ها را با اضافه‌کردن در فایل /etc/apt/preferences با استفاده از نام بسته، نسخه، منشا و اولویت مورد نظر تغییر دهید.
APT هیچگاه بسته قدیمی‌تر را نصب نمی‌کند (بسته‌ای که نسخه‌ی آن از نسخه نصب شده پایین‌تر باشد) مگر اولویت آن بالاتر از ۱۰۰۰ باشد. APT همیشه بالاترین اولویت موجود که با این محدودیت همخوانی داشته باشد را نصب می‌کند. اگر دو بسته اولویت یکسان داشته باشند، APT جدیدترین آن‌ها را نصب می‌کند (بسته‌ای که شماره نسخه بالاتری داشته باشد). اگر دو بسته با نسخه و اولویت یکسان اما محتوای متفاوت موجود باشند، APT نسخه‌ای که نصب نشده باشد را نصب می‌کند (این قانون به منظور پوشش بروزرسانی بسته بوجود آمده است بدون آنکه شماره نسخه آن افزایش یابد، که معمولا مورد نیاز است).
به عبارت بهتر، بسته‌ای که اولویت زیر ۰ داشته باشد هیچگاه نصب نخواهد شد. بسته‌ای که اولویت بین ۰ تا ۱۰۰ داشته باشد تنها زمانی نصب می‌شود که نسخه دیگری از آن در سیستم موجود نباشد. با اولویت بین ۱۰۰ تا ۵۰۰، بسته زمانی نصب می‌شود که نسخه جدیدتری از آن موجود نصب نبوده یا در توزیع دیگری موجود نباشد. بسته‌ای با اولویت بین ۵۰۱ و ۹۹۰ تنها زمانی نصب می‌شود که نسخه جدیدتری از آن در توزیع هدف موجود نباشد. با اولویت بین ۹۹۰ تا ۱۰۰۰، بسته نصب خواهد شد مگر اینکه نسخه نصب شده فعلی جدیدتر باشد. اولویت بالاتر از ۱۰۰۰ همیشه منجر به نصب بسته خواهد شد حتی اگر به APT اجبار شده باشد که به نسخه قدیمی‌تر بسته مهاجرت شود.
زمانی که APT فایل /etc/apt/preferences را بررسی می‌کند، ابتدا مشخص‌ترین مدخل‌های موجود در فایل را به حساب می‌آورد (آن‌هایی که به بسته‌های خاصی اشاره می‌کنند)، سپس بسته‌های عمومی‌تر (برای نمونه بسته‌های موجود در یک توزیع). اگر چند مدخل یکسان موجود باشد، اولین آن‌ها که شناسایی شود استفاده می‌گردد. شرایط انتخاب موجود شامل نام و منبع هر بسته می‌باشد. هر منبع بسته‌ای از طریق اطلاعات موجود در فایل Release مشخص می‌شود که APT در زمان دانلود فایل Packages آن را نیز بدست می‌آورد. این فایل منشا بسته را مشخص می‌کند (معممولا «دبیان» برای بسته‌های موجود در سرورهای اصلی، اما می‌تواند شامل بسته‌های شخص ثالث نیز گردد). همچنین این فایل نام مربوط به هر توزیع را نیز مشخص می‌کند (معمولا Stable، Testing، Unstable یا Experimental برای توزیع‌های استاندارد ارائه شده توسط دبیان) به همراه نسخه آنان (برای نمونه ۸ که نشان دهنده دبیان Jessie است). بیایید با یک مثال واقعی، شیوه صحیح نحو این فایل را نگاه بیندازیم:
بیایید فرض کنیم که شما تنها قصد استفاده از بسته‌های موجود در توزیع Stable دبیان را دارید. سایر بسته‌ها در این مورد نباید نصب شوند مگر به صورت خاص به آن‌ها اشاره گردد. برای اینکار می‌توانید مدخل زیر را در فایل /etc/apt/preferences ایجاد کنید.
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10
a=stable نام توزیع انتخاب شده را مشخص می‌کند. o=Debian بسته‌ها را تنها نسبت به منبع آن‌ها که «دبیان» باشد محدود می‌سازد.
فرض کنیم شما سروری دارید که یکسری برنامه‌های محلی در آن به Perl 5.14 وابسته هستند و شما می‌خواهید اطمینان حاصل کنید که با بروزرسانی بعدی این نسخه هیچگاه تغییر نکند. می‌توانید از این مدخل استفاده کنید:
Package: perl
Pin: version 5.14*
Pin-Priority: 1001
مستندات مربوط به تنظیمات موجود در این فایل از طریق صفحه راهنما apt_preferences(5) قابل دسترسی هستند که با استفاده از دستور man apt_preferences می‌توانید آن را مشاهده کنید.

6.2.6. کار با چندین توزیع مختلف

apt ابزار حیرت‌انگیزی است، انتخاب بسته از سایر توزیع‌ها کاری وسوسه‌انگیز به حساب می‌آید. برای نمونه، پس از نصب یک سیستم Stable، شاید بخواهید به آزمون یک بسته موجود در توزیع Testing یا Unstable بپردازید بدون آنکه از وضعیت فعلی سیستم فاصله بگیرید.
حتی اگر با ترکیب بسته‌ها از توزیع‌های مختلف مشکلی بوجود بیاید، apt این همزیستی را بخوبی مدیریت کرده و خطرات احتمالی را پوشش می‌دهد. بهترین شیوه عملکرد در این حالت، فهرست کردن تمام توزیع‌ها موجود در /etc/apt/sources.list است (برخی افراد تنها از سه توزیع استفاده می‌کنند، اما بدانید که Unstable برای کاربران باتجربه‌تر در نظر گرفته شده است) و برای اشاره به توزیع اصلی می‌توان از پارامتر APT::Default-Release استفاده کرد ( قسمت 6.2.3, “بروزرسانی سیستم” را مشاهده کنید).
فرض کنیم که Stable توزیع اصلی شما باشد، اما هر دو توزیع Testing و Unstable نیز در فایل sources.list فهرست شده‌اند. در این مورد، برای نصب بسته‌ای از توزیع Testing می‌توانید از دستور apt install package/testing استفاده کنید. اگر عملیات نصب با توجه به برطرف نشدن برخی وابستگی‌ها متوقف شود، با اضافه کردن پارامتر -t testing می‌توان به حل این مشکل در توزیع Testing پرداخت. این شیوه در رابطه با Unstable نیز صدق می‌کند.
در این وضعیت، عملیات بروزرسانی (upgrade و full-upgrade) توسط توزیع Stable صورت می‌پذیرند به جز بسته‌هایی که به سایر توزیع‌ها بروزرسانی گردیده‌اند: آن‌ها عملیات بروزرسانی توزیع خود را پیگیری می‌کنند. ما به شرح این رفتار با توجه به اولویت‌های پیش‌فرض APT در ادامه خواهیم پرداخت. می‌توانید با استفاده از دستور apt-cache policy اولویت‌های موجود در سیستم را بررسی و تایید کنید (قسمت نکته apt-cache policy را مشاهده کنید).
همه چیز حول این محور می‌چرخد که APT تنها بسته‌هایی را در نظر می‌گیرد که نسخه برابر یا بالاتر از آنچه در سیستم موجود می‌باشد را دارا باشند (با فرض اینکه در فایل /etc/apt/preferences اولویت بالاتر از ۱۰۰۰ برای هیچ بسته‌ای در نظر گرفته نشده است).
فرض کنیم شما نسخه ۱ از بسته‌ موجود در Stable را نصب کرده‌اید و نسخه‌های ۲ و ۳ همان بسته در Testing و Unstable قرار دارند. نسخه نصب شده اولویت ۱۰۰ دارد اما همان نسخه موجود در Stable اولویت ۹۹۰ دارد (چرا که بخشی از توزیع هدف است). بسته‌های موجود در Testing و Unstable اولویت ۵۰۰ دارند (اولویت پیش‌فرض برای بسته‌های نصب نشده). برنده نسخه اول با اولویت ۹۹۰ است که در Stable قرار دارد.
مثال دیگر، نسخه ۲ از بسته‌ای در Testing است. نسخه ۱ در Stable و نسخه ۳ در Unstalbe قرار دارد. نسخه ۱ (با اولویت ۹۹۰ -- که کمتر از ۱۰۰۰ است) رد می‌شود چرا که از نسخه نصب شده پایین‌تر است. در اینجا تنها نسخه ۲و ۳ باقی می‌مانند که هر دو اولویت ۵۰۰ دارند. APT در مواجه با این انتخاب، بسته موجود در Unstalbe را بر می‌گزیند. اگر نمی‌خواهید بسته‌ای که از Testing نصب می‌شود به Unstalbe مهاجرت کند، باید اولویتی پایین‌تر از ۵۰۰ (برای نمونه ۵۹۰) به بسته‌های موجود در Unstalbe اختصاص دهید. برای اینکار، می‌توانید /etc/apt/preferences را ویرایش کنید:
Package: *
Pin: release a=unstable
Pin-Priority: 490

6.2.7. ردیابی خودکار بسته‌های نصب شده

یکی از عملکردهای ضروری apt قابلیت ردیابی بسته‌های نصب شده و وابستگی‌های مربوط به آنان است. این بسته‌ها اغلب “automatic” خوانده می‌شوند و معمولا شامل کتابخانه‌های جانبی هستند.
با این اطلاعات، زمانی که بسته‌ای حذف می‌شود، مدیر بسته(ها) قادر به محاسبه فهرستی از بسته‌های خودکار هستند که دیگر به آن‌ها نیازی نیست (چرا که دیگر بسته‌ای وجود ندارد که به آن‌ها وابسته باشد). apt-get autoremove از شر این بسته‌ها خلاص می‌شود، aptitude و apt این دستور را شامل نمی‌شوند: اولی به این دلیل که هنگام شناسایی آن‌ها، بلافاصله اقدام به حذف می‌کند، دومی شاید به این دلیل که کاربر نیازی به اجرای مستقیم این دستور ندارد. در تمام موارد، ابزار موجود بسته‌های شناسایی شده برای حذف را مشخص می‌کنند.
عادت خوبی است بسته‌هایی را که به صورت مستقیم با آن‌ها کار نداریم نشانه‌گذاری کنیم تا در زمان عدم نیاز به آن‌ها به سرعت قابل شناسایی باشند. apt-mark auto package بسته مورد نظر را برچسب خودکار می‌زند در صورتی که apt-mark manual package عمل مخالف آن را انجام می‌دهد. aptitude markauto و aptitude unmarkauto نیز به همین شیوه کار می‌کنند با این تفاوت که می‌توان چندین بسته را نشانه‌گذاری کرد. ( قسمت 6.4.1, “aptitude را مشاهده کنید). رابط تعاملی مبتنی بر کنسول aptitude این امکان را می‌دهد که “پرچم خودکار” موجود در بسته‌ها را به راحتی بررسی کرد.
شاید بخواهید بدانید که چرا بسته‌ای که برچسب خودکار خورده هنوز در سیستم موجود است. برای دستیابی به این اطلاعات از طریق خط فرمان، می‌توانید از aptitude why package استفاده کنید (apt و (apt-get چنین قابلیت مشابهی ندارند):
$ aptitude why python-debian
i   aptitude         Recommends apt-xapian-index         
i A apt-xapian-index Depends    python-debian (>= 0.1.15)