Ошибка применения Политик ПО (aldpro-gpupdate --swp)

NewGriff

Участник
Регистрация
29.09.25
Сообщения
11
Реакции
2

АЛДПРО 2.4.1​

Часто сталкиваюсь с подобной проблемой при ручном запуске обновления Политик ПО (не путать с обновлением Групповых Политик).
Ошибка часто уходит после перезагрузки, поэтому долгое время списывал это на баг системы и не погружался сильно в проблему.
И вот наконец меня это достало плюс появилось немного свободного времени на подумать и я начал разбираться. Ну как разбираться, загрузил вывод в Deepseek. И каким же ленивым болваном я себя почувствовал, когда увидел причину такого поведения.
Надеюсь это кому-то пригодится.
(Ну и если обнаружите неточность или ошибку - WELCOME - срач в каментах одобрямс)

PS: Может сложиться впечатление, что где-то вы это уже видели. Да что-то похожее вы могли видеть ЗДЕСЬ

Проблема:​

При выполнении команды aldpro-gpupdate --swp --verbose выдается ошибка.

Traceback (most recent call last):
File "/usr/bin/aldpro-salt-call", line 25, in <module>
sys.exit(salt_call())
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/scripts.py", line 443, in salt_call
client.run()
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/cli/call.py", line 50, in run
caller.run()
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/cli/caller.py", line 95, in run
ret = self.call()
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/cli/caller.py", line 203, in call
self.opts, data, func, args, kwargs
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 159, in __call__
ret = self.loader.run(run_func, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1245, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1260, in _run_as
return _func_or_method(*args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/executors/direct_call.py", line 10, in execute
return func(*args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 159, in __call__
ret = self.loader.run(run_func, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1245, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1260, in _run_as
return _func_or_method(*args, **kwargs)
File "/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swp_sum.py", line 471, in build_and_run_swp
salt=__salt__,
File "/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py", line 171, in apply_policy
packages = _manage_packages(assigned_software, actual_software, salt)
File "/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py", line 52, in _manage_packages
default_pkgs_versions = json.load(f)
File "/usr/lib/python3.7/json/__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File "/usr/bin/aldpro-salt-call", line 25, in <module>
sys.exit(salt_call())
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/scripts.py", line 443, in salt_call
client.run()
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/cli/call.py", line 50, in run
caller.run()
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/cli/caller.py", line 95, in run
ret = self.call()
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/cli/caller.py", line 203, in call
self.opts, data, func, args, kwargs
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 159, in __call__
ret = self.loader.run(run_func, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1245, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1260, in _run_as
return _func_or_method(*args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/executors/direct_call.py", line 10, in execute
return func(*args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 159, in __call__
ret = self.loader.run(run_func, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1245, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/opt/rbta/venvs/aldpro-common/lib/python3.7/site-packages/salt/loader/lazy.py", line 1260, in _run_as
return _func_or_method(*args, **kwargs)
File "/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swp_sum.py", line 471, in build_and_run_swp
salt=__salt__,
File "/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py", line 171, in apply_policy
packages = _manage_packages(assigned_software, actual_software, salt)
File "/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py", line 52, in _manage_packages
default_pkgs_versions = json.load(f)
File "/usr/lib/python3.7/json/__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File "/usr/sbin/aldpro-gpupdate", line 174, in <module>
run()
File "/usr/sbin/aldpro-gpupdate", line 112, in run
'aldpro-salt-call swp_sum.build_and_run_swp force=True verbose=True')
File "/usr/sbin/aldpro-gpupdate", line 77, in run_command_with_show_stdout
raise Exception('Произошла ошибка. Пожалуйста, попробуйте выполнить команду повторно. \n')
Exception: Произошла ошибка. Пожалуйста, попробуйте выполнить команду повторно.

Причина:​

Причина описана в это строке:

File "/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py", line 52, in _manage_packages
1. Файл, который пытается открыть `json.load()`, пуст
2. Файл содержит не JSON, а другой текст (ошибку, лог, пробелы)
3. Путь к файлу указан неверно или файл недоступен

Проблема возникает, потому что файл создается при первом вызове с json.dump({}, f), но позже что-то записывает в него невалидные данные или файл повреждается (например, при аварийном завершении записи).

Решение:​

Есть короткий путь, не проверяя записать пустой JSON файл. Но это делать только если вам лень читать все остальное, ибо много букав, или если вы точно уверены, что проблема именно в этом. В любом случае это не сломает систему, а просто обнулит файл и сделает его валидным. Данные в него будут записаны автоматически при следующем обновлении Политик ПО.

echo '{}' > /opt/rbta/aldpro/sw-default_pkg_versions.json

Для тех, кто не боится читать, пояснения.


1. Узнайте, какой путь содержится в переменной в DEFAULT_PKG_VERSIONS_PATH
grep -r "DEFAULT_PKG_VERSIONS_PATH" /var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/

у меня такой результат, возможно это будет меняться в других версиях АЛД.
root@pc13628:~# grep -r "DEFAULT_PKG_VERSIONS_PATH" /var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/
/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py: DEFAULT_PKG_VERSIONS_PATH = "/opt/rbta/aldpro/sw-default_pkg_versions.json"
/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py: if not os.path.exists(DEFAULT_PKG_VERSIONS_PATH):
/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py: with open(DEFAULT_PKG_VERSIONS_PATH, 'w') as f:
/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py: with open(DEFAULT_PKG_VERSIONS_PATH, 'r') as f:
/var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/swpolicy_manager.py: with open(DEFAULT_PKG_VERSIONS_PATH, 'w') as f:
Двоичный файл /var/cache/salt/minion/extmods/aldpro-standalone.minion/modules/__pycache__/swpolicy_manager.cpython-37.pyc совпадает

2. Посмотрите содержимое найденного файла:
cat /opt/rbta/aldpro/sw-default_pkg_versions.json
А еще лучше заканчивать ездить на КОТИКАХ и использовать нормальный LESS, хотя я предпочитаю vi (ВНИМАНИЕ!!! Выход из режима просмотра при использовании команды vi без предварительной подготовки возможен только перезагрузкой системы. Или последовательным нажатием ESC -> : -> q! -> Enter)

less /opt/rbta/aldpro/sw-default_pkg_versions.json
Я постоянно вижу пустой фал.

3. Так же стоит проверить права на файл
ls -la /opt/rbta/aldpro/sw-default_pkg_versions.json
результат должен быть такой:


4. Ну и когда мы убедились, что проблема в этом, смело запускаем команду
echo '{}' > /opt/rbta/aldpro/sw-default_pkg_versions.json

Или делаем это руками через любой удобный редактор

Проверка:​


Запустить применение политик

aldpro-gpupdate --swp --verbose
 
Последнее редактирование:
Назад
Сверху Снизу