Формирование Flatpak-манифеста
Ссылки
Общая документация построения манифестов Flatpak — https://docs.flatpak.org/en/latest/building.html
Основные отличия формата манифестов Flatpak
packages/modules
Вместо modules используется packages. packages может хранить как массив значений, так и словарь:
Если передан массив пакетов, то:
- указанные пакеты будут пересобраны под
%_prefix=/app; - их зависимости будут установлены и файлы будут перемещены под
/app
Пример
packages:
- package-name-1
- package-name-2Пакеты package-name-1 и package-name-2 будут пересобраны под %_prefix=/app, а их зависимости установлены и файлы перемещены под /app
Если передан словарь, то поведение зависит от полей объектов:
- Если объект пуст, то поведение будет аналогично передаче массива;
- Если объект содержит поле
patchсо значением, равным пути до патч-файла относительно манифеста, то данный патч будет применён к спеку, а затем поведение будет аналогично передаче массива. - Если объект содержит поле
binaryсо значениемtrue, то он будет установлен и перемещён под/app;
Пример
packages:
package-name-1:
package-name-2:
patch: package-name-2.patch
package-name-3:
binary: truepackage-name-1— пакет будет пересобран под%_prefix=/app, а его зависимости установлены и файлы перемещены под/apppackage-name-2— на спек пакета будет наложен патчpackage-name-2.patch, затем пакет будет пересобран под%_prefix=/app, а его зависимости установлены и файлы перемещены под/apppackage-name-3— пакет не будет пересобран, а просто установится вместе с зависимостями и файлы будут перемещены под/app.
build-commands
Список Bash-команд, которые будут выполнены на этапе формирования окружения,
Пример YAML-манифеста
Манифест приложения
yaml
app-id: org.altlinux.Tuner
branch: sisyphus
runtime-name: org.altlinux.GNOME.Platform
sdk-name: org.altlinux.GNOME.Sdk
runtime-version: sisyphus
packages:
- tuner
- tuner-tweaks
command: tuner
finish-args: |-
--share=ipc
--socket=fallback-x11
--socket=wayland
--talk-name=ca.desrt.dconf
--filesystem=xdg-run/dconf
--filesystem=xdg-config/dconf
--filesystem=host-os:ro
--env=GIO_EXTRA_MODULES=/app/lib64/gio/modules
--env=LIBRARY_PATH=/app/lib:/app/lib64:/app/extensions/lib64:/usr/lib:/usr/lib64:/run/host/lib:/run/host/lib64
--talk-name=org.freedesktop.Flatpak
--system-talk-name=org.freedesktop.PolicyKit1
--device=dri
build-commands: |-
mkdir -p extensions
rm -rf lib64/tuner/plugins
mkdir -p lib64/tuner
ln -s /app/extensions/lib64/tuner/plugins lib64/tuner/plugins
add-extensions:
org.altlinux.Tuner.tweaks:
directory: extensions
autodelete: true
cleanup:
- bin/pydoc3
- bin/python3
- share/doc
- share/gtk-doc
- share/manМанифест расширения для приложения
yaml
app-id: org.altlinux.Tuner.tweaks
branch: sisyphus
build-extension: true
separate-locales: false
runtime-name: org.altlinux.GNOME.Platform
sdk-name: org.altlinux.GNOME.Sdk
runtime-version: sisyphus
packages:
- tuner-tweaksМанифест платформы
yaml
id: org.altlinux.GNOME.Platform
runtime_name: org.altlinux.GNOME.Platform
sdk_name: org.altlinux.GNOME.Sdk
runtime_version: sisyphus
branch: sisyphus
finish-args: |-
--env=ALSA_CONFIG_DIR=/usr/share/alsa
--env=ALSA_CONFIG_PATH=/usr/share/alsa/alsa.conf
--env=GI_TYPELIB_PATH=/app/lib64/girepository-1.0:/app/lib/girepository-1.0:/usr/lib64/girepository-1.0
--env=GST_PLUGIN_SYSTEM_PATH=/app/lib64/gstreamer-1.0:/usr/lib64/extensions/gstreamer-1.0:/usr/lib64/gstreamer-1.0
--env=LIBVA_DRIVERS_PATH=/usr/lib64/dri-intel-vaapi:/usr/lib64/dri-nvidia-vaapi:/usr/lib64/GL/lib/dri
--env=LUA_PATH="/app/share/lua/5.4/?.lua;/app/share/lua/5.4/?/init.lua;/app/lib64/lua/5.4/?.lua;/app/lib64/lua/5.4/?/init.lua;;"
--env=LUA_CPATH="/app/lib64/lua/5.4/?.so;;"
--env=PATH=/app/sbin:/app/bin:/usr/sbin:/usr/bin
--env=PINENTRY_BINARY=/usr/bin/pinentry-gnome3
--env=PYTHONUSERBASE=/var/data/python
--env=TCLLIBPATH=/app/lib64/tcl8.6
--env=LIBRARY_PATH=/app/lib:/app/lib64:/usr/lib:/usr/lib64:/run/host/lib:/run/host/lib64 #
--env=LD_LIBRARY_PATH=/app/lib:/app/lib64:/usr/lib:/usr/lib64:/run/host/lib:/run/host/lib64
--env=XDG_DATA_DIRS=/app/share:/usr/share:/usr/share/runtime/share:/run/host/user-share:/run/host/share
--env=PYTHONPATH=/app/lib/python3/site-packages:/app/lib64/python3/site-packages:/app/lib/python*/site-packages:/app/lib64/python*/site-packages
add-extensions:
org.altlinux.Platform.GL:
directory: lib64/GL
add-ld-path: lib
merge-dirs: egl/egl_external_platform.d;glvnd/egl_vendor.d;lib/clc;lib/dri;lib/gbm;OpenCL/vendors;vdpau;vulkan/explicit_layer.d;vulkan/icd.d;vulkan/implicit_layer.d
subdirectories: true
no-autodownload: true
download-if: active-gl-driver
enable-if: active-gl-driver
autoprune-unless: active-gl-driver
autodelete: true
org.altlinux.Platform.VAAPI.Intel:
directory: lib64/dri-intel-vaapi
add-ld-path: lib
autodelete: false
no-autodownload: true
download-if: have-intel-gpu
autoprune-unless: have-intel-gpu
org.altlinux.Platform.VAAPI.nvidia:
directory: lib64/dri-nvidia-vaapi
autodelete: false
no-autodownload: true
download-if: have-kernel-module-nvidia
autoprune-unless: have-kernel-module-nvidia
org.altlinux.Platform.VulkanLayer:
directory: lib64/vulkan
add-ld-path: lib
merge-dirs: share/vulkan/implicit_layer.d;share/vulkan/explicit_layer.d;
subdirectories: true
no-autodownload: true
org.altlinux.GNOME.Platform.Locale:
directory: share/runtime/locale
subdirectories: true
autodelete: true
org.altlinux.Platform.GStreamer:
directory: lib64/extensions/gstreamer-1.0
subdirectories: true
autodelete: true
org.altlinux.Platform.openh264:
directory: lib64/openh264
add-ld-path: extra
no-autodownload: true
org.altlinux.Gtk3theme:
directory: share/runtime/share/themes
version: 'sisyphus'
subdirectories: true
autodelete: true
cleanup-commands: |
mv -f /usr/bin/flatpak-xdg-email /usr/bin/xdg-email
mv -f /usr/bin/flatpak-xdg-open /usr/bin/xdg-open
rm -f /etc/ssh/ssh_config.d/*
# enable dynamic ld.so.cache generation
[ -e /usr/bin/ldconfig ] || ln -s ../sbin/ldconfig /usr/bin/ldconfig
cat /etc/ld.so.conf.d/*.conf > /etc/ld.so.conf
rm -f /etc/ld.so.conf.d/*.conf
# User ALSA configuration can conflict with flatpak setup
# https://gitlab.com/freedesktop-sdk/freedesktop-sdk/-/issues/857
# sed -e '/~\/\.asoundrc/d' -e 's|/alsa/asoundrc|/asound.conf|' /usr/share/alsa/alsa.conf
# Create symlinks to expected locations from GL extensions
rm -fr /etc/{egl,glvnd,OpenCL,vulkan}
rm -fr /usr/lib64/{clc,d3d,dri,gallium-pipe,gbm,vdpau}/
ln -s /lib64/GL/{egl,glvnd,OpenCL,vulkan} /etc/
ln -s /lib64/GL/lib/{dri,gbm} /lib64/GL/vdpau /usr/lib64/ ####
rm -f /usr/lib64/libdrm_*.so*
# Create symlinks to expected locations from Vulkan extensions
rm -fr /usr/share/vulkan
ln -s ../lib64/vulkan/share/vulkan /usr/share/vulkan
rm -fr /usr/share/doc
# Link host monitor files into /etc
mkdir -p /etc
for f in hosts resolv.conf localtime host.conf gai.conf; do
rm -f "/etc/$f"
ln -s "/run/host/monitor/$f" "/etc/$f"
done
packages:
- appstream-compose
- libalsa
- libadwaita
- libadwaita-gir
- aspell
- bash-completion
- cracklib
- dbus-tools
- ffmpeg
- fontconfig
- fonts-ttf-dejavu
- fonts-ttf-adwaita
- fonts-ttf-gnu-freefont-serif
- fonts-ttf-google-crosextra-carlito
- fonts-ttf-google-noto-emoji-color
- fonts-ttf-liberation
- frei0r-plugins
- gcrypt-utils
- glib-networking
- glib2
- gnupg2
- gnutls-utils
- gstreamer1.0
- libgstreamer1.0
- gst-plugins-base1.0
- libgst-plugins1.0-gir
- gst-plugins-good1.0
- gst-plugins-bad1.0
- gst-plugin-gtk4
- gst-plugins-clutter1.0
- gst-plugins-libcamera1.0
- gst-plugins-nice1.0
- gst-pipeline-studio
- libgstreamer1.0-gir
- liba52
- libmpeg2
- gzip-utils
- hunspell-utils
- icu-utils
- libcurl
- libaom-tools
- libcap-utils
- libcrypto3
- libEGL
- libgio
- libGL
- libGLES
- libglvnd
- libGLX
- libgee0.8
- libgtk+3
- libgtk+3-gir
- libgtk4
- libgtk4-gir
- libjpeg-utils
- libjxl-tools
- libcxx
- libOpenGL
- libsasl2-3
- libSDL2
- libSDL2_gfx
- libSDL2_image
- libSDL2_mixer
- libSDL2_net
- libSDL2_pango
- libsdl2_sound2
- libSDL2_ttf
- libwebp-tools
- libwireplumber-0.5
- libwireplumber-0.5-gir
- ocl-icd
- openssh-clients
- pipewire-jack
- pipewire-libs
- pipewire-jack-libs
- pipewire-utils
- procps
- python3-base
- python3-module-mako
- python3-module-markdown
- python3-module-pycairo
- python3-module-pygobject3
- python3-module-setuptools
- python3-module-pyfuse3
- rfkill
- shared-mime-info
- sqlite3
- terminfo
- unzip
- v4l-utils
- wget
- xdg-user-dirs
- xdg-utils
- xz
- zenity
- zip
- zstd
- libappstream-glib
- flatpak-xdg-utils
- xkeyboard-config
- gettext
- tzdata
- glibc-timezones
- glibc-utils
- glibc-locales
- libpulseaudio
- libopenal1
- libvulkan1
- libEGL-mesa
- libGLU
- libssl3
- libnss
- libnma
- libproc2_1
- libportal-gtk4
- libportal-gtk4-gir
- fuse
- libevent
- libgjs
- altlinux-release-sisyphus
- libwebp-pixbuf-loader
- dconf
- gsettings-desktop-schemas-gir
- libsoup
- libsoup3.0
- libsoup3.0-gir
- bsdtar
- libjson-glib-gir
- libtuner1
- libclapper
- libgtksourceview5
- libdecor-0
- libfmt12
- libspdlog1.17Манифест расширения для платформы
yaml
id: org.altlinux.Platform.GL.default
build-extension: true
runtime_name: org.altlinux.GNOME.Platform
sdk_name: org.altlinux.GNOME.Sdk
runtime_version: sisyphus
branch: sisyphus
build-commands: |
rm -rf sbin lib include libexec lib64/gawk lib64/libfakeroot lib64/ossl-modules lib64/pkcs11 lib64/python* lib64/security
mv lib64 lib
ls bin | grep -v "^mesa-" | xargs -I {} rm bin/{}
ln -s share/glvnd glvnd
ln -s lib/vdpau vdpau
ln -s /etc/OpenCL OpenCL
ln -s share/vulkan vulkan
sed -i 's|/usr/lib64/||g' share/vulkan/icd.d/*.json share/glvnd/egl_vendor.d/*.json
packages:
- libEGL
- libOpenGL
- libEGL-mesa
- libGLX-mesa
- libMesaOpenCL
- libvdpau
- xorg-dri-swrast
- libdrm
- libsensors
- xorg-dri-intel
- xorg-dri-nouveau
- xorg-dri-radeon
- xorg-dri-virtio
- vulkan-mesa-layers
- vulkan-filesystem
- libvulkan1
- mesa-dri-drivers
- libgbm
- xorg-dri-vmwgfx
- libdisplay-info