PKGBUILD(5) راهنمای Pacman PKGBUILD(5)

PKGBUILD - پرونده توصیف ساخت بسته

PKGBUILD

این صفحه راهنما قوانین عمومی درباره PKGBUILDها را توصیف می‌کند. پس از نگارش یک PKGBUILD، بسته واقعی با استفاده از makepkg ساخته شده و با pacman نصب می‌شود.


نکته

یک نمونه PKGBUILD، جهت ارجاع و راهنمایی، در /usr/share/pacman در کنار فایل‌های نمونه دیگر مانند اسکریپت نصب قرار دارد. می‌توانید فایل PKGBUILD.proto ارائه‌شده را در دایرکتوری ساخت بسته جدید کپی کرده و متناسب با نیازهای خود آن را سفارشی‌سازی کنید.

در ادامه فهرستی از گزینه‌ها و دستورالعمل‌های استاندارد موجود برای استفاده در یک PKGBUILD آورده شده است. همه این‌ها توسط makepkg شناخته و تفسیر می‌شوند و بیشتر آن‌ها مستقیماً به بسته ساخته‌شده منتقل خواهند شد. فیلدهای الزامی برای یک PKGBUILD با حداقل کارایی عبارتند از pkgname، pkgver، pkgrel و arch.

اگر نیاز به ایجاد متغیرهای سفارشی برای استفاده در فرایند ساخت خود دارید، توصیه می‌شود نام آن‌ها را با یک _ (زیرخط) آغاز کنید. این کار از هرگونه تداخل نام احتمالی با متغیرهای درونی makepkg جلوگیری می‌کند. برای مثال، برای ذخیره نسخه پایه هسته در یک متغیر، از متغیری مشابه $_basekernver استفاده کنید.

pkgname (array)

یا نام بسته است یا آرایه‌ای از نام‌ها برای بسته‌های تفکیک‌شده (split packages). نویسه‌های معتبر برای اعضای این آرایه، حروف الفبا و ارقام، و هر یک از نویسه‌های زیر هستند: “@ . _ + -”. علاوه بر این، نام‌ها مجاز نیستند با خط تیره یا نقطه آغاز شوند.

pkgver

نسخه نرم‌افزار همان‌گونه که توسط پدیدآورنده منتشر شده است (مانند 2.7.1). این متغیر مجاز به داشتن دونقطه، خط مورب (اسلش)، خط تیره یا فاصله سفید نیست.

متغیر pkgver را می‌توان با ارائه یک تابع pkgver() در PKGBUILD که نسخه جدید بسته را خروجی می‌دهد، به‌طور خودکار به‌روزرسانی کرد. این تابع پس از دریافت و استخراج منابع و اجرای تابع prepare() (در صورت وجود) اجرا می‌شود، بنابراین می‌تواند از آن فایل‌ها برای تعیین pkgver جدید استفاده کند. این قابلیت بیش از همه در هنگام استفاده از منابع سامانه‌های کنترل نسخه مفید است (زیر را ببینید).

pkgrel

این شماره انتشار ویژه توزیع است. این متغیر به نگه‌دارندگان بسته امکان می‌دهد برای مثال به‌روزرسانی‌هایی در پرچم‌های پیکربندی بسته اعمال کنند. این مقدار معمولاً برای هر انتشار جدید نرم‌افزار بالادستی روی 1 تنظیم شده و برای به‌روزرسانی‌های میانی PKGBUILD افزایش می‌یابد. این متغیر یک عدد صحیح مثبت است، همراه با زیرانتشار اختیاری که با افزودن یک عدد صحیح مثبت دیگر جداشده با نقطه مشخص می‌شود (یعنی به فرم x.y).

epoch

برای وادار کردن بسته به اینکه جدیدتر از نسخه‌های پیشین با epoch پایین‌تر در نظر گرفته شود استفاده می‌شود، حتی اگر شماره نسخه به‌طور معمول آغازگر چنین ارتقایی نباشد. این مقدار باید یک عدد صحیح مثبت باشد؛ مقدار پیش‌فرض در صورت مشخص نشدن 0 است. این گزینه زمانی مفید است که طرح شماره‌گذاری نسخه یک بسته تغییر کند (یا حرفی-عددی باشد) و منطق عادی مقایسه نسخه‌ها را برهم بزند. برای اطلاعات بیشتر در مورد مقایسه نسخه‌ها، pacman(8) را ببینید.

