ALPM-REPO-DESCV1(5) فرمتهای فایل ALPM-REPO-DESCV1(5)

alpm-repo-descv1 - فرمت فایل برای نمایش فرادادههای بستههای موجود در پایگاهداده مخزن ALPM (نسخه ۱)

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

مجموع تمامی فایل‌های alpm-repo-desc در یک alpm-repo-db وضعیت فعلی مخزن را توصیف می‌کنند (یعنی چه بسته‌هایی در چه نسخه‌ای موجود هستند).

یک سیستم‌عامل متکی بر Arch Linux Package Management یک یا چند فایل alpm-repo-db را نگهداری می‌کند که هر یک شامل یک فایل alpm-repo-desc به ازای هر بسته است که هرکدام desc نامیده شده و در پوشه‌ای منحصربه‌فرد برای هر بسته قرار دارد. به طور مشخص‌تر، نرم‌افزارهای مدیریت بسته مانند pacman و ابزارهای مرتبط از این قالب فایل برای نمونه جهت حل وابستگی‌ها و نمایش اطلاعات بسته برای فایل‌های alpm-package در مخازن استفاده می‌کنند.

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

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

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

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

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

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

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

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

نام فایل alpm-package (مانند example-1.2.3-any.pkg.tar.zst).

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

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

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

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

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

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

اندازه فایل فشرده‌شده alpm-package بر حسب بایت. مقدار یک عدد صحیح غیرمنفی است (مانند 1818463).

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

خلاصه درهم‌ساز MD-5[2] برای فایل alpm-package. این رشته از ۳۲ نویسه شانزده‌شانزدهی (هگزادسیمال) تشکیل شده است (مانند d3b07384d113edec49eaa6238ad5ff00).

خلاصه درهم‌ساز SHA-256[3] برای فایل alpm-package. این رشته از ۶۴ نویسه شانزده‌شانزدهی (هگزادسیمال) تشکیل شده است (مانند b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c).

امضای OpenPGP[5] کدگذاری‌شده با base64[4] برای فایل alpm-package (مانند iHUEABYKAB0WIQRizHP4hOUpV7L92IObeih9mi7GCAUCaBZuVAAKCRCbeih9mi7GCIlMAP9ws/jU4f580ZRQlTQKvUiLbAZOdcB7mQQj83hD1Nc/GwD/WIHhO1/OQkpMERejUrLo3AgVmY3b4/uGhx9XufWEbgE=).

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

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

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

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

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

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

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

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

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

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

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

%FILENAME%
example-1.0.0-1-any.pkg.tar.zst
%NAME%
example
%BASE%
example
%VERSION%
1.0.0-1
%DESC%
An example package
%GROUPS%
example-group
other-group
%CSIZE%
1818463
%ISIZE%
18184634
%MD5SUM%
d3b07384d113edec49eaa6238ad5ff00
%SHA256SUM%
b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
%PGPSIG%
iHUEABYKAB0WIQRizHP4hOUpV7L92IObeih9mi7GCAUCaBZuVAAKCRCbeih9mi7GCIlMAP9ws/jU4f580ZRQlTQKvUiLbAZOdcB7mQQj83hD1Nc/GwD/WIHhO1/OQkpMERejUrLo3AgVmY3b4/uGhx9XufWEbgE=
%URL%
https://example.org
%LICENSE%
MIT
Apache-2.0
%ARCH%
x86_64
%BUILDDATE%
1729181726
%PACKAGER%
Foobar McFooface <foobar@mcfooface.org>
%REPLACES%
other-pkg-replaced
%CONFLICTS%
other-pkg-conflicts
%PROVIDES%
example-component
%DEPENDS%
glibc
gcc-libs
%OPTDEPENDS%
bash: for a script
%MAKEDEPENDS%
cmake
%CHECKDEPENDS%
bats

یک نمونه حداقلی از یک فایل alpm-repo-desc برای یک alpm-meta-package به نام example-meta در نسخه 1.0.0-1:

%FILENAME%
example-meta-1.0.0-1-any.pkg.tar.zst
%NAME%
example-meta
%BASE%
example-meta
%VERSION%
1.0.0-1
%DESC%
An example meta package
%CSIZE%
4634
%ISIZE%
0
%MD5SUM%
d3b07384d113edec49eaa6238ad5ff00
%SHA256SUM%
b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
%PGPSIG%
iHUEABYKAB0WIQRizHP4hOUpV7L92IObeih9mi7GCAUCaBZuVAAKCRCbeih9mi7GCIlMAP9ws/jU4f580ZRQlTQKvUiLbAZOdcB7mQQj83hD1Nc/GwD/WIHhO1/OQkpMERejUrLo3AgVmY3b4/uGhx9XufWEbgE=
%URL%
https://example.org
%LICENSE%
GPL-3.0-or-later
%ARCH%
any
%BUILDDATE%
1729181726
%PACKAGER%
Foobar McFooface <foobar@mcfooface.org>

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

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