Closed hroncok closed 4 years ago
accept filename as a command line argument
I guess that's really the essence of it, can't think of another requirement. For starters, before modifying RPM, I'd try to write a wrapper that accepts a script as argument, and sets up your custom interpreter as needed.
The problem with debugging this is for me that even using this fails for me:
#/usr/bin/bash
exec /usr/bin/lua "$@"
$ ilua -i lua
Jupyter console 6.1.0
ILua 0.2.1
In [1]: print"a"
a
$ ilua -i luafake
Jupyter console 6.1.0
ILua 0.2.1
In [1]: print"a"2020-05-12T20:06:42+0200 [ilua.kernel.ILuaKernel#critical] Uncought exception in message handler
Traceback (most recent call last):
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
result = g.send(result)
File "/usr/lib/python3.8/site-packages/ilua/kernelbase.py", line 196, in handle_message
content = yield self.do_is_complete(**msg['content'])
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1613, in unwindGenerator
return _cancellableInlineCallbacks(gen)
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1529, in _cancellableInlineCallbacks
_inlineCallbacks(None, g, status)
--- <exception caught here> ---
File "/usr/lib/python3.8/site-packages/ilua/kernelbase.py", line 196, in handle_message
content = yield self.do_is_complete(**msg['content'])
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
result = g.send(result)
File "/usr/lib/python3.8/site-packages/ilua/kernel.py", line 179, in do_is_complete
result = yield self.proto.sendRequest({"type": "is_complete",
builtins.AttributeError: 'ILuaKernel' object has no attribute 'proto'
In [1]: print"a"
/usr/lib/python3.8/site-packages/jupyter_console/ptshell.py:656: UserWarning: The kernel did not respond to an is_complete_request. Setting `use_kernel_is_complete` to False.
warn('The kernel did not respond to an is_complete_request. '
2020-05-12T20:06:43+0200 [ilua.kernel.ILuaKernel#critical] Uncought exception in message handler
Traceback (most recent call last):
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
result = g.send(result)
File "/usr/lib/python3.8/site-packages/ilua/kernelbase.py", line 193, in handle_message
content = yield self.do_execute(**msg['content'])
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1613, in unwindGenerator
return _cancellableInlineCallbacks(gen)
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1529, in _cancellableInlineCallbacks
_inlineCallbacks(None, g, status)
--- <exception caught here> ---
File "/usr/lib/python3.8/site-packages/ilua/kernelbase.py", line 193, in handle_message
content = yield self.do_execute(**msg['content'])
File "/usr/lib64/python3.8/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
result = g.send(result)
File "/usr/lib/python3.8/site-packages/ilua/kernel.py", line 126, in do_execute
result = yield self.proto.sendRequest({"type": "execute",
builtins.AttributeError: 'ILuaKernel' object has no attribute 'proto'
Hmm, same script worked on my machine. Perhaps you need to change 'luafake' to './luafake' or wherever it's placed.
Further more, you can get more verbose output with ilua -l debug
I'm sorry about that unfortunate stack trace. It really is incomprehensible
luafake is in PATH:
$ luafake
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> print"a"
a
>
$ ilua -l debug -i luafake
2020-05-12T22:14:02+0200 [ilua.kernel.ILuaKernel#debug] Launching child lua
2020-05-12T22:14:02+0200 [ilua.proto.OutputCapture#debug] Process is running
2020-05-12T22:14:02+0200 [ilua.proto.OutputCapture#debug] Received stdout data: b'Upon execvpe luafake [b\'luafake\', b\'/usr/lib/python3.8/site-packages/ilua/interp.lua\'] in environment id 140414718368224\n:Traceback (most recent call last):\n File "/usr/lib64/python3.8/site-packages/twisted/internet/process.py", line 405, in _fork\n self._execChild(path, uid, gid, executable, args,\n File "/usr/lib64/python3.8/site-packages/twisted/internet/process.py", line 484, in _execChild\n os.execvpe(executable, args, environment)\n File "/usr/lib64/python3.8/os.py", line 577, in execvpe\n _execvpe(file, args, env)\n File "/usr/lib64/python3.8/os.py", line 609, in _execvpe\n raise saved_exc\n File "/usr/lib64/python3.8/os.py", line 601, in _execvpe\n exec_func(fullname, *argrest)\nOSError: [Errno 8] Exec format error\n'
Jupyter console 6.1.0
That is indeed more interesting:
Traceback (most recent call last):
File "/usr/lib64/python3.8/site-packages/twisted/internet/process.py", line 405, in _fork
self._execChild(path, uid, gid, executable, args,
File "/usr/lib64/python3.8/site-packages/twisted/internet/process.py", line 484, in _execChild
os.execvpe(executable, args, environment)
File "/usr/lib64/python3.8/os.py", line 577, in execvpe
_execvpe(file, args, env)
File "/usr/lib64/python3.8/os.py", line 609, in _execvpe
raise saved_exc
File "/usr/lib64/python3.8/os.py", line 601, in _execvpe
exec_func(fullname, *argrest)
OSError: [Errno 8] Exec format error
It's was just a typo in shebang :)
So far I'm blocked by https://github.com/rpm-software-management/rpm/issues/1215
But this seem to do the trick:
#!/usr/bin/bash
exec rpm --eval '%{lua:package.path = "'${LUA_PATH}';" .. package.path;'"$(cat "$@")"';rpm.interactive()}'
Thanks.
EDIT: the rpm.interactive()
call is redundant, the executed file takes care of that
Hey. I try to use ilua with a custom lua interpreted (used in RPM).
It seems the interpreter doesn't support being called with a file name as an argument. Before I approach RPM to request the functions ilua needs, I'd like to know the set of requirements. I figured it's easier to ask than to reverse engineer it.
So far I think it is:
Is there anythign else? Howe can I see what's happening to debug this?