pkgdesc

باید توصیفی مختصر از بسته و کارکرد آن باشد. تلاش کنید توضیحات را در یک خط متن نگه دارید و از نام بسته در آن استفاده نکنید.

url

این فیلد شامل یک URL است که با نرم‌افزار بسته‌بندی‌شده ارتباط دارد. معمولاً این نشانی وب‌سایت پروژه است.

license (array)

این فیلد مجوزی که بر این بسته اعمال می‌شود را مشخص می‌کند. اگر چند مجوز اعمال می‌شود، همه آن‌ها را فهرست کنید: license=('GPL' 'FDL').

install

اسکریپت نصب ویژه‌ای را مشخص می‌کند که باید درون بسته گنجانده شود. این فایل باید در همان دایرکتوری PKGBUILD قرار داشته باشد و توسط makepkg درون بسته کپی خواهد شد. نیازی نیست این فایل در آرایه source گنجانده شود (مانند install=$pkgname.install).

changelog

فایل گزارش تغییراتی (changelog) را مشخص می‌کند که باید درون بسته گنجانده شود. فایل گزارش تغییرات باید با یک خط جدید منفرد پایان یابد. این فایل باید در همان دایرکتوری PKGBUILD قرار داشته باشد و توسط makepkg درون بسته کپی خواهد شد. نیازی نیست این فایل در آرایه source گنجانده شود (مانند changelog=$pkgname.changelog).

source (array)

آرایه‌ای از فایل‌های منبع مورد نیاز برای ساخت بسته. فایل‌های منبع باید یا در همان دایرکتوری PKGBUILD قرار داشته باشند، یا یک URL کامل و مشخص باشند که makepkg بتواند برای دریافت فایل از آن استفاده کند. برای ساده‌سازی نگه‌داری PKGBUILDها، در صورت امکان هنگام تعیین مکان بارگیری از متغیرهای $pkgname و $pkgver استفاده کنید. فایل‌های فشرده‌شده به‌طور خودکار استخراج خواهند شد مگر اینکه در آرایه noextract که در زیر توضیح داده شده یافت شوند.

منابع اضافی ویژه هر معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند source_x86_64=(). باید یک آرایه یکپارچگی متناظر حاوی جمع‌های مقابله‌ای وجود داشته باشد، مانند cksums_x86_64=().

همچنین امکان تغییر نام فایل بارگیری‌شده وجود دارد که هنگام برخورد با نشانی‌های وب نامتعارف و برای مدیریت چندین فایل منبع با نام یکسان مفید است. نحو استفاده: source=('filename::url').

همچنین makepkg از ساخت نسخه‌های در حال توسعه بسته‌ها با استفاده از منابع دانلودشده از سامانه‌های کنترل نسخه (VCS) پشتیبانی می‌کند. برای اطلاعات بیشتر، استفاده از منابع سامانه کنترل نسخه در زیر را ببینید.

فایل‌های موجود در آرایه source با پسوندهای .sig, .sign یا .asc توسط makepkg به عنوان امضاهای PGP شناخته می‌شوند و به‌طور خودکار برای تایید صحت فایل منبع متناظر استفاده خواهند شد.

validpgpkeys (array)

آرایه‌ای از اثر انگشت‌های (fingerprints) PGP. اگر این آرایه ناتهی باشد، makepkg فقط امضاهای مربوط به کلیدهای فهرست‌شده در اینجا را می‌پذیرد و مقادیر اعتماد دسته‌کلید (keyring) را نادیده می‌گیرد. اگر فایل منبع با یک زیرکلید (subkey) امضا شده باشد، makepkg همچنان از کلید اصلی برای مقایسه استفاده خواهد کرد.

تنها اثر انگشت‌های کامل پذیرفته می‌شوند. آن‌ها باید با حروف بزرگ باشند و نباید دارای نویسه‌های فاصله سفید باشند.

noextract (array)

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

cksums (array)

