| FLATPAK METADATA(5) | flatpak metadata | FLATPAK METADATA(5) |
نام (NAME)
flatpak-metadata - اطلاعات مربوط به یک برنامه یا محیط زمان اجرا
توضیحات (DESCRIPTION)
فلتپک (Flatpak) از پروندههای متادیتا برای توصیف برنامهها و محیطهای زمان اجرا (runtimes) استفاده میکند. پرونده metadata برای یک برنامه یا زمان اجرای مستقرشده در دایرکتوری سطح بالای استقرار قرار میگیرد. برای نمونه، متادیتای برنامه محلی نصبشده org.gnome.Calculator در مسیر ~/.local/share/flatpak/app/org.gnome.Calculator/current/active/metadata قرار دارد.
بیشتر جنبههای پیکربندی متادیتا را میتوان هنگام اجرای برنامهها بازنویسی کرد، چه به صورت موقت از طریق گزینههای دستور flatpak run، یا به طور دائمی با دستور flatpak override.
یک پرونده متادیتا که پیکربندی اعمالشده و مؤثر را توصیف میکند درون سندباکس در حال اجرا در مسیر /.flatpak-info در دسترس است. جهت سازگاری با نسخههای قدیمیتر فلتپک، مسیر /run/user/$UID/flatpak-info یک پیوند نمادین (symlink) به همان پرونده است.
قالب فایل (FILE FORMAT)
پرونده متادیتا از همان قالب پروندههای .ini استفاده میکند که در پروندههای واحد systemd یا پروندههای .desktop برنامهها به کار میرود.
[Application] یا [Runtime]
متادیتا برای برنامهها با یک گروه [Application] و متادیتا برای محیطهای زمان اجرا با یک گروه [Runtime] آغاز میشود.
کلیدهای زیر میتوانند در این گروهها حضور داشته باشند:
name (string)
runtime (string)
sdk (string)
command (string)
required-flatpak (string list)
نسخههای فلتپک پس از 1.4.3 و 1.2.5 از چندین نسخه در این قسمت پشتیبانی میکنند. این ویژگی در صورتی که نیاز به پشتیبانی از قابلیتهای بکپورتشده به یک سری پایدار قبلی داشته باشید مفید است. برای نمونه اگر میخواهید از قابلیتی استفاده کنید که در نسخه 1.6.0 افزوده شده و به 1.4.4 نیز بکپورت شده است، میتوانید از 1.6.0;1.4.4; استفاده کنید. توجه داشته باشید که نسخههای قدیمیتر فلتپک صرفاً از اولین عنصر موجود در فهرست استفاده میکنند، بنابراین بالاترین نسخه را اول قرار دهید.
tags (string list)
[Context]
این گروه منابع مختلف سیستمی را تعیین میکند که ممکن است هنگام اجرای برنامه در یک سندباکس فلتپک به اشتراک گذاشته شوند.
مجوزهای
شرطی (Conditional Permissions)
برخی مجوزها (مانند sockets و devices) از اعطای شرطی پشتیبانی میکنند، که در آن دسترسی تنها زمانی فراهم میشود که شرایط معینی در زمان اجرا برقرار باشد. این ویژگی به برنامهها امکان میدهد با قابلیتهای گوناگون سیستم و انواع نشستها سازگار شوند. در دسترس از نسخه 1.17.
مجوزهای شرطی از نحو if:PERMISSION:CONDITION در پرونده متادیتا استفاده میکنند. برای نمونه، if:wayland:has-wayland دسترسی به سوکت Wayland را تنها در زمان اجرا در یک نشست Wayland اعطا میکند.
شرایط زیر پشتیبانی میشوند:
true
false
has-input-device
has-wayland
has-usb-device
has-usb-portal
شرایط میتوانند با افزودن پیشوند ! نقیض شوند. برای نمونه، if:x11:!has-wayland دسترسی به سوکت X11 را تنها زمانی اعطا میکند که برنامه در نشست Wayland اجرا *نشود*.
میتوان چندین مجوز شرطی را برای یک منبع یکسان مشخص کرد. در صورتی که هر یک از شرایط مطابقت داشته باشد، مجوز اعطا میشود (منطق OR). برای نمونه:
sockets=wayland;if:x11:!has-wayland;if:x11:false
برای سازگاری رو به عقب با نسخههای قدیمیتر فلتپک، مجوزهای شرطی میتوانند با اعطای غیرشرطی ترکیب شوند:
sockets=x11;if:x11:!has-wayland;
نسخههای قدیمیتر فلتپک دسترسی X11 را بدون قید و شرط اعطا میکنند (زیرا فقط x11 را میبینند)، در حالی که نسخههای جدیدتر نحو شرطی را شناسایی کرده و دسترسی X11 را تنها در صورت عدم وجود نشست Wayland فراهم میآورند.
برای سلب صریح مجوزی که ممکن است در یک لایه پایینتر (مانند زمان اجرا یا یک override سراسری) اعطا شده باشد، پیشوند ! را به ابتدای نام مجوز اضافه کنید:
sockets=!x11;
این سلب دسترسی میتواند با اعطای شرطی ترکیب شود تا دسترسی غیرشرطی حذف شده و در عین حال دسترسی شرطی ممکن گردد:
sockets=!x11;x11;if:x11:!has-wayland;
این دستور دسترسی غیرشرطی به X11 را رد میکند، اما دسترسی شرطی به X11 را در صورت عدم اجرا در نشست Wayland مجاز میسازد. تناقض ظاهری بین !x11 و x11 سازگاری رو به عقب را تضمین میکند: نسخههای قدیمیتر فلتپک اعطای نهایی x11 را میبینند، در حالی که نسخههای جدیدتر منطق شرطی را درک مینمایند.
تمام کلیدهای موجود در این گروه (و خود گروه) اختیاری هستند.
کلیدهای پشتیبانیشده در این گروه عبارتند از:
shared (list)
این گزینه از مجوزهای شرطی پشتیبانی میکند. برای جزئیات در مورد نحوه بهاشتراکگذاری شرطی دسترسی به زیرسیستم بر اساس شرایط زمان اجرا به مجوزهای شرطی (Conditional Permissions) مراجعه کنید.
sockets (list)
این گزینه از مجوزهای شرطی پشتیبانی میکند. برای جزئیات نحوه اعطای شرطی دسترسی به سوکت بر اساس شرایط زمان اجرا به مجوزهای شرطی (Conditional Permissions) مراجعه فرمایید.
devices (list)
dri
input
usb
kvm
all
shm
این گزینه از مجوزهای شرطی پشتیبانی میکند. برای جزئیات بیشتر به مجوزهای شرطی (Conditional Permissions) مراجعه فرمایید.
filesystems (list)
home
home/path
host
مسیر /dev به اشتراک گذاشته نمیشود: به جای آن از devices=all; استفاده کنید.
بخشهایی از /sys همیشه به اشتراک گذاشته میشوند. این گزینه پروندههای بیشتری را در /sys در دسترس قرار نمیدهد.
علاوه بر این، این کلمه کلیدی تمامی پوشههای مشابه در /run/host را همانند کلمات کلیدی host-os و host-etc ارائه میدهد. اگر این کلمه کلیدی همراه با یکی از کلمات کلیدی host- استفاده شود، هر سطح دسترسی که بالاتر (مجازتر) باشد برای پوشههای موجود در /run/host اعمال خواهد شد؛ برای نمونه، host:rw;host-os:ro; معادل با host:rw; است.
این پوشههای رزروشده دیگر در حال حاضر مستثنی هستند: /app, /bin, /boot, /efi, /etc, /lib, /lib32, /lib64, /proc, /root, /run, /sbin, /tmp, /usr, /var.
در دسترس از نسخه 0.3.
host-os
برای جلوگیری از تداخل با زمان اجرای فلتپک، این موارد در سندباکس در مسیرهای /run/host/usr, /run/host/etc/ld.so.cache و موارد مشابه سوار میشوند.
در دسترس از نسخه 1.7.
host-etc
جهت جلوگیری از تداخل با زمان اجرای فلتپک، این مسیر در سندباکس در /run/host/etc سوار میشود.
در دسترس از نسخه 1.7.
host-root
جهت جلوگیری از تداخل با زمان اجرای فلتپک، این مسیر در سندباکس در /run/host/root سوار میشود.
این مجوز فقط به عنوان آخرین راهحل در شرایطی در نظر گرفته شده است که هیچ جایگزین ممکنی با سایر مجوزهای سیستمفایل برای برنامههایی که به کل سیستمفایل ریشه میزبان نیاز دارند وجود نداشته باشد.
لطفاً توجه داشته باشید که دنبال کردن ساده پیوندهای نمادین زیر /run/host/root منجر به مسیر اشتباه خواهد شد. برای نمونه، استفاده از realpath() نادرست است. در عوض، برنامهها باید روشی را برای دنبال کردن پیوندهای نمادین پیادهسازی کنند که رفتاری مطابق با chroot شدن در /run/host/root داشته باشد.
چند روش برای این کار وجود دارد. هستههای جدید از فراخوانی openat2()[1] همراه با RESOLVE_IN_ROOT پشتیبانی میکنند. برای یک راهحل سازگارتر با پشتیبانی از هستههای قدیمیتر، پیادهسازی ارائهشده در steam-runtime-tools[2] را به عنوان یک نمونه ببینید.
در دسترس از نسخه 1.17.
xdg-desktop, xdg-documents, xdg-download, xdg-music, xdg-pictures, xdg-public-share, xdg-videos, xdg-templates
xdg-desktop/path, xdg-documents/path, etc.
xdg-cache, xdg-config, xdg-data
xdg-cache/path, xdg-config/path, xdg-data/path
xdg-run/path
/path
~/path
~
یکی از موارد بالا همراه با :ro
یکی از موارد بالا همراه با :rw
یکی از موارد بالا همراه با :create
persistent (list)
features (list)
devel
multiarch
bluetooth
canbus
per-app-dev-shm
یک ویژگی میتواند با پیشوند ! مشخص شود تا نشاندهنده نبود آن ویژگی باشد، برای نمونه !devel در صورتی که توسعه و اشکالزدایی مجاز نباشد.
این گزینه از مجوزهای شرطی پشتیبانی میکند. برای جزئیات در مورد نحوه مجاز کردن ویژگیها به صورت شرطی بر اساس شرایط زمان اجرا به مجوزهای شرطی (Conditional Permissions) مراجعه کنید.
unset-environment (list)
[Instance]
این گروه فقط در /.flatpak-info برای یک برنامه در حال اجرا ظاهر میشود و در پروندههای متادیتای نوشتهشده توسط نویسندگان برنامه وجود ندارد. این گروه توسط خود فلتپک پر میشود.
instance-id (string)
instance-path (string)
app-path (string)
از نسخه 1.12.0، اگر flatpak run با گزینه --app-path اجرا شده باشد، این کلید مسیر مطلق هر پروندهای را که روی /app سوار شده است میدهد، حتی اگر با پروندههای عادی برنامه تفاوت داشته باشد.
اگر flatpak run با گزینه --app-path= اجرا شود (که منجر به سوار شدن یک پوشه خالی روی /app میشود)، مقدار آن برابر با رشته خالی تنظیم میگردد.
original-app-path (string)
اگر این کلید وجود نداشته باشد، پروندههای برنامه توسط app-path مشخص میشوند.
app-commit (string)
app-extensions (list of strings)
branch (string)
arch (string)
flatpak-version (string)
runtime-path (string)
از نسخه 1.12.0، اگر flatpak run با گزینه --usr-path اجرا شده باشد، این کلید مسیر مطلق هر پروندهای را که در /usr سوار شده است نشان میدهد، حتی اگر با پروندههای عادی زمان اجرا تفاوت داشته باشد.
original-runtime-path (string)
اگر این کلید وجود نداشته باشد، پروندههای زمان اجرا توسط runtime-path مشخص میشوند.
runtime-commit (string)
runtime-extensions (list of strings)
extra-args (string)
sandbox (boolean)
build (boolean)
session-bus-proxy (boolean)
system-bus-proxy (boolean)
[Session Bus Policy]
اگر کلید sockets دسترسی کامل به گذرگاه نشست D-Bus را ندهد، فلتپک دسترسی فیلترشده را فراهم میکند.
سیاست پیشفرض برای گذرگاه نشست فقط به برنامه اجازه میدهد شناسه برنامه خود، نامهای فرعی آن، و شناسه برنامه خود را به عنوان یک نام فرعی از org.mpris.MediaPlayer2 در اختیار (مالکیت) داشته باشد. برای نمونه اگر برنامه org.my.App نامیده شود، تنها میتواند مالک org.my.App, org.my.App.* و org.mpris.MediaPlayer2.org.my.App باشد. این برنامه تنها مجاز است با نامهای منطبق بر این الگوها، بعلاوه خود گذرگاه (org.freedesktop.DBus) و APIهای پورتال (نامهای گذرگاه به فرم org.freedesktop.portal.*) ارتباط برقرار کند.
علاوه بر این، برنامه همیشه مجاز است به پیامهای ارسالشده به آن پاسخ دهد و سیگنالهای عمومی (broadcast) منتشر کند (اما این سیگنالها به سایر برنامههای سندباکسشده نمیرسند مگر اینکه اجازه صحبت با برنامه شما را داشته باشند).
اگر گروه [Session Bus Policy] حضور داشته باشد، خطمشی دسترسی به گذرگاه نشست را فراهم میسازد.
هر کلید در این گروه شکلی از یک نام گذرگاه D-Bus یا پیشوندی از آن دارد، برای نمونه org.gnome.SessionManager یا org.freedesktop.portal.*.
مقادیر ممکن برای یک مدخل، به ترتیب افزایش سطح دسترسی به شرح زیر هستند. هر مقدار شامل تمام دسترسیهای مقادیر پایینتر نیز میباشد:
none
see
talk
own
[System Bus Policy]
اگر کلید sockets دسترسی کامل به گذرگاه سیستم D-Bus را مجاز نداند، فلتپک گذرگاه سیستم را در دسترس قرار نمیدهد مگر اینکه گروه [System Bus Policy] حضور داشته باشد و خطمشی دسترسی فیلترشده را فراهم کند. در دسترس از نسخه 0.2.
مدخلهای این گروه همانند گروه [Session Bus Policy] هستند. با این حال، برنامه به طور پیشفرض هیچ مجوزی ندارد.
[Environment]
گروه [Environment] متغیرهای محیطی را برای مقداردهی هنگام اجرای برنامه تعیین میکند. در دسترس از نسخه 0.3.
مدخلهای موجود در این گروه به شکل VAR=VALUE هستند که در آن VAR نام متغیر محیطی است که باید تنظیم شود.
توجه داشته باشید که متغیرهای محیطی همچنین میتوانند با درج نام آنها در مدخل unset-environment از گروه [Context]، لغو (حذف از محیط) شوند.
[Extension NAME]
محیطهای زمان اجرا و برنامهها میتوانند نقاط توسعه (extension points) تعریف کنند، که به زمانهای اجرای اضافی و اختیاری اجازه میدهد در صورت حضور در سیستم، در یک مکان مشخص در درون سندباکس سوار شوند. کاربردهای متداول نقاط توسعه شامل ترجمهها برای برنامهها یا اطلاعات اشکالزدایی (debuginfo) برای کیتهای توسعه (SDKها) است. نام نقطه توسعه به عنوان بخشی از عنوان گروه مشخص میشود. از نسخه 0.11.4، در صورتی که مایل باشید از پیکربندیهای گوناگون (مثلاً نسخههای مختلف) یک افزونه به طور همزمان استفاده کنید، نام میتواند اختیاری شامل یک تگ در نحو ref به صورت name@tag باشد. مقدار "tag" در عمل نادیده گرفته میشود، اما برای این که یک نام افزونه بتواند بیش از یک بار مشخص شود ضروری است.
directory (string)
version (string)
versions (string)
add-ld-path (string)
merge-dirs (string)
download-if (string)
شرایط پشتیبانیشده عبارتند از:
active-gl-driver
active-gtk-theme
have-intel-gpu
have-kernel-module-*
on-xdg-desktop-*
autoprune-unless (string)
enable-if (string)
subdirectory-suffix (string)
subdirectories (boolean)
no-autodownload (boolean)
locale-subset (boolean)
autodelete (boolean)
collection-id (string)
[ExtensionOf]
این گروه اختیاری ممکن است در صورتی که محیط زمان اجرا خود یک افزونه باشد، حضور داشته باشد.
ref (string)
runtime (string)
priority (integer)
tag (string)
[Extra Data]
این گروه اختیاری ممکن است در صورتی که زمان اجرا یا برنامه از دادههای اضافی استفاده کند که به صورت جداگانه بارگیری میشوند، حضور داشته باشد. دادههای این گروه با کلید xa.extra-data-sources در خلاصه مخزن ادغام میشوند.
اگر چندین منبع داده اضافی وجود داشته باشد، کلیدهای uri، size و checksum آنها با استفاده از پسوند یکسان گروهبندی میشوند. اگر فقط یک منبع داده اضافی وجود داشته باشد، میتوان پسوند را حذف کرد.
NoRuntime (boolean)
uriX (string)
sizeX (integer)
checksumX (string)
[Policy SUBSYSTEM]
زیرسیستمها میتوانند خطمشیهای خود را تعریف کنند تا در گروهی قرار گیرند که نام آن این قالب را دارد. مقادیر آنها به عنوان فهرستهایی تلقی میشوند که در آنها میتوان مفهوم اعضا را با پیشوند ! به ابتدای مقدار نفی کرد. آنها به صورت دیگری توسط فلتپک تجزیه نمیشوند. در دسترس از نسخه 0.6.13.
[USB Devices]
دستگاههای USB میتوانند همانگونه که توسط کلیدهای این گروه مشخص شده است، توسط پورتال USB قابل شمارش یا پنهان باشند. شناسههای تولیدکننده و محصول توسط فلتپک اعتبارسنجی میشوند، اما به شکل دیگری استفاده یا تجزیه نمیگردند. این کار صرفاً مجوز شمارش دستگاه USB را برای استفاده توسط پورتال اعطا میکند و به خودی خود دسترسی به دستگاهها را فراهم نمیسازد. در دسترس از نسخه 1.15.11.
enumerable-devices (string list)
hidden-devices (string list)
مثال (EXAMPLE)
[Application] name=org.gnome.Calculator runtime=org.gnome.Platform/x86_64/3.20 sdk=org.gnome.Sdk/x86_64/3.20 command=gnome-calculator [Context] shared=network;ipc; sockets=x11;wayland; filesystems=xdg-run/dconf;~/.config/dconf:ro; [Session Bus Policy] ca.desrt.dconf=talk [Environment] DCONF_USER_CONFIG_DIR=.config/dconf [USB Devices] enumerable-devices=0fd9:*; hidden-devices=0fd9:0063; [Extension org.gnome.Calculator.Locale] directory=share/runtime/locale subdirectories=true [Extension org.gnome.Calculator.Debug] directory=lib/debug
مثال استفاده از مجوزهای شرطی برای پشتیبانی از حالت جایگزین (fallback) از Wayland به X11:
[Application] name=org.example.App runtime=org.gnome.Platform/x86_64/3.20 sdk=org.gnome.Sdk/x86_64/3.20 [Context] shared=network;ipc; sockets=wayland;x11;if:x11:!has-wayland;
در این مثال، برنامه در صورت اجرا در یک نشست Wayland همیشه به سوکت Wayland دسترسی خواهد داشت. سوکت X11 تنها در صورتی در دسترس است که برنامه در یک نشست Wayland اجرا نشود (!has-wayland).
همچنین ببینید (SEE ALSO)
نکات (NOTES)
- 1.
- openat2()
- 2.
- steam-runtime-tools
- 3.
- freedesktop.org special directories
- 4.
- freedesktop.org Base Directory Specification
| flatpak |