yum2014 发表于 2013-03-31 05:28

安装tengine的ndk模块总是失败

centos6.4 64位+tengine1.4.4

安装过程如下

#建立目录
mkdir -p /usr/local/src/lemppackages/webserver
mkdir -p /usr/local/src/lemppackages/toolsoft

#先编译Luajit2.0
cd /usr/local/src/lemppackages/toolsoft
test ! -e LuaJIT-2.0.1.tar.gz && wget http://luajit.org/download/LuaJIT-2.0.1.tar.gz
tar -xf LuaJIT-2.0.1.tar.gz
cd LuaJIT-2.0.1
make
make install PREFIX=/usr/local/luajit

#安装pcre
mkdir -p /usr/local/src/lemppackages/toolsoft/
cd /usr/local/src/lemppackages/toolsoft/
test ! -e pcre-8.32.tar.bz2 && wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.bz2
tar -xf pcre-8.32.tar.bz2

cd /usr/local/src/lemppackages/toolsoft/pcre-8.32
./configure --prefix=/usr/local/pcre --enable-jit
make
make install

#添加用户
groupadd -f www-data
useradd -s /sbin/nologin -g www-data www-data

#编译安装 tengine
mkdir -p /usr/local/src/lemppackages/webserver
cd /usr/local/src/lemppackages/webserver
git clone https://github.com/alibaba/tengine.git
cd /usr/local/src/lemppackages/webserver/tengine
git clone https://github.com/alibaba/tengine.git




make -j2 && make install
接下来用静态和动态两种方法都安装失败了。
一种是dso方式

首先是静态编译
cd /usr/local/src/lemppackages/webserver/tengine

./configure \
--prefix=/usr/local/webserver/tengine \
--user=www-data --group=www-data \
--with-http_realip_module \
--with-http_addition_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_concat_module \
--with-pcre=/usr/local/src/lemppackages/toolsoft/pcre-8.32


而后动态加载。结果失败!
cd /usr/local/webserver/tengine/sbin/
./dso_tool --add-module=/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit

提示
In file included from /usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.c:6:
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.h:36:27: error: ndk_config.h: No such file or directory
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.h:52:29: error: ndk_includes.h: No such file or directory
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.c:8:27: error: ndk_config.c: No such file or directory
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.c:106: error: ‘ndk_http_commands’ undeclared here (not in a function)
make: *** Error 1
copying objs/ngx_devel_kit.so to /usr/local/webserver/tengine/modules/
cp: cannot stat `objs/ngx_devel_kit.so': No such file or directory


接下来。就打算用全静态编译。


下载模块
mkdir -p /usr/local/src/lemppackages/webserver/nginx_modules
cd /usr/local/src/lemppackages/webserver/nginx_modules

#下载 nginx devel kit
git clone https://github.com/simpl/ngx_devel_kit.git
#下载 nginx echo module
git clone https://github.com/agentzh/echo-nginx-module.git
#下载 lua-nginx-module 模块
git clone https://github.com/chaoslawful/lua-nginx-module.git


cd /usr/local/src/lemppackages/webserver/tengine
./configure --prefix=/usr/local/webserver/tengine \
--user=www-data --group=www-data \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" \
--with-luajit-inc=/usr/local/luajit/include/luajit-2.0 \
--with-luajit-lib=/usr/local/luajit/lib \
--add-module=/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit \
--add-module=/usr/local/src/lemppackages/webserver/nginx_modules/echo-nginx-module \
--add-module=/usr/local/src/lemppackages/webserver/nginx_modules/lua-nginx-module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_dav_module \
--with-pcre=/usr/local/src/lemppackages/toolsoft/pcre-8.32

结果又报告
                /usr/local/src/lemppackages/webserver/nginx_modules/echo-nginx-module/src/ngx_http_echo_module.c
In file included from /usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.c:6:
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.h:36:27: error: ndk_config.h: No such file or directory
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.h:52:29: error: ndk_includes.h: No such file or directory
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.c:8:27: error: ndk_config.c: No such file or directory
/usr/local/src/lemppackages/webserver/nginx_modules/ngx_devel_kit/src/ndk.c:106: error: ‘ndk_http_commands’ undeclared here (not in a function)
make: *** Error 1
make: *** Waiting for unfinished jobs....
make: Leaving directory `/usr/local/src/lemppackages/webserver/tengine'
make: *** Error 2

碰到同样的错误!!

另外这个dso关键字居然也有问题
cd /usr/local/webserver/tengine/sbin/
./dso_tool --add-module=/usr/local/src/lemppackages/webserver/nginx_modules/echo-nginx-module

结果生成了
/usr/local/webserver/tengine/modules/ngx_http_echo_module.so

于是
nginx.conf配置文件里加入

dso {
    load ngx_http_echo_module.so;
}

而后在

location /echo {
    default_type 'text/plain';
    echo 'hello echo';
}
结果这个dso段落就导致了错误
# /usr/local/webserver/tengine/sbin/nginx -t
nginx: "dso" directive is not allowed here in /usr/local/webserver/tengine/conf/nginx.conf:34
configuration file /usr/local/webserver/tengine/conf/nginx.conf test failed

zhijun_huang 发表于 2013-08-22 16:56

楼主问题我也遇到了,我的结论是,ndk是不能装成动态的,如果硬要装的话,打开dso_tool找到下面三行,注释掉即可    #if test -d $NGX_OBJS; then
    #    rm -rf $NGX_OBJS
    #fi
但是装上是不能load的,因为这是提供给其他包使用的开发组件,不是nginx模块,比如set-misc-nginx-module会依赖该组件,但是用dso也是装不上set-misc-nginx-module,因为这两个设计的时候就没考虑到会编译成动态模块

报的两个错,就是因为上面那语句把objs删掉了的缘故。编成静态模块是可以的,但是楼主没成功是因为先编译成动态,objs下的几个头文件被删掉了。

最后一个问题,是因为新版的nginx没有启动,还是使用了不带dso语法的nginx做语法检查

yum2014 发表于 2013-08-28 00:52

回复 2# zhijun_huang


    多谢!看来te的很多module是不支持动态化的。我现在还是不知道动态化有什么好处。您能否指点一二?谢谢!
页: [1]
查看完整版本: 安装tengine的ndk模块总是失败