Skip to content

Формирование 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: true
  • package-name-1 — пакет будет пересобран под %_prefix=/app, а его зависимости установлены и файлы перемещены под /app
  • package-name-2 — на спек пакета будет наложен патч package-name-2.patch, затем пакет будет пересобран под %_prefix=/app, а его зависимости установлены и файлы перемещены под /app
  • package-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