Summary: | После обновления до 0.5.15lorg2-alt56 LUA-скриптам не передаётся переменная script_slot | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Chess <slchess> |
Component: | apt | Assignee: | placeholder <placeholder> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P3 | CC: | boyarsh, evg, glebfm, imz, ldv, placeholder, vseleznv |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux | ||
Bug Depends on: | |||
Bug Blocks: | 32941 |
Description
Chess
2017-02-03 10:25:19 MSK
Знаю. Похоже, проблема в том, что после rpm-4.3 не вызываются нужные хуки apt-а. Пока расследую этот вопрос... Расследование показывает, что apt-log перестал работать после обновления alt55->alt56, потому что не знает, в каком режиме это делать (начало/окончание транзакции). А это определяется по значению переменной script_slot, которая теперь всегда не определена (nil). Получается, добавление поддержки lua5.3 сломало передачу в скрипты script_slot (и других переменных?). Я проверил на парочке других скриптов из apt/contrib/ , использующих script_slot для показа встроенной помощи - эффект тот же, значение не определено. Проверить очень просто: добавить =8<========================================== print(script_slot) return =8<========================================== в начало lua-скрипта. Стало лучше, но всё равно пока плохо: =8<========================================================== root@thinkpad ~ #pkin xorg-conf-synaptics Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено Starting Starting 2 Done Следующие пакеты будут ОБНОВЛЕНЫ: xorg-conf-synaptics 1 будет обновлено, 0 новых установлено, 0 пакетов будет удалено и 1 не будет обновлено. Необходимо получить 3105B архивов. После распаковки будет освобождено 1B дискового пространства. Получено: 1 http://ftp.altlinux.org noarch/classic xorg-conf-synaptics 1.0-alt1 [3105B] Получено 3105B за 0s (12,9kB/s). Совершаем изменения... Подготовка... #################################################################################################### [100%] Обновление / установка... 1: xorg-conf-synaptics-1.0-alt1 #################################################################################################### [ 50%] Очистка / удаление... 2: xorg-conf-synaptics-0.3-alt1 предупреждение: /etc/X11/xorg.conf.d/20-synaptics.conf сохранен как /etc/X11/xorg.conf.d/20-synaptics.conf.rpmsave #################################################################################################### [100%] Завершено. W: Error running script: /usr/share/apt/scripts/log.lua:63: attempt to call a nil value (field 'foreach') root@thinkpad ~ #tail /var/log/apt.log Transaction succeeded at Ср 05 июл 2017 08:13:08 Transaction starting at Ср 05 июл 2017 08:12:56 Transaction succeeded at Ср 05 июл 2017 08:18:11 Transaction starting at Ср 05 июл 2017 08:18:11 =8<========================================================== т.е. script_slot выдаётся скрипту не в том порядке, сначала Scripts::PM::Post, потом Scripts::PM::Pre, хотя должно быть наоборот. И получается результат работы функции pkglist - пуст, в результате ничего не протоколируется. *** Bug 32941 has been marked as a duplicate of this bug. *** (In reply to comment #4) > Стало лучше, но всё равно пока плохо: ... > W: Error running script: /usr/share/apt/scripts/log.lua:63: attempt to call a > nil value (field 'foreach') Всё дело вот в этом месте. Оно сделало file:write, а file:close не сделало, вот они и поменялись местами. > root@thinkpad ~ #tail /var/log/apt.log > Transaction succeeded at Ср 05 июл 2017 08:13:08 > Transaction starting at Ср 05 июл 2017 08:12:56 > Transaction succeeded at Ср 05 июл 2017 08:18:11 > Transaction starting at Ср 05 июл 2017 08:18:11 > =8<========================================================== > > т.е. script_slot выдаётся скрипту не в том порядке, сначала Scripts::PM::Post, > потом Scripts::PM::Pre, хотя должно быть наоборот. > И получается результат работы функции pkglist - пуст, в результате ничего не > протоколируется. script_slot точно правильно выдаётся, просто код на lua слишком старый. Я не силён в lua, но вот так работает: diff --git a/apt/contrib/log/log.lua b/apt/contrib/log/log.lua index ab7bef3..a2c296d 100644 --- a/apt/contrib/log/log.lua +++ b/apt/contrib/log/log.lua @@ -57,14 +57,16 @@ if script_slot == "Scripts::PM::Pre" then end end file:write("Transaction starting at ", os.date(), "\n") - local function write(index, str) - file:write(str) + local function write(list) + for _,n in ipairs(list) do + file:write(n) + end end - table.foreach(removing, write) - table.foreach(installing, write) - table.foreach(reinstalling, write) - table.foreach(downgrading, write) - table.foreach(upgrading, write) + write(removing) + write(installing) + write(reinstalling) + write(downgrading) + write(upgrading) file:close() elseif script_slot == "Scripts::PM::Post" then if transaction_success then Огромное спасибо, с этим патчем действительно работает. |