Bug 49671

Summary: После обновления поломался luatex
Product: Sisyphus Reporter: Sergei Naumov <Sergei.Naumov>
Component: texliveAssignee: viy <viy>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: viy
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Sergei Naumov 2024-03-12 21:27:04 MSK
После обновления до texlive2022 обнаружено, что luatex больше не находит все библиотеки (в texlive2021 и lua-5.3 работало):

error loading module 'luasql.mysql' from file '/usr/lib64/lua/5.4/luasql/mysql.
so':
        /usr/lib64/lua/5.4/luasql/mysql.so: undefined symbol: lua_newuserdatauv
stack traceback:
        [C]: in ?
        [C]: in local 'f'
        ...e/texmf-dist/tex/luatex/lualibs/lualibs-basic-merged.lua:398: in local 'loo
kup'
        ...e/texmf-dist/tex/luatex/lualibs/lualibs-basic-merged.lua:429: in function <
...e/texmf-dist/tex/luatex/lualibs/lualibs-basic-merged.lua:419>
        [C]: in function 'require'
        dbd3.lua:6: in main chunk
        [\directlua]:1: in main chunk.

Этот luatex связан с lua-5.4, поэтому

1. Поставил liblua5.4-devel-5.4.4, для доступа к lua.h

2. исправил /usr/share/texmf-local/web2c/texmf.cnf  
LUAROCKS_PATH = /usr/share/lua/5.4/luarocks/
LUAROCKS_CPATH = /usr/lib/luarocks/rocks-5.4

LUAINPUTS = /usr/share/lua/5.4//;$LUAROCKS_PATH//
CLUAINPUTS = /usr/lib64/lua/5.4//;$LUAROCKS_CPATH//

3. Поставил lua5.4-luarocks-3.9.2
4. Поставил luasql-mysql
# luarocks-5.4 install luasql-mysql MYSQL_INCDIR=/usr/include/mysql
Installing https://luarocks.org/luasql-mysql-2.6.0-3.src.rock

luasql-mysql 2.6.0-3 depends on lua >= 5.1 (5.4-1 provided by VM)
gcc -O2 -fPIC -I/usr/include -c src/luasql.c -o src/luasql.o -I/usr/include/mysql
gcc -O2 -fPIC -I/usr/include -c src/ls_mysql.c -o src/ls_mysql.o -I/usr/include/mysql
gcc  -shared -o luasql/mysql.so src/luasql.o src/ls_mysql.o -L/usr/local/lib -lmysqlclient
luasql-mysql 2.6.0-3 is now installed in /usr (license: MIT/X11)

5. И, наконец, luapackageloader:
# cd /usr/share/lua/5.4/
# ln -fs /usr/share/texmf-dist/tex/luatex/luapackageloader/luapackageloader.lua .
# kpsewhich luapackageloader.lua
/usr/share/lua/5.4/luapackageloader.lua
Comment 1 Sergei Naumov 2024-03-12 21:29:29 MSK
Да, забыл написать.... Вне lualatex модуль luqsql-mysql работает без проблем

function comma_value(n) -- credit http://richard.warburton.it
    local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$')
    return left..(num:reverse():gsub('(%d%d%d)','%1 '):reverse())..right
end
    
local driver = require "luasql.mysql"
local env = assert (driver.mysql())
local con = assert (env:connect("serge","serge","serge","localhost","3306"))
-- Эта переменная является аргументом скрипта (см. test3.ltx)
local bastionart = 336

local cur = assert (con:execute(string.format([[
    SELECT name, budget FROM projects WHERE art=%s
    ]],bastionart)))
local row = cur:fetch ({}, "a")
while row do
    print(string.format("%s & %s \\\\",row.name,comma_value(tonumber(row.budget))))
    row = cur:fetch (row, "a")
end
cur:close()
con:close()
env:close()
Comment 2 Sergei Naumov 2024-03-13 10:33:48 MSK
Так с lua-5.3 или lua-5.4? Сегодня обновился texlive-2022-alt0_10.x86_64, где написано:

[root@yarilo ~]# ldd /usr/bin/lualatex
        linux-vdso.so.1 (0x00007ffe6d7fe000)
        libtexlua53.so.5 => /usr/lib64/libtexlua53.so.5 (0x00007f8556b95000)
        libzzip-0.so.13 => /usr/lib64/libzzip-0.so.13 (0x00007f8556b8b000)
        libpng16.so.16 => /usr/lib64/libpng16.so.16 (0x00007f8555fc7000)