Bug 41704

Summary: не запускаются приложения из alt-репозитория через plasma5-discover
Product: Sisyphus Reporter: Alexandr Shashkin <dutyrok>
Component: aptAssignee: Ivan Zakharyaschev <imz>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: aen, boyarsh, darktemplar, darktemplaralt, glebfm, imz, ldv, mcpain, placeholder, rider, varaksaaa, zerg
Version: unstable   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=42094
Attachments:
Description Flags
пример уведомления none

Description Alexandr Shashkin 2022-01-12 19:21:31 MSK
Created attachment 10116 [details]
пример уведомления

Стенды для тестирования:
* alt-education-10-kde-i586
* alt-education-10-kde-x86-64
* alt-kworkstation-10-x86-64

Версия пакета: plasma5-discover-packagekit-5.23.5-alt1

Шаги, воспроизводящие ошибку:
1) установить plasma5-discover и plasma5-discover-packagekit
2) запустить plasma5-discover
3) перейти во вкладку установленные и открыть страницу любого установленного приложения (к примеру virtualbox)
4) сверху справа нажать кнопку запустить

Результат
Приложения из alt-репозитория (sisyphus, p10 и т.д.) не запускается через discover, в самом discover внизу появляется уведомление: "GetFiles not supported by backend"
Если запустить discover в терминале, то в терминале отобразится: Transaction error:  "GetFiles not supported by backend" PackageKit::Transaction(0x55956dfa69f0)

Ожидаемый результат: 
Приложения из alt-репозиториев можно запустить из discover
Comment 1 Aleksei Nikiforov 2022-01-13 16:36:14 MSK
plasma5-discover для запуска приложений ищет в файлах пакета desktop-файлы и исполняемые файлы. Для этого используется функция GetFiles из packagekit:

https://git.altlinux.org/gears/p/plasma5-discover.git?p=plasma5-discover.git;a=blob;f=discover/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp;h=c4a4396786cb8d85433e02df004671b1a50cb363;hb=0c57b82284df0d327b44538d4d9528b85faf61aa#l199

У packagekit ранее реализация GetFiles была, но она была удалена из-за требования отвязаться от приватных интерфейсов apt:

https://git.altlinux.org/gears/p/packagekit.git?p=packagekit.git;a=commitdiff;h=6db26c8e5c168af20a5307ce953ed9ef1a2ca6ca

Теперь для реализации GetFiles в packagekit нужны интерфейсы в apt для получения списка файлов в пакете. В связи с этим перевешиваю баг на мэйнтейнеров apt.
Comment 2 Anton Farygin 2022-01-13 17:14:20 MSK
насколько я помню (но могу ошибаться) наш apt ничего не знает про desktop файлы в пакете.

Нельзя ли packagekit научить получать списки файлов установленного пакета из librpm ?
Comment 3 Aleksei Nikiforov 2022-01-13 17:28:29 MSK
(Ответ для Anton Farygin на комментарий #2)
> насколько я помню (но могу ошибаться) наш apt ничего не знает про desktop
> файлы в пакете.
> 

apt знает про все файлы в пакете. Зная все файлы, найти из них с определённым суффиксом - элементарно. Вот этого списка всех файлов в пакете и не хватает.

> Нельзя ли packagekit научить получать списки файлов установленного пакета из
> librpm ?

Можно. Но придётся тащить и копировать всю логику по поиску базы данных rpm и работе с ней через librpm из apt ещё и в packagekit. Неразумно такое делать когда в apt готово почти всё.
Comment 4 Anton Farygin 2022-01-13 17:41:01 MSK
в хешах apt нет информации обо всех файлах, иначе бы работал фокус с apt-get install <файл>

Он работает только для бинарей.
Comment 5 Anton Farygin 2022-01-13 17:48:38 MSK
@imz, @ldv - прошу принять решение о том, будем ли мы делать нужный для packagekit интерфейс в apt или выкручиваться каким-то другим способом через librpm ?
Comment 6 Dmitry V. Levin 2022-01-13 17:57:09 MSK
В pkglist есть все файлы, только если он bloat, иначе в нём только такие файлы, которые участвуют в зависимостях.
Все файлы есть только в rpm headers, которые ещё скачать надо.
Comment 7 Aleksei Nikiforov 2022-01-13 18:00:20 MSK
Apt позволяет через приватные API получить список файлов установленного пакета.
Comment 8 Dmitry V. Levin 2022-01-13 18:02:14 MSK
(In reply to Aleksei Nikiforov from comment #7)
> Apt позволяет через приватные API получить список файлов установленного
> пакета.

А вы хотите ограничиться только установленными пакетами?
Comment 9 Aleksei Nikiforov 2022-01-13 18:05:20 MSK
Эта функция используется в plasma5-discover только для запуска приложений из установленных пакетов, поэтому работы этой функции только для установленных пакетов - достаточно.
Comment 10 Ivan Zakharyaschev 2022-01-19 19:53:35 MSK
(In reply to Dmitry V. Levin from comment #8)
> (In reply to Aleksei Nikiforov from comment #7)
> > Apt позволяет через приватные API получить список файлов установленного
> > пакета.
> 
> А вы хотите ограничиться только установленными пакетами?

Раз речь только про установленные, то несложно вытащить упомянутый приватный API наружу, в rpm-независимом виде.

В прошлый раз, когда в итоге было решено выкинуть эту поддержку из packagekit, мы не сообразили, что архитектура для этого в libapt есть. (И, возможно, уже аналогичный публичный API есть в проектах apt-rpm или Debian. В Debian вроде нет, раз там какие-то пляски через вызов dpkg.) Т.е. как не сообразили: я с этим аспектом libapt был плохо знаком, а никто больше альтернативную реализацию не предложил. Теперь я вижу два уровня, напрмиер, DepsList() vs PRCO() (provides-requires-conflicts-obsoletes, переименовал его в последнем релизе для большей похожести на другие проекты, а именно apt-rpm). Подумаю и над списком файлов.
Comment 11 Anton Farygin 2022-01-20 08:59:06 MSK
Ваня, спасибо. У нас тут сроки горят и было бы неплохо эти изменения притащить побыстрее.
Comment 12 Artem Varaksa 2023-07-21 18:28:37 MSK
Для справки, в версии plasma5-discover 5.23.5-alt2 и новее кнопка запуска была временно убрана:

https://git.altlinux.org/gears/p/plasma5-discover.git?p=plasma5-discover.git;a=commit;h=8306e9945d3b23ab045d29be927f1ac523f87b6d