前言
自从上次那个从零开始构建PHP应用,已经过去一个月了,admin系统开发还算顺利。初版几乎可以投入测试和使用了,那么就面临着要部署到公司服务器的问题。一了解才发现,原来他们使用的服务器都是脱网环境的,而且没有PHP环境。准备开始新的一轮折腾,所以今天的主题是如何脱网安装PHP应用。
在脱网的情况,我们就不能用yum安装。要么使用rpm进行源码安装,要么使用make进行编译安装。我们下面会视情况而定。除了安装方式的改变之外,我们还要解决各种依赖问题。
准备知识
RPM
RPM 全名是『 RedHat Package Manager 』简称则为 RPM。RPM 是以一种数据库记录的方式来将你所需要的套件安装到你的 Linux 主机的一套管理程序。他最大的特点就是将您要安装的套件先编译过( 如果需要的话 )并且打包好了,透过包装好的套件里头预设的数据库记录, 记录这个套件要安装的时候必须要的相依属性模块( 就是你的 Linux 主机需要先存在的几个必须的套件 ),当安装在你的 Linux 主机时, RPM 会先依照套件里头的纪录数据查询 Linux 主机的相依属性套件是否满足, 若满足则予以安装,若不满足则不予安装。那么安装的时候就将该套件的信息整个写入 RPM 的数据库中,以便未来的查询、验证与反安装!
优点:
- 由于已经编译完成并且打包完毕,所以安装上很方便( 不需要再重新编译 )。
- 由于套件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装。
缺点:
- 安装的环境必须与打包时的环境需求一致或相当;
- 需要满足套件的相依属性需求;
- 反安装时需要特别小心,最底层的套件不可先移除,否则可能造成整个系统的问题!
基本使用:
- rpm -qa //查询系统中已经安装的软件
- rpm -ivh rpm文件 //安装(一般需要加–nodeps)
- rpm -Uvh rpm文件 //更新
- rpm -e 套件名称 //删除
RPM包的命名规则:
以”libcurl-7.19.7-52.el6.x86_64”为例
libcurl:软件包名称
7.19.7:版本
el6:软件包发行商版本
x86_64:使用的硬件平台
- e16指的是RHEL6.x/CentOS 6.x,如果你的Linux安装是参考之前的博文,那么这里选择e16。
- devel:表示这个包是软件的开发包。
- noarch:说明该包不受平台和硬件限制。
make
这里泛指使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。
流程:
- 下载软件包,解压进入软件包目录
- ./configure 检测你的安装平台的目的特征,可以配置选项,会生成makefile文件
- make 编译
- make install 安装
下载
提供两个比较靠谱的linux软件包下载地址
http://rpmfind.net
https://sourceforge.net
也可以使用yumdownloader在可以上网的centos下载
安装流程
- PHP使用
make安装方式进行安装。 - 到PHP官网下载PHP安装包,或者到之前
lnmp的src目录找一个。(要好好利用lnmp的src目录下的安装包) - 解压进入软件包目录
- ./configure ./configure –prefix=
$php_root–with-config-file-path=/etc –with-mysql=$mysql_root–with-pdo-mysql=$mysql_root/bin/mysql_config –with-mysqli=$mysql_root/bin/mysql_config –with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir –enable-gd-native-ttf –enable-zip –with-zlib –with-gd –disable-rpath –enable-bcmath –enable-shmop –enable-sysvsem –with-curl –enable-mbstring –with-mcrypt –disable-ipv6 –enable-static –enable-maintainer-zts –enable-sockets –enable-soap –with-openssl –without-pdo-sqlite –enable-fpm - make -j 4 && make install
- 进行php-fpm配置
- 进行php.ini配置
你以为这样就轻松装完了?当然如果你系统各种依赖都完整,当然就一次性通过了。但是通常我们都会进行./configure这一步,都是收到不少错误提示,下面把我安装时遇到的问题列举一下。
遇到问题
error: xml2-config not found
yum install libxml2
yum install libxml2-devel
或者
下载libxml2 与 libxml2-devel 的RPM源码包进行安装error: Please reinstall the libcurl distribution
yum install curl
yum install curl-devel
或者
下载curl 与 curl-devel 的RPM源码包进行安装error: mcrypt.h not found.
centos源不能安装libmcrypt-devel,由于版权的原因没有自带mcrypt的包。
所以只能下载安装包安装了
wget http://softlayer.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.gz (也可以到lnmp/src下面获取)
tar -zxvf libmcrypt-2.5.8.tar.gz
cd /usr/local/src/libmcrypt-2.5.8
./configure –prefix=/usr/local
make && make install在寻找各种依赖的过程,发现了前辈总结得比较好的一篇博文,如果你遇到比我还要奇葩的问题,可以参考
http://yanue.net/post-127.htmlerror: Don’t know how to define struct flock on this system, set –enable-opcache=no
基本原因就是找不到mysql的so之类的。
cd /etc/ld.so.conf.d
vi mysql-x86_64.conf # 编辑库文件
/usr/local/mysql/lib # 添加该行
:wq # 保存退出
ldconfig -v # 使之生效脱网情况下SSH连接慢
使用ssh -vv 192.168.48.128的方式测试一下慢出现在什么地方。
截取其中一段出来:123456789101112131415debug1: Authentications that can continue: publickey,gssapi-with-mic,passworddebug1: Next authentication method: gssapi-with-micAddress 192.168.48.128 maps to localhost, but this does not map back to ……debug1: Unspecified GSS failure. Minor code may provide more informationNo credentials cache founddebug1: Unspecified GSS failure. Minor code may provide more informationNo credentials cache founddebug1: Unspecified GSS failure. Minor code may provide more informationNo credentials cache founddebug2: we did not send a packet, disable methoddebug1: Next authentication method: publickey当机器出现GSS导致慢的问题的时候会看到
从以上的输出可以看到耗时最长的就是Unspecified GSS failure的地方,这是因为验证的时候启用的GSSAPIAuthentication验证方式导致的。
那我们只要关闭就可以了,这个时候有两个地方是需要设置的,sshd_config里面设置的是服务端,ssh_config里面设置的是客户端的。两台相互连接的机器只要把一方设置为no即可。但是服务端一定要设置sshd_config,客户端设置ssh_config。