این آرایه شامل جمع‌های مقابله‌ای CRC برای هر فایل منبع مشخص‌شده در آرایه source (به همان ترتیب) است. دستور makepkg از این مقادیر برای تایید یکپارچگی فایل‌های منبع در ساخت‌های بعدی استفاده خواهد کرد. اگر SKIP به‌جای یک هش عادی در آرایه قرار گیرد، بررسی یکپارچگی برای آن فایل منبع نادیده گرفته می‌شود. برای تولید آسان cksumها، دستور “makepkg -g >> PKGBUILD” را اجرا کنید. در صورت تمایل، خط cksums را به مکان مناسب منتقل کنید. توجه داشته باشید که جمع‌های مقابله‌ای تولیدشده توسط "makepkg -g" باید با استفاده از مقادیر جمع مقابله‌ای ارائه‌شده توسط توسعه‌دهنده نرم‌افزار اعتبارسنجی شوند.

md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)

بررسی‌های یکپارچگی جایگزینی که makepkg پشتیبانی می‌کند؛ عملکرد همه این‌ها مشابه با گزینه cksums توصیف‌شده در بالا است. برای فعال‌سازی استفاده و تولید این جمع‌های مقابله‌ای، حتماً گزینه INTEGRITY_CHECK را در makepkg.conf(5) تنظیم کنید.

groups (array)

آرایه‌ای از نام‌های نمادین که گروه‌هایی از بسته‌ها را نشان می‌دهند و به شما امکان می‌دهند چندین بسته را با درخواست یک هدف واحد نصب کنید. برای مثال، می‌توان تمام بسته‌های KDE را با نصب گروه kde نصب کرد.

arch (array)

مشخص می‌کند که بسته معین روی چه معماری‌هایی در دسترس است (مانند arch=('i686' 'x86_64')). بسته‌هایی که شامل هیچ فایل وابسته به معماری نیستند باید از arch=('any') استفاده کنند. نویسه‌های معتبر برای اعضای این آرایه حروف و ارقام و “_” هستند.

backup (array)

آرایه‌ای از نام فایل‌ها، بدون اسلش ابتدایی، که در صورت حذف یا ارتقای بسته باید پشتیبان‌گیری شوند. این ویژگی معمولاً برای بسته‌هایی استفاده می‌شود که فایل‌های پیکربندی را در /etc قرار می‌دهند. برای اطلاعات بیشتر "Handling Config Files" در pacman(8) را ببینید.

depends (array)

آرایه‌ای از بسته‌هایی که این بسته برای اجرا به آن‌ها وابسته است. ورودی‌های این فهرست باید در علامت نقل‌قول تکی محصور شده و دست‌کم شامل نام بسته باشند. ورودی‌ها همچنین می‌توانند شامل یک نیازمندی نسخه به صورت name<>version باشند، که در آن <> یکی از پنج عملگر مقایسه‌ای است: >= (بزرگ‌تر یا مساوی)، <= (کوچک‌تر یا مساوی)، = (مساوی)، > (بزرگ‌تر از)، یا < (کوچک‌تر از).

اگر نام وابستگی شبیه به یک کتابخانه باشد (به .so ختم شود)، makepkg تلاش خواهد کرد یک باینری وابسته به کتابخانه را در بسته ساخته‌شده پیدا کند و نسخه مورد نیاز باینری را ضمیمه نماید. افزودن دستی نسخه، تشخیص خودکار را غیرفعال می‌کند.

وابستگی‌های اضافی وابسته به معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند depends_x86_64=().

makedepends (array)

آرایه‌ای از بسته‌هایی که این بسته برای ساخت به آن‌ها وابسته است، اما در زمان اجرا نیازی به آن‌ها نیست. بسته‌ها در این فهرست همان قالب depends را دنبال می‌کنند.

پیش‌نیازهای ساخت اضافی مخصوص معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند makedepends_x86_64=().

checkdepends (array)

آرایه‌ای از بسته‌هایی که این بسته برای اجرای مجموعه آزمون‌های خود به آن‌ها نیاز دارد اما در هنگام اجرا مورد نیاز نیستند. بسته‌ها در این فهرست همان قالب depends را دنبال می‌کنند. این وابستگی‌ها تنها زمانی در نظر گرفته می‌شوند که تابع check() وجود داشته باشد و قرار باشد توسط makepkg اجرا شود.

