欢迎光临!
若无相欠,怎会相见

源码编译PHP和Nginx遇到问题的解决办法

序言

本来打算很早就可以把这篇文章写出来的,结果期间各种忙,只能在月底把这篇月中旬就能写出来的文章发布。

刚进公司,有一个多月的培训,老乡他的培训大作业有一项是在服务器上搭建一个网站,并且用OpenSSL生成证书使浏览器没有“不安全”标志。因为我有丰富的建站经历,所以我答应帮老乡搞搞。结果“经验主义”快把我坑死,出现了各种问题,还好最后解决掉了。

Kali配lnmp

我之前搭建网站都是使用的是CentOS系统的服务器,没有在Debian系列的服务器上搭建过,这一次公司给老乡分配的服务器是Kali,我也是很懵逼,竟然把这种大杀器作为搭建网站的服务器???

首先,受经验主义的影响,我首先选定了lnmp服务器软件包,用的还是最新的1.5版本。结果“经验主义”害了我啊。首先编译源码就不通过,数据库还好,能编译安装成功,Nginx和PHP不成功。而且前期为了lnmp能安装成功,我还手贱的把系统默认的数据库MariaDB卸载了,真是手贱,后面差点儿没把系统搞崩。因为只有服务器的远程连接方式,没有实体机,所以我只能硬着头皮一遍一遍的重试。

编译Nginx问题

下载并解压源码包后,进入源码目录,首先执行./configure ,它会检查当前系统,并生成Makefile文件。

我在Kali系统直接执行make 命令,结果出现这个错误:

cc1: all warnings being treated as errors
make[1]: *** [objs/Makefile:886: objs/src/http/ngx_http_script.o] Error 1
make[1]: Leaving directory '/lnmp1.5/src/nginx-1.14.0'
make: *** [Makefile:8: build] Error 2

编译停止后,后面会出现报错信息。出现这个错误是因为编译严格,把警告当做错误处理。我们可以在执行./configure 后,进入objs目录,修改Makefile文件,把CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g   改成CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g #-Werror -g也就是删除Werror。

root@kali:/lnmp1.5/src/nginx-1.14.0# cd objs/
root@kali:/lnmp1.5/src/nginx-1.14.0/objs# ls
autoconf.err  Makefile  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  src
root@kali:/lnmp1.5/src/nginx-1.14.0/objs# vi Makefile 
   1 
   2 CC =    cc
   3 CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g #-Werror -g 
   4 CPP =   cc -E
   5 LINK =  $(CC)
   6 
   7 
   8 ALL_INCS = -I src/core \                                                                                    
   9     -I src/event \
  10     -I src/event/modules \
  11     -I src/os/unix \
  12     -I objs \
  13     -I src/http \
  14     -I src/http/modules
  15 
  16 
  17 CORE_DEPS = src/core/nginx.h \
  18     src/core/ngx_config.h \
  19     src/core/ngx_core.h \
  20     src/core/ngx_log.h \
  21     src/core/ngx_palloc.h \
  22     src/core/ngx_array.h \
Makefile [+]                                                                                   8,24           Top
"Makefile" 1241L, 39482C written

在退到Nginx源码主目录,进行编译安装,就没有报错。

sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
	-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
	-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
	-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
	< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory '/lnmp1.5/src/nginx-1.14.0'

这就是编译成功的信息。

编译PHP7问题

和Nginx相似,就是编译PHP的报错信息不同。我的报错信息是:

collect2: error: ld returned 1 exit status
make: *** [Makefile:268: sapi/cli/php] Error 1

解决办法就是在Makefile里面的 EXTRA_LIBS=... 这一行最后添加-liconv  参数。在这台Kali中,EXTRA_LIBS在第89行,添加完成后,大约是这个样子的:

EXTRA_LIBS=  ......  -lnsl -lxml2 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lcrypt -liconv

省略号表示前面有很多其他的参数,我只写出了最后面的。

之后可以编译安装了,成功的信息是这样的:

Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
clicommand.inc
invertedregexiterator.inc
pharcommand.inc
directorytreeiterator.inc
directorygraphiterator.inc
phar.inc

Build complete.
Don't forget to run 'make test'.

安装的信息:

root@kali:/lnmp1.5/src/php-7.0.30# make install
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20151012/
Installing PHP CLI binary:        /usr/local/bin/
Installing PHP CLI man page:      /usr/local/php/man/man1/
Installing phpdbg binary:         /usr/local/bin/
Installing phpdbg man page:       /usr/local/php/man/man1/
Installing PHP CGI binary:        /usr/local/bin/
Installing PHP CGI man page:      /usr/local/php/man/man1/
Installing build environment:     /usr/local/lib/php/build/
Installing header files:          /usr/local/include/php/
Installing helper programs:       /usr/local/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/lib/php/
[PEAR] Archive_Tar    - installed: 1.4.3
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.4.2
[PEAR] PEAR           - installed: 1.10.5
Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
/lnmp1.5/src/php-7.0.30/build/shtool install -c ext/phar/phar.phar /usr/local/bin
ln -s -f phar.phar /usr/local/bin/phar
Installing PDO headers:           /usr/local/include/php/ext/pdo/

结语

这些方案,我在kali上面可以使用,不确定在其他发行版上是否可以使用,仅供参考!

如有错误,敬请指出,感谢指正!        ——2018-08-30    23:51:02   与苏州

赞(1) 打赏
转载请注明:飘零博客 » 源码编译PHP和Nginx遇到问题的解决办法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临