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

BUILDINFOv2 - مشخصات متادیتای ساخت بسته نسخه ۲ در Arch/ALPM

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

قالب BUILDINFO در چندین نسخه وجود دارد. اطلاعات این سند برای نسخه ۲ است که نسخه فعلی به شمار می‌رود و با انتشار pacman 6.0.0 در تاریخ 2021-05-20 معرفی شده است.

کلیدواژه‌های جدید buildtool و buildtoolver برای ردیابی نام بسته، نسخه و معماری ابزار استفاده‌شده برای راه‌اندازی محیط ساخت یک بسته افزوده شده‌اند.

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

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

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

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

نسخه قالب پرونده BUILDINFO. باید اولین کلیدواژه در پرونده BUILDINFO باشد. مقدار باید یک عدد صحیح مثبت ساده باشد. این مقدار برای BUILDINFO نسخه ۲ باید 2 باشد.

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

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

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

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

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

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

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

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

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

نام بسته ابزار استفاده‌شده برای راه‌اندازی محیط ساخت. این مورد به تلاش Arch Linux برای ساخت‌های بازتولیدپذیر کمک می‌کند تا محیطی را که بسته در آن ساخته شده است، بازتولید کند. مقدار باید یک نام بسته معتبر باشد همان‌طور که در pkgname توصیف شده است.

نسخه کامل buildtool استفاده‌شده برای راه‌اندازی محیط ساخت. مقدار می‌تواند یکی از دو شکل زیر را داشته باشد:

  • یک alpm-package-version به شکل full یا full with epoch (به ترتیب مانند 1.0.0-1 یا 1:1.0.0-1)، بلافاصله پس از آن یک علامت ‘-’، و بلافاصله پس از آن یک alpm-architecture (به ترتیب مانند 1.0.0-1-any یا 1:1.0.0-1-any). این قالب معمولاً توسط ابزارهای ساخت Arch Linux استفاده می‌شود.
  • یک alpm-package-version به شکل minimal یا minimal with epoch (به ترتیب مانند 1.0.0 یا 1:1.0.0). این قالب معمولاً توسط makepkg استفاده می‌شود.

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

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

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

format = 2
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
startdir = /startdir/
buildtool = devtools
buildtoolver = 1:1.2.1-1-any
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), devtools(7), makepkg(8), pacman(8), repro(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