前言
自从上次那个从零开始构建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。