| APKBUILD(5) | File Formats Manual | APKBUILD(5) |
نام (NAME)
APKBUILD - اسکریپت ساخت بسته نرمافزاری Alpine
خلاصه ساختار (SYNOPSIS)
/usr/src/packages/<repo>/<package>/APKBUILD
توضیحات (DESCRIPTION)
فایل APKBUILD توسط ابزارهایی مانند abuild(1) برای ساخت بسته جهت نصب نهایی توسط مدیر بسته apk(8) استفاده میشود. این فایل متادادههایی از قبیل نام بسته، اطلاعات نسخه، مجوز سورس و اطلاعات تماس توسعهدهنده را تعریف میکند. علاوه بر این، شامل دستورات لازم برای ساخت، آزمایش و نصب بسته است.
قالب APKBUILD مشابه یک اسکریپت شل معمولی است؛ شما متغیرهای از پیش تعریفشده را مقداردهی کرده و توابع از پیش تعریفشده را پیادهسازی میکنید، و ابزار abuild(1) (یا ابزارهای مشابه) از آنها برای ایجاد بسته استفاده خواهد کرد.
متغیرها (VARIABLES)
متغیرهای الزامی (Required Variables)
متغیرهای زیر باید در تمام فایلهای APKBUILD تنظیم شوند:
pkgname
کتابخانههای زبانهای اسکریپتنویسی باید پیشوندی پیش از نام کتابخانه داشته باشند که بیانگر زبان مربوطه باشد. چنین پیشوندهایی شامل lua-، perl-، py- و rb- هستند. همه زبانها از پیشوند استفاده نمیکنند. برای یک فهرست قطعی، به فایل PREFIXES در دایرکتوری ریشه مخزنی که برای بستهبندی استفاده میکنید مراجعه فرمایید.
pkgver
پس از عدد نهایی (و حرف منفرد اختیاری)، ممکن است یک یا چند پسوند اضافه شود که باید یک زیرخط (_) به همراه یکی از موارد alpha، beta، pre، rc، cvs، svn، git، hg یا p باشد، و بهصورت اختیاری یک عدد دیگر نیز به دنبال آن بیاید. اگر پسوند یکی از مقادیر alpha، beta، pre یا rc باشد، قدیمیتر از نسخه بدون این پسوند در نظر گرفته میشود؛ اگر پسوند یکی از مقادیر cvs، svn، git، hg یا p باشد، جدیدتر از نسخه بدون این پسوند در نظر گرفته میشود. تمامی مثالهای زیر نسخههای معتبر هستند، به ترتیب از کمترین به بیشترین:
1.0, 1.1_alpha2, 1.1.3_pre, 1.1.3_pre_p2, 1.1.3, 1.1.3_hg, 1.2, 1.2a, 1.2b
pkgrel
pkgdesc
url
arch
در صورتی که بسته حاوی هیچ فایل باینری وابسته به معماری نیست - یعنی فایلهایی که فقط برای معماری مقصد کامپایل شده باشند - میتوانید از "noarch" استفاده کنید. چنین بستههایی ممکن است شامل بستههای پایتون خالص، بستههای اسکریپت شل و فایلهای JAR باشند. اگر مطمئن نیستید این موضوع به چه معناست، استفاده از "all" ایمن و بیخطر است.
معماریها را میتوان با استفاده از نویسه ! نفی کرد تا از فهرست معماریهای پشتیبانیشده خارج شوند. به عنوان مثال، arch="all !ppc64le" به این معنی است که بسته اجازه دارد بر روی تمامی معماریها به جز معماری ppc64le ساخته شود.
license
source
متغیرهای اختیاری (Optional Variables)
متغیرهای زیر الزامی نیستند، اما میتوانند در هر فایل APKBUILD تنظیم شوند.
checkdepends
depends
install
install_if
install_if="openrc ${subpkgname%-openrc}=$pkgver-r$pkgrel"
که به این معنی است که زیربسته OpenRC به طور خودکار نصب خواهد شد اگر هم OpenRC و هم بسته مبدأ (origin) روی همان سیستم نصب شده باشند.
makedepends
maintainer
pkggroups
pkgusers
provides
مشخص کردن نام فراهمکننده همراه با نسخه مانند foobar=1.2 باعث میشود بسته به عنوان یک «نام مستعار» (alias) از foobar نسخه 1.2 عمل کند. در صورتی که کاربر دستوری مانند `apk add foobar` یا مشابه آن را اجرا کند، این بسته به صورت خودکار نصب میشود و با بستهای به نام foobar تداخل خواهد داشت.
مشخص کردن نام فراهمکننده بدون نسخه مانند baz باعث میشود بسته یک فراهمکننده «مجازی» به نام baz ارائه دهد. چندین بسته با فراهمکننده مجازی یکسان میتوانند روی یک سیستم نصب شوند؛ با این حال، اگر کاربری دستور `apk add baz` را اجرا کند، فهرستی از بستههای ارائهدهنده baz به او نمایش داده میشود و باید یکی را انتخاب و نصب نماید.
provider_priority
replaces
replaces_priority
subpackages
بهطور پیشفرض، تابع تفکیک همان بخش پایانی نام بسته پس از آخرین خط تیره است. بنابراین برای $pkgname-foo و libfoo تابع تفکیک به ترتیب foo و libfoo خواهد بود. نام سفارشی تابع تفکیک را میتوان با استفاده از foo:funcname تعیین کرد. مشابه تابع package، تابع تفکیک باید پس از ایجاد $subpkgdir، فایلها را از $pkgdir (که دایرکتوری کاری پیشفرض است) یا $srcdir به $subpkgdir منتقل کند.
بهطور پیشفرض، مقدار arch مشخص میکند که آیا یک زیربسته مستقل از معماری در نظر گرفته شود یا خیر. این رفتار را میتوان با استفاده از foo::noarch یا foo:funcname:all تغییر داد.
هنگامی که چندین زیربسته مشخص میشوند، توابع تفکیک آنها به ترتیبی که در subpackages قید شدهاند اجرا خواهند شد.
triggers
$pkgname.trigger=/usr/share/man:/usr/local/share/man
این دستور اسکریپت محرک را برای $pkgname هر زمان که فایلهایی در /usr/share/man یا /usr/local/share/man ایجاد، اصلاح یا حذف شوند، اجرا خواهد کرد.
options
!archcheck
bigdocs
charset.alias
!check
checkroot
!dbg
!fhs
ldpath-recursive
lib64
libtool
net
!strip
suid
setcap
textrels
toolchain
!tracedeps
متغیرهای خودکار (Automatic Variables)
متغیرهای زیر توسط abuild(1) برای شما تعریف میشوند، اما در صورت لزوم میتوان مقدار آنها را بازتعریف کرد.
builddir
pkgdir
srcdir
startdir
subpkgdir
متغیرهای ویژه (Special Variables)
متغیرهای زیر تنها در شرایط خاص به کار میروند، و بسته به نحوه استفاده و محتوای سایر متغیرها ممکن است الزامی یا اختیاری باشند.
depends_dev
depends_doc
depends_libs
depends_openrc
depends_static
depends_systemd
depends_udev
giturl
توابع (FUNCTIONS)
توابع مشخصشده در اینجا ممکن است در هر فایل APKBUILD حضور داشته باشند، اما به استثنای تابع package، اکیداً الزامی نیستند.
fetch
unpack
prepare
یک تابع سفارشی prepare ممکن است update_config_sub یا update_config_guess را به ترتیب برای بهروزرسانی فایلهای config.sub و config.guess فراخوانی کند.
build
check
package
اسکریپتهای نصب (Install Scripts)
یک اسکریپت نصب زمانی اجرا میشود که عملیاتی بر روی بسته توسط apk(8) صورت گیرد. اسکریپت نصب باید به زبان شل نوشته شود و اعلان مفسر #!/bin/sh به عنوان خط نخست آن قرار گیرد. متغیر install باید حاوی اسکریپتهای نصب مورد نیاز بسته باشد.
اسکریپت نصب درون فایلسیستم ریشهای که بسته در آن نصب میشود اجرا خواهد شد. یک آرگومان منفرد به اسکریپتهای فراخوانی ارسال میشود که نسخه بستهای است که در حال حاضر نصب (یا حذف) میشود. اسکریپتهای پیش از ارتقا (pre-upgrade) و پس از ارتقا (post-upgrade) یک آرگومان دوم اضافی نیز خواهند داشت که نسخه بسته پیش از فرآیند ارتقا را مشخص میکند.
عملیاتهای مختلفی که ممکن است اسکریپتهای نصب برای آنها مشخص شوند به شرح زیر هستند:
$pkgname.pre-install
$pkgname.post-install
$pkgname.pre-upgrade
$pkgname.post-upgrade
$pkgname.pre-deinstall
$pkgname.post-deinstall
نکات پیادهسازی (IMPLEMENTATION NOTES)
در حال حاضر، فایلهای APKBUILD مانند اسکریپتهای شل معمولی source میشوند. این شیوه ممکن است در آینده تغییر یابد.
سازگاری (COMPATIBILITY)
ابزار abuild(1) به شکلی که توسط Alpine Linux توزیع شده است از شل BusyBox Almquist استفاده میکند، بخشی از busybox(1) که در حال حاضر فاقد مستندات است. این شل عمدتاً با استاندارد IEEE Std 1003.2 (“POSIX.2”) و به همراه برخی افزونههای شبیه به bash سازگار است. ابزار abuild(1) به شکلی که توسط Adélie توزیع شده است از /bin/sh ترجیحی کاربر استفاده میکند که معمولاً bash(1) است.
همچنین ببینید (SEE ALSO)
مرجع مجوز SPDX (در وب در https://spdx.org/licenses)، abuild(1)، newapkbuild(1)، apk(8)، buildrepo(1)، ap(1)، checkapk(1).
تاریخچه (HISTORY)
قالب APKBUILD و ابزار abuild(1) نخستین بار در Alpine Linux 1.9 پدیدار شدند.
نویسندگان (AUTHORS)
Timo Teräs <timo.teras@iki.fi>
Natanael Copa <ncopa@alpinelinux.org>
مستندات:
A. Wilcox <awilfox@adelielinux.org>
| 2026-06-05 |