BUILDINFOv1(5) راهنمای فرمت‌های فایل BUILDINFOv1(5)

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

قالب BUILDINFO یک قالب متنی است که محیط ساخت یک بسته را توصیف می‌کند. این فایل‌ها در ریشه بسته‌های ALPM قرار دارند، .BUILDINFO نامیده می‌شوند و معمولاً برای بازتولید محیطی که بسته در آن ساخته شده است به کار می‌روند. برای اطلاعات بیشتر به تلاش Arch Linux برای ساخت‌های بازتولیدپذیر[1] مراجعه کنید.

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

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

مگر در مواردی که خلاف آن ذکر شده باشد، اطلاعات موجود در یک فایل BUILDINFO مشمول مجموعه ۹۵ نویسه قابل چاپ ASCII در نظر گرفته می‌شود.

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

به‌طور پیش‌فرض، دقیقاً یک انتساب کلیدواژه به ازای هر کلیدواژه باید در یک BUILDINFO وجود داشته باشد. به عنوان استثنای این قاعده، کلیدواژه‌های buildenv، options و installed می‌توانند صفر یا چند بار مشخص شوند.

نسخه قالب فایل BUILDINFO. باید اولین کلیدواژه در فایل BUILDINFO باشد. مقدار باید یک عدد صحیح مثبت ساده باشد. این مقدار برای نسخه ۱ BUILDINFO باید 1 باشد.

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

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

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

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

نمایش هگزادسیمال جمع کنترلی (checksum) از نوع SHA-256 فایل PKGBUILD که برای ساخت بسته استفاده شده است. مقدار باید شامل مجموعه‌ای از نویسه‌های هگزادسیمال باشد و طول آن ۶۴ نویسه باشد (مانند 946d8362de3cebe3c86765cb36671a1dfd70993ac73e12892ac7ac5e6ff7ef95).

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

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

مسیر مطلق دایرکتوری که بسته توسط ابزار ساخت (مانند makepkg) در آن ساخته شده است. مقدار یک رشته با کدگذاری UTF-8 است و باید نشان‌دهنده یک دایرکتوری معتبر با مسیر مطلق باشد (مانند /builddir).

یک محیط ساخت استفاده‌شده توسط ابزار ساخت بسته (یعنی makepkg، تعریف‌شده در BUILDENV فایل makepkg.conf) هنگام ساخت بسته. این کلیدواژه ممکن است صفر یا چند بار مشخص شود. مقدار باید یک کلمه یکتا باشد، که اختیاری می‌تواند با یک ‘!’ آغاز شود که نشان‌دهنده نفی آن محیط است (مانند color یا !color).

یک گزینه استفاده‌شده توسط ابزار ساخت بسته (یعنی makepkg، تعریف‌شده در OPTIONS فایل makepkg.conf) هنگام ساخت بسته. این کلیدواژه ممکن است صفر یا چند بار مشخص شود. مقدار باید یک کلمه یکتا باشد، که اختیاری می‌تواند با یک ‘!’ آغاز شود که نشان‌دهنده نفی آن گزینه است (مانند debug یا !debug).

اطلاعات مربوط به یک بسته نصب‌شده در زمان ساخت بسته. این کلیدواژه ممکن است صفر یا چند بار مشخص شود. مقدار نشان‌دهنده یک رشته ترکیبی است که از یک alpm-package-name، بلافاصله بعد از آن یک علامت ‘-’، بلافاصله بعد از آن یک alpm-package-version (به شکل کامل (full) یا به شکل کامل به همراه epoch (full with epoch))، بلافاصله بعد از آن یک علامت ‘-’ و به دنبال آن یک alpm-architecture تشکیل شده است (مانند example-1:1.0.0-1-x86_64).

format = 1
pkgname = example
pkgbase = example
pkgver = 1:1.0.0-1
pkgarch = any
pkgbuild_sha256sum = b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
packager = John Doe <john@example.org>
builddate = 1729181726
builddir = /build
buildenv = !color
buildenv = check
options = !strip
options = staticlibs
installed = other-package-1:0.5.0-3-any
installed = package2-2.1.0-6-x86_64

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

1.
Arch Linux’s Reproducible Builds effort
https://wiki.archlinux.org/title/Reproducible_builds
2.
OpenPGP User ID
https://openpgp.dev/book/certificates.html#user-ids
3.
RFC 2822
https://www.rfc-editor.org/rfc/rfc2822
2024-03-01 Pacman