FLATPAK-BUILDER(1) flatpak builder FLATPAK-BUILDER(1)

flatpak-builder - کمک به ساخت وابستگی‌های برنامه

flatpak-builder [OPTION...] DIRECTORY MANIFEST

flatpak-builder --run [OPTION...] DIRECTORY MANIFEST COMMAND

flatpak-builder --show-deps [OPTION...] MANIFEST

flatpak-builder --show-manifest [OPTION...] MANIFEST

دستور flatpak-builder پوسته‌ای (wrapper) بر روی دستور flatpak build است که فرآیند ساخت برنامه‌ها و وابستگی‌های آن‌ها را خودکار می‌کند. این یکی از گزینه‌هایی است که می‌توانید برای ساخت برنامه‌ها به کار ببرید.

هدف flatpak-builder این است که تا جای ممکن دانش مربوط به نحوهٔ ساخت پودمان‌ها (modules) را به خود پروژه‌های بالادستی منتقل کند. این کار با فرض این‌که پودمان‌ها از Build API مشخص‌شده در https://github.com/cgwalters/build-api پیروی می‌کنند انجام می‌شود. این اساساً بدان معناست که از الگوی ./configure && make && make install با یک اسکریپت اختیاری autogen پیروی می‌کند. اگر پروژهٔ بالادستی از این API پیروی نمی‌کند، می‌توانید با افزودن وصله‌ها (patches) و فایل‌های اضافی آن را سازگار کنید.

اجرای flatpak-builder در مراحل زیر پیش می‌رود که هر یک با جزئیات در قالب json در MANIFEST مشخص شده است:

•بارگیری تمام منابع
•مقداردهی اولیهٔ دایرکتوری برنامه با flatpak build-init
•ساخت و نصب هر پودمان با flatpak build
•پاک‌سازی درخت نهایی ساخت با حذف فایل‌های ناخواسته و برای مثال پیراستن باینری‌ها (stripping binaries)
•نهایی‌سازی دایرکتوری برنامه با flatpak build-finish

پس از این، ساخت برنامه را در DIRECTORY خواهید داشت که می‌توانید آن را با دستور flatpak build-export به یک مخزن صادر (export) کنید. اگر از گزینهٔ --repo استفاده کنید، flatpak-builder در پایان فرآیند ساخت، عمل خروجی گرفتن را برای شما انجام می‌دهد. هنگامی که flatpak-builder خروجی می‌گیرد، مانیفست مورد استفاده برای ساخت را نیز در /app/manifest.json ذخیره می‌کند. این مانیفست به‌اصطلاح «حل‌شده» (resolved) است؛ یعنی نام شاخه‌های git با شناسه‌های کامیت واقعی استفاده‌شده در ساخت جایگزین می‌شوند.

در هر یک از مراحل بالا، flatpak نتیجه را در حافظهٔ موقت (cache) ذخیره می‌کند و اگر همان فایل را دوباره بسازید، از نخستین مرحله‌ای که چیزی در آن تغییر کرده آغاز به کار خواهد کرد. برای نمونه، نخستین منبع تحت کنترل نسخه‌ای که کامیت‌های جدیدی به آن افزوده شده، یا نخستین پودمانی که تغییراتی در فایل MANIFEST آن موجب دگرگونی محیط ساخت شده است. این امر flatpak-builder را برای ساخت‌های افزایشی (incremental builds) بسیار کارآمد می‌سازد.

هنگام ساخت یک فلت‌پک برای انتشار در اینترنت، گزینهٔ --collection-id=COLLECTION-ID باید به‌صورت یک مقدار DNS معکوس و یکتا در سطح جهانی مشخص شود تا مجموعهٔ فلت‌پک‌هایی که این برنامه به آن افزوده می‌شود شناسایی گردد. تنظیم یک شناسهٔ مجموعهٔ یکتا در سطح جهانی، امکان به اشتراک‌گذاری برنامه‌های موجود در مخزن را از طریق سیستم‌های همتا‌به‌همتا (peer-to-peer) بدون نیاز به پیکربندی بیشتر فراهم می‌کند.

