移植 Nginx+PHP(FastCGI) 到 ARM Linux (一)

环境

交叉编译环境:Ubuntu12.04 64位
交叉编译器:arm-linux-gcc-4.9.x
ARM系统:Linux imx6dlsabresd 3.14.52-1.1.1_ga+gdb1bcba #5 SMP PREEMPT Wed Mar 15 12:15:01 CST 2017 armv7l GNU/Linux

Nginx 交叉编译

1、 预先下载好文件
a,nginx-1.12.1.tar.gz
b,pcre-8.30.tar.gz(不要下最新的pcre2-**.tar.gz)
c,zlib-1.2.11.tar.gz

说明:我这里不需要支持https访问,所以下面不会编译openssl模块。

2、 解压文件

robinson@robinson-vm:~/Downloads/ForTest$ ls
nginx-1.12.1.tar.gz  pcre-8.30.tar.gz  zlib-1.2.11.tar.gz
robinson@robinson-vm:~/Downloads/ForTest$ tar -xzvf nginx-1.12.1.tar.gz
robinson@robinson-vm:~/Downloads/ForTest$ tar -xzvf pcre-8.30.tar.gz
robinson@robinson-vm:~/Downloads/ForTest$ tar -xzvf zlib-1.2.11.tar.gz
robinson@robinson-vm:~/Downloads/ForTest$ ls
nginx-1.12.1         pcre-8.30         zlib-1.2.11
nginx-1.12.1.tar.gz  pcre-8.30.tar.gz  zlib-1.2.11.tar.gz 

3、 编写configure配置文件脚本nginx_configure.sh

#!/bin/sh

BUILD_PATH=/home/nginx_arm
CC_PATH=/home/robinson/Downloads/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc
CPP_PATH=/home/robinson/Downloads/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-g++

./configure \
  --prefix=$BUILD_PATH \
  --with-zlib=/home/robinson/Downloads/ForTest/zlib-1.2.11 \
  --with-pcre \
  --with-pcre=/home/robinson/Downloads/ForTest/pcre-8.30 \
  --with-pcre-jit \
  --with-cc=$CC_PATH \
  --with-cpp=$CPP_PATH

说明:
  此脚本文件存放于nginx-1.12.1文件夹下,需要自行添加可执行权限。
  关于BUILD_PATH,这是编译好的nginx存放位置。
  关于CC_PATH、CPP_PATH是交叉编译器路径,这里填的完整路径,如果配置好环境变量可以直接写:arm-linux-gnueabihf-gcc、arm-linux-gnueabihf-g++,大家需要根据自己的实际情况作调整。
  前面提到了我没有配置openssl模块编译。

4、修改几处源代码(nginx-1.12.1文件夹下)
  1). auto/cc/name

if [ "$NGX_PLATFORM" != win32 ]; then
ngx_feature="C compiler"
ngx_feature_name=
#ngx_feature_run=yes
ngx_feature_run=no   ==>set to no to skip check
ngx_feature_incs=
ngx_feature_path=

  2). auto/types/sizeof

(1)ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS
   ==> ngx_test="gcc $CC_TEST_FLAGS $CC_AUX_FLAGS

(2)checking for $ngx_type size
  END
  ngx_size= ==> ngx_size=4

  3). auto/lib/pcre/make

./configure --disable-shared $PCRE_CONF_OPT 
==>./configure --disable-shared $PCRE_CONF_OPT --host=arm

  4). src/os/unix/ngx_errno.h

(新增)#define NGX_SYS_NERR 333
(新增)#ifndef NGX_HAVE_SYSVSHM
(新增)#define NGX_HAVE_SYSVSHM 1
(新增)#endif
typedef int               ngx_err_t;

  5). src/core/ngx_rwlock.c

12行 #if (NGX_HAVE_ATOMIC_OPS) ==> #if (!NGX_HAVE_ATOMIC_OPS)

5、执行./nginx_configure.sh

robinson@robinson-vm:~/Downloads/ForTest/nginx-1.12.1$ sudo ./nginx_configure.sh

checking for OS 
+ Linux 3.13.0-32-generic x86_64
checking for C compiler ... found 
+ gcc version: 4.9.2 20140904 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09) checking for gcc -pipe switch ... foundchecking for -Wl,-E switch ... found
*******************
*******************
*******************
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
creating objs/Makefile

Configuration summary
  + using PCRE library: /home/robinson/Downloads/ForTest/pcre-8.30
  + OpenSSL library is not used
  + using zlib library: /home/robinson/Downloads/ForTest/zlib-1.2.11

  nginx path prefix: "/home/nginx_arm"
  nginx binary file: "/home/nginx_arm/sbin/nginx"
  nginx modules path: "/home/nginx_arm/modules"
  nginx configuration prefix: "/home/nginx_arm/conf"
  nginx configuration file: "/home/nginx_arm/conf/nginx.conf"
  nginx pid file: "/home/nginx_arm/logs/nginx.pid"
  nginx error log file: "/home/nginx_arm/logs/error.log"
  nginx http access log file: "/home/nginx_arm/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

6、make

robinson@robinson-vm:~/Downloads/ForTest/nginx-1.12.1$ sudo make

7、make install

robinson@robinson-vm:~/Downloads/ForTest/nginx-1.12.1$ sudo make install

生成的文件在/home/nginx_arm

8、打包交叉编译好的文件

robinson@robinson-vm:/home$ ls
nginx_arm  robinson
robinson@robinson-vm:/home$ sudo tar -jcvf nginx_arm.tar.bz2      nginx_arm/
nginx_arm/
nginx_arm/html/
nginx_arm/html/index.html
nginx_arm/html/50x.html
nginx_arm/logs/
nginx_arm/sbin/
nginx_arm/sbin/nginx
nginx_arm/conf/
nginx_arm/conf/fastcgi_params.default
nginx_arm/conf/nginx.conf.default
nginx_arm/conf/scgi_params.default
nginx_arm/conf/nginx.conf
nginx_arm/conf/uwsgi_params.default
nginx_arm/conf/fastcgi.conf
nginx_arm/conf/koi-utf
nginx_arm/conf/mime.types
nginx_arm/conf/koi-win
nginx_arm/conf/fastcgi.conf.default
nginx_arm/conf/fastcgi_params
nginx_arm/conf/mime.types.default
nginx_arm/conf/uwsgi_params
nginx_arm/conf/win-utf
nginx_arm/conf/scgi_params


robinson@robinson-vm:/home$ ls
nginx_arm  nginx_arm.tar.bz2  robinson

9、将nginx_arm.tar.bz2拷贝到arm板子上,注意一定要在/home下解压(路径必须和交叉编译时的路径一致)

root@imx6dlsabresd:/home# ls
nginx_arm  root

10、启动nginx

root@imx6dlsabresd:/home/nginx_arm# /home/nginx_arm/sbin/nginx
或
root@imx6dlsabresd:/home/nginx_arm# /home/nginx_arm/sbin/nginx -c /home/nginx_arm/conf/nginx.conf

11、测试,用局域网内的浏览器访问Arm板子的ip,看到下面界面,说明nginx移植成功了。
这里写图片描述

后记

友情提示:
su命令会获取root权限但仍使用用户的环境变量。
sudo命令会获取root权限并使用root的环境变量。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值