Рекомендации по сборке
Данная статья содержит общие рекомендации для составления Спек-файла для достижения корректной пересборки пакета в формате Flatpak (%_prefix=/app)
Почему следует учитывать данные рекомендации?
Если не следовать ниже описанным рекомендациям, пересборка пакета с %_prefix=app не будет проходить корректно, и пакет не будет пересобран для Flatpak
Для упаковки во Flatpak-совместимом формате следует учитывать, что существует платформа, в рамках которой пакеты будут пересобираться. Внутри платформы файлы пакетов расположены по тем же путям, что и в классической системе (%_prefix=/usr), но с %_prefix=/app
В спеке/патчах необходимо учитывать, что разные бинарники/библиотеки/файлы/директории могут иметь разные пути:
- Если указывается путь, относящийся к пакету, который входит в состав платформы/SDK, то его путь будет указан через
/usr(или использовать использовать макрос%_usr) - В ином случае, рекомендуется не хардкодить путь через
/usr
Проверить, входит ли пакет в состав платформы или SDK можно по YAML-конфигу соответствующего компонента:
Метаданные приложения и медиа-файлы
- Файлы
.desktop,.metainfo.xmlи значки приложения должны иметь имя файла, равноеFLATPAK_ID, иначе они не попадут во Flatpak - Значки приложений должны находиться только в
%_iconsdir/hicolor(для Flatpak — это/app/share/icons/hicolor)
Использование Flatpak-специфичных проверок
На этапе сборки
В спек-файле проверить, собирается ли приложение под Flatpak-среду, можно через макрос %_prefix. Если он равен /app, то сборка происходит для Flatpak, иначе — для обычного системного пакета
%if "%_prefix" == "/app"
# Do Flatpak stuff
%else
# Do system stuff
%endifНа этапе работы приложения (во Flatpak-среде)
Во Flatpak-среде автоматически объявляются переменные среды FLATPAK_ID и container
Также, можно проверить /etc/os-release
Это может быть полезно для выполнения проверок в Python- или Bash-скриптах
if [ -n "$container" ]; then
echo "Do Flatpak stuff"
else
echo "Do systemd stuff"
fi