Modifying HAProxy Lua Library Path
Asked Answered
B

0

4

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:

  1. Do I have install HAProxy+Lua from source and modify the library path pre installation?
  2. 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 to syslog.conf?
  3. 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.

Bradfield answered 25/2, 2019 at 12:7 Comment(10)
Lua reads library path from optional env variables LUA_PATH and LUA_CPATH when VM is starting.Dihydric
@EgorSkriptunoff All my Lua files are in /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 with export LUA_PATH=/usr/bin/lua. For LUA_CPATH do I need to individually add all socket file names?Bradfield
@EgorSkriptunoff I added LUA_CPATH=/usr/lib64/lua/5.3 but the error still persistsBradfield
LUA_PATH=;;/usr/lib64/lua/5.3/?.lua;/usr/lib64/lua/5.3/?/init.lua;Dihydric
@EgorSkriptunoff Added /usr/share/lua/5.3/posix/init.lua. Not sure which other file you meant by /usr/lib64/lua/5.3/?.lua.Bradfield
@EgorSkriptunoff Did not solve the issue after last modification to LUA_PATHBradfield
I know it is some time ago but how about export 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
Actually ? 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 in package.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...Landwaiter
@Landwaiter I have not worked with Lua since posting this project. I think the information you posted is right and I'll check them out next time I use HAProxy and need Lua scripting. My solution was to fallback to Nodejs for the relevant logicBradfield
Did you see you can use lua-prepend-path? cbonte.github.io/haproxy-dconv/2.2/… You would want instead lua-prepend-path /usr/share/lua/5.3/?.lua and lua-prepend-path /usr/lib64/lua/5.3/posix/?.so cpathBastian

© 2022 - 2024 — McMap. All rights reserved.