现在OpenResty升级到1.21.4.2rc1,Lapis已经从过去的1.6升级到了1.14,主要两个服务已经升级了很多,新功能也加入很多。与系统相关的Luarocks和OpenSSL也同样升级了,对应OpenResty和Lapis的升级,配套的Luarocks和OpenSSL也要升级,使用新的软件功能特性。

安装相关依赖软件,可以用Yum和Luarocks的安装包管理软件,这种软件安装管理软件在一此老的Linux系统上,安装版本不好控制,对于安装较新Lapis框架不适用,最比较好的解决方法,就是用源代码方式按装依赖包,复杂的相关依赖安装时要指定库文件和头文件的位置,否则安装时要把软件尽量安装在默认目录,但是一般不清楚依赖的软件都去那里找依赖软件的文件夹。

比如,解决Bug问题,还要调编译参数这种问题,如果出现这种情况, 就换软件的版本,换到修复后的版本。

sudo luarocks install luaossl CFLAGS="-O2 -fPIC -DHAVE_EVP_KDF_CTX=1"

首要升级的是OpenResty,升级各种配套软件。OpenResty的升级困难不大,顺利程度高于Luarocks、OpenSSL、Lapis的安装。

OpenResty安装

sudo yum install libtermcap-devel ncurses-devel libevent-devel readline-devel openssl-devel pcre-devel pcre
wget https://openresty.org/download/openresty-1.21.4.2rc1.tar.gz
tar -xvf openresty-VERSION.tar.gz
cd openresty-VERSION/
./configure -j2
make -j2
sudo make install
export PATH=/usr/local/openresty/bin:$PATH
export PATH=/usr/local/openresty/nginx/sbin:$PATH

Luarocks安装
因为系统版本与Luarocks版本之间的差异,用Yum安装不太能控制Luarocks的版本,还是建议用源码安装, 用源码安装涉及到.h头文件的环境依赖的问题,但也是一个环境变量设置的问题,问题不大。 有些版本的有Bug时,有了某个修复的Bug这种问题涉及到无法安装,其他的问题相对好解决。

wget https://luarocks.org/releases/luarocks-3.8.0.tar.gz
wget http://luarocks.org/releases/luarocks-3.8.0.tar.gz
tar zxpf luarocks-3.8.0.tar.gz
cd luarocks-3.8.0

HTTPS的Luarocks资源下载不下来,就用HTTP开头下载。
安装Luarocks是需要依赖.H的头文件,如果Lua是通过源码安装的方式。如果是用Yum安装,基本不需指定,Yum基本会按装到默认目录的。

sudo yum install lua lua-devel

如果指定头文件的目录,在configure执行时指定,如下:

./configure --with-lua-include=/usr/local/include
make 
sudo make insall 

Lapis安装

Lapis是基于OpenResty平台的一个Lua的Web框架,从过去的1.4.、1.6发展到1.14拥有了很多Web框架功能特点,可以基于Lua和Luajit运行,最开始基于的版本是Lua5.1,Lua5.1虽然很老,但从另外一个角度高,即使是lua5.1的.H也可以让Lapis正常的安装并运行。

Lapis历史版本可以去Luarock网站上下载历史版本的rock,也可以直接下载最新1.14。一般老版本装的OpenSSL版本是比较低,使用Luarocks安装最新版本Lapis要指定OpenSSL相关的.H的路径。一些使用源码看到的软件依赖,不是按装默认的路径,几乎都要指定头文件和库文件的位置。

eval $(luarocks path --lua-version=5.1)
luarocks	install	lapis	LUA_INCDIR=/usr/include/lua-5.1/ CRYPTO_DIR=/usr/local/openssl/ CRYPTO_INCDIR=/usr/local/openssl/include/

在安装的时候,就需要指定LUA_INCDIR,Lua.h的位置。CRYPTO_INCDIR、CRYPTO_DIR指定Crypto库的.h文件、库文件的位置。

配置好库和头文件的位置,依赖的库安装的版本也没有问题,就可以正常安装,Lua、OpenSSL两个软件的版本,一定要与Lapis匹配,有Bug版本号的OpenSSL安装会有问题,安装不上。

Lua安装
Lua的安装可以用Yum安装,也可用源码安装。5.1版本的Lua可以保证Lapis正常运行。

curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar -zxf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test
sudo make install

OpenSSL安装
用Yum是可以安装OpenSSL,但是Yum安装的版本和一些新的软件是不配合,最后还是需要源码安装。

sudo yum install openssl3 openssl3-devel

老版本的OpenSSL,去下面的链接下载。

https://ftp.openssl.org/source/old/1.1.1/
https://www.openssl.org/source/old/1.1.1/

以安装1.1.1t为例安装OpenSSL。

wget https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1t.tar.gz
cd openssl-1.1.1t
./config  --prefix=/usr/local/openssl
make -j2
sudo make install 

装的是OpenSSL 1.1.1t,较新的版本。安装OpenSSL源码的时候需要pod2html,这个工具安装时Perl时会有, 但有的Perl版中没有这个工具,所以需要用Cpan装一个。

sudo yum install cpan
sudo cpan install pod2html

Luaossl安装的
Luaossl这个lua依赖库是Lapis需要的,还有Lpeg库,都是核心的依赖。 如晨Lapis安装是不指定Crypto库和文件头,就会报错,否者无法安装。

MoonScript安装
luasocket的这个Lua库,需要HTTPS的资源就需要安装。Moonscript直接用Luarocks安装即可,问题不大。

sudo luarocks install luasocket moonscript

Lapis使用Lua,1.14版本的Lapis去/usr/local/bin/lua,有一种方法是将此处的Lua,用OpenResty安装时Luajit代替,这样需要因为Lapis找不到库文件需要在Nginx配置文件中配置环境路径。另外一个方法就是用安装Lua5.1保证Lapis最新版本正常安装运行。

本地安装旧版本的luarocks的rockspec, 可以去Luarocks上翻历史的包, 然后本地安装。比如下载个lapis1.5,在下面的链接页面里去下载Rock。

https://luarocks.org/modules/leafo/lapis/1.5.1-1

然后用luarocks install 直接安装这个包。