Вопрос или проблема
Я хочу автоматизировать некоторые задачи, связанные с Flatpak, и моя текущая проблема заключается в том, что нужно перечислить все удаленные пакеты и их версии.
Для воспроизводимости я тестирую в Docker-контейнере (fedora
, debian
или ubuntu
) и выполняю следующие команды:
# dnf install -y flatpak # или apt
# flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
Теперь я могу перечислить приложения, но у них нет версий!
# flatpak remote-ls --columns=application,version | head -n 3
app.authpass.AuthPass
app.bbsync.BlackboardSync
app.bluebubbles.BlueBubbles
Также нет версии в деталях отдельного приложения:
# flatpak remote-info flathub org.gnome.Shotwell
ID: org.gnome.Shotwell
Ref: app/org.gnome.Shotwell/x86_64/stable
Arch: x86_64
Branch: stable
Collection: org.flathub.Stable
Download: 15.7 MB
Installed: 30.1 MB
Runtime: org.gnome.Platform/x86_64/47
Sdk: org.gnome.Sdk/x86_64/47
Commit: 696f2d6c2e4021cd048794988f72247dd831497a47dc534a4a9574a35ae92657
Parent: ea367aecbac42a00745e75ff2454cf84338f5379371f6a73870b4ab986a11ad5
Subject: libportal: обновление libportal-0.8.1.tar.xz до 0.9.0 (#93) (d2613444)
Date: 2024-12-22 12:31:43 +0000
Однако, если я выполняю поиск:
# flatpak search shotwell
Name Description Application ID Version Branch Remotes
Shotwell Органайзер цифровых фотографий org.gnome.Shotwell 0.32.9 stable flathub
Я вдруг вижу версии всех пакетов!
# flatpak remote-ls --columns=application,version | head -n 3
app.authpass.AuthPass 1.9.6_1904
app.bbsync.BlackboardSync 0.18.0
app.bluebubbles.BlueBubbles 1.15.0.0
# flatpak remote-info flathub org.gnome.Shotwell
Shotwell - Органайзер цифровых фотографий
ID: org.gnome.Shotwell
Ref: app/org.gnome.Shotwell/x86_64/stable
Arch: x86_64
Branch: stable
Version: 0.32.9
License: LGPL-2.1+
Collection: org.flathub.Stable
Download: 15.7 MB
Installed: 30.1 MB
Runtime: org.gnome.Platform/x86_64/47
Sdk: org.gnome.Sdk/x86_64/47
Commit: 696f2d6c2e4021cd048794988f72247dd831497a47dc534a4a9574a35ae92657
Parent: ea367aecbac42a00745e75ff2454cf84338f5379371f6a73870b4ab986a11ad5
Subject: libportal: обновление libportal-0.8.1.tar.xz до 0.9.0 (#93) (d2613444)
Date: 2024-12-22 12:31:43 +0000
Метаданные (flatpak --version; source /etc/os-release && echo $PRETTY_NAME
):
Flatpak 1.16.0
Fedora Linux 41 (Container Image)
Flatpak 1.14.6
Ubuntu 24.04.1 LTS
Flatpak 1.14.10
Debian GNU/Linux 12 (bookworm)
Я понимаю, что использование Flatpak в контейнерах не очень полезно, но мои тесты используют контейнеры, и я не хочу, чтобы там было различное поведение.
- Как мне инициализировать удаленную информацию Flatpak, чтобы она начала выдавать информацию о версиях в
remote-ls
? - Почему у меня есть эта проблема только в контейнерах, а не на рабочей станции Fedora?
Ответ или решение
Давайте разберем вопрос, связанный с недоступностью атрибута версии в выводе команд Flatpak. Ситуация довольно распространенная и требует подробного объяснения механизма работы Flatpak, а также специфики контейнерных сред, в которых наблюдается эта проблема.
Теория (Theory)
Основное предназначение Flatpak — это предоставление унифицированной среды для распространения приложений, которая независима от основного дистрибутива операционной системы. Flatpak использует централизованные репозитории, такие как Flathub, для хранения и управления приложениями. Однако вся информация о приложении, включая версию, хранится в метаданных Flatpak, которые могут быть не сразу доступны после первоначальной настройки репозитория.
Когда вы добавляете новый удаленный репозиторий с помощью flatpak remote-add
, Flatpak загружает данные о приложениях из этого репозитория, но иногда метаинформация, такая как версии, может не быть сразу доступна. Это может быть связано с необходимостью дополнительной инициализации или обновления кэша метаданных приложения.
Пример (Example)
Как было описано в вашей ситуации, после выполнения команды для добавления репозитория и последующего списка приложений версии приложений не отображаются:
# flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# flatpak remote-ls --columns=application,version | head -n 3
app.authpass.AuthPass
app.bbsync.BlackboardSync
app.bluebubbles.BlueBubbles
Однако после выполнения поиска:
# flatpak search shotwell
Name Description Application ID Version Branch Remotes
Shotwell Digital photo organizer org.gnome.Shotwell 0.32.9 stable flathub
Версии становятся видимыми:
# flatpak remote-ls --columns=application,version | head -n 3
app.authpass.AuthPass 1.9.6_1904
app.bbsync.BlackboardSync 0.18.0
app.bluebubbles.BlueBubbles 1.15.0.0
Применение (Application)
Теперь, чтобы устранить эту проблему и добиться, чтобы метаданные появлялись сразу, можно предпринять несколько шагов:
-
Обновление кэша Flatpak:
Используйте командуflatpak update
, чтобы убедиться, что все метаданные обновлены. Это может восстановить кэш приложений и их версий.# flatpak update
-
Инициализация метаданных:
Выполнение командыflatpak search
действительно может инициализировать или сбросить внутренние кэши Flatpak, инициировав загрузку недостающей информации. -
Особенности контейнеров:
Контейнеры зачастую имеют ограниченные сетевые ресурсы и ограничения безопасности, которые могут препятствовать нормальной работе Flatpak. Если ваша рабочая станция Fedora не испытывает таких проблем, вероятно, сеть в контейнере имеет ограниченный доступ, что влияет на взаимодействие с репозиториями. -
Логирование и диагностика:
Активируйте дополнительное логирование с помощью переменной средыFLATPAK_LOG
для отладки процесса. Это поможет выявить, какие шаги Flatpak предпринимает или пропускает при взаимодействии с метаданными.# FLATPAK_LOG=debug flatpak remote-ls flathub
-
Изоляция сетевого стека контейнера:
Проверьте настройки сети и безопасность контейнера. Возможно, использование более полнофункционального контейнера или установка Flatpak на хост-системе позволит обойти ограничения контейнерных настроек и обеспечить более адекватную загрузку метаданных.
В заключении, проблема отсутствия версий в выводе Flatpak в контейнерных средах может быть разрешена путем указанных выше шагов. Основную роль здесь играет корректное обновление и инициализация метаданных Flatpak, а также настройка сетевых параметров контейнера для улучшения взаимодействия с удаленными репозиториями.