وابستگی‌های آزمون اضافی وابسته به معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند checkdepends_x86_64=().

optdepends (array)

آرایه‌ای از بسته‌ها (همراه با دلایل مربوطه) که برای کارکرد پایه ضروری نیستند، اما ممکن است برای استفاده کامل از امکانات این بسته لازم باشند. در حال حاضر optdepends صرفاً جنبه اطلاع‌رسانی دارد و در حین حل وابستگی‌ها توسط pacman استفاده نمی‌شود. بسته‌های موجود در این فهرست از همان قالب depends به همراه توضیحی اختیاری که ضمیمه شده پیروی می‌کنند. قالب مشخص کردن توضیحات optdepends به شرح زیر است:
optdepends=('python: for library bindings')

وابستگی‌های اختیاری اضافی وابسته به معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند optdepends_x86_64=().

conflicts (array)

آرایه‌ای از بسته‌هایی که با این بسته تداخل دارند (یعنی نمی‌توانند هر دو هم‌زمان نصب باشند). این دستورالعمل از همان قالب depends پیروی می‌کند. تداخل‌های دارای نسخه با استفاده از عملگرهای توصیف‌شده در depends پشتیبانی می‌شوند.

تداخل‌های اضافی وابسته به معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند conflicts_x86_64=().

provides (array)

آرایه‌ای از “تامین‌های مجازی” که این بسته فراهم می‌کند. این ویژگی به بسته امکان می‌دهد وابستگی‌هایی فراتر از نام بسته خود را ارائه دهد. به عنوان مثال، بسته dcron می‌تواند cron را ارائه دهد، که به بسته‌ها امکان می‌دهد به‌جای dcron OR fcron به cron وابسته باشند.

تامین‌های دارای نسخه نیز به فرمت name=version امکان‌پذیر است. برای نمونه، dcron می‌تواند cron=2.0 را برای برآورده کردن وابستگی cron>=2.0 سایر بسته‌ها تامین کند. تامین‌های شامل عملگرهای > و < نامعتبر هستند، زیرا فقط نسخه‌های خاصی از یک بسته را می‌توان تامین کرد.

اگر نام تامین شبیه یک کتابخانه باشد (با .so پایان یابد)، makepkg تلاش خواهد کرد کتابخانه را در بسته ساخته‌شده پیدا کرده و نسخه مناسب را ضمیمه کند. افزودن دستی نسخه، این تشخیص خودکار را غیرفعال می‌کند.

تامین‌های اضافی مخصوص معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند provides_x86_64=().

replaces (array)

آرایه‌ای از بسته‌هایی که این بسته باید جایگزین آن‌ها شود. از این فیلد می‌توان برای مدیریت بسته‌های تغییرنام‌یافته یا ادغام‌شده استفاده کرد. به عنوان مثال، اگر بسته j2re به jre تغییر نام یابد، این دستورالعمل به ارتقاهای آینده امکان می‌دهد حتی با جابه‌جایی بسته، مطابق انتظار ادامه یابند. جایگزینی‌های دارای نسخه با استفاده از عملگرهای توصیف‌شده در depends پشتیبانی می‌شوند.

در حال حاضر Sysupgrade تنها عملیات pacman است که از این فیلد استفاده می‌کند. همگام‌سازی یا ارتقای عادی از مقدار آن استفاده نخواهد کرد.

جایگزینی‌های اضافی وابسته به معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند replaces_x86_64=().

options (array)

این آرایه به شما امکان می‌دهد برخی رفتارهای پیش‌فرض makepkg را در هنگام ساخت بسته‌ها لغو (override) کنید. برای فعال‌سازی یک گزینه، کافی است نام گزینه را در آرایه options قرار دهید. برای معکوس کردن رفتار پیش‌فرض، یک “!” در ابتدای گزینه قرار دهید. فقط گزینه‌هایی را که به‌طور مشخص قصد لغو آن‌ها را دارید وارد کنید؛ باقی گزینه‌ها از makepkg.conf(5) گرفته خواهند شد. نکته: force گزینه‌ای است که حذف شده و متغیر سطح بالای epoch جایگزین آن گردیده است.

strip

حذف نمادها (symbols) از باینری‌ها و کتابخانه‌ها. اگر مرتباً از دیباگر روی برنامه‌ها یا کتابخانه‌ها استفاده می‌کنید، غیرفعال کردن این گزینه ممکن است مفید باشد.

docs

نگه‌داری دایرکتوری‌های اسناد (doc). اگر مایل به حذف دایرکتوری‌های اسناد هستید، !docs را در آرایه مشخص کنید.

libtool

نگه‌داشتن فایل‌های libtool (.la) در بسته‌ها. برای حذف آن‌ها !libtool را مشخص کنید.

staticlibs

نگه‌داشتن فایل‌های کتابخانه ایستا (.a) در بسته‌ها. برای حذف آن‌ها (در صورتی که همتای اشتراکی داشته باشند) !staticlibs را مشخص کنید.

emptydirs

نگه‌داشتن دایرکتوری‌های خالی در بسته‌ها.

zipman

فشرده‌سازی صفحات راهنما (man) و info با gzip.

ccache

اجازه استفاده از ccache در طول build(). شکل منفی آن !ccache برای بسته‌های خاصی که با ccache در ساخت مشکل دارند مفیدتر است.

distcc

اجازه استفاده از distcc در طول build(). شکل منفی آن !distcc برای بسته‌های خاصی که با distcc در ساخت مشکل دارند کاربرد بیشتری دارد.

buildflags

اجازه استفاده از پرچم‌های ساخت مشخص‌شده توسط کاربر (CPPFLAGS، CFLAGS، CXXFLAGS، LDFLAGS) در طول build() همان‌گونه که در makepkg.conf(5) مشخص شده است. شکل منفی آن !buildflags برای بسته‌های خاصی که با پرچم‌های ساخت سفارشی دچار مشکل در ساخت می‌شوند مفیدتر است.

makeflags

اجازه استفاده از پرچم‌های ساخت makeflags مشخص‌شده توسط کاربر در طول build() همان‌طور که در makepkg.conf(5) مشخص شده است. شکل منفی آن !makeflags برای بسته‌های خاصی که با پرچم‌های ساخت سفارشی مانند -j2 (یا بالاتر) در ساخت با مشکل مواجه می‌شوند سودمندتر است.

debug

افزودن پرچم‌های اشکال‌زدایی مشخص‌شده توسط کاربر (DEBUG_CFLAGS، DEBUG_CXXFLAGS) به پرچم‌های متناظر ساخت همان‌گونه که در makepkg.conf(5) تعیین شده است. در صورت استفاده به همراه گزینه ‘strip’، یک بسته جداگانه حاوی نمادهای اشکال‌زدایی ایجاد خواهد شد.

lto

فعال‌سازی ساخت بسته‌ها با بهینه‌سازی زمان پیوند (Link Time Optimization). گزینه -flto را به هر دو CFLAGS و CXXFLAGS اضافه می‌کند.

گزینه‌های اضافی وابسته به معماری را می‌توان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند options_x86_64=().

xdata (array)

این آرایه به شما امکان می‌دهد فراداده‌های اضافی را به بسته بیفزایید. این داده‌ها نه توسط pacman و نه توسط makepkg استفاده می‌شوند؛ صرفاً هدفی اطلاع‌رسانی دارند یا ممکن است توسط ابزارهای شخص ثالث تفسیر شوند.

تمامی ورودی‌های این آرایه باید ساختار key=value داشته باشند، که در آن key یک رشته غیرخالی دلخواه است و value نباید دارای علامت مساوی باشد. همچنین کلید “pkgtype” برای برنامه makepkg رزرو شده است.

علاوه بر دستورالعمل‌های بالا، PKGBUILDها به مجموعه‌ای از توابع نیازمندند که دستورالعمل‌های ساخت و نصب بسته را ارائه دهند. در حالت کمینه، PKGBUILD باید حاوی یک تابع package() باشد که تمام فایل‌های بسته را درون دایرکتوری بسته‌بندی نصب کند، به همراه توابع اختیاری prepare()، build() و check() که برای ایجاد آن فایل‌ها از سورس استفاده می‌شوند.

این توابع مستقیماً توسط makepkg خوانده (source) و اجرا می‌شوند، بنابراین هر امکانی که بش یا سیستم ارائه می‌دهد برای استفاده در اینجا مهیا است. دقت فرمایید که هر دستور نامتعارفی که استفاده می‌شود تحت پوشش آرایه makedepends قرار گیرد.

