Підручник по пакуванню

Створення 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 з більш конкретним пошуковим рядком.

Спочатку ми розглянемо файл визначення модуля:

feedreader.yaml
---
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.

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>.