Підручник по пакуванню
Створення Flatpak програми, яка вже упакована у Fedora, включає два кроки. Спочатку потрібно створити модуль для програми. Цей модуль буде використовуватися для відновлення програм RPM та RPMs. Потім потрібно створити контейнер з цього модуля. У контексті Fedora, flatpaks - це лише інша форма контейнера, яка оброблюється подібно до Docker-контейнерів, які використовуються для серверних програм.
Так само як і для пакетів, інструкції щодо побудови модулів та контейнерів зберігаються в git за посиланням https://src.fedoraproject.org , а збірки координуються https://koji.fedoraproject.org. Flatpak для програми може бути знайдений за посиланням https://src.fedoraproject.org в репозиторії flatpaks/<application>
; цей git репозиторій містить два файли: <application>.yaml
, які визначають вміст модуля та container.yaml
, які визначають, як модуль перетворюється в контейнер Flatpak.
Налаштування
Встановлення необхідних інструментів:
$ sudo dnf install flatpak-module-tools fedmod
Переконайтеся, що ваш користувач перебуває в групі mock
(як локальні збірки модулів так і локальні збірки контейнерів використовують mock).
$ sudo usermod -a -G mock $USER
(Можливо, вам доведеться вийти з системи та знову увійти.)
Додайте віддалене сховище тестових пакунків flatpak Fedora:
$ flatpak remote-add fedora-testing oci+https://registry.fedoraproject.org#testing
Його могло бути встановлено у Fedora, але воно перебуває у вимкненому стані. Щоб увімкнути його, скористайтеся такою командою: $ flatpak remote-modify --enable fedora-testing Та встановити Fedora Flatpak Runtime, якщо вона ще не встановлена: $ flatpak install fedora-testing org.fedoraproject.Platform/x86_64/f37 |
Створення <application>.yaml
та container.yaml
$ mkdir feedreader && cd feedreader $ fedmod fetch-metadata $ fedmod rpm2flatpak --flatpak-common --flathub=feedreader feedreader
Це створює початкові версії двох файлів. Опція --flatpak-common
робить згенерований модуль залежним від модуля flatpak-common. Це не за замовчуванням, оскільки flatpak-common все ще трохи експерементальний, але часто є досить корисним для того, щоб зробити ваш модуль меншим та простішим у збірці. Опція --flathub=feedreader
шукає Flathub для програми, чиє ім’я або ідентифікатор програми відповідає feedreader
та використовує маніфест Flathub для ініціалізації container.yaml
. Якщо знайдено декілька збігів, вони будуть відображені та вам потрібно буде повторно запустити fedmod rpm2flatpak
з більш конкретним пошуковим рядком.
Спочатку ми розглянемо файл визначення модуля:
---
document: modulemd
version: 2
data:
summary: RSS desktop client (1)
description: >- (1)
FeedReader is a modern desktop application designed to complement existing web-based
RSS accounts. It combines all the advantages of web based services like synchronization
across all your devices with everything you expect from a modern desktop application.
license:
module:
- MIT
dependencies:
- buildrequires:
flatpak-common: [f37]
flatpak-runtime: [f37]
platform: [f37]
requires:
flatpak-common: [f37]
flatpak-runtime: [f37]
platform: [f37]
profiles: (2)
default:
rpms:
- feedreader
components:
rpms:
feedreader: (3)
buildorder: 10
rationale: Application package
ref: f37 (4)
gnome-online-accounts: (5)
rationale: Runtime dependency
ref: f37
gumbo-parser: (5)
rationale: Runtime dependency
ref: f37
libpeas: (5)
rationale: Runtime dependency
ref: f37
...
1 | Джерело та опис походять з метаданих RPM |
2 | У типовому профілі зберігається список RPM, які слід включити, разом з їхніми залежностями |
3 | Основний пакет для програми |
4 | Ця гілка RPM за посиланням https://src.fedoraproject.org використовується для цього компонента. Ви можете використовувати будь-яку гілку, або навіть вказувати на певний комміт. |
5 | Подальше джерело rpms, яке буде відновлено для пакування |
Це можливо використовувати як є. У більш складних випадках, може знадобитися додати додаткові ключі buildorder:
, щоб зв’язані залежності були побудовані у вірному порядку.
Потім ми розглянемо файл container.yaml
.
compose:
modules:
- feedreader:stable
flatpak:
id: org.gnome.FeedReader
branch: stable
command: feedreader
finish-args: |-
--socket=pulseaudio
--socket=x11 (1)
--share=ipc
--socket=wayland
--device=dri
--share=network
--filesystem=xdg-run/dconf
--filesystem=~/.config/dconf:ro
--talk-name=ca.desrt.dconf
--env=DCONF_USER_CONFIG_DIR=.config/dconf
--talk-name=org.gnome.OnlineAccounts
--own-name=org.gnome.FeedReader.ArticleView
--talk-name=org.freedesktop.Notifications
--talk-name=org.freedesktop.secrets
--env=DECSYNC_DIR=.local/share/decsync
--filesystem=~/.local/share/decsync
1 | Це було б краще за --socket=fallback-x11 для запобігання доступу до сокету Xwayland під час роботи Wayland. |
Файл container.yaml
також можна використовувати в такому вигляді як є. Якщо Flathub немає існуючої збірки програми, ви можете не використовувати опцію --flathub
на fedmod rpm2flatpak
. У цьому випадку, вам буде в нагоді pick an application ID and edit container.yaml
.
Робимо локальну збірку
$ flatpak-module local-build --install
Це ярлик для трьох кроків:
$ flatpak-module build-module $ flatpak-module build-container --from-local $ flatpak-module install <програма>-stable-<версія>.oci.tar.gz
Якщо збірка модуля вдалася, але збірка контейнера не вдається, і вам потрібно змінити container.yaml та спробувати ще раз, ви можете зробити:
$ flatpak-module build-container --from-local --install
Тестування
Якщо встановлення вдалося, тепер ви можете зробити:
$ flatpak run org.gnome.FeedReader
Щоб спробувати.
src.fedoraproject.org запит
Будь-ласка запросіть нове сховище Git наступним чином:
$ fedpkg request-repo --namespace=flatpaks <програма>
Імпорт вмісту вашого модуля
Після того, як сховище було створене:
$ mv <програма> <програма>.old $ fedpkg clone flatpaks/<програма> $ cd <програма> $ cp ../<програма>.old/{<програма>.yaml,container.yaml} . $ git add <програма>.yaml container.yaml $ git commit -m "Initial import" $ git push origin stable
Збирання у Koji
Спочатку побудуйте модуль
$ fedpkg module-build
Якщо це завершиться успішно, тоді ви можете зробити:
$ fedpkg flatpak-build
Тестування збірки
Щоб встановити останню вдалу збірку від Koji, запустіть:
$ flatpak-module install --koji <програма>:stable
Створення оновлення
Знайдіть NVR вашої збірки Flatpak - якщо у вас його немає в терміналі прокрутки, перейдіть на сторінку https://koji.fedoraproject.org/ та знайдіть у "Пакетах" назву програми. Ідентифікатор збірки для the Flatpak збірки, буде чимось на зразок: myapplication-20b180601144429.2
.
Перейдіть на сторінку https://bodhi.fedoraproject.org/updates/new та введіть flatpak NVR під Candidate Builds (ігноруйте "Пакети"). Введіть текст у розділі "Оновити нотатки" наприклад “Initial Flatpak of <application>” та натисніть <Submit>.
Want to help? Learn how to contribute to Fedora Docs ›