فایل مانیفست یک فایل json یا yaml است که قالب آن با جزئیات در صفحهٔ راهنمای اختصاصی خودش شرح داده شده است.

گزینه‌های زیر پشتیبانی می‌شوند:

-h, --help

نمایش گزینه‌های راهنما و خروج.

-v, --verbose

چاپ اطلاعات اشکال‌زدایی در طول پردازش دستور.

--version

چاپ اطلاعات نسخه و خروج.

--arch=ARCH

مشخص کردن معماری دستگاه برای ساخت. اگر هیچ معماری‌ای مشخص نشود، معماری میزبان به‌طور خودکار شناسایی خواهد شد. تنها معماری‌های سازگار با میزبان را می‌توان مشخص کرد.

--default-branch=BRANCH

تنظیم شاخهٔ پیش‌فرض به BRANCH. از این گزینه زمانی استفاده می‌شود که در مانیفست شاخه‌ای مشخص نشده باشد. مقدار پیش‌فرض master است.

--disable-cache

عدم بررسی حافظهٔ موقت موجود برای ساخت قبلی؛ در عوض همیشه پودمان‌ها از نو ساخته شوند.

--disable-rofiles-fuse

غیرفعال کردن استفاده از rofiles-fuse برای بهینه‌سازی مصرف حافظهٔ موقت از طریق بررسی لینک‌های سخت (hardlink checkouts).

--disable-download

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

--disable-updates

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

--disable-tests

هیچ‌یک از آزمون‌ها اجرا نشوند.

--run

اجرای یک دستور در یک جعبه‌شن (sandbox) بر اساس دایرکتوری ساخت. این کار flatpak build را با آرگومان‌های اضافی برای ایجاد همان محیط ساخت و همان دسترسی‌هایی که برنامهٔ نهایی خواهد داشت (به‌جز دسترسی‌های سیستم فایل) آغاز می‌کند. دستوری که باید اجرا شود باید آخرین آرگومان ارائه‌شده به flatpak-builder پس از دایرکتوری و مانیفست باشد.

تنها گزینه‌های --arch=ARCH، --ccache، --verbose و --state-dirPATH (از نسخهٔ 1.4.8 به بعد) را می‌توان با این گزینه ترکیب کرد.

--build-shell=MODULENAME

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

--show-deps

فهرست کردن تمام فایل‌های (محلی) که مانیفست به آن‌ها وابسته است.

تنها گزینهٔ --verbose را می‌توان با این گزینه ترکیب کرد.

--show-manifest

مانیفست را به‌همراه تمامی فایل‌های گنجانده‌شده بارگذاری کرده و آن را در قالبی استاندارد (canonical) از json چاپ می‌کند. این گزینه برای ابزارهایی مفید است که مانیفست‌ها را مدیریت می‌کنند تا از پشتیبانی هم‌زمان از yaml و json و همچنین برخی رفتارهای غیراستاندارد json که پشتیبانی می‌شوند (مانند کامنت‌ها و رشته‌های چندخطی) بی‌نیاز شوند.

تنها گزینهٔ --verbose را می‌توان با این گزینه ترکیب کرد.

--download-only

خروج موفقیت‌آمیز پس از بارگیری منابع مورد نیاز.

--bundle-sources

ایجاد یک محیط زمان اجرای اضافی شامل کد منبع این پودمان. نام آن به‌صورت app-id.Sources خواهد بود؛ برای نمونه org.gnome.Maps.Sources.

--build-only

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

--finish-only

تنها انجام مراحل پاک‌سازی، نهایی‌سازی و خروجی گرفتن، با ادامه از جایی که دستور --build-only متوقف شده بود.

--export-only

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

--require-changes