اگر متغیرهای اختصاصی خود را در هر یک از این توابع ایجاد می‌کنید، توصیه می‌شود از کلیدواژه local در بش استفاده کنید تا دامنه دید متغیر به داخل همان تابع محدود بماند.

تابع package()

تابع package() برای نصب فایل‌ها در دایرکتوری‌ای استفاده می‌شود که دایرکتوری ریشه بسته ساخته‌شده خواهد بود و پس از تمام توابع اختیاری فهرست‌شده در زیر اجرا می‌شود. مرحله بسته‌بندی با fakeroot اجرا می‌شود تا از دسترسی‌های صحیح فایل در بسته نهایی اطمینان حاصل گردد. سایر توابع با هویت کاربری که makepkg را اجرا کرده اجرا خواهند شد. این تابع درون $srcdir اجرا می‌شود.

تابع verify()

یک تابع اختیاری verify() می‌تواند برای پیاده‌سازی اصالت‌سنجی دلخواه منابع تعیین شود. این تابع در صورت ناموفق بودن اعتبارسنجی باید یک کد خروج غیرصفر بازگرداند. این تابع پیش از استخراج منابع اجرا می‌شود. این تابع درون $startdir اجرا می‌شود.

تابع prepare()

یک تابع اختیاری prepare() می‌تواند مشخص شود که در آن عملیات آماده‌سازی منابع برای ساخت، مانند اعمال وصله‌ها (patching)، صورت می‌گیرد. این تابع پس از استخراج منابع و قبل از تابع build() اجرا می‌شود. تابع prepare() هنگامی که از استخراج منابع صرف‌نظر شود، نادیده گرفته خواهد شد. این تابع درون $srcdir اجرا می‌شود.

تابع build()

تابع اختیاری build() برای کامپایل و/یا تنظیم فایل‌های منبع جهت آماده‌سازی آن‌ها برای نصب توسط تابع package() استفاده می‌شود. این تابع درون $srcdir اجرا می‌شود.

تابع check()

یک تابع اختیاری check() می‌تواند تعیین شود که در آن ممکن است مجموعه آزمون‌های بسته اجرا گردند. این تابع میان توابع build() و package() اجرا می‌شود. اطمینان حاصل کنید هر دستور نامتعارفی که استفاده می‌شود توسط آرایه checkdepends پوشش داده شده باشد. این تابع درون $srcdir اجرا می‌شود.

تمامی متغیرهای فوق مانند $pkgname و $pkgver برای استفاده در توابع بسته‌بندی در دسترس هستند. علاوه بر این، makepkg متغیرهای زیر را تعریف می‌کند:

srcdir

شامل دایرکتوری‌ای است که makepkg تمامی فایل‌های منبع را در آن استخراج یا کپی می‌کند.

pkgdir

شامل دایرکتوری‌ای است که makepkg بسته نصب‌شده را در آن جمع‌آوری می‌کند. این دایرکتوری، دایرکتوری ریشه بسته ساخته‌شده شما خواهد شد. از این متغیر تنها باید درون تابع package() استفاده شود.

startdir

شامل مسیر مطلق دایرکتوری‌ای است که فایل PKGBUILD در آن قرار دارد، که معمولاً خروجی $(pwd) در زمان آغاز makepkg است. استفاده از این متغیر منسوخ شده و شدیداً توصیه نمی‌شود.

دستور makepkg از ساخت چندین بسته از یک فایل PKGBUILD منفرد پشتیبانی می‌کند. این کار با اختصاص آرایه‌ای از نام‌های بسته به دستورالعمل pkgname انجام می‌گیرد. هر بسته تفکیک‌شده از تابع بسته‌بندی متناظری با نام package_foo() استفاده می‌کند، که foo نام بسته تفکیک‌شده است.

تمام گزینه‌ها و دستورالعمل‌ها برای بسته‌های تفکیک‌شده به‌طور پیش‌فرض از مقادیر سراسری مشخص‌شده در PKGBUILD استفاده می‌کنند. با این حال، موارد زیر را می‌توان درون تابع بسته‌بندی هر بسته تفکیک‌شده بازنویسی (لغو) کرد: pkgdesc، arch، url، license، groups، depends، optdepends، provides، conflicts، replaces، backup، options، install، و changelog.

