Bug 44505

Summary: control libnss-role status не работает
Product: Sisyphus Reporter: Mikhail Efremov <sem>
Component: libnss-systemdAssignee: Alexey Shabalin <shaba>
Status: REOPENED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: amakeenk, arseny, lav, piastry, shaba, sin
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Mikhail Efremov 2022-11-30 18:49:04 MSK
[root@host-39 ~]# control libnss-role
unknown
[root@host-39 ~]# grep ^group /etc/nsswitch.conf
group:      files role systemd
Comment 1 Evgeny Sinelnikov 2022-12-01 21:54:13 MSK
Это не бага, а фича.

Модуль role должен быть последним в списке модулей. Если он не последний, то состояние не определено, то есть unknown. Код, который добавляет модуль systemd должен быть поправлен, чтобы учитывать это.

В каком пакете реализовано добавление systemd в список nss модулей?
Comment 2 Evgeny Sinelnikov 2022-12-01 22:07:27 MSK
Скрипт добавляющий nss модуль systemd в стек базы group нужно поправить, чтобы модуль role оставался последним.

[sin@base ~]$ rpm -qf /lib64/libnss_systemd.so.2 --scripts 
postinstall scriptlet (using /bin/sh):
if [ -f /etc/nsswitch.conf ] ; then
            grep -E -q '^(passwd|group):.* systemd' /etc/nsswitch.conf ||
            sed -i.rpmorig -r -e '
                s/^(passwd|group):(.*)/\1:\2 systemd/
                ' /etc/nsswitch.conf >/dev/null 2>&1 || :
fi
update_chrooted all
postuninstall scriptlet (using /bin/sh):
if [ "$1" = "0" ]; then
        if [ -f /etc/nsswitch.conf ] ; then
                sed -i.rpmorig -e '
                        /^(passwd|group):/ !b
                        s/[[:blank:]]\+systemd\>//
                        ' /etc/nsswitch.conf >/dev/null 2>&1 || :
        fi
fi
update_chrooted all
Comment 3 Mikhail Efremov 2022-12-01 22:15:17 MSK
Наверняка есть и другие пакеты, добавляющие модули в /nsswitch.conf. И я не знаю как гарантировать, что role добавляется последним для всех существующих и будущих скриптов.
Comment 4 Evgeny Sinelnikov 2022-12-01 22:22:59 MSK
Единственное системное решение, которое я предлагаю в дальнейшем реализовать - это управление nss-модулями через системный интерфейс. PAM у нас уже управляется через control. Тоже самое можно реализовать и для NSS. Ручная правка конфигов, даже в скриптах, всегда может приводить к коллизиям. В федоре, такой инструмент вообще в монстра генерирующего конфиги превратили. Ну, то есть тоже в системный инструмент.

Итого, все модули, которые правят NSS нужно приводить к тому или иному policy. И лучше всего, вместо множества слов на wiki (они тоже полезны, конечно), это policy реализовать в виде соответствующего инструмента.

На текущий момент эта идея требует проработки, а решение все равно потребует правки скриптов. Я уже готовлю исправление для libnss-systemd, решающее текущую проблему.
Comment 5 Evgeny Sinelnikov 2022-12-02 04:38:10 MSK
Отправил исправления на сборку:
#310998 BUILDING #1 [locked] p10 systemd.git=249.13-alt2
#310997 BUILDING #1 [locked] sisyphus systemd.git=251.8-alt2

Кроме совместимости с libnss-role, исправил скрипты вычищающие записи в nsswitch.conf после удаления пакетов.
Comment 6 Repository Robot 2022-12-02 14:58:28 MSK
systemd-1:251.8-alt2 -> sisyphus:

 Fri Dec 02 2022 Evgeny Sinelnikov <sin@altlinux> 1:251.8-alt2
 - Fix libnss-systemd postinstall scriptlet for compatibility with libnss-role
   conflict in order of modules in group NSS database (closes: #44505).
 - Fix postuninstall scriptlets for cleanup systemd and mymachines NSS modules.
Comment 7 Alexander Makeenkov 2022-12-09 11:22:56 MSK
(Ответ для Evgeny Sinelnikov на комментарий #5)
> Отправил исправления на сборку:
> #310998 BUILDING #1 [locked] p10 systemd.git=249.13-alt2

Проверил в p10 (только задание 311286, там версия уже более новая).
Похоже, что ошибка не исправлена.

Система: ALT Workstation K 10.1

Ситуация до обновления:

# control libnss-role; grep ^group /etc/nsswitch.conf; rpm -q libnss-systemd
unknown
group:      files role systemd
libnss-systemd-249.13-alt1.x86_64

Ситуация после обновления:

# control libnss-role; grep ^group /etc/nsswitch.conf; rpm -q libnss-systemd
unknown
group:      files role systemd
libnss-systemd-249.13-alt3.x86_64

Результат не изменился.

Проверил на системах ALT Workstation 10 и ALT Education 10, там ошибка не воспроизводится даже без задания (поскольку role прописано в конце строки), после задания результат не меняется:

# control libnss-role; grep ^group /etc/nsswitch.conf
enabled
group:      files systemd role

Попробовал переместить role в другое положение (group: files role systemd и group: role files systemd), после обновления результат не меняется, control libnss-role возвращает результат unknown
Comment 8 Repository Robot 2022-12-13 17:54:10 MSK
systemd-1:249.13-alt3 -> p10:

 Tue Dec 06 2022 Slava Aseev <ptrnine@altlinux> 1:249.13-alt3
 - Provide necessary environment variables to user-managed generators.
   (backport from sisyphus)
 Thu Dec 01 2022 Evgeny Sinelnikov <sin@altlinux> 1:249.13-alt2
 - Fix libnss-systemd postinstall scriptlet for compatibility with libnss-role
   conflict in order of modules in group NSS database (closes: #44505).
 - Fix postuninstall scriptlets for cleanup systemd and mymachines NSS modules.
Comment 9 Alexander Makeenkov 2022-12-13 18:02:06 MSK
(Ответ для Alexander Makeenkov на комментарий #7)
> (Ответ для Evgeny Sinelnikov на комментарий #5)
> > Отправил исправления на сборку:
> > #310998 BUILDING #1 [locked] p10 systemd.git=249.13-alt2
> 
> Проверил в p10 (только задание 311286, там версия уже более новая).
> Похоже, что ошибка не исправлена.
> 
> Система: ALT Workstation K 10.1
> 
> Ситуация до обновления:
> 
> # control libnss-role; grep ^group /etc/nsswitch.conf; rpm -q libnss-systemd
> unknown
> group:      files role systemd
> libnss-systemd-249.13-alt1.x86_64
> 
> Ситуация после обновления:
> 
> # control libnss-role; grep ^group /etc/nsswitch.conf; rpm -q libnss-systemd
> unknown
> group:      files role systemd
> libnss-systemd-249.13-alt3.x86_64
> 
> Результат не изменился.
> 
> Проверил на системах ALT Workstation 10 и ALT Education 10, там ошибка не
> воспроизводится даже без задания (поскольку role прописано в конце строки),
> после задания результат не меняется:
> 
> # control libnss-role; grep ^group /etc/nsswitch.conf
> enabled
> group:      files systemd role
> 
> Попробовал переместить role в другое положение (group: files role systemd и
> group: role files systemd), после обновления результат не меняется, control
> libnss-role возвращает результат unknown