Bug 40132 - gpg-agent медленно работает, если установлен kf5-kwallet >= 5.82.0-alt2 и не запущен kwalletd5
Summary: gpg-agent медленно работает, если установлен kf5-kwallet >= 5.82.0-alt2 и не ...
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: kf5-kwallet (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Slava Aseev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-06-01 11:50 MSK by Aleksei Nikiforov
Modified: 2021-06-08 16:32 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Aleksei Nikiforov 2021-06-01 11:50:36 MSK
Система: K Workstation x86_64, обновлённая до Сизифа. Установлен kf5-kwallet-5.82.0-alt2, но kwalletd5 не запущен.

После обновления до kf5-kwallet-5.82.0-alt2 стало медленно работать подписывание тэгов в git с использованием запароленного gpg-ключа. Дополнительное исследование показало, что проблема в kf5-kwallet:

gpg-agent запускает pinentry-qt5, pinentry-qt5 пытается проверить пароль в org.freedesktop.secrets через dbus, и секунд 15 висит на этом, и лишь после таймаута переходит к запросу пароля на gpg-ключ.

Воспроизведение:
1) Установить kf5-kwallet-5.82.0-alt2, убедиться что kwalletd5 не запущен.
2) Использовать ключ с паролем в gpg2. Если такого ключа нет - создать.
3) Убедиться что использование gpg-agent не отключено, а пароль - не закэширован в агенте.
4) Использовать ключ для подписи. Можно подписать коммит или тэг в git, или просто какой-либо файл напрямую через gpg2:
$ gpg2 -s CMakeLists.txt
5) После появления окна ввода пароля можно нажать "отмену", чтобы не кэшировать пароль.

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

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

Дополнительная информация:

Выдержка из journalctl:
июн 01 11:34:19 hostname dbus-daemon[13000]: [session uid=1000 pid=13000] Activating service name='org.freedesktop.secrets' requested by ':1.243' (uid=1000 pid=14000 comm="/usr/bin/pinentry-qt5 --display :0 ")
июн 01 11:36:19 hostname dbus-daemon[13000]: [session uid=1000 pid=13000] Failed to activate service 'org.freedesktop.secrets': timed out (service_start_timeout=120000ms)

Судя по всему, запустить dbus-сервис org.freedesktop.secrets не удаётся в описанных выше условиях.

В дополнение к этому, установка gnome-keyring прячет проблему. При этом в journalctl такие записи:
июн 01 11:47:27 hostname dbus-daemon[13000]: [session uid=1000 pid=13000] Activating service name='org.freedesktop.secrets' requested by ':1.246' (uid=1000 pid=15000 comm="/usr/bin/pinentry-qt5 --display :0 ")
июн 01 11:47:27 hostname gnome-keyring-daemon[14990]: couldn't access control socket: /run/user/1000/keyring/control: Нет такого файла или каталога
июн 01 11:47:27 hostname gnome-keyring-d[14990]: couldn't access control socket: /run/user/1000/keyring/control: Нет такого файла или каталога
июн 01 11:47:27 hostname dbus-daemon[13000]: [session uid=1000 pid=13000] Successfully activated service 'org.freedesktop.secrets'
Comment 1 Slava Aseev 2021-06-04 15:10:20 MSK
Как оказалось, когда kwallet отключен, выход происходит вот здесь в функции main:
http://git.altlinux.org/gears/k/kf5-kwallet.git?p=kf5-kwallet.git;a=blob;f=kwallet/src/runtime/kwalletd/main.cpp;h=b56673f78f197bfba4874ef28de2f317396cb8e3;hb=HEAD#l196
К тому времени KWalletD еще не существует.

dbus-сервис kwallet'а регистрируется здесь же на 182 строке в KDBusService dbusUniqueInstance(...) (KDBusService берет информацию из QApplication, в частности название сервиса org.kde.kwalletd5)

Получается, что в момент выхода из программы сервиса org.freedekstop.secrets вообще не существует (в отличие от org.kde.kwalletd5), dbus-daemon так и будет ждать org.freedesktop.secrets и лишь через некоторое время отлетит по таймауту, что мы и наблюдаем в данном баге.

Подобное также будет проявляться в случае, когда Secrets API отключен в конфиге kwalletrc.

Видимо, перед выходом из main при отключенном kwallet нужно также регистрировать сервис org.freedesktop.secrets
Comment 2 Slava Aseev 2021-06-07 11:44:54 MSK
Прошло в сизиф: http://webery.altlinux.org/task/273626
(баг сразу не срезолвился, потому что я перепутал fixes/closes)
Comment 3 Aleksei Nikiforov 2021-06-08 16:32:06 MSK
Обновился, остановил и удалил gnome-keyring, перепроверил. Проблема действительно ушла. Спасибо!