给lua安装lua-http-parser模块

  • A+
所属分类:安全闲碎

lua自身的模块是比较少的,我们如果想扩展lua的功能,而又不想重复造轮子的时候,就需要去安装第三方模块。

首先需要安装luarocks,它是lua的包管理器。(当然我已经装好了luajit,没装lua或luajit的情况下可以看看这个:https://github.com/torch/luajit-rocks )

项目地址:https://github.com/keplerproject/luarocks

首先下载最新版luarocks:


wget http://keplerproject.github.io/luarocks/releases/luarocks-2.2.1.tar.gz

tar -zxvf luarocks-2.2.1.tar.gz

cd luarocks-2.2.1/

安装:

./configure --prefix=/usr/local/luarocks --with-lua=/root/luajit-2.0 --lua-suffix=jit --with-lua-include=/root/luajit-2.0/include/luajit-2.0 --with-lua-lib=/root/luajit-2.0/lib

make build && make install


这里说明一下 :

--prefix 指定luarocks的安装位置,默认为/usr/local

--with-lua 指定lua的安装目录。这里说明一下文档里可能没说清的问题,因为我装的是luajit,所以指定的不是lua的安装目录,而是luajit的安装目录。我这里是/root/luajit-2.0。

--lua-suffix 后缀,因为我装的是luajit,所以这里输入jit

--with-lua-include lua(luajit)的头文件所在目录

--with-lua-lib lua(luajit)的链接库所在目录


--with-lua、--with-lua-include、--with-lua-lib这几个路径在我安装luajit的时候就已经记下来了,如果我不知道他们具体位置的话,我会去看看默认的对不对,不对再在服务器上找找。

另外,不能够用make && make install来编译,而需要用make build && make install,具体为何可以参见:https://github.com/keplerproject/luarocks/issues/267

很快我这就编译好了,luarocks可执行文件在这里:/usr/local/luarocks/bin,将它加入我的环境变量PATH:


vim ~/.bashrc

export PATH=$PATH:/usr/local/luarocks/bin

source ~/.bashrc


OK,运行一下luarocks --version:

给lua安装lua-http-parser模块


可见没有出错。

好,我们需要装lua-http-parser,就需要先用luarocks去装lua-http-parser。

首先试了试luarocks install lua-http-parser,是存在这个库的,但安装的过程中出错了:Could NOT find Lua51 (missing: LUA_LIBRARIES LUA_INCLUDE_DIR)

给lua安装lua-http-parser模块

缺少和两个的定义。

这里也足以见得luarocks这个包管理器并不是那么完善。我试过用luarocks install luasocket是可以成功安装的。有的包可以直接装,有的包不能直接装,和pip等成熟的包管理器还是有一定差距的。

既然不能一键安装,我们就手工装吧。

先来到lua-http-parser的项目中:https://github.com/brimworks/lua-http-parser


git clone https://github.com/brimworks/lua-http-parser.git

cd lua-http-parser

git clone git://github.com/joyent/http-parser.git


lua-http-parser是依赖于http-parser的,所以在lua-http-parser目录下,需要把http-parser也给clone下来。

这个时候编译的话,还是会出现上面同样的错误,但我们这时候就可以编辑CMakeLists.txt,来手工修改。

编辑CMakeLists.txt,在引用LUA_LIBRARIES、LUA_INCLUDE_DIR之前,将他们先手工写出来:


set(LUA_LIBRARIES "/root/luajit-2.0/lib")

set(LUA_INCLUDE_DIR "/root/luajit-2.0/include/luajit-2.0")


这是根据我自己VPS上luajit的目录定义的。出来执行luarocks make CFLAGS=-g lua-http-parser-1.0-1.rockspec,即可成功安装:

给lua安装lua-http-parser模块

将test.lua里的#!/usr/bin/env lua改成#!/root/luajit-2.0/bin/luajit,chmod u+x test.lua执行之。

不过实际发现,安装好了执行的时候还是提示找不到“http.parser”。

因为我虽然安装了luarocks,但我却并没有将luarocks和我机子上原有的luajit联系上。我必须将luarocks的library目录加入luajit引用的环境变量才可以。


luarocks已经替我想到了这一点,执行

luarocks path --bin


就可以列出我们需要设置的全局变量:

给lua安装lua-http-parser模块

依次执行这三个export后,就设置好了LUA_PATH、LUA_CPATH、PATH。

再次执行test.lua后,已经OK了。

通过安装lua-http-parser模块作为一个例子,再安装其他模块也大同小异了。


说一下我这段时间折腾linux的一些感想。

自从将个人PC换成MAC以后,平时的用户习惯就彻底变了。大部分的操作都会通过命令行去进行,安装各种各样的软件也让我见识了linux的方便所在。

以前非常憎恨的编译与安装,现在变成生活里不可或缺的一部分。

现在我细细想想,linux下每个软件都有详细的文档,从安装到使用都有一个“老师”在不停指导你,大部分的软件都可以直接浏览源码,通过简单的配置文件的方式更改设置,邮件列表、github issues、stackoverflow、google上总有人和你遇到过同样的问题……你会发现这是一些多么值得庆幸的事情。

当我明白了linux下常见的一些配置文件的时候,才发现windows的注册表是有多么臃肿与麻烦。

当我用几个数字就把虚拟主机、多用户环境权限控制做好的时候,才发现linux下配置系统安全是多么简单。

当我操作ssh就像在操作自己的MAC一样快的时候,才发现能用终端控制远程主机有多方便。

所以少年,学会linux的基本使用,不再是一个“专业知识”,而应该是一个“大众技能”。就像驾照一样,你能一辈子不拿吗?


本文始发于微信公众号(代码审计):给lua安装lua-http-parser模块

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: