[OpenWrt-Devel] [PATCH 0/1] libubox installs incorrectly on Ubuntu due to incorrect LUAPATH

Petr Štetiar ynezz at true.cz
Thu Nov 29 11:17:44 EST 2018


Sergey Ponomarev <stokito at gmail.com> [2018-11-29 17:20:07]:

Hi,

> I'm working on porting openwrt utils like UCI and UHTTPD to Ubuntu and trying to create a PPA.
> During creation of a debian package for libubox it's build failed with:
>     dh_install: Cannot find (any matches for) "/usr/lib/x86_64-linux-gnu/lua/5.1/uloop.so" (tried in ., debian/tmp)
> After investigation it turned out that LUAPATH variable was evaluated as /usr/local/lib/lua/5.1 while correct path is /usr/lib/x86_64-linux-gnu/lua/5.1.

That's wrong, see bellow.

> The LUAPATH is evaluated by the command:
>     $ lua -e "for k in string.gmatch(package.cpath .. \";\", \"([^;]+)/..so;\") do if k:sub(1,1) == \"/\" then print(k) break end end"
> So it looks for array package.cpath and gets a first line which starts with / (this is why k:sub(1,1) == \"/\").
> To see all pathes let's change the command a little bit:
>     $ lua -e "for k in string.gmatch(package.cpath .. \";\", \"([^;]+)/..so;\") do print(k) end"
>     .
>     /usr/local/lib/lua/5.1
>     /usr/lib/x86_64-linux-gnu/lua/5.1
>     /usr/lib/lua/5.1

All 4 paths are valid, Lua would search for dynamic loadable libraries in those
paths.

> So on Ubuntu 18.10 and maybe in other distros the LUAPATH variable will receive the /usr/local/lib/lua/5.1 as first path.
> To fix that all what we need to do is just to get path which starts with not just / but with /usr/lib/ i.e.
>     $ lua -e "for k in string.gmatch(package.cpath .. \";\", \"([^;]+)/..so;\") do if k:sub(1,9) == \"/usr/lib/\" then print(k) break end end"
> So this parch is intended to fix that.

No, this is not a fix, it's a hack for Ubuntu. You're probably breaking half of
the world where you've stuff usually installed in /usr/local and other
locations, like BSDs (and maybe OSX?) for example:

 ynezz at meh:~$ head -1 /etc/motd
 OpenBSD 6.4 (GENERIC) #349: Thu Oct 11 13:25:13 MDT 2018

 ynezz at meh:~$ lua51 -e "for k in string.gmatch(package.cpath .. \";\", \"([^;]+)/..so;\") do if k:sub(1,1) == \"/\" then print(k) break end end"
 /usr/local/lib/lua/5.1

 ynezz at meh:~$ lua51 -e "for k in string.gmatch(package.cpath .. \";\", \"([^;]+)/..so;\") do if k:sub(1,9) == \"/usr/lib/\" then print(k) break end end"

-- ynezz

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list