توجه داشته باشید makepkg در زمان بررسی نصب بودن وابستگی‌ها پیش از ساخت بسته و با --syncdeps، وابستگی‌های بسته تفکیک‌شده را لحاظ نمی‌کند. تمام بسته‌های مورد نیاز برای ساخت بسته باید در آرایه‌های سراسری depends و makedepends تعیین شوند.

یک دستورالعمل سراسری اختیاری هنگام ساخت بسته تفکیک‌شده در دسترس است:

pkgbase

نامی که برای اشاره به گروه بسته‌ها در خروجی makepkg و در نام‌گذاری بایگانی‌های صرفاً سورس استفاده می‌شود. در صورت مشخص نشدن، اولین عنصر آرایه pkgname استفاده خواهد شد. نویسه‌های معتبر برای این متغیر، حروف و ارقام و هر یک از نویسه‌های روبرو هستند: “@ . _ + -”. به علاوه، این متغیر نباید با خط تیره یا نقطه آغاز شود.

نرم‌افزار Pacman این توانایی را دارد که در زمان نصب، حذف یا ارتقای یک بسته، اسکریپتی ویژه آن بسته را ذخیره و اجرا کند. این به بسته امکان می‌دهد تا پس از نصب خود را پیکربندی نماید و در زمان حذف اقدامی معکوس انجام دهد.

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

به این اسکریپت‌ها یک یا دو “رشته نسخه کامل” ارسال می‌شود؛ رشته نسخه کامل بسته به صفر بودن یا نبودن epoch به فرمت pkgver-pkgrel یا epoch:pkgver-pkgrel است.

pre_install

دقیقاً پیش از استخراج فایل‌ها اجرا می‌شود. یک آرگومان فرستاده می‌شود: رشته نسخه کامل بسته جدید.

post_install

دقیقاً پس از استخراج فایل‌ها اجرا می‌شود. یک آرگومان فرستاده می‌شود: رشته نسخه کامل بسته جدید.

pre_upgrade

دقیقاً پیش از استخراج فایل‌ها اجرا می‌شود. دو آرگومان به این ترتیب فرستاده می‌شوند: رشته نسخه کامل بسته جدید، رشته نسخه کامل بسته پیشین.

post_upgrade

پس از استخراج فایل‌ها اجرا می‌شود. دو آرگومان به این ترتیب فرستاده می‌شوند: رشته نسخه کامل بسته جدید، رشته نسخه کامل بسته پیشین.

pre_remove

دقیقاً پیش از حذف فایل‌ها اجرا می‌شود. یک آرگومان فرستاده می‌شود: رشته نسخه کامل بسته پیشین.

post_remove

دقیقاً پس از حذف فایل‌ها اجرا می‌شود. یک آرگومان فرستاده می‌شود: رشته نسخه کامل بسته پیشین.

برای استفاده از این ویژگی، فایلی مانند pkgname.install بسازید و آن را در همان دایرکتوری اسکریپت PKGBUILD قرار دهید. سپس از دستورالعمل install استفاده کنید:

install=pkgname.install

اسکریپت نصب نیازی به مشخص شدن در آرایه source ندارد. فایل قالبی برای نصب به عنوان مرجع با تمام توابع قابل تعریف در /usr/share/pacman با نام proto.install موجود است.

ساخت نسخه توسعه‌ای از یک بسته با استفاده از منابع دریافت شده از سامانه کنترل نسخه (VCS) با تعیین منبع به این شکل فعال می‌شود:

source=('directory::url#fragment?query')

در حال حاضر makepkg از سامانه‌های کنترل نسخه Bazaar، Git، Subversion، Fossil و Mercurial پشتیبانی می‌کند. برای سایر سامانه‌های کنترل نسخه، کلون دستی مخازن بالادست باید درون تابع prepare() انجام گیرد.

برخی منابع VCS مانند Git از پین کردن چک‌اوت با جمع مقابله‌ای از محتوای آن با استفاده از امکان خروجی قطعی مانند “git archive” پشتیبانی می‌کنند.

نشانی منبع (URL) به چهار جزء تقسیم می‌شود:

