Стенд: клон шаблона poligon 3138 (sisyphus-workstation-11.2, GNOME, x86_64), `apt-get dist-upgrade` до Sisyphus от 2026-09-16 (490 пакетов, ядро 6.12.103), перезагрузка. После перезагрузки GDM не показывает экран входа — чёрный экран. Журнал: gnome-shell: cannot register existing type 'ActUserManager' GdmDisplay: Session never registered, failing org.gnome.Shell@gdm.service: Failed with result 'timeout' В системе одновременно установлены: libaccountsservice-26.12.8-alt3 (из p11, libaccountsservice.so.0) libaccountsservice-gir-26.12.8-alt3 (из p11, /usr/lib64/girepository-1.0/AccountsService-1.0.typelib) libaccountsservice1-26.27.3-alt1 (Sisyphus, libaccountsservice.so.1) а libaccountsservice1-gir-26.27.3-alt1 не поставлен. Механизм. В accountsservice-26.27.3-alt1 («Ported to SLP», closes: #60523) подпакеты переименованы: libaccountsservice -> libaccountsservice1, libaccountsservice-gir -> libaccountsservice1-gir. Obsoletes/Conflicts на старые имена в спеке нет ни у одного подпакета — в текущем spec из Sisyphus (rdb specfile_by_name, accountsservice-26.27.3-alt1) секции содержат только %package -n lib%name%sover Requires: lib%name%sover = %EVR (в основном пакете) %package -n lib%name%sover-gir Requires: lib%name%sover = %EVR По rdb (sisyphus, x86_64) у libaccountsservice1-gir-26.27.3-alt1: require: libaccountsservice1, typelib(GObject), typelib(Gio) provide: libaccountsservice1-gir, typelib(AccountsService) (obsolete/conflict отсутствуют) У libaccountsservice-gir-26.12.8-alt3 (p11) — тот же файл /usr/lib64/girepository-1.0/AccountsService-1.0.typelib и то же provide typelib(AccountsService). gnome-shell-50.4-alt1 требует typelib(AccountsService) без версии (rdb, список require). Требование уже удовлетворено старым пакетом, поэтому apt новый gir не подтягивает, а старый не удаляет — Obsoletes/Conflicts между ними нет, хотя оба ставят один и тот же путь. В результате gnome-shell слинкован с libaccountsservice.so.1 (libaccountsservice1-26.27.3), а через GObject Introspection грузит typelib от so.0: типы ActUserManager регистрируются дважды, GJS падает, гритер не стартует. Обходится вручную: # apt-get install libaccountsservice1-gir libaccountsservice-gir- После этого GDM поднимается штатно. Воспроизведено независимо на двух клонах того же шаблона (GNOME 50.4/Wayland и MATE 1.28/X11): после dist-upgrade с 11.2 на Sisyphus графический вход не поднимается ни там, ни там. Ожидаемый результат: dist-upgrade заменяет старые подпакеты новыми, GDM показывает экран входа. Примерное исправление (пересборкой не проверено), accountsservice.spec: %package -n lib%name%sover-gir Summary: GObject introspection data for the accountsservice library Group: System/Libraries Requires: lib%name%sover = %EVR Obsoletes: lib%name-gir < %EVR Conflicts: lib%name-gir Для -gir это обязательно: оба пакета ставят один файл и одно provide, без Obsoletes/Conflicts apt их не разводит. Заодно имеет смысл добавить `Obsoletes: lib%name < %EVR` в lib%name%sover — libaccountsservice.so.0 в Sisyphus больше никем не поставляется, и старый пакет остаётся на машине мусором.
accountsservice-26.27.3-alt2 -> sisyphus: Thu Sep 17 2026 Vladimir Romanov <rirusha@altlinux> 26.27.3-alt2 - Add Obsoletes/Provides for renamed packages. (closes: #60594)
Исправление было сделано неправильно. Не нужно было изначально libaccountsservice-gir переименовывать в libaccountsservice1-gir, так как его содержимое не содержит никакой разницы с libaccountsservice-gir. Верните изначальное имя libaccountsservice-gir и заобсолетьте libaccountsservice1-gir. А у libaccountsservice1 не надо делать обсолетес libaccountsservice, это убивает саму идею Shared Libs Policy.
(Ответ для Антон Мидюков на комментарий #2) > Исправление было сделано неправильно. > Не нужно было изначально libaccountsservice-gir переименовывать в > libaccountsservice1-gir, так как его содержимое не содержит никакой разницы > с libaccountsservice-gir. > Верните изначальное имя libaccountsservice-gir и заобсолетьте > libaccountsservice1-gir. А у libaccountsservice1 не надо делать обсолетес > libaccountsservice, это убивает саму идею Shared Libs Policy. Но ведь gir пакет содержит бинарный typelib, который имеет sover (1.0). Вполне может быть ситуация, когда выйдет 2.0 и некоторым приложениям можно все ещё требовался 1.0
(Ответ для Vladimir Romanov на комментарий #3) > (Ответ для Антон Мидюков на комментарий #2) > > Исправление было сделано неправильно. > > Не нужно было изначально libaccountsservice-gir переименовывать в > > libaccountsservice1-gir, так как его содержимое не содержит никакой разницы > > с libaccountsservice-gir. > > Верните изначальное имя libaccountsservice-gir и заобсолетьте > > libaccountsservice1-gir. А у libaccountsservice1 не надо делать обсолетес > > libaccountsservice, это убивает саму идею Shared Libs Policy. > > Но ведь gir пакет содержит бинарный typelib, который имеет sover (1.0). > Вполне может быть ситуация, когда выйдет 2.0 и некоторым приложениям можно > все ещё требовался 1.0 Не нужно переименовывать пакет, если его содержимое не меняется. Когда выйдет, тогда и измените его имя. Версия typelib не имеет никакого отношения к sover.
Изначально баг был не про выбор имени GIR-пакета, а про некорректный upgrade p11 → Sisyphus. После переименования libaccountsservice-gir в libaccountsservice1-gir старый GIR-пакет оставался установленным: требование typelib(AccountsService) уже выполнялось, поэтому новый пакет не подтягивался. Старый typelib загружался вместе с libaccountsservice.so.1, из-за чего падал GDM. Здесь важно не смешивать две разные версии: - libaccountsservice.so.0 / .so.1 — ABI и SONAME ELF-библиотеки; - AccountsService-1.0.typelib — версия GIR namespace/API. 1.0 в имени typelib не означает libaccountsservice.so.1. GIR-пакет не обязан переименовываться при каждом изменении SONAME. В typelib действительно может быть записано имя используемой shared library, поэтому зависимость на соответствующую библиотеку нужна и typelib иногда надо пересобирать. Но это не меняет GIR namespace и не требует менять имя RPM-пакета. Если интерфейс действительно станет несовместимым, upstream должен выпустить новый namespace, например AccountsService-2.0.typelib. Тогда это будет отдельная версия GIR API. SONAME сам по себе для этого недостаточен. Поэтому правильнее вернуть имя libaccountsservice-gir, оставить у него: Requires: libaccountsservice1 = %EVR а уже выпущенный libaccountsservice1-gir заменить переходом через Obsoletes/Provides. При этом libaccountsservice1 не должен обсолетить libaccountsservice: библиотеки с разными SONAME должны устанавливаться параллельно по правилам SLP.
accountsservice-26.27.3-alt3 -> sisyphus: Sat Sep 19 2026 Vladimir Romanov <rirusha@altlinux> 26.27.3-alt3 - Fixed `-gir` subpackage name. (closes: #60594) - Removed `Obsoletes` to `libaccountsservice` from `libaccountsservice1`.