هیچ کاری انجام ندهد و در صورتی که پس از آخرین ساخت ذخیره‌شده در حافظهٔ موقت تغییری رخ نداده باشد، DIRECTORY را در وضعیت ناموجود رها کند. اگر این گزینه مشخص نشود، آخرین نسخه از حافظهٔ موقت در DIRECTORY قرار داده خواهد شد.

--state-dir=PATH

استفاده از این دایرکتوری برای ذخیرهٔ وضعیت (بارگیری‌ها، دایرکتوری‌های ساخت، حافظهٔ موقت ساخت و غیره) به‌جای .flatpak-builder. این می‌تواند یک مسیر مطلق یا نسبی باشد، اما باید روی همان سیستم فایلی باشد که DIRECTORY هدف مشخص‌شده قرار دارد.

--keep-build-dirs

عدم حذف منابع و فایل‌های ساخت پس از ساختن و نصب هر پودمان. این کار همچنین یک پیوند نمادین (symlink) با نامی پایدار ("build-modulename") به دایرکتوری ساخت ایجاد می‌کند.

--delete-build-dirs

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

--ccache

فعال‌سازی استفاده از ccache در فرآیند ساخت (نیاز به وجود ccache در sdk دارد). پوشهٔ پیش‌فرض ccache را می‌توان با تنظیم متغیر محیطی CCACHE_DIR بازنویسی کرد.

--stop-at=MODULENAME

توقف در پودمان مشخص‌شده، با نادیده گرفتن آن و تمام پودمان‌های پس از آن در هر دو فاز "download" و "build". این گزینه برای اشکال‌زدایی و توسعه مفید است. برای نمونه، می‌توانید تمام وابستگی‌ها را بسازید، اما در برنامهٔ اصلی متوقف شوید تا بتوانید ساخت را از روی یک مخزن چک‌اوت‌شده از پیش موجود انجام دهید. این گزینه مستلزم --build-only است.

--repo=DIR

پس از پایان ساخت، دستور flatpak build-export را اجرا کند تا نتیجه را به مخزن DIR صادر نماید. اگر DIR وجود داشته باشد، باید یک مخزن OSTree باشد؛ در غیر این صورت یک مخزن جدید ایجاد خواهد شد.

-s, --subject=SUBJECT

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

-b, --body=BODY

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

--collection-id=COLLECTION-ID

تنظیم به‌عنوان شناسهٔ مجموعهٔ (collection ID) مخزن. تنظیم یک شناسهٔ مجموعهٔ یکتا در سطح جهانی، امکان به اشتراک‌گذاری برنامه‌های موجود در مخزن را از طریق سیستم‌های همتا‌به‌همتا (peer-to-peer) بدون نیاز به پیکربندی بیشتر فراهم می‌کند. در صورت ساخت در یک مخزن موجود، شناسهٔ مجموعه باید با شناسهٔ مجموعهٔ پیکربندی‌شدهٔ فعلی آن مخزن مطابقت داشته باشد.

--token-type=VAL

تنظیم نوع توکن مورد نیاز برای نصب این کامیت. تنظیم این گزینه به مقداری بزرگتر از 0 به این معنی است که برای نصب فلت‌پک به احراز هویت نیاز خواهد بود. ویژگی token-type تنظیم‌شده در مانیفست نسبت به این گزینه اولویت دارد. هنگام صدور نتایج ساخت استفاده می‌شود.

--gpg-sign=KEYID

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

--gpg-homedir=PATH

مسیر دایرکتوری خانگی GPG (Homedir) برای جستجوی دسته‌کلیدها (keyrings). هنگام صدور نتایج ساخت استفاده می‌شود.

--jobs=JOBS

محدود کردن تعداد وظایف موازی در طول ساخت. مقدار پیش‌فرض برابر با تعداد پردازنده‌های (CPUs) دستگاه است.

--force-clean

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

--sandbox

غیرفعال کردن امکان تعیین build-args که به flatpak build ارسال می‌شوند. این بدان معناست که فرآیند ساخت نمی‌تواند از جعبه‌شن خود خارج شود، و هنگام ساخت نرم‌افزارهای با قابلیت اعتماد کمتر مفید است.

