Bug 43747

Summary: Долго запускается на системах с KDE
Product: Sisyphus Reporter: Ivan Alekseev <qwetwe>
Component: appinstallAssignee: Andrey Cherepanov <cas>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: cas, lav, tergoevm
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
Патч исправляющий долгий запуск из меню в KDE none

Description Ivan Alekseev 2022-09-09 12:29:30 MSK
Версия пакета:
appinstall-1.3.3-alt1.noarch

Стенды:
kworkstation-10-x86-64
education-10-x86-64-kde

Шаги для воспроизведения:
1) Запустить App Install из меню приложений

Фактический результат: приложение запускается через две минуты.

Ожидаемый результат: приложение запускается в течение десяти секунд.

Ошибка воспроизводится только на системах с KDE.
На системах с Mate/Xfce приложение запускается в течение 10 секунд.

Сообщения в системном журнале при запуске приложения:

сен 09 12:20:11 kworkstation-10-x86-64-20220909.localdomain systemd[3442]: Started App Install - Установка сторонних приложений.
░░ Subject: Запуск юнита UNIT завершен
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ Процесс запуска юнита UNIT был завершен.
░░ 
░░ Результат: done.
сен 09 12:20:13 kworkstation-10-x86-64-20220909.localdomain consolehelper[24050]: pam_tcb(appinstall:auth): Authentication passed for root from test(uid=500)
сен 09 12:20:13 kworkstation-10-x86-64-20220909.localdomain consolehelper[24064]: executing "/usr/sbin/appinstall": (test --> root --> root)
Comment 1 Ivan Alekseev 2022-09-09 12:47:14 MSK
Из терминала приложение запускается с нормальной скоростью:
$ appinstall
Comment 2 Sergey V Turchin 2022-09-09 13:37:09 MSK
(Ответ для Ivan Alekseev на комментарий #1)
> Из терминала приложение запускается с нормальной скоростью:
> $ appinstall
Он зачем-то запускает
epm installed
для каждого из поддерживаемых им приложений.
Comment 3 Ivan Alekseev 2022-11-02 13:07:04 MSK
Проверялось в Sisyphus, ошибка воспроизводится.
Comment 4 Repository Robot 2023-05-09 07:47:08 MSK
appinstall-1.4.0-alt1 -> sisyphus:

 Mon May 08 2023 Andrey Cherepanov <cas@altlinux> 1.4.0-alt1
 - Show window immediately and display loading animation (ALT #43747)
 - Show only allowed applications from /etc/appinstall/allow.d (ALT #41900)
 - Change installed icon to QStyle.SP_ArrowDown
 - Get installed application list with new epm play parameter --short (ALT #42812, #42802)
Comment 5 Mikhail Tergoev 2023-06-06 12:36:57 MSK
Стенды:
kworkstation (p10)
regular kde (Sisyphus)

Шаги для воспроизведения:
1) Запустить appinstall из меню приложений или с помощью krunner (Alt+F2)

Фактический результат с версией appinstall-1.3.3-alt1.noarch: приложение очень долго запускается.
Фактический результат с версией appinstall-1.4.1-alt1.noarch: приложение запускается в течении 10 секунд, но списка приложений нет долгое время.

Ожидаемый результат: приложение запускается в течение десяти секунд и список приложений появляется сразу.

Если запускать из krunner хитрым способом: 
appinstall </dev/null 
то обе версии appinstall отрабатывают нормально, идём править:
/usr/share/applications/appinstall.desktop 
и добавляем костыль в строку Exec:
Exec=appinstall </dev/null

Результат: всё работает корректно

Причина данного поведения на KDE связана с появлением несуществующей pipe в /stdin если мы запускаем приложение не из терминала в КДЕ, в следствии чего когда appinstall запускает epm play одно из условий определяет на входе pipe.
  
Как вариант исправления данной ошибки, можно сделать, чтобы appinstall запускал внутри себя epm play c явным </dev/null

Подтверждение, что проблема не в epm, а в КDE:
создаем скрипт:
#!/usr/bin/env bash
ls -l /proc/self/fd/0 >> /tmp/script.log
if [ -p /dev/stdin ]  ; then
    echo "PIPE"
else
    echo "NOPIPE"
fi >> /tmp/script.log

читаем что в /tmp/script.log
tail -f /tmp/script.log

запускаем тестовый скрипт из терминала:
/tmp/script 
вывод: lrwx------ 1 fidel fidel 64 июн  6 12:26 /proc/self/fd/0 -> /dev/pts/2
NOPIPE

запускаем тестовый скрипт из терминала но с pipe:
test | /tmp/script 
lr-x------ 1 fidel fidel 64 июн  6 12:27 /proc/self/fd/0 -> pipe:[402571]
PIPE

Логика отрабатывает правильно до тех пор, пока мы не запустим скрипт без терминала, например из файлового менеджера двумя кликами по скрипту или с помощью krunner (Alt+F2): /tmp/script 
Вывод:
lr-x------ 1 fidel fidel 64 июн  6 12:30 /proc/self/fd/0 -> pipe:[397973]
PIPE
Что не является правильным.

Еще раз с помощью krunner (Alt+F2), но немного по-другому: /tmp/script </dev/null
lr-x------ 1 fidel fidel 64 июн  6 12:33 /proc/self/fd/0 -> /dev/null
NOPIPE
а это уже как вариант использования для исправления данной баги. (Но думаю что надо создать еще и для kde.)
Comment 6 Vitaly Lipatov 2023-06-13 11:09:47 MSK
(Ответ для Sergey V Turchin на комментарий #2)
> (Ответ для Ivan Alekseev на комментарий #1)
> > Из терминала приложение запускается с нормальной скоростью:
> > $ appinstall
> Он зачем-то запускает
> epm installed
> для каждого из поддерживаемых им приложений.
А есть какие-то предположения, зачем KDE вызывает приложения с каким-то pipe на stdin?
Comment 7 Mikhail Tergoev 2023-06-13 11:29:51 MSK
Created attachment 13457 [details]
Патч исправляющий долгий запуск из меню в KDE

Явное указание stdin=subprocess.DEVNULL исправило ситуацию с долгим запуском appinstall из меню в KDE. Патч прилагаю.
Comment 8 Mikhail Tergoev 2023-06-13 11:32:55 MSK
(Ответ для Vitaly Lipatov на комментарий #6)
> А есть какие-то предположения, зачем KDE вызывает приложения с каким-то pipe
> на stdin?

Смысл такого поведения рабочего окружения KDE на данный момент мне не понятен.
Comment 9 Andrey Cherepanov 2023-06-13 13:55:14 MSK
(Ответ для Mikhail Tergoev на комментарий #8)
> (Ответ для Vitaly Lipatov на комментарий #6)
> > А есть какие-то предположения, зачем KDE вызывает приложения с каким-то pipe
> > на stdin?
> 
> Смысл такого поведения рабочего окружения KDE на данный момент мне не
> понятен.

Это поведение излишне умного epm, который сильно завязан на окружение терминала и рассчитан на терминал. Спасибо за патч.
Comment 10 Repository Robot 2023-06-13 16:08:19 MSK
appinstall-1.4.2-alt1 -> sisyphus:

 Tue Jun 13 2023 Andrey Cherepanov <cas@altlinux> 1.4.2-alt1
 - Used /dev/null as stdin for prevent epm hang (thanks Mikhail Tergoev) (ALT #43747).