I am trying to load Lua script from HAProxy. In the Lua script, the following line is causing an error:
local http = require("socket.http")
Intially I gathered from journalctl -xe
output that the library was not installed. I installed it using luarocks install luasocket
. This did not solve the issue. The new error is module "socket.http" not found
. Following the comment in this post I realized that I must change the settings for Lua library path in order to resolve this issue.
Now, I want to know the following:
- Do I have install HAProxy+Lua from source and modify the library path pre installation?
- If building from source is not necessary then, I believe I must change the path using
syslog
as suggested by the comment from post linked above. If this is the case, how do I do that and what settings do I need to change/add tosyslog.conf
? - Are there are any other solution that I am overlooking which, would easier than any of the above?
Thanks for your help in advance.
EDIT 1
I have modified both LUA_PATH
and LUA_CPATH
as follows:
LUA_PATH=/usr/bin/lua;/usr/bin/lua5.3;/usr/share/lua/5.3/ltn12.lua;/usr/share/lua/5.3/mime.lua;/usr/share/lua/5.3/socket.lua;/usr/share/lua/5.3/ssl.lua;/usr/share/lua/5.3/posix/_argcheck.lua;/usr/share/lua/5.3/posix/compat.lua;/usr/share/lua/5.3/posix/deprecated.lua;/usr/share/lua/5.3/posix/init.lua;/usr/share/lua/5.3/posix/sys.lua;/usr/share/lua/5.3/posix/util.lua;/usr/share/lua/5.3/posix/version.lua;/usr/share/lua/5.3/socket/ftp.lua;/usr/share/lua/5.3/socket/headers.lua;/usr/share/lua/5.3/socket/http.lua;/usr/share/lua/5.3/socket/smtp.lua;/usr/share/lua/5.3/socket/tp.lua;/usr/share/lua/5.3/socket/url.lua;/usr/share/lua/5.3/term/colors.lua;/usr/share/lua/5.3/term/cursor.lua;/usr/share/lua/5.3/term/init.lua;/usr/share/lua/5.3/ssl/https.lua;/usr/share/lua/5.3/luarocks/add.lua;/usr/share/lua/5.3/luarocks/admin_remove.lua;/usr/share/lua/5.3/luarocks/build.lua;/usr/share/lua/5.3/luarocks/cache.lua;/usr/share/lua/5.3/luarocks/cfg.lua;/usr/share/lua/5.3/luarocks/command_line.lua;/usr/share/lua/5.3/luarocks/config_cmd.lua;/usr/share/lua/5.3/luarocks/deps.lua;/usr/share/lua/5.3/luarocks/dir.lua;/usr/share/lua/5.3/luarocks/doc.lua;/usr/share/lua/5.3/luarocks/download.lua;/usr/share/lua/5.3/luarocks/fetch.lua;/usr/share/lua/5.3/luarocks/fs.lua;/usr/share/lua/5.3/luarocks/help.lua;/usr/share/lua/5.3/luarocks/index.lua;/usr/share/lua/5.3/luarocks/install.lua;/usr/share/lua/5.3/luarocks/lint.lua;/usr/share/lua/5.3/luarocks/list.lua;/usr/share/lua/5.3/luarocks/loader.lua;/usr/share/lua/5.3/luarocks/make.lua;/usr/share/lua/5.3/luarocks/make_manifest.lua;/usr/share/lua/5.3/luarocks/manif_core.lua;/usr/share/lua/5.3/luarocks/manif.lua;/usr/share/lua/5.3/luarocks/new_version.lua;/usr/share/lua/5.3/luarocks/pack.lua;/usr/share/lua/5.3/luarocks/path_cmd.lua;/usr/share/lua/5.3/luarocks/path.lua;/usr/share/lua/5.3/luarocks/persist.lua;/usr/share/lua/5.3/luarocks/purge.lua;/usr/share/lua/5.3/luarocks/refresh_cache.lua;/usr/share/lua/5.3/luarocks/remove.lua;/usr/share/lua/5.3/luarocks/repos.lua;/usr/share/lua/5.3/luarocks/require.lua;/usr/share/lua/5.3/luarocks/search.lua;/usr/share/lua/5.3/luarocks/show.lua;/usr/share/lua/5.3/luarocks/site_config.lua;/usr/share/lua/5.3/luarocks/type_check.lua;/usr/share/lua/5.3/luarocks/unpack.lua;/usr/share/lua/5.3/luarocks/upload.lua;/usr/share/lua/5.3/luarocks/util.lua;/usr/share/lua/5.3/luarocks/validate.lua;/usr/share/lua/5.3/luarocks/write_rockspec.lua;/usr/share/lua/5.3/luarocks/build/builtin.lua;/usr/share/lua/5.3/luarocks/build/cmake.lua;/usr/share/lua/5.3/luarocks/build/command.lua;/usr/share/lua/5.3/luarocks/build/make.lua;/usr/share/lua/5.3/luarocks/fs/lua.lua;/usr/share/lua/5.3/luarocks/fs/tools.lua;/usr/share/lua/5.3/luarocks/fs/unix.lua;/usr/share/lua/5.3/luarocks/fs/win32.lua;/usr/share/lua/5.3/luarocks/fetch/cvs.lua;/usr/share/lua/5.3/luarocks/fetch/git_file.lua;/usr/share/lua/5.3/luarocks/fetch/git_http.lua;/usr/share/lua/5.3/luarocks/fetch/git_https.lua;/usr/share/lua/5.3/luarocks/fetch/git.lua;/usr/share/lua/5.3/luarocks/fetch/git_ssh.lua;/usr/share/lua/5.3/luarocks/fetch/hg_http.lua;/usr/share/lua/5.3/luarocks/fetch/hg_https.lua;/usr/share/lua/5.3/luarocks/fetch/hg.lua;/usr/share/lua/5.3/luarocks/fetch/hg_ssh.lua;/usr/share/lua/5.3/luarocks/fetch/sscm.lua;/usr/share/lua/5.3/luarocks/fetch/svn.lua;/usr/share/lua/5.3/luarocks/tools/patch.lua;/usr/share/lua/5.3/luarocks/tools/tar.lua;/usr/share/lua/5.3/luarocks/tools/zip.lua;/usr/share/lua/5.3/luarocks/upload/api.lua;/usr/share/lua/5.3/luarocks/upload/multipart.lua
LUA_CPATH=/usr/lib64/lua/5.3/posix/ctype.so;/usr/lib64/lua/5.3/posix/dirent.so;/usr/lib64/lua/5.3/posix/errno.so;/usr/lib64/lua/5.3/posix/fcntl.so;/usr/lib64/lua/5.3/posix/fnmatch.so;/usr/lib64/lua/5.3/posix/glob.so;/usr/lib64/lua/5.3/posix/grp.so;/usr/lib64/lua/5.3/posix/libgen.so;/usr/lib64/lua/5.3/posix/poll.so;/usr/lib64/lua/5.3/posix/pwd.so;/usr/lib64/lua/5.3/posix/sched.so;/usr/lib64/lua/5.3/posix/signal.so;/usr/lib64/lua/5.3/posix/stdio.so;/usr/lib64/lua/5.3/posix/stdlib.so;/usr/lib64/lua/5.3/posix/syslog.so;/usr/lib64/lua/5.3/posix/termio.so;/usr/lib64/lua/5.3/posix/time.so;/usr/lib64/lua/5.3/posix/unistd.so;/usr/lib64/lua/5.3/posix/utime.so;/usr/lib64/lua/5.3/mime/core.so;/usr/lib64/lua/5.3/socket/core.so;/usr/lib64/lua/5.3/socket/serial.so;/usr/lib64/lua/5.3/socket/unix.so;/usr/lib64/lua/5.3/term/core.so;/usr/lib64/lua/5.3/ssl.so;/usr/lib64/lua/5.3/zlib.so
I am still getting the same error as reported before.
EDIT 2
Found this post on Lua require function quite helpful. Following the discussion, I tried the following:
package.path="/usr/share/lua/5.3/?/?.lua"
package.cpath="/usr/lib64/lua/5.3/?/?.so"
I added these lines at the top my lua script that's causing the error. I also modified the environment variables, LUA_PATH
and LUA_CPATH
with the same value. The error still persists.
I am out of all possible options at this stage and would be glad if someone can shed some light on this issue.
/usr/lib64/lua/5.3/
which, contains all the socket files,*.so
. and/usr/share/lua/5.3
which contains a set of scripts. I have modified/etc/bash.bashrc.local
withexport LUA_PATH=/usr/bin/lua
. ForLUA_CPATH
do I need to individually add all socket file names? – BradfieldLUA_CPATH=/usr/lib64/lua/5.3
but the error still persists – BradfieldLUA_PATH=;;/usr/lib64/lua/5.3/?.lua;/usr/lib64/lua/5.3/?/init.lua;
– Dihydric/usr/share/lua/5.3/posix/init.lua
. Not sure which other file you meant by/usr/lib64/lua/5.3/?.lua
. – BradfieldLUA_PATH
– Bradfieldexport LUA_CPATH=;;/usr/lib64/lua/5.3/?.so
for the C (*.so
) files -?
is the symbol that gets replaced by the package name when the package loader goes looking for C (or indeed Lua) files but you need to append the relevant extension - which can vary on different OSes. 8-) – Landwaiter?
is the symbol that is normally used for the name of the package in the searching - but in fact it is the third value in the five held inpackage.config
. The others are 1: directory separator usually/
on most systems but can be \ (that is a SINGLE backslash character BTW) on windows, 2: path separator usually;
but could be something else in some OSes (e.g.:
) and two more that I can't remember but https://mcmap.net/q/1175705/-what-do-the-last-lines-in-lua-39-s-package-config-mean/4805858 might make it clearer... – Landwaiterlua-prepend-path
? cbonte.github.io/haproxy-dconv/2.2/… You would want insteadlua-prepend-path /usr/share/lua/5.3/?.lua
andlua-prepend-path /usr/lib64/lua/5.3/posix/?.so cpath
– Bastian