Bug 33074 - После обновления до 0.5.15lorg2-alt56 LUA-скриптам не передаётся переменная script_slot
Summary: После обновления до 0.5.15lorg2-alt56 LUA-скриптам не передаётся переменная s...
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: apt (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
: 32941 (view as bug list)
Depends on:
Blocks: 32941
  Show dependency tree
 
Reported: 2017-02-03 10:25 MSK by Chess
Modified: 2017-07-05 17:59 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Chess 2017-02-03 10:25:19 MSK
Последнее сообщение в /var/log/apt.log

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

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

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

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