| PKGBUILD(5) | راهنمای Pacman | PKGBUILD(5) |
نام (NAME)
PKGBUILD - پرونده توصیف ساخت بسته
خلاصه دستور (SYNOPSIS)
PKGBUILD
توضیحات (DESCRIPTION)
این صفحه راهنما قوانین عمومی درباره PKGBUILDها را توصیف میکند. پس از نگارش یک PKGBUILD، بسته واقعی با استفاده از makepkg ساخته شده و با pacman نصب میشود.
نکته
یک نمونه PKGBUILD، جهت ارجاع و راهنمایی، در /usr/share/pacman در کنار فایلهای نمونه دیگر مانند اسکریپت نصب قرار دارد. میتوانید فایل PKGBUILD.proto ارائهشده را در دایرکتوری ساخت بسته جدید کپی کرده و متناسب با نیازهای خود آن را سفارشیسازی کنید.
گزینهها و دستورالعملها (OPTIONS AND DIRECTIVES)
در ادامه فهرستی از گزینهها و دستورالعملهای استاندارد موجود برای استفاده در یک PKGBUILD آورده شده است. همه اینها توسط makepkg شناخته و تفسیر میشوند و بیشتر آنها مستقیماً به بسته ساختهشده منتقل خواهند شد. فیلدهای الزامی برای یک PKGBUILD با حداقل کارایی عبارتند از pkgname، pkgver، pkgrel و arch.
اگر نیاز به ایجاد متغیرهای سفارشی برای استفاده در فرایند ساخت خود دارید، توصیه میشود نام آنها را با یک _ (زیرخط) آغاز کنید. این کار از هرگونه تداخل نام احتمالی با متغیرهای درونی makepkg جلوگیری میکند. برای مثال، برای ذخیره نسخه پایه هسته در یک متغیر، از متغیری مشابه $_basekernver استفاده کنید.
pkgname (array)
pkgver
متغیر pkgver را میتوان با ارائه یک تابع pkgver() در PKGBUILD که نسخه جدید بسته را خروجی میدهد، بهطور خودکار بهروزرسانی کرد. این تابع پس از دریافت و استخراج منابع و اجرای تابع prepare() (در صورت وجود) اجرا میشود، بنابراین میتواند از آن فایلها برای تعیین pkgver جدید استفاده کند. این قابلیت بیش از همه در هنگام استفاده از منابع سامانههای کنترل نسخه مفید است (زیر را ببینید).
pkgrel
epoch
pkgdesc
url
license (array)
install
changelog
source (array)
منابع اضافی ویژه هر معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند source_x86_64=(). باید یک آرایه یکپارچگی متناظر حاوی جمعهای مقابلهای وجود داشته باشد، مانند cksums_x86_64=().
همچنین امکان تغییر نام فایل بارگیریشده وجود دارد که هنگام برخورد با نشانیهای وب نامتعارف و برای مدیریت چندین فایل منبع با نام یکسان مفید است. نحو استفاده: source=('filename::url').
همچنین makepkg از ساخت نسخههای در حال توسعه بستهها با استفاده از منابع دانلودشده از سامانههای کنترل نسخه (VCS) پشتیبانی میکند. برای اطلاعات بیشتر، استفاده از منابع سامانه کنترل نسخه در زیر را ببینید.
فایلهای موجود در آرایه source با پسوندهای .sig, .sign یا .asc توسط makepkg به عنوان امضاهای PGP شناخته میشوند و بهطور خودکار برای تایید صحت فایل منبع متناظر استفاده خواهند شد.
validpgpkeys (array)
تنها اثر انگشتهای کامل پذیرفته میشوند. آنها باید با حروف بزرگ باشند و نباید دارای نویسههای فاصله سفید باشند.
noextract (array)
cksums (array)
md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)
groups (array)
arch (array)
backup (array)
depends (array)
اگر نام وابستگی شبیه به یک کتابخانه باشد (به .so ختم شود)، makepkg تلاش خواهد کرد یک باینری وابسته به کتابخانه را در بسته ساختهشده پیدا کند و نسخه مورد نیاز باینری را ضمیمه نماید. افزودن دستی نسخه، تشخیص خودکار را غیرفعال میکند.
وابستگیهای اضافی وابسته به معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند depends_x86_64=().
makedepends (array)
پیشنیازهای ساخت اضافی مخصوص معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند makedepends_x86_64=().
checkdepends (array)
وابستگیهای آزمون اضافی وابسته به معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند checkdepends_x86_64=().
optdepends (array)
optdepends=('python: for library bindings')
وابستگیهای اختیاری اضافی وابسته به معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند optdepends_x86_64=().
conflicts (array)
تداخلهای اضافی وابسته به معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند conflicts_x86_64=().
provides (array)
تامینهای دارای نسخه نیز به فرمت name=version امکانپذیر است. برای نمونه، dcron میتواند cron=2.0 را برای برآورده کردن وابستگی cron>=2.0 سایر بستهها تامین کند. تامینهای شامل عملگرهای > و < نامعتبر هستند، زیرا فقط نسخههای خاصی از یک بسته را میتوان تامین کرد.
اگر نام تامین شبیه یک کتابخانه باشد (با .so پایان یابد)، makepkg تلاش خواهد کرد کتابخانه را در بسته ساختهشده پیدا کرده و نسخه مناسب را ضمیمه کند. افزودن دستی نسخه، این تشخیص خودکار را غیرفعال میکند.
تامینهای اضافی مخصوص معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند provides_x86_64=().
replaces (array)
در حال حاضر Sysupgrade تنها عملیات pacman است که از این فیلد استفاده میکند. همگامسازی یا ارتقای عادی از مقدار آن استفاده نخواهد کرد.
جایگزینیهای اضافی وابسته به معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند replaces_x86_64=().
options (array)
strip
docs
libtool
staticlibs
emptydirs
zipman
ccache
distcc
buildflags
makeflags
debug
lto
گزینههای اضافی وابسته به معماری را میتوان با افزودن یک زیرخط و نام معماری اضافه کرد، مانند options_x86_64=().
xdata (array)
تمامی ورودیهای این آرایه باید ساختار key=value داشته باشند، که در آن key یک رشته غیرخالی دلخواه است و value نباید دارای علامت مساوی باشد. همچنین کلید “pkgtype” برای برنامه makepkg رزرو شده است.
توابع بستهبندی (PACKAGING FUNCTIONS)
علاوه بر دستورالعملهای بالا، PKGBUILDها به مجموعهای از توابع نیازمندند که دستورالعملهای ساخت و نصب بسته را ارائه دهند. در حالت کمینه، PKGBUILD باید حاوی یک تابع package() باشد که تمام فایلهای بسته را درون دایرکتوری بستهبندی نصب کند، به همراه توابع اختیاری prepare()، build() و check() که برای ایجاد آن فایلها از سورس استفاده میشوند.
این توابع مستقیماً توسط makepkg خوانده (source) و اجرا میشوند، بنابراین هر امکانی که بش یا سیستم ارائه میدهد برای استفاده در اینجا مهیا است. دقت فرمایید که هر دستور نامتعارفی که استفاده میشود تحت پوشش آرایه makedepends قرار گیرد.
اگر متغیرهای اختصاصی خود را در هر یک از این توابع ایجاد میکنید، توصیه میشود از کلیدواژه local در بش استفاده کنید تا دامنه دید متغیر به داخل همان تابع محدود بماند.
تابع package()
تابع verify()
تابع prepare()
تابع build()
تابع check()
تمامی متغیرهای فوق مانند $pkgname و $pkgver برای استفاده در توابع بستهبندی در دسترس هستند. علاوه بر این، makepkg متغیرهای زیر را تعریف میکند:
srcdir
pkgdir
startdir
تقسیم بسته (PACKAGE SPLITTING)
دستور 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
اسکریپتنویسی نصب/ارتقا/حذف (INSTALL/UPGRADE/REMOVE SCRIPTING)
نرمافزار 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 موجود است.
استفاده از منابع سامانه کنترل نسخه (USING VCS SOURCES)
ساخت نسخه توسعهای از یک بسته با استفاده از منابع دریافت شده از سامانه کنترل نسخه (VCS) با تعیین منبع به این شکل فعال میشود:
source=('directory::url#fragment?query')
در حال حاضر makepkg از سامانههای کنترل نسخه Bazaar، Git، Subversion، Fossil و Mercurial پشتیبانی میکند. برای سایر سامانههای کنترل نسخه، کلون دستی مخازن بالادست باید درون تابع prepare() انجام گیرد.
برخی منابع VCS مانند Git از پین کردن چکاوت با جمع مقابلهای از محتوای آن با استفاده از امکان خروجی قطعی مانند “git archive” پشتیبانی میکنند.
نشانی منبع (URL) به چهار جزء تقسیم میشود:
directory
url
fragment
bzr
fossil
git
hg
svn
query
مثالها (EXAMPLES)
در ادامه یک نمونه 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
}
همچنین ببینید (SEE ALSO)
makepkg(8), pacman(8), makepkg.conf(5)
برای اطلاعات بهروز درباره pacman و ابزارهای مرتبط با آن، وبگاه pacman را در نشانی https://archlinux.org/pacman ببینید.
اشکالات (BUGS)
باگ؟ حتماً شوخی میکنید؛ هیچ باگی در این نرمافزار وجود ندارد. اما اگر بر حسب اتفاق اشتباهی رخ داده است، لطفاً آن را همراه با اطلاعات مشخصی مانند دستورات خط فرمان، ماهیت اشکال، و حتی در صورت لزوم پایگاه داده بستهها، به بخش پیگیری اشکالات در نشانی https://gitlab.archlinux.org/pacman/pacman/-/issues ارسال نمایید.
نویسندگان (AUTHORS)
نگهدارندگان کنونی:
مشارکتکنندگان عمده پیشین:
برای دسترسی به سایر مشارکتکنندگان، از دستور git shortlog -s در مخزن pacman.git استفاده کنید.
| 2026-05-06 | Pacman 7.1.0 |