apk-package(5) File Formats Manual apk-package(5)

apk-package - قالب بسته نرم‌افزاری Alpine (apk)

متادیتای بسته apk شامل زیرساختار متادیتای اطلاعات بسته (package info) و فیلدهای متادیتای گوناگون دیگر است.

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

بقیه متادیتای بسته درون خود بسته و پایگاه داده بسته‌های نصب‌شده نگهداری می‌شود. این فیلدها تنها در صورتی که بسته نصب شده باشد در دسترس هستند.

ادامه این سند هر فیلد را با نشانه‌گذاری زیر توضیح می‌دهد: v3-field-name (v2-pkginfo-field-name, v2-index-character).

در صورتی که APK از فیلدی برای هدفی معنادار استفاده کند، صراحتاً ذکر شده است. برخی فیلدها در سازوکار درونی APK استفاده نمی‌شوند و از دید APK تنها قطعه‌داده‌هایی (blobs) مرتبط با نامی مشخص هستند که برای کاربر معنا دارند.

APK در حالت خروجی با جزئیات (verbose) معمولاً الحاق name-version را نمایش می‌دهد. قاعده زیر درباره چگونگی تعریف شماره نسخه معتبر، این امکان را فراهم می‌کند که بتوان این قالب را با یافتن آخرین وقوع -[0-9] به طور یکتا مجدداً به دو مؤلفه تفکیک کرد. خط تیره (dash) در ابتدای این تطابق، نقطه جداسازی است: بخش اول name و بخش دوم version است.

متأسفانه نمی‌توان استنباط کرد که آیا یک رشته معین در قالب name است یا name-version (زیرا خود name نیز می‌تواند شامل -[:digit:] باشد).

name (pkgname, P)

نام بسته. این نام اصلی بسته است. نام فقط باید شامل نویسه‌های روبرو باشد: [a-zA-Z0-9._+-]. نام باید با یک نویسه الفبارقمی [a-zA-Z0-9] آغاز شود.

version (pkgver, V)

نسخه بسته. مشخصات نسخه Alpine در ابتدا از مشخصات نسخه بسته Gentoo پیروی می‌کرد.

در حال حاضر مشخصات نسخه APK به این صورت است: number{.number}...{letter}{_suffix{number}}...{~hash}{-r#}

هر مؤلفه number دنباله‌ای از ارقام (0-9) است.

بخش letter تنها می‌تواند پس از پایان تمام مؤلفه‌های عددی نسخه بیاید. letter یک حرف کوچک منفرد الفبا (a-z) است.

به‌صورت اختیاری یک یا چند مؤلفه _suffix{number} می‌تواند پس از آن بیاید. فهرست پسوندهای معتبر (و ترتیب مرتب‌سازی آن‌ها) عبارت است از: alpha, beta, pre, rc, <no suffix>, cvs, svn, git, hg, p.

پس از این می‌تواند یک {~hash} اختیاری برای مشخص کردن هش کامیت که بسته از روی آن ساخته شده است بیاید. این مقدار می‌تواند رشته‌ای با هر طولی از ارقام هگزادسیمال کوچک (0-9a-f) باشد.

در نهایت یک مؤلفه اختیاری ساخت بسته -r{number} می‌تواند بیاید.

hashes (C)

هش متادیتای بسته. این فیلد تنها در رونوشت ایندکس اطلاعات بسته وجود دارد.

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

  • احراز اصالت و اعتبارسنجی بسته در برابر یک ایندکس
  • تشخیص این که آیا بسته دقیقاً یکسانی در چندین مخزن موجود است یا خیر
  • یکتا کردن نام فایل بسته هنگام ذخیره رونوشتی در حافظه موقت (cache) بسته‌ها

description (pkgdesc, T)

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

arch (arch, A)

معماری بسته که بسته برای آن ساخته شده است. در حال حاضر apk از معماری‌های پیش‌فرض زیر استفاده می‌کند:
  • noarch
  • aarch64
  • arc700
  • archs
  • armeb
  • armel
  • armhf
  • armv7
  • mips
  • mipsel
  • mips64
  • mips64el
  • ppc
  • ppc64
  • ppc64le
  • riscv32
  • riscv64
  • s390x
  • sh2eb
  • sh3
  • sh4
  • loongarchx32
  • loongarch64
  • wasi32
  • wasi64
  • x86
  • x86_64

فیلد arch می‌تواند بخشی از نشانی URL دانلود مخزن باشد. برای جزئیات بیشتر به apk-mkndx(8) و --pkgname-spec مراجعه کنید.

بسته واجد شرایط نصب نیست مگر اینکه arch با یکی از مقادیر موجود در etc/apk/arch مطابقت داشته باشد.

license (license, L)

مجوز بسته. این فیلد اطلاع‌رسانی برای کاربر است و APK آن را اعتبارسنجی نمی‌کند یا در سازوکار درونی به کار نمی‌گیرد. توصیه می‌شود از توصیف‌کننده‌های استاندارد مجوز مانند SPDX استفاده شود.

origin (origin, o)

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

maintainer (maintainer, m)

اطلاعات نگهدارنده بسته. معمولاً نام و نشانی ایمیل است.

url (url, U)

نشانی URL بسته. پیوندی به وب‌سایت حاوی اطلاعات مربوط به بسته.

repo-commit (commit, c)

هش کامیت مخزن که بسته از روی آن ساخته شده است.

build-time (builddate, t)

برچسب زمانی یونیکس هنگامی که بسته ساخته شد. فرمان apk fetch می‌تواند بسته‌ها را برای دانلود بر اساس زمان ساخت پالایش کند. این قابلیت برای دانلود نماگرفت‌های تدریجی مخزن مفید است.

installed-size (size, I)

تخمین مقدار فضای دیسک مورد نیاز هنگام نصب بسته. APK این اطلاعات را در بخش‌های گوناگونی نمایش می‌دهد و تغییرات میزان مصرف فضای دیسک در تراکنش ثبت را بر مبنای این اطلاعات پایه‌گذاری می‌کند.

بسته‌هایی با اندازه نصب‌شده صفر، شبه‌بسته‌هایی هستند که به جز داده‌های ایندکس‌شده هیچ داده دیگری ندارند. APK ممکن است تصمیم بگیرد بسته را دانلود نکند و همه چیز را بر اساس داده‌های موجود در ایندکس مدیریت کند.

file-size (S)

این فیلد تنها در رونوشت ایندکس مخزن از اطلاعات بسته معنادار و موجود است. ایندکس APK این فیلد را در زمان ایندکس‌گذاری با اندازه فایل بسته (.apk) پر می‌کند. از لحاظ فنی این فیلد باید فیلدی مختص به ایندکس مخزن باشد و چنین تغییری ممکن است در آینده انجام گیرد.

provider-priority (provider_priority, k)

اولویت نصب پیش‌فرض را برای نام‌های بسته فاقد نسخه که بسته در فیلد provides فهرست می‌کند، تعیین می‌کند. به‌طور پیش‌فرض، یک provides فاقد نسخه به‌صورت خودکار برای نصب انتخاب نخواهد شد. اما تعیین provider-priority این انتخاب خودکار را فعال می‌سازد و برای تعیین اینکه در صورت ارائه نام بسته بدون نسخه یکسان توسط چندین بسته، کدام یک نصب شود به کار می‌رود.

depends (depend, D)

فهرست وابستگی‌های بسته. نصب این بسته مستلزم آن است که APK ابتدا تمام فهرست وابستگی‌های آن را برآورده کند.

وابستگی‌ها توسط اجزای مختلف APK استفاده می‌شوند:

  • حل‌کننده تلاش خواهد کرد راه‌حلی بیابد که تمام وابستگی‌های بسته (و همچنین وابستگی‌های world) برآورده شوند
  • هنگامی که apk در حال ثبت تغییرات در سیستم فایل است، بسته‌ها را به ترتیبی نصب یا حذف می‌کند که تمامی وابستگی‌های بسته برآورده شوند (با فرض نبود وابستگی‌های دوری)
  • هنگامی که apk اسکریپت‌های راه‌انداز بسته را اجرا می‌کند، آن‌ها را به گونه‌ای مرتب می‌سازد که راه‌اندازهای تمام وابستگی‌ها پیش از اجرای راه‌انداز این بسته اجرا شوند

provides (provides, p)

فهرست نام‌های بسته (و به‌طور اختیاری نسخه آن) که این بسته علاوه بر نام اصلی و نسخه خود فراهم می‌کند. نام ارائه‌شده می‌تواند علاوه بر این شامل نویسه‌های ویرگول (,)، قلاب ([]), دونقطه (:) و اسلش (/) باشد. این امکان اجازه می‌دهد از فضاهای نام برای نام‌های تولیدشده خودکار استفاده شود.

اگر نام فراهم‌شده شامل شماره نسخه باشد:

  • حل‌کننده با آن به گونه‌ای رفتار می‌کند که گویی یک بسته واقعی با نام ارائه‌شده نصب شده است
  • بسته به‌طور خودکار توسط هر چیزی که به نام ارائه‌شده وابسته باشد قابل انتخاب خواهد بود
  • بسته به‌طور خودکار تنها مالک ممکن برای نام ارائه‌شده خواهد شد
  • بسته به‌طور خودکار با هر بسته‌ای که نام اصلی یا نام ارائه‌شده یکسان داشته باشد تداخل خواهد داشت

اگر نام فراهم‌شده شامل نسخه نباشد:

•
بسته صرفاً به دلیل وجود وابستگی به نام ارائه‌شده، به‌طور خودکار برای نصب انتخاب نمی‌شود
  • تعیین provides_priority امکان انتخاب خودکار را فراهم می‌کند
  • در غیر این صورت از کاربر انتظار می‌رود یکی از نام‌های مشخص بسته را در world که اجازه انتخاب می‌دهد به صورت دستی برگزیند
  • بسته مالک نام ارائه‌شده تلقی نمی‌شود
  • چندین بسته که نام یکسانی را بدون نسخه ارائه می‌دهند مجاز هستند به طور هم‌زمان نصب شوند
  • برنامه apk از نظر داخلی، نام بسته‌ای را که فقط ارائه‌دهندگان بدون نسخه دارد یک «نام بسته مجازی» در نظر می‌گیرد

replaces (r)

فهرست نام بسته‌هایی که این بسته مجاز است فایل‌های آن‌ها را جایگزین کند. معمولاً اگر چندین بسته شامل فایل یکسانی باشند، apk آن را خطا در نظر می‌گیرد. تعیین اعلان replaces به بسته اجازه می‌دهد فایل‌های بسته‌های فهرست‌شده را بدون هشدار بازنویسی کند.

install-if (install_if, i)

در صورتی که تمام وابستگی‌های install-if برآورده شوند، APK به‌طور خودکار بسته را انتخاب و نصب خواهد کرد. باید دست‌کم دو وابستگی در وابستگی‌های install_if وجود داشته باشد و یکی از آن‌ها باید دارای عملگر برابری (=) باشد.

کاربرد متداول این است که یک شبه‌بسته مخزن سراسری وجود دارد؛ مانند docs. و سپس چندین بسته وجود دارند که دارای یک زیربسته مانند package-doc هستند. این بسته‌های -doc می‌توانند قاعده‌ای در install-if داشته باشند تا به‌طور خودکار نصب شوند؛ مانند «package=$name-$ver docs» تا در صورت نصب بسته اصلی و شبه‌بسته مستندات، بسته مستندات نیز به‌طور خودکار نصب گردد.

recommends

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

layer

یک عدد صحیح که لایه پایگاه داده‌ای را که این بسته در آن نصب می‌شود مشخص می‌کند:
  • مقدار root (0) پیش‌فرض است و بیانگر سیستم فایل معمولی است
  • مقدار uvol (1) نشان می‌دهد که بسته حاوی یک تصویر uvol است و باید از مدیر حجم uvol برای نصب تصویرها استفاده شود

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

tags

فهرست برچسب‌هایی که این بسته با آن‌ها مطابقت خواهد داشت. برنامه apk با این برچسب‌ها کاری انجام نمی‌دهد، اما توزیع‌کنندگان می‌توانند برچسب‌های دلخواه خود را برای پیوند دادن متادیتای سفارشی به بسته تعریف کنند. این برچسب‌ها را می‌توان با استفاده از اپلت apk-query(8) جویا شد و تخلیه کرد. هر برچسب شامل نویسه‌های روبرو است: [a-zA-Z0-9._+-,:/[]=]. برچسب‌های سفارشی باید شامل پیشوند ویژه توزیع یا ارائه‌دهنده باشند؛ مانند «alpine:».

info

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

paths

شامل فهرست تمام مسیرها و فایل‌ها به همراه متادیتای مختص فایل (مالک، دسترسی‌ها، ویژگی‌های گسترده یا xattrs، هش‌های محتوا) است.

scripts

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

انواع اسکریپت‌های تعریف‌شده کنونی و آرگومان‌های آن‌ها:

  • trigger <matched-trigger>...
  • pre-install <new-version>
  • post-install <new-version>
  • pre-deinstall <old-version>
  • post-deinstall <old-version>
  • pre-upgrade <new-version> <old-version>
  • post-upgrade <new-version> <old-version>

همچنین برای متغیرهای محیطی بخش ENVIRONMENT را در apk(8) ببینید.

triggers

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

الگوهای راه‌انداز ممکن است با + آغاز شوند؛ به این معنی که مسیر تنها زمانی باید به اسکریپت راه‌انداز منتقل شود که دایرکتوری در طول تراکنش تغییر یافته باشد. این پیشوند روی فراخوانی شدن یا نشدن راه‌انداز تأثیری ندارد. بدون این پیشوند، در صورت وجود مسیر در سیستم و به‌روزرسانی یا نصب مجدد بسته‌ای که اسکریپت راه‌انداز را ارائه می‌دهد نیز مسیر منتقل خواهد شد.

replaces-priority

اگر دو بسته هر دو حاوی فایل یکسانی باشند و هر دو دارای دستور replaces باشند که به آن‌ها اجازه بازنویسی بسته‌ها را می‌دهد، این اولویت تعیین می‌کند که فایل کدام بسته تقدم دارد.

abuild(1), apk(8), apk-v2(5), apk-v3(5)

2026-08-31