--allow-missing-runtimes

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

--rebuild-on-sdk-change

ثبت نسخهٔ دقیق sdk در حافظهٔ موقت، و ساخت مجدد همه چیز در صورت تغییر آن. این گزینه زمانی مفید است که در حال ساخت در برابر یک زمان اجرای با API ناپایدار، مانند یک ساخت شبانه (nightly build) هستید.

--skip-if-unchanged

اگر json از زمان آخرین ساخت این نام فایل تغییری نکرده باشد، هیچ کاری انجام ندهد و کد خروج 42 را برگرداند.

--mirror-screenshots-url=URL

آینه‌کردن هرگونه چندرسانه‌ای در appstream و بازنویسی نشانی‌های وب (URLs) رسانه‌ها در appstream xml به نشانی مشخص‌شده. فایل‌های حاصل در زیردایرکتوری "screenshots" در دایرکتوری برنامه برای نسخه‌های پیش از 1.3.4 و در زیردایرکتوری "files/share/app-info/media" برای نسخه‌های جدیدتر ذخیره خواهند شد. از نسخهٔ 1.4.5 به بعد، این گزینه همچنین یک مرجع تصویر (screenshot ref) در مخزن OSTree صادرشده برای هر معماری شامل رسانهٔ آینه‌شده ایجاد می‌کند.

--extra-sources=SOURCE-DIR

هنگام بارگیری منابع (آرشیوها، فایل‌ها، git، bzr، svn)، برای نسخه‌های از پیش موجود در این دایرکتوری جستجو کرده و به‌جای بارگیری از آن‌ها استفاده شود. ساختار این دایرکتوری باید با ساختار دایرکتوری وضعیت مطابقت داشته باشد:
•فایل‌ها و آرشیوها باید درون پوشهٔ زیر باشند: downloads/<sha256>/
•منابع از نوع git، bzr و svn باید درون پوشهٔ زیر باشند: <type>/<converted-uri>/

مقدار converted-uri از روی path یا url (در مورد git) و از روی url (در مورد bzr و svn) ساخته می‌شود. :// به یک زیرخط (_) تبدیل شده و هر / دیگری نیز با یک زیرخط جایگزین می‌شود. برای نمونه، https://github.com/user/repo.git تبدیل به https_github.com_user_repo.git می‌شود. در مورد منابع svn اگر revision موجود باشد، نام پوشه svn/<converted-uri>__r<revision>/ خواهد بود. در مورد منابع git، باید یک کلون آینه‌شده (mirrored clone) باشد.

--extra-sources-url=URL

هنگام بارگیری منابع (آرشیوها، فایل‌ها، git، bzr، svn)، پیش از بارگیری از نشانی اینترنتی اصلی، این نشانی را برای بارگیری‌های آینه‌شده بررسی کند.

--from-git=GIT

جستجوی مانیفست در مخزن git مشخص‌شده. در صورت ارائهٔ این گزینه، MANIFEST به‌عنوان یک مسیر نسبی درون مخزن تفسیر می‌شود.

--from-git-branch=BRANCH

شاخه‌ای که باید به همراه --from-git استفاده شود.

--no-shallow-clone

عدم استفاده از کلون‌های کم‌عمق (shallow clones) هنگام آینه‌کردن مخازن git.

--override-source-date-epoch

تنظیم این برچسب زمانی به‌عنوان SOURCE_DATE_EPOCH برای اجرای ساخت، به‌جای زمان آخرین تغییر مانیفست. این گزینه از نسخهٔ 1.3.1 به بعد در دسترس است.

--compose-url-policy=POLICY

