PKGINFOv1(5) راهنمای قالب بسته‌ها PKGINFOv1(5)

PKGINFOv1 - اطلاعات مربوط به بسته‌های مبتنی بر ALPM (نسخه ۱)

قالب PKGINFO یک قالب متنی است که متادیتای بسته را توصیف می‌کند. چنین فایل‌هایی در ریشه بسته‌های ALPM قرار دارند و .PKGINFO نامیده می‌شوند. آن‌ها به عنوان مثال توسط مدیران بسته برای ارزیابی و نمایش زمینه و بستر یک بسته در اکوسیستم آن استفاده می‌شوند. موارد کاربرد شامل نمایش متادیتای مشترک و ارتباط با سایر بسته‌ها است.

قالب PKGINFO در چندین نسخه وجود دارد. این سند نسخه ۱ را توصیف می‌کند که یک نسخه قدیمی (legacy) است و هم‌زمان با انتشار pacman 5.1.0 در تاریخ 2018-05-28 معرفی شده است. برای آخرین مشخصات، به PKGINFO مراجعه کنید.

یک فایل PKGINFO از مجموعه‌ای از خطوط تشکیل شده است که هر کدام اطلاعاتی را درباره یکی از جنبه‌های بسته ارائه می‌دهند. خطوطی که با نویسه ‘#’ شروع می‌شوند کامنت هستند و همیشه نادیده گرفته می‌شوند. فاصله‌های خالی ابتدای خطوط (Whitespace) همیشه نادیده گرفته می‌شوند.

مگر در مواردی که خلاف آن ذکر شده باشد، اطلاعات موجود در یک فایل PKGINFO باید منحصراً از مجموعه ۹۵ نویسه اسکی قابل چاپ[1] تشکیل شده باشد.

هر خط اطلاعاتی را کدگذاری می‌کند که بیانگر انتساب یک کلمه کلیدی است. تمام انتساب‌های کلمات کلیدی شامل یک کلید از فهرست زیر هستند که بلافاصله پس از آن یک فاصله، یک علامت ‘=’، یک فاصله دیگر و سپس مقدار قرار می‌گیرد.

به‌طور پیش‌فرض، دقیقاً یک انتساب کلمه کلیدی به ازای هر کلمه کلیدی در یک فایل PKGINFO باید وجود داشته باشد. به عنوان استثنایی بر این قاعده، کلمات کلیدی license، replaces، group، conflict، provides، backup، depend، optdepend، makedepend و checkdepend می‌توانند صفر یا چند بار مشخص شوند.

نام بسته. مقدار آن یک alpm-package-name است (مانند example).

مقدار alpm-package-base مربوط به بسته. مقدار آن یک alpm-package-base است (مانند example).

نسخه کامل بسته. توجه داشته باشید که این مورد نباید با alpm-pkgver که تنها نشان‌دهنده زیرمجموعه‌ای از این کلمه کلیدی است، اشتباه گرفته شود! مقدار آن یک alpm-package-version است، یا به شکل full (کامل) یا به شکل full with epoch (کامل به همراه epoch) (به ترتیب مانند 1.0.0-1 یا 1:1.0.0-1).

توضیحات بسته. مقدار آن یک رشته UTF-8 به طول صفر یا بیشتر نویسه است (مانند A project used for something). توضیحات بسته نباید هیچ فاصله خالی (Whitespace) در ابتدا یا انتها داشته باشند، نباید هیچ نویسه فاصله‌ای به جز فاصله ساده “ “ داشته باشند و نباید شامل فاصله‌های متوالی باشند. همچنین پیشنهاد می‌شود که “کوتاه” بوده و شامل نام بسته نباشد (به pkgname مراجعه کنید).

نشانی اینترنتی (URL) پروژه بسته. مقدار آن یک URL معتبر یا یک رشته خالی است (مانند https://example.org).

تاریخ و زمانی که ساخت بسته آغاز شده است. مقدار باید عددی باشد و ثانیه‌های سپری‌شده از مبدأ Epoch، یعنی زمان یونیکس (Unix time) را نشان دهد (مانند 1729181726).

شناسه کاربری (User ID) موجودیتی که بسته را ساخته است. این مقدار برای جستجو و شناسایی هویت کاربرد دارد و نشان‌دهنده یک OpenPGP User ID[2] است. به همین ترتیب، مقدار آن یک رشته با کدگذاری UTF-8 است که به‌طور مرسوم از یک نام و یک آدرس ایمیل تشکیل شده و با قالب توصیف‌شده در RFC 28223 هماهنگ است.

اندازه محتویات بسته (غیرفشرده و بازشده) بر حسب بایت. مقدار یک عدد صحیح غیرمنفی است که اندازه مطلق محتویات بسته را نشان می‌دهد، به‌طوری که چندین فایل دارای پیوند سخت (Hardlink) تنها یک بار شمرده می‌شوند (مانند 181849963).

معماری بسته (برای اطلاعات بیشتر به alpm-architecture مراجعه کنید). مقدار باید از مجموعه نویسه‌های الفبایی-عددی و ‘_’ تشکیل شده باشد (مانند x86_64 یا any).

مجوز یا پروانه‌ای که برای بسته اعمال می‌شود. این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک شناسه مجوز را نشان می‌دهد که رشته‌ای با طول غیرصفر است (مانند GPL). اگرچه به جز طول آن، هیچ محدودیت خاصی برای مقدار اعمال نمی‌شود، اما اکیداً توصیه می‌شود که از عبارات مجوز SPDX استفاده شود (مانند GPL-3.0-or-later یا Apache-2.0 OR MIT). برای اطلاعات بیشتر به SPDX License List[4] مراجعه کنید.

یک مؤلفه مجازی یا بسته دیگر که این بسته پس از نصب جایگزین آن می‌شود. این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک alpm-package-relation از نوع replacement است (مانند example یا example=1.0.0).

یک رشته دلخواه که نشان‌دهنده یک گروه در سطح توزیع است که بسته در آن قرار دارد. گروه‌ها به عنوان مثال توسط مدیران بسته برای دسته‌بندی بسته‌ها و امکان نصب دسته‌جمعی آن‌ها، یا توسط نرم‌افزارهای دیگر برای نمایش اطلاعات مربوط به این بسته‌ها استفاده می‌شوند. این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن به وسیله یک رشته UTF-8 نشان داده می‌شود. اگرچه استفاده از رشته UTF-8 امکان‌پذیر است، اما اکیداً توصیه می‌شود که در عوض از قالب pkgname برای این مقدار استفاده شود، زیرا مدیران بسته ممکن است از group برای نصب کل بسته‌های یک گروه استفاده کنند.

یک مؤلفه مجازی یا بسته دیگر که این بسته با آن تداخل دارد. این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک alpm-package-relation از نوع conflict است (مانند example یا example=1.0.0).

یک مؤلفه مجازی یا بسته دیگر که این بسته آن را فراهم می‌کند. این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک alpm-package-relation از نوع provision است (مانند example یا example=1.0.0).

یک مسیر فایل نسبی از فایلی در داخل بسته، که فایلی را مشخص می‌کند تا مدیر بسته در صورت تغییر یا حذف در طول فرآیند به‌روزرسانی بسته، از آن نسخه پشتیبان تهیه کند (به فایل‌های ‘.pacnew’ و ‘.pacsave’ در pacman مراجعه کنید). این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار باید یک مسیر فایل یونیکس نسبی و معتبر باشد (مانند etc/package.conf).

یک وابستگی زمان اجرا برای بسته (مؤلفه مجازی یا بسته). این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک alpm-package-relation از نوع run-time dependency است (مانند example یا example=1.0.0).

یک وابستگی اختیاری برای بسته (مؤلفه مجازی یا بسته). این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک alpm-package-relation از نوع optional dependency است (مانند example یا example: this is a description).

یک وابستگی زمان ساخت برای بسته (مؤلفه مجازی یا بسته). این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک alpm-package-relation از نوع build dependency است (مانند example یا example=1.0.0).

یک وابستگی برای اجرای آزمایش‌های پروژه بالادستی بسته. این کلمه کلیدی ممکن است صفر یا چند بار اختصاص یابد. مقدار آن یک alpm-package-relation از نوع test dependency است (مانند example یا example=1.0.0).

pkgname = example
pkgbase = example
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
license = GPL-3.0-or-later
license = LGPL-3.0-or-later
replaces = other-package>0.9.0-3
group = package-group
group = other-package-group
conflict = conflicting-package<1.0.0
conflict = other-conflicting-package<1.0.0
provides = some-component
provides = some-other-component=1:1.0.0-1
backup = etc/example/config.toml
backup = etc/example/other-config.txt
depend = glibc
depend = gcc-libs
optdepend = python: for special-python-script.py
optdepend = ruby: for special-ruby-script.rb
makedepend = cmake
makedepend = python-sphinx
checkdepend = extra-test-tool
checkdepend = other-extra-test-tool

alpm-pkginfo(1), PKGBUILD(5), makepkg.conf(5), alpm-architecture(7), alpm-comparison(7), alpm-package-name(7), alpm-package-relation(7), alpm-package-version(7), alpm-pkgver(7), makepkg(8), pacman(8)

1.
printable ASCII characters
https://en.wikipedia.org/wiki/ASCII#Printable_characters
2.
OpenPGP User ID
https://openpgp.dev/book/certificates.html#user-ids
3.
RFC 2822
https://www.rfc-editor.org/rfc/rfc2822
4.
SPDX License List
https://spdx.org/licenses
2024-03-01 Pacman