directory

(اختیاری) نام دایرکتوری جایگزینی را برای دانلود منبع VCS توسط makepkg تعیین می‌کند.

url

نشانی URL مخزن VCS است. برای اینکه makepkg این مورد را به عنوان منبع VCS تشخیص دهد، باید نام سامانه VCS در پروتکل URL گنجانده شده باشد. اگر پروتکل شامل نام VCS نیست، می‌توان با افزودن پیشوند vcs+ به URL آن را اضافه کرد. به عنوان مثال، استفاده از یک مخزن Git روی بستر HTTPS دارای نشانی منبعی به این شکل خواهد بود: git+https://....

fragment

(اختیاری) امکان تعیین یک شماره ویرایش (revision) یا شاخه را برای واکشی توسط makepkg از VCS فراهم می‌کند. یک قطعه ساختاری به صورت type=value دارد؛ برای مثال جهت واکشی یک بازنگری مشخص، خط منبع به صورت source=(url#revision=123) خواهد بود. انواع قابل استفاده به سامانه VCS مورد استفاده بستگی دارند:

bzr

revision (برای جزئیات 'bzr help revisionspec' را ببینید)

fossil

branch, commit, tag

git

branch, commit, tag

hg

branch, revision, tag

svn

revision

query

(اختیاری) امکان مشخص کردن این نکته را فراهم می‌کند که آیا بازنگری‌های دریافت شده از VCS باید برای امضاهای PGP بررسی شوند یا خیر. خط منبع باید ساختاری مانند source=(url#fragment?signed) یا source=(url?signed#fragment) داشته باشد. در حال حاضر فقط توسط Git پشتیبانی می‌شود.

در ادامه یک نمونه PKGBUILD برای بسته patch آورده شده است. برای نمونه‌های بیشتر، فایل‌های ساخت بسته‌های توزیع خود را بررسی کنید.

# Maintainer: Joe User <joe.user@example.com>
pkgname=patch
pkgver=2.7.1
pkgrel=1
pkgdesc="A utility to apply patch files to original sources"
arch=('i686' 'x86_64')
url="https://www.gnu.org/software/patch/patch.html"
license=('GPL')
groups=('base-devel')
depends=('glibc')
makedepends=('ed')
optdepends=('ed: for "patch -e" functionality')
source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig})
sha256sums=('9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb'
            'SKIP')
build() {
        cd "$srcdir/$pkgname-$pkgver"
        ./configure --prefix=/usr
        make
}
package() {
        cd "$srcdir/$pkgname-$pkgver"
        make DESTDIR="$pkgdir/" install
}

makepkg(8), pacman(8), makepkg.conf(5)

برای اطلاعات به‌روز درباره pacman و ابزارهای مرتبط با آن، وبگاه pacman را در نشانی https://archlinux.org/pacman ببینید.

باگ؟ حتماً شوخی می‌کنید؛ هیچ باگی در این نرم‌افزار وجود ندارد. اما اگر بر حسب اتفاق اشتباهی رخ داده است، لطفاً آن را همراه با اطلاعات مشخصی مانند دستورات خط فرمان، ماهیت اشکال، و حتی در صورت لزوم پایگاه داده بسته‌ها، به بخش پیگیری اشکالات در نشانی https://gitlab.archlinux.org/pacman/pacman/-/issues ارسال نمایید.

نگه‌دارندگان کنونی:

•Allan McRae <allan@archlinux.org>
•Andrew Gregory <andrew.gregory.8@gmail.com>
•Morgan Adamiec <morganamilo@archlinux.org>

مشارکت‌کنندگان عمده پیشین:

•Judd Vinet <jvinet@zeroflux.org>
•Aurelien Foret <aurelien@archlinux.org>
•Aaron Griffin <aaron@archlinux.org>
•Dan McGee <dan@archlinux.org>
•Xavier Chantry <shiningxc@gmail.com>
•Nagy Gabor <ngaba@bibl.u-szeged.hu>
•Dave Reisner <dreisner@archlinux.org>
•Eli Schwartz <eschwartz@archlinux.org>

برای دسترسی به سایر مشارکت‌کنندگان، از دستور git shortlog -s در مخزن pacman.git استفاده کنید.

2026-05-06 Pacman 7.1.0