Версии: 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 или перезагрузиться повторно - пакет успешно устанавливается. Аналогично для политики удаления пакетов.
Добавил 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']"
Прошу рассмотреть предложенное мной исправление: https://github.com/altlinux/gpupdate/pull/210 В gpoa мы сначала вызывали self.start_frontend(), тем самым запуская applier, а только потом сохраняли новый dconf с помощью save_dconf(self.username, self.is_machine, nodomain). Необходимо было поменять порядок вызова метода и функции.
Благодарю за PR! Я рассмотрю ваше исправление в рамках подготовки следующего релиза.