| APT_PREFERENCES(5) | APT | APT_PREFERENCES(5) |
نام (NAME)
apt_preferences - فایل کنترل ترجیحات و اولویتهای پکیجهای APT
توضیحات (DESCRIPTION)
فایل ترجیحات APT در مسیر /etc/apt/preferences و فایلهای تکهای موجود در پوشه /etc/apt/preferences.d/ میتوانند برای کنترل این که کدام نسخهها از بستهها برای نصب انتخاب شوند، استفاده شوند.
زمانی که فایل sources.list(5) شامل ارجاع به بیش از یک توزیع باشد (برای مثال، stable و testing)، ممکن است چندین نسخه از یک بسته برای نصب در دسترس باشند. سامانه APT به هر نسخهای که در دسترس است یک اولویت تخصیص میدهد. با در نظر گرفتن محدودیتهای وابستگی، دستور apt-get نسخهای را که دارای بالاترین اولویت است برای نصب انتخاب میکند. ترجیحات APT اولویتهایی را که APT به طور پیشفرض به نسخههای بسته تخصیص میدهد لغو و بازنویسی میکنند، بنابراین به کاربر امکان کنترل این را میدهند که کدام نسخه برای نصب انتخاب شود.
هنگامی که فایل sources.list(5) شامل ارجاع به بیش از یک منبع باشد، ممکن است چندین نمونه از یک نسخه مشابه از بسته در دسترس باشد. در این حالت، apt-get نمونهای را دریافت میکند که زودتر در فایل sources.list(5) فهرست شده است. ترجیحات APT بر انتخاب نمونه تأثیری ندارند، بلکه فقط بر انتخاب نسخه اثر میگذارند.
ترجیحات قدرتی نیرومند در دستان مدیر سیستم هستند، اما در صورت عدم دقت در استفاده میتوانند به بزرگترین کابوس او نیز تبدیل شوند! APT ترجیحات را زیر سؤال نمیبرد، بنابراین تنظیمات نادرست میتوانند منجر به غیرقابلنصب شدن بستهها یا تصمیمات اشتباه در هنگام ارتقای بستهها گردند. در صورتی که بدون درک درست از بندهای بعدی، انتشارهای مختلف توزیع با یکدیگر ترکیب شوند، مشکلات بیشتری نیز رخ خواهد داد. بستههای موجود در یک انتشار مشخص در انتشارهای قدیمیتر یا جدیدتر یا همراه با سایر بستهها از انتشارهای متفاوت آزمایش نشدهاند (و بنابراین همیشه طبق انتظار کار نمیکنند). این یک هشدار است.
توجه داشته باشید که فایلهای موجود در دایرکتوری /etc/apt/preferences.d باید از قرارداد نامگذاری زیر پیروی کنند: فایلها باید یا هیچ پسوندی نداشته باشند یا پسوند "pref" داشته باشند و تنها شامل کاراکترهای الفبایی-عددی، خط تیره (-)، زیرخط (_) و نقطه (.) باشند. در غیر این صورت، APT اعلانی مبنی بر نادیده گرفتن فایل چاپ خواهد کرد، مگر اینکه آن فایل با الگویی در فهرست پیکربندی Dir::Ignore-Files-Silently مطابقت داشته باشد - که در این صورت بدون هیچ پیامی نادیده گرفته میشود.
ابتدا فایل /etc/apt/preferences پردازش میشود و سپس فایلهای موجود در /etc/apt/preferences.d به ترتیب الفبایی (واژهنگاری) پردازش میگردند. برای مثال، /etc/apt/preferences.d/00-high-priority.pref، /etc/apt/preferences.d/50-mid-priority و /etc/apt/preferences.d/z-low-priority.pref به همین ترتیب پردازش خواهند شد.
تخصیص اولویتهای پیشفرض APT
اگر هیچ فایل ترجیحاتی وجود نداشته باشد یا اگر هیچ ورودی در فایل که برای یک نسخه خاص اعمال شود نباشد، اولویت تخصیصیافته به آن نسخه برابر با اولویت توزیعی است که نسخه به آن تعلق دارد. این امکان وجود دارد که یک توزیع، تحت عنوان "انتشار هدف" (the target release)، مشخص شود که به طور پیشفرض اولویت بالاتری نسبت به سایر توزیعها دریافت میکند. انتشار هدف را میتوان در خط فرمان apt-get یا در فایل پیکربندی APT در /etc/apt/apt.conf تنظیم کرد. توجه داشته باشید که این مقدار بر هر اولویت کلی که در فایل /etc/apt/preferences تنظیم کردهاید و بعداً توضیح داده میشود ارجحیت دارد، اما بر بستههایی که مشخصاً اولویتبندی (pin) شدهاند ارجحیت ندارد. برای مثال:
apt-get install -t testing some-package
APT::Default-Release "stable";
اگر انتشار هدف مشخص شده باشد، APT از الگوریتم زیر برای تنظیم اولویتهای نسخههای یک بسته استفاده میکند. تخصیص:
اولویت ۱
اولویت ۱۰۰
اولویت ۵۰۰
اولویت ۹۹۰
اگر انتشار هدف مشخص نشده باشد، APT به سادگی اولویت ۱۰۰ را به تمام نسخههای بستههای نصبشده و اولویت ۵۰۰ را به تمام نسخههای بستههای نصبنشده تخصیص میدهد، به جز نسخههایی که از آرشیوهایی میآیند که در فایلهای Release آنها با "NotAutomatic: yes" علامتگذاری شدهاند - این نسخهها اولویت ۱ یا اگر علاوه بر آن با "ButAutomaticUpgrades: yes" مشخص شده باشند اولویت ۱۰۰ دریافت میکنند.
سپس APT قواعد زیر را، که به ترتیب ارجحیت فهرست شدهاند، اعمال میکند تا مشخص کند کدام نسخه از یک بسته را نصب کند.
در یک موقعیت معمولی، نسخه نصبشده یک بسته (اولویت ۱۰۰) به اندازه یکی از نسخههای موجود در منابع فهرستشده در فایل sources.list(5) (اولویت ۵۰۰ یا ۹۹۰) تازه نیست. در این حالت زمانی که apt-get install some-package یا apt-get upgrade اجرا شود، بسته ارتقا خواهد یافت.
در موارد نادرتر، نسخه نصبشده یک بسته تازهتر از هر یک از نسخههای موجود دیگر است. هنگامی که apt-get install some-package یا apt-get upgrade اجرا شود، نسخه بسته تنزل نخواهد یافت.
گاهی اوقات نسخه نصبشده یک بسته تازهتر از نسخه متعلق به انتشار هدف است، اما به تازگی نسخهای متعلق به یک توزیع دیگر نیست. چنین بستهای قطعاً زمانی که apt-get install some-package یا apt-get upgrade اجرا شود ارتقا خواهد یافت، زیرا حداقل یکی از نسخههای موجود اولویتی بالاتر از نسخه نصبشده دارد.
بهروزرسانیهای مرحلهای (Phased Updates)
سامانه APT فیلدی به نام Phased-Update-Percentage را میشناسد که میتواند برای کنترل عرضه تدریجی یک نسخه جدید استفاده شود. این فیلد یک عدد صحیح بین ۰ تا ۱۰۰ است.
واجد شرایط بودن یک سیستم برای دریافت یک بهروزرسانی مرحلهای با مقداردهی اولیه مولد اعداد تصادفی توسط نام بسته مبدأ، شماره نسخه، و /etc/machine-id، و سپس محاسبه یک عدد صحیح در بازه [0, 100] تعیین میشود. اگر این عدد صحیح بزرگتر از Phased-Update-Percentage باشد، نسخه به اولویت ۱ پین (سنجاق) میشود و در نتیجه نگه داشته خواهد شد. در غیر این صورت، قواعد خطمشی عادی اعمال میشوند.
در صورتی که چندین سیستم دارید که میخواهید مجموعه یکسانی از بهروزرسانیها را دریافت کنند، میتوانید APT::Machine-ID را روی یک UUID تنظیم کنید تا همگی به طور یکسان فازبندی شوند، یا APT::Get::Never-Include-Phased-Updates یا APT::Get::Always-Include-Phased-Updates را برابر با true قرار دهید تا APT هرگز یا همیشه بهروزرسانیهای مرحلهای را لحاظ کند.
اثر ترجیحات APT
فایل ترجیحات APT به مدیر سیستم اجازه میدهد تخصیص اولویتها را کنترل کند. این فایل از یک یا چند رکورد چندخطی تشکیل شده است که با خطوط خالی از هم جدا میشوند. رکوردها میتوانند یکی از دو شکل را داشته باشند: یک شکل خاص و یک شکل عمومی.
Package: perl Pin: version 5.32* Pin-Priority: 1001
از نسخه 2.9.9 به بعد، میتوانید بر اساس نسخه مبدأ (source version) نیز پین کنید:
Package: perl Pin: source-version 5.32* Pin-Priority: 1001
این ورودی به شکل عمومی در فایل ترجیحات APT تنها برای گروههایی از بستهها اعمال میشود. برای مثال، رکورد زیر اولویت بالایی را به تمام نسخههای بستههای موجود از پایگاه محلی تخصیص میدهد.
Package: * Pin: origin "" Pin-Priority: 999
یک نکته احتیاطی: کلمه کلیدی استفادهشده در اینجا "origin" است که میتواند برای تطابق با یک نام میزبان به کار رود. رکورد زیر اولویت بالایی را به تمام نسخههای موجود از سروری که با نام میزبان "ftp.de.debian.org" مشخص شده است تخصیص میدهد:
Package: * Pin: origin "ftp.de.debian.org" Pin-Priority: 999
این مورد نباید با مبدأ (Origin) یک توزیع همانطور که در فایل Release مشخص شده است اشتباه گرفته شود. آنچه پس از برچسب "Origin:" در یک فایل Release میآید یک نشانی اینترنتی نیست، بلکه نام یک پدیدآورنده یا فروشنده است، مانند "Debian" یا "Ximian".
رکورد زیر اولویت پایینی را به تمام نسخههای بستههای متعلق به هر توزیعی که نام Archive آن "unstable" است، تخصیص میدهد.
Package: * Pin: release a=unstable Pin-Priority: 50
رکورد زیر اولویت بالایی را به تمام نسخههای بستههای متعلق به هر توزیعی که نام رمز (Codename) آن "forky" است، تخصیص میدهد.
Package: * Pin: release n=forky Pin-Priority: 900
رکورد زیر اولویت بالایی را به تمام نسخههای بستههای متعلق به هر انتشاری که نام Archive آن "stable" و شماره نسخه انتشار (Version) آن "13" است، تخصیص میدهد.
Package: * Pin: release a=stable, v=13 Pin-Priority: 500
تأثیر عملگر ویرگول مشابه عملگر منطقی "and" است: همه شرایط باید برقرار باشند تا پین تطبیق یابد. یک استثنا وجود دارد: برای هر نوع شرط (مانند دو شرط "a")، تنها آخرین شرط از آن نوع بررسی میشود.
تطبیق بستهها در فیلد Package
فیلد Package بستهای را مشخص میکند که اولویت پینگذاری روی آن اعمال میشود. این فیلد میتواند شامل نام یک بسته دودویی (باینری)، نام یک بسته مبدأ (با پیشوند "src:")، یک عبارت glob(7) یا یک عبارت منظم (احاطهشده توسط اسلشها) باشد. چند نام بسته، عبارتهای glob(7) و عبارتهای منظم را میتوان با فاصله از هم جدا کرد که در این صورت رکورد با هر یک از بستههای تطبیقیافته مطابقت خواهد داشت.
به طور پیشفرض، فقط بستههای مربوط به معماری بومی سیستم مطابقت داده میشوند. برای تطبیق بستههای دودویی از هر معماری، پسوند :any را به نام بسته اضافه کنید. همچنین میتوانید با الصاق نام معماری به نام بسته با یک کاراکتر دو نقطه، تطبیق را به یک معماری خاص محدود کنید.
برای مثال، در نمونه زیر از یک عبارت glob و یک عبارت منظم برای تخصیص اولویت ۵۰۰ به تمام بستههای experimental استفاده میشود که نام آنها با gnome شروع میشود (به عنوان یک عبارت شبیه به glob(7)) یا شامل کلمه kde است (به عنوان یک عبارت منظم تعمیمیافته POSIX که با اسلشها احاطه شده است).
Package: gnome* /kde/ Pin: release a=experimental Pin-Priority: 500
قاعده برای این عبارتها این است که میتوانند در هر جایی که یک رشته میتواند قرار گیرد، بیایند. بنابراین، پین زیر اولویت ۹۹۰ را به تمام بستههای متعلق به انتشاری که با plucky شروع میشود تخصیص میدهد:
Package: * Pin: release n=plucky* Pin-Priority: 990
اگر یک عبارت منظم در فیلد Package بیاید، رفتار آن مشابه زمانی است که این عبارت منظم با فهرستی از نام تمام بستههایی که با آن مطابقت دارند جایگزین شده باشد. هنوز تصمیمی در مورد اینکه آیا این رفتار در آینده تغییر خواهد کرد یا خیر گرفته نشده است؛ بنابراین همیشه باید ابتدا پینهای حاوی نویسه عمومی (wild-card) را فهرست کنید تا پینهای خاص بعدی آن را لغو و بازنویسی کنند. الگوی "*" در یک فیلد Package به خودی خود یک عبارت glob(7) در نظر گرفته نمیشود.
برای پین کردن تمام بستههای دودویی تولیدشده توسط بسته مبدأ apt از این نسخه APT با اولویت ۹۹۰، میتوانید اینگونه عمل کنید:
Package: src:apt Pin: version 3.3.3 Pin-Priority: 990
پینگذاری بسته مبدأ میتواند با عبارتهای منظم و الگوهای glob ترکیب شود، و همچنین میتواند معماری دودویی را بپذیرد.
برای مثال، بیایید تمام بستههای دودویی برای تمامی معماریها که توسط هر بسته مبدأ حاوی apt در نام آن تولید شدهاند را با اولویت ۹۹۰ پین کنیم:
Package: src:*apt*:any Pin: version * Pin-Priority: 990
پسوند :any اطمینان حاصل میکند که بستههای دودویی از هر معماری انتخاب شوند. بدون این پسوند، apt به طور ضمنی پسوند :native را فرض میکند که تنها بستهها را از معماری بومی انتخاب خواهد کرد.
نحوه تفسیر اولویتها توسط APT
اولویتهای (P) تخصیصیافته در فایل ترجیحات APT باید اعداد صحیح مثبت یا منفی باشند. آنها به صورت زیر تفسیر میشوند (به طور کلی):
P >= 1000
990 <= P < 1000
500 <= P < 990
100 <= P < 500
0 < P < 100
P < 0
P = 0
اولین رکورد با شکل خاص که با یک نسخه از بسته موجود مطابقت داشته باشد، اولویت آن نسخه بسته را تعیین میکند. در غیر این صورت، اولویت بسته به عنوان بیشینه تمام اولویتهای تعریفشده توسط رکوردهای شکل عمومی که با آن نسخه مطابقت دارند تعریف میشود. رکوردهایی که با استفاده از الگوهایی در فیلد Pin غیر از "*" تعریف شدهاند مانند رکوردهای شکل خاص مدیریت میشوند.
برای مثال، فرض کنید فایل ترجیحات APT شامل سه رکوردی است که پیشتر ارائه شد:
Package: perl Pin: version 5.32* Pin-Priority: 1001 Package: * Pin: origin "" Pin-Priority: 999 Package: * Pin: release unstable Pin-Priority: 50
در این صورت:
تعیین ویژگیهای نسخه بسته و توزیع
مکانهای فهرستشده در فایل sources.list(5) باید فایلهای Packages و Release را ارائه دهند تا بستههای موجود در آن مکان را توصیف کنند.
فایل Packages معمولاً در دایرکتوری .../dists/dist-name/component/arch یافت میشود: برای مثال، .../dists/stable/main/binary-i386/Packages. این فایل از مجموعهای از رکوردهای چندخطی تشکیل شده است، یکی برای هر بسته موجود در آن دایرکتوری. تنها دو خط در هر رکورد برای تنظیم اولویتهای APT مرتبط هستند:
خط Package:
خط Version:
فایل Release معمولاً در دایرکتوری .../dists/dist-name یافت میشود: برای مثال، .../dists/stable/Release یا .../dists/trixie/Release. این فایل از یک تک رکورد چندخطی تشکیل شده است که برای تمامی بستههای موجود در درخت دایرکتوری زیر شاخه والد آن اعمال میشود. بر خلاف فایل Packages، تقریباً تمام خطوط موجود در یک فایل Release برای تنظیم اولویتهای APT مرتبط هستند:
خط Archive: یا Suite:
Pin: release a=stable
خط Codename:
Pin: release n=forky
خط Version:
Pin: release v=13 Pin: release a=stable, v=13 Pin: release 13
خط Component:
Pin: release c=main
خط Origin:
Pin: release o=Debian
خط Label:
Pin: release l=Debian
تمام فایلهای Packages و Release دریافتشده از مکانهای فهرستشده در فایل sources.list(5) در دایرکتوری /var/lib/apt/lists یا در فایلی که توسط متغیر Dir::State::Lists در فایل apt.conf نامگذاری شده است، ذخیره میشوند. برای مثال، فایل debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release شامل فایل Release دریافتشده از پایگاه debian.lcs.mit.edu برای فایلهای معماری binary-i386 از بخش contrib توزیع unstable است.
خطوط اختیاری در رکوردهای ترجیحات APT
هر رکورد در فایل ترجیحات APT میتواند به صورت اختیاری با یک یا چند خط که با کلمه Explanation: آغاز میشوند شروع شود. این بخش فضایی را برای توضیحات و یادداشتها فراهم میکند.
مثالها (EXAMPLES)
ردگیری توزیع Stable
فایل ترجیحات APT زیر باعث میشود APT اولویتی بالاتر از پیشفرض (۵۰۰) به تمام نسخههای بستههای متعلق به توزیع stable و اولویتی بازدارنده و بسیار پایین به نسخههای بستههای متعلق به سایر توزیعهای Debian تخصیص دهد.
Explanation: Uninstall or do not install any Debian-originated Explanation: package versions other than those in the stable distro Package: * Pin: release a=stable Pin-Priority: 900 Package: * Pin: release o=Debian Pin-Priority: -10
با یک فایل مناسب از sources.list(5) و فایل ترجیحات فوق، هر یک از دستورات زیر باعث میشود APT به آخرین نسخه(های) stable ارتقا یابد.
apt-get install package-name apt-get upgrade apt-get dist-upgrade
دستور زیر باعث میشود APT بسته مشخصشده را به آخرین نسخه از توزیع testing ارتقا دهد؛ این بسته دوباره ارتقا نخواهد یافت مگر اینکه این دستور مجدداً صادر شود.
apt-get install package/testing
ردگیری توزیعهای Testing یا Unstable
فایل ترجیحات APT زیر باعث میشود APT اولویتی بالا به نسخههای بسته از توزیع testing، اولویتی پایینتر به نسخههای بسته از توزیع unstable، و اولویتی بازدارنده و بسیار پایین به نسخههای بسته از سایر توزیعهای Debian تخصیص دهد.
Package: * Pin: release a=testing Pin-Priority: 900 Package: * Pin: release a=unstable Pin-Priority: 800 Package: * Pin: release o=Debian Pin-Priority: -10
با یک فایل مناسب از sources.list(5) و فایل ترجیحات فوق، هر یک از دستورات زیر باعث میشود APT به آخرین نسخه(های) testing ارتقا یابد.
apt-get install package-name apt-get upgrade apt-get dist-upgrade
دستور زیر باعث میشود APT بسته مشخصشده را به آخرین نسخه از توزیع unstable ارتقا دهد. پس از آن، دستور apt-get upgrade بسته را به تازهترین نسخه testing ارتقا خواهد داد اگر آن نسخه تازهتر از نسخه نصبشده باشد، در غیر این صورت به تازهترین نسخه unstable اگر آن نسخه تازهتر از نسخه نصبشده باشد.
apt-get install package/unstable
ردگیری تکامل یک انتشار بر اساس نام رمز (Codename)
فایل ترجیحات APT زیر باعث میشود APT اولویتی بالاتر از پیشفرض (۵۰۰) به تمام نسخههای بستههای متعلق به یک نام رمز مشخص از یک توزیع، و اولویتی بازدارنده و بسیار پایین به نسخههای بستههای متعلق به سایر توزیعها، نامهای رمز و آرشیوهای Debian تخصیص دهد. توجه داشته باشید که با این ترجیح APT، سیستم مهاجرت یک انتشار از آرشیو testing به stable و سپس به oldstable را دنبال میکند. اگر میخواهید برای مثال پیشرفت در testing را صرفنظر از تغییرات نام رمز دنبال کنید، باید از پیکربندیهای نمونه در بالا استفاده کنید.
Explanation: Uninstall or do not install any Debian-originated package versions Explanation: other than those in the distribution codenamed with forky or sid Package: * Pin: release n=forky Pin-Priority: 900 Explanation: Debian unstable is always codenamed with sid Package: * Pin: release n=sid Pin-Priority: 800 Package: * Pin: release o=Debian Pin-Priority: -10
با یک فایل مناسب از sources.list(5) و فایل ترجیحات فوق، هر یک از دستورات زیر باعث میشود APT به آخرین نسخه(های) موجود در انتشار با نام رمز forky ارتقا یابد.
apt-get install package-name apt-get upgrade apt-get dist-upgrade
دستور زیر باعث میشود APT بسته مشخصشده را به آخرین نسخه از توزیع sid ارتقا دهد. پس از آن، دستور apt-get upgrade بسته را به تازهترین نسخه forky ارتقا خواهد داد اگر آن نسخه تازهتر از نسخه نصبشده باشد، در غیر این صورت به تازهترین نسخه sid اگر آن نسخه تازهتر از نسخه نصبشده باشد.
apt-get install package/sid
فایلها (FILES)
/etc/apt/preferences
/etc/apt/preferences.d/
همچنین ببینید (SEE ALSO)
اشکالات (BUGS)
صفحه اشکالات APT[1]. اگر میخواهید اشکالی را در APT گزارش کنید، لطفاً فایل /usr/share/doc/debian/bug-reporting.txt یا دستور reportbug(1) را بررسی کنید.
نویسنده (AUTHOR)
تیم APT
نکات (NOTES)
- 1.
- صفحه اشکالات APT
| 16 December 2025 | APT 3.3.3 |