تنظیم خط‌مشی نشانی اینترنتی AppStream compose. مقادیر پذیرفته‌شده عبارتند از partial و full. مقدار full نیازمند AppStream نسخهٔ >= 0.16.3 است. در صورت عدم تعیین، مقدار پیش‌فرض partial خواهد بود. این خط‌مشی تنها زمانی اعمال می‌شود که همراه با --mirror-screenshots-url=URL استفاده شود؛ در غیر این صورت، کاتالوگ AppStream نشانی‌های منبع رسانه‌ها را حفظ خواهد کرد.

--add-tag=TAG

افزودن این برچسب (tag) به فهرست برچسب‌های مانیفست پیش از ساخت.

--remove-tag=TAG

حذف این برچسب از فهرست برچسب‌های مانیفست پیش از ساخت. حذف پیش از پردازش گزینهٔ --add-tag انجام می‌شود، بنابراین اگر هر دو مشخص شوند، گزینهٔ --add-tag پیروز خواهد بود.

--install-deps-from=REMOTE

نصب یا به‌روزرسانی وابستگی‌های مورد نیاز ساخت از منبع دوردست (remote) مشخص‌شده.

--install-deps-only

توقف پس از بارگیری وابستگی‌ها.

--install

پس از پایان ساخت، نتیجه را به‌صورت محلی نصب کند.

--user

نصب وابستگی‌ها در یک نصب مختص کاربر (per-user).

--system

نصب وابستگی‌ها در نصب سراسری پیش‌فرض سیستم (system-wide).

--installation=NAME

نصب وابستگی‌ها در یک نصب سراسری سیستم که توسط NAME از میان موارد تعریف‌شده در /etc/flatpak/installations.d/ مشخص شده است. استفاده از --installation=default معادل استفاده از --system است.

دستور flatpak-builder منابع و نتایج جزئی ساخت را در دایرکتوری وضعیت (که به‌طور پیش‌فرض زیردایرکتوری .flatpak-builder در دایرکتوری جاری است) ذخیره می‌کند. اگر از --keep-build-dirs استفاده کنید، دایرکتوری‌های ساخت هر پودمان نیز در اینجا ذخیره می‌شوند.

حذف دایرکتوری وضعیت بی‌خطر است. این کار موجب می‌شود که در ساخت بعدی، یک ساخت کامل (full build) انجام شود.

$ flatpak-builder my-app-dir manifest.json

نمونه فایل مانیفست:

{
    "id": "org.test.TestApp",
    "runtime": "org.freedesktop.Platform",
    "runtime-version": "1.2",
    "sdk": "org.freedesktop.Sdk",
    "command": "test",
    "cleanup": [ "/include", "*.la" ],
    "build-options" : {
        "cflags": "-O2 -g",
        "cxxflags": "-O2 -g",
        "env": {
            "V": "1"
        },
        "arch": {
            "x86_64": {
                "cflags": "-O3 -g",
            }
        }
    },
    "modules": [
        {
            "name": "pygobject",
            "config-opts": [ "--disable-introspection" ],
            "sources": [
                {
                    "type": "archive",
                    "url": "http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.28/pygobject-2.28.6.tar.xz",
                    "sha256": "fb8a1d4f665130a125011659bd347c7339c944232163dbb9a34fd0686577adb8"
                },
                {
                    "type": "patch",
                    "path": "required-pygobject-fix.patch"
                },
                {
                    "type": "file",
                    "path": "pygobject-extra-file",
                    "dest-filename": "extra-file"
                }
            ]
        },
        {
            "name": "babl",
            "build-options" : { "cxxflags": "-O2 -g -std=c++11" },
            "cleanup": [ "/bin" ],
            "sources": [
                {
                    "type": "git",
                    "url": "https://gitlab.gnome.org/GNOME/babl.git"
                }
            ]
        },
        {
            "name": "testapp",
            "sources": [
                {
                    "type": "bzr",
                    "url": "lp:testapp"
                }
            ]
        }
    ]
}

flatpak(1), flatpak-manifest(5), flatpak-build-init(1), flatpak-build(1), flatpak-build-finish(1), flatpak-build-export(1)

flatpak