在一些小型项目上需要应用全文搜索引擎时,我比较喜欢使用迅搜,因为部署方便,调用简单,今天给客户部署系统安装迅搜时,竟然有报错(极少遇到报错的情况),花了一些时间查资料,终于解决了,分享一下经验
首先是定位原因,因为我已经在起码五六台Centos主机上安装过迅搜,前面都顺利安装完成了,所以应该是不迅搜本身有什么问题,更大可能是跟运行环境是有关系的,看了一下,目前这台机子安装的是Centos8.0,我之前安装的系统都是7.X的,所以极有可能是和操作系统的版本有关系的。
看了一下在安装界面的信息,内容如下:
bufferevent_openssl.c:237:2: note: (near initialization for 'methods_bufferevent')
bufferevent_openssl.c:228:19: error: storage size of 'methods_bufferevent' isn't known
static BIO_METHOD methods_bufferevent = {
^~~~~~~~~~~~~~~~~~~
make[2]: *** [Makefile:793: bufferevent_openssl.lo] Error 1
make[2]: Leaving directory '/usr/local/src/xunsearch-full-1.4.14/libevent-2.0.21-stable'
make[1]: *** [Makefile:857: install-recursive] Error 1
make[1]: Leaving directory '/usr/local/src/xunsearch-full-1.4.14/libevent-2.0.21-stable'
make: *** [Makefile:1182: install] Error 2
看样子应该是在编译过程中报错了,这个比较棘手,因为这是C写的代码,我总不能直接去改它的源码,于是只能从什么问题导致了编译错误入手,各种查询之后,发现有位网友曾经遇到过这个问题,以下是引用这位网友的内容:
这个问题的原因及解决思路如下:
原因在于libevent 2.0.x需要openssl < 1.1.0
常用的几个Linux发行版已经把系统的openssl升级到了1.1.0+
即对应需要libevent 2.1.x+
而libevent 2.1.x改了头文件.. 如果不更换系统openssl版本.
那就可以去手动下载一个 libevent-2.1.11-stable.tar.gz
自己换成bz压缩格式(libevent-2.1.11-stable.tar.bz2)
放进 packages,记得删掉原来的libevent
作者:一件小毛衣
链接:https://www.jianshu.com/p/2bd166d48f42
来源:简书
后面具体的步骤没有参考他的,因为我和他使用的迅搜版本是不同的,具体解决的方法跟他的有所不同,所以下面继续说我的解决过程:
首先,先去下载一下2.1.X版本的libevent安装包,可以直接搜索libevent,然后在官方的网站上下载,很多时候官方的链接是github上的,如果直接在linux系统上用wget下载有点慢,这种情况下可以先在咱们自己的浏览器上下载好,再通过winscp上传上去,更加快。
我下载的版本是libevent2.1.12,下载链接是:https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
下载好后上传到服务器上放xunsearch的目录下,我的目录是/usr/local/src/,然后将这个文件解压,并重新压缩成bz2格式,参考代码如下:
//先将libevent解压(以便压缩成所需格式)
tar -zxvf libevent-2.1.12-stable.tar.gz
//压缩成bz2格式,这是迅搜安装包的支持的格式
tar -cjf libevent-2.1.12-stable.tar.bz2 libevent-2.1.12-stable
//复制到xunsearch下的packages文件夹内
cp libevent-2.1.12-stable.tar.bz2 xunsearch-full-1.4.15/packages/
//进入安装包的目录并将原来自带的libevent安装包删除(xunsearch1.4.15自带的是2.0.X)
cd xunsearch-full-1.4.15/packages/
rm -f libevent-2.0.X
//返回上一步的文件夹(即迅搜安装包的根目录),然后执行setup.sh就可以了,
//迅搜会自动检查安装包文件内的libevent开头的安装包,如果没找到会报错,如果找到了就会自动解压并编译安装
cd ..
./setup.sh
然后安装过程就愉快地完成了