Bug 33074 - После обновления до 0.5.15lorg2-alt56 LUA-скриптам не передаётся переменная script_slot
: После обновления до 0.5.15lorg2-alt56 LUA-скриптам не передаётся переменная s...
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/apt)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
:
: 32941
  Show dependency tree
 
Reported: 2017-02-03 10:25 by
Modified: 2017-07-05 17:59 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2017-02-03 10:25:19
Последнее сообщение в /var/log/apt.log

Upgrading apt 0.5.15lorg2-alt55 to 0.5.15lorg2-alt56
------- Comment #1 From 2017-02-03 11:22:41 -------
Знаю. Похоже, проблема в том, что после rpm-4.3 не вызываются нужные хуки
apt-а. Пока расследую этот вопрос...
------- Comment #2 From 2017-03-05 14:21:20 -------
Расследование показывает, что apt-log перестал работать после обновления
alt55->alt56, потому что не знает, в каком режиме это делать (начало/окончание
транзакции). А это определяется по значению переменной script_slot, которая
теперь всегда не определена (nil).

Получается, добавление поддержки lua5.3 сломало передачу в скрипты script_slot
(и других переменных?). Я проверил на парочке других скриптов из apt/contrib/ ,
использующих script_slot для показа встроенной помощи - эффект тот же, значение
не определено.

Проверить очень просто: добавить
=8<==========================================
print(script_slot)
return
=8<==========================================
в начало lua-скрипта.
------- Comment #3 From 2017-07-04 19:04:36 -------
Исправлено в
http://git.altlinux.org/tasks/archive/done/_180/185002/logs/events.2.2.log
------- Comment #4 From 2017-07-05 16:25:03 -------
Стало лучше, но всё равно пока плохо:

=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 - пуст, в результате ничего не
протоколируется.
------- Comment #5 From 2017-07-05 17:19:23 -------
*** Bug 32941 has been marked as a duplicate of this bug. ***
------- Comment #6 From 2017-07-05 17:37:24 -------
(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
------- Comment #7 From 2017-07-05 17:59:46 -------
Огромное спасибо, с этим патчем действительно работает.