ALPM-DB-DESCV2(5) راهنمای قالب‌های فایل ALPM-DB-DESCV2(5)

alpm-db-descv2 - قالب فایل برای نمایش فراداده‌های بسته‌های مبتنی بر ALPM (نسخه ۲)

قالب alpm-db-desc یک قالب متنی است که فراداده‌های یک بسته منفرد را نمایش می‌دهد. هر فایل ویژگی‌های گوناگون یک بسته را توصیف می‌کند، از جمله نام، نسخه، وابستگی‌ها، اندازه، اطلاعات مجوز و موارد دیگر. برای فهرست کامل ویژگی‌ها به بخش‌ها مراجعه کنید.

یک سیستم‌عامل متکی بر Arch Linux Package Management یک پایگاه‌داده محلی libalpm را با یک فایل alpm-db-desc به ازای هر بسته نگهداری می‌کند که هرکدام desc نامیده شده و در پوشه‌ای منحصربه‌فرد برای هر بسته قرار دارد.

مجموع تمامی فایل‌های alpm-db-desc در یک پایگاه‌داده libalpm وضعیت فعلی سیستم را توصیف می‌کنند (یعنی چه بسته‌هایی، در چه زمانی و تحت چه شرایطی نصب شده‌اند). به طور مشخص‌تر، نرم‌افزارهای مدیریت بسته مانند pacman و ابزارهای مرتبط از این قالب فایل برای نمونه جهت حل وابستگی‌ها و نمایش اطلاعات بسته استفاده می‌کنند.

داده‌های موجود در یک فایل alpm-db-desc از یک alpm-package مشتق شده‌اند. در اینجا، بیشتر فراداده‌ها از داده‌های PKGINFO بسته سرچشمه می‌گیرند.

قالب فایل alpm-db-desc نباید با قالب فایل alpm-repo-desc اشتباه گرفته شود، که در چارچوب یک alpm-repo-db استفاده می‌شود و مجموعه متفاوتی از فراداده‌ها را در بر دارد، اما معمولاً آن هم desc نامیده می‌شود.

قالب alpm-db-desc در چندین نسخه وجود دارد. اطلاعات موجود در این سند مربوط به نسخه ۲ است، که نسخه فعلی بوده و هم‌زمان با انتشار pacman 6.1.0 در تاریخ 2024-03-04 معرفی شده است.

یک فایل alpm-db-desc فایلی با کدگذاری UTF-8 و جداشده با خط جدید است که از مجموعه‌ای از بخش‌ها تشکیل شده است.

هر بخش با یک خط سربرگ بخش منحصربه‌فرد آغاز می‌شود. خط سربرگ بخش با یک یا چند خط دنبال می‌شود که هر کدام حاوی یک مقدار مختص بخش هستند. تمام مقادیر مختص بخش باید از نویسه‌های اسکی قابل چاپ[1] تشکیل شوند، مگر آنکه خلاف آن ذکر شده باشد. یک بخش زمانی پایان می‌یابد که به خط سربرگ بخش دیگری برخورد شود یا به پایان فایل برسد.

خطوط خالی میان بخش‌ها نادیده گرفته می‌شوند.

کلیدواژه جدید xdata برای ردیابی داده‌های اضافی برای یک بسته اضافه شده است.

هر خط سربرگ بخش شامل نام بخش با حروف تمام بزرگ است که میان علامت‌های درصد قرار دارد (مانند %NAME%). نام‌های بخش به عنوان کلید برای هر مقدار مختص بخش عمل می‌کنند.

هر بخش پس از خط سربرگ بخش، تنها اجازه قرارگیری یک مقدار مختص بخش را می‌دهد. به عنوان استثنایی بر این قاعده، بخش‌های %LICENSE%، %GROUPS%، %DEPENDS%، %OPTDEPENDS%، %REPLACES%، %CONFLICTS%، %PROVIDES% و %XDATA% می‌توانند بیش از یک مقدار مختص بخش داشته باشند.

یک alpm-package-name، که نشان‌دهنده نام یک بسته است (مانند example).

یک alpm-package-version (full یا full with epoch) که نشان‌دهنده نسخه یک بسته است (مانند 1.0-1).

یک alpm-package-base که پایه بسته‌ای را که بسته از آن سرچشمه می‌گیرد نشان می‌دهد. مقدار آن ممکن است با مقدار بخش %NAME% یکسان باشد.

توضیحات بسته. مقدار یک رشته UTF-8 به طول صفر یا بیشتر نویسه است (مانند A project used for something).

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

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

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

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

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

اندازه اختیاری محتویات بسته (فشرده‌نشده و استخراج‌شده) بر حسب بایت. مقدار یک عدد صحیح غیرمنفی است که اندازه مطلق محتویات بسته را نشان می‌دهد، به‌طوری‌که فایل‌های دارای چندین پیوند سخت (hardlink) تنها یک بار شمرده می‌شوند (مانند 181849963). اگر بسته فاقد اندازه باشد (برای نمونه به این دلیل که یک alpm-meta-package است)، از این بخش صرف‌نظر می‌شود.

یک alpm-package-group که نشان‌دهنده یک گروه در سطح توزیع است که بسته در آن قرار دارد. مقادیر ممکن است یک یا چند بار وجود داشته باشند. اگر بسته در هیچ گروهی نباشد، از این بخش صرف‌نظر می‌شود.

مقدار با یک رشته UTF-8 نمایش داده می‌شود. اگرچه استفاده از یک رشته UTF-8 امکان‌پذیر است، اما اکیداً توصیه می‌شود که به جای آن برای مقدار به قالب alpm-package-name تکیه شود، زیرا مدیران بسته ممکن است از یک گروه بسته برای نصب کل یک گروه از بسته‌ها استفاده کنند.

یک مقدار اختیاری که دلیل نصب بسته را نشان می‌دهد. مقدار باید یک عدد صحیح غیرمنفی باشد:

  • 0: صریحاً نصب شده است
  • 1: به عنوان یک وابستگی نصب شده است

اگر بسته صریحاً نصب شده باشد (مقدار 0)، از این بخش صرف‌نظر می‌شود.

مجموعه‌ای اختیاری از شناسه‌های مجوز که برای بسته اعمال می‌شوند. مقادیر ممکن است یک یا چند بار وجود داشته باشند. اگر هیچ شناسه مجوزی وجود نداشته باشد، از این بخش صرف‌نظر می‌شود.

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

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

  • none: یکپارچگی و اصالت بسته اعتبارسنجی نمی‌شود.
  • md5: بسته در برابر خلاصه درهم‌ساز MD-5 همراه در یک alpm-repo-db متعلق به مخزنی که بسته از آن نصب شده است، اعتبارسنجی می‌شود.
  • sha256: بسته در برابر خلاصه درهم‌ساز SHA-256 همراه در alpm-repo-db متعلق به مخزنی که بسته از آن نصب شده است، اعتبارسنجی می‌شود.
  • pgp: اصالت و یکپارچگی بسته با استفاده از یک امضای مجزای OpenPGP[5] و مجموعه‌ای سراسری از گواهی‌های OpenPGP[6] در سیستم اعتبارسنجی می‌شود. امضای دیجیتال ممکن است در فیلد %PGPSIG% از یک alpm-repo-db یا به صورت فایلی جداگانه در کنار فایل بسته وجود داشته باشد.

مقادیر md5، sha256 و pgp می‌توانند در ترکیب با یکدیگر استفاده شوند تا نشان دهند همه آن‌ها اعمال می‌شوند (برای نمونه، یک فایل بسته ممکن است هم با خلاصه درهم‌ساز SHA-256 و هم با یک امضای مجزای OpenPGP[5] اعتبارسنجی شود). با این حال، اگر هیچ اعتبارسنجی انجام نشود، تنها none به عنوان مقدار مجاز است.

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

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

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

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

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

داده‌های اضافی (extra data) مرتبط با بسته. یک مقدار باید برای تعریف یک مقدار مشخص اختصاص داده شود، اما در غیر این صورت مقادیر متعددی نیز ممکن است برای ارائه داده‌های اضافی بیشتر حضور داشته باشند. مقدار یک رشته کدگذاری‌شده با UTF-8 است که یک جفت کلید-مقدار را که با علامت ‘=’ جدا شده است، نشان می‌دهد (مانند key=value).

این بخش از قالب فایل alpm-db-desc باید حاوی مقداری باشد که تخصیص pkgtype را تعریف کند (مانند pkgtype=pkg). مقادیر معتبر pkgtype عبارتند از debug (برای بسته‌های اشکال‌زدایی)، pkg (برای بسته‌های منفرد)، src (برای بسته‌های منبع) و split (برای بسته‌های تفکیک‌شده).

مقادیر اضافی ممکن است با رعایت قواعد کلی قالب‌بندی که پیش‌تر ذکر شد، ارائه شوند.

نمونه‌ای از یک فایل alpm-db-desc برای بسته‌ای به نام example در نسخه 1.0.0-1:

%NAME%
example
%VERSION%
1.0.0-1
%BASE%
example
%DESC%
An example package
%URL%
https://example.org
%ARCH%
x86_64
%BUILDDATE%
1733737242
%INSTALLDATE%
1733737243
%PACKAGER%
Foobar McFooface <foobar@mcfooface.org>
%SIZE%
4
%LICENSE%
MIT
Apache-2.0
%VALIDATION%
pgp
%DEPENDS%
gcc-libs
%XDATA%
pkgtype=pkg

libalpm(3), BUILDINFO(5), PKGBUILD(5), PKGINFO(5), alpm-repo-desc(5), alpm-architecture(7), alpm-package(7), alpm-package-file-name(7), alpm-package-name(7), alpm-package-relation(7), alpm-package-version(7), alpm-repo-db(7), alpm-split-package(7), pacman(8)

1.
نویسه‌های اسکی قابل چاپ (printable ASCII characters)
https://en.wikipedia.org/wiki/ASCII#Printable_characters
2.
شناسه کاربری OpenPGP
https://openpgp.dev/book/certificates.html#user-ids
3.
RFC 2822
https://www.rfc-editor.org/rfc/rfc2822
4.
فهرست مجوزهای SPDX
https://spdx.org/licenses
5.
امضای OpenPGP
https://openpgp.dev/book/signing_data.html#detached-signatures
6.
گواهی‌های OpenPGP
https://openpgp.dev/book/certificates.html
2024-03-04 ALPM