Bug 52181 - Не устанавливаются/удаляются пакеты после первой перезагрузки
Summary: Не устанавливаются/удаляются пакеты после первой перезагрузки
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: gpupdate (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Valery Sinelnikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-11-25 15:54 MSK by Белая Алёна
Modified: 2025-04-15 19:58 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Белая Алёна 2024-11-25 15:54:31 MSK
Версии:
gpui-0.2.55-alt1
gpupdate-0.11.4-alt1
admx-basealt-0.1.13.6-alt1

Стенды:
ALT Education 10.2 XFCE / KDE
ALT KWorkstation 10.4
ALT Workstation 10.2
ALT Server 10.2

Шаги воспроизведения:
1. Открыть GPUI → политика Default Domain Policy
Установить следующие политики:
Компьютер -> Административные шаблоны -> Система ALT -> Групповые политики -> Экспериментальные групповые политики -> Включено
Компьютер -> Административные шаблоны -> Система ALT -> Групповые политики -> Механизмы GPUpdate:
Установка и удаление программ и Установка и удаление программ для пользователей -> Включено

2. Перейти в раздел Компьютер - Административные шаблоны - Система ALT - Управление пакетами
Переключить состояние политики на "Включено", нажать "Редактировать" -> "Добавить", ввести имя пакета (например, telnet) и нажать OK

3. Перезагрузить клиентскую систему и проверить, что пакет установлен. 
# rpm -q telnet

Результат: пакет не установлен

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

При этом политики записываются в кэш после первой перезагрузки:
# cat /var/cache/samba/gpo_cache/SAMBA.TESTDOMAIN/POLICIES/\{31B2F340-016D-11D2-945F-00C04FB984F9\}/MACHINE/REGISTRY.POL
...
[Software\BaseALT\Policies\GPUpdate;PackagesApplier;;;][Software\BaseALT\Policies\Packages\Install;telnet;;;telnet]
...

Но пакет не устанавливается(ожидание около получаса). Если после перезагрузки запустить gpoa или перезагрузиться повторно - пакет успешно устанавливается. 

Аналогично для политики удаления пакетов.
Comment 1 Vladislav Glinkin 2025-04-15 12:54:50 MSK
Добавил pkcon_runner вывод dict_packages, self.install_packages_setting и self.remove_packages_setting, после чего посмотрел, что происходит вообще.

1. Пытаюсь добавить установку пакета telnet. Сначала убедился, что /etc/dconf/db/policy.d/policy.ini не содержит записей о данном пакете. После запуска gpupdate также посмотрел /etc/dconf/db/policy.d/policy.ini

[root@gnome gpoa]# grep -r -i telnet /etc/dconf/db/policy.d/
[root@gnome gpoa]# gpupdate
{'Sync': 1}
[]
[]
Apply group policies for computer.
[root@gnome gpoa]# grep -r -i telnet /etc/dconf/db/policy.d/
/etc/dconf/db/policy.d/policy.ini:Install = "['telnet']"
[root@gnome gpoa]# gpupdate
{'Install': "['telnet']", 'Sync': 1}
['telnet']
[]
Apply group policies for computer.
[root@gnome gpoa]# grep -r -i telnet /etc/dconf/db/policy.d/
/etc/dconf/db/policy.d/policy.ini:Install = "['telnet']"
/etc/dconf/db/policy.d/policy.ini:Install = "{'policy_name': 'Новый объект групповой политики', 'type': 1, 'reloaded_with_policy_key': None, 'is_list': True, 'mod_previous_value': '[″telnet″]'}"
/etc/dconf/db/policy.d/policy.ini:Install = "['telnet']"

В итоге, pkcon_runner запустился раньше, чем обновился /etc/dconf/db/policy.d/policy.ini - пакет не установился, но ключи мы получили. При повторном запуске пакет, соответственно, ставится.

2. Отключил политику установки пакета, настроил политику удаления пакета telnet.

[root@gnome gpoa]# gpupdate
{'Sync': 1, 'Install': "['telnet']"}
['telnet']
[]
Apply group policies for computer.
[root@gnome gpoa]# grep -r -i telnet /etc/dconf/db/policy.d/
/etc/dconf/db/policy.d/policy.ini:Remove = "['telnet']"
/etc/dconf/db/policy.d/policy.ini:Install = "['telnet']"
[root@gnome gpoa]# gpupdate
{'Sync': 1, 'Remove': "['telnet']"}
[]
['telnet']
Apply group policies for computer.
[root@gnome gpoa]# grep -r -i telnet /etc/dconf/db/policy.d/
/etc/dconf/db/policy.d/policy.ini:Remove = "['telnet']"
/etc/dconf/db/policy.d/policy.ini:Remove = "{'policy_name': 'Новый объект групповой политики', 'type': 1, 'reloaded_with_policy_key': None, 'is_list': True, 'mod_previous_value': '[″telnet″]'}"
/etc/dconf/db/policy.d/policy.ini:Remove = "['telnet']"

Опять же, после первого запуска pkcon_runner считывает предыдущее состояние /etc/dconf/db/policy.d/policy.ini

Ещё смутило то, что после первого выполнения gpupdate, в /etc/dconf/db/policy.d/policy.ini получилась какая-то каша:
/etc/dconf/db/policy.d/policy.ini:Remove = "['telnet']"
/etc/dconf/db/policy.d/policy.ini:Install = "['telnet']"
Comment 2 Vladislav Glinkin 2025-04-15 17:20:34 MSK
Прошу рассмотреть предложенное мной исправление:
https://github.com/altlinux/gpupdate/pull/210

В gpoa мы сначала вызывали self.start_frontend(), тем самым запуская applier, а только потом сохраняли новый dconf с помощью save_dconf(self.username, self.is_machine, nodomain).

Необходимо было поменять порядок вызова метода и функции.
Comment 3 Valery Sinelnikov 2025-04-15 19:58:55 MSK
Благодарю за PR! Я рассмотрю ваше исправление в рамках подготовки следующего релиза.