PHP 5.6.1编译安装,支持 Oracle MariaDB

大多数phper编译php的时候,的模式都很固定,简单的支持一些常见拓展 支持mysql就够了,而且这些phper们偏爱php5.2 php5.3 连php5.4都很少,很不愿意尝试编译新的版本,以后就固定用这个版本,用固定的编译代码。这样虽然很安全。但是我们应该开拓创新。

环境:Linux CentOS 7
PHP版本:php 5.6.1
目的:支持MariaDB(Mysql), Oracle数据库拓展 以及支持常用拓展组件

事先安装好了MariaDB,MariaDB跟Mysql差不多,此处不详细说明

先上段,尝试成功的编译代码(去掉oracle支持 去掉ldap支持)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql --with-iconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-openssl --enable-soap --enable-zip
然后拷贝php.ini到安装目录
把编译的目录下的 ./php-5.6.1/php.ini-production 拷贝到/usr/local/php/etc/php.ini

上面这段编译配置代码是在我尝试了很多次总结出来的,一去掉了一些编译配置(oracle 和 ldap配置),折腾了很久最终还是放弃在编译php过程中的oralce编译参数和ldap编译参数,如:
--with-oci8=shared,instantclient,/usr/local/lib64/oracle/client/lib --with-pdo-oci=instantclient,/usr/local/lib64/oracle/client/lib,12.1 --enable-opcache --with-ldap --with-ldap-sasl
其中–enable-opcache 没有尝试

PHP各版本说明:
PHP 5.5 开始增加 –enable-opcache参数,意思是启用Zend Opcache缓存功能,类似APC缓存
PHP 5.4 去掉了参数 –enable-safe-mode –enable-discard-path –enable-fastcgi –enable-force-cgi-redirect

但是Oracle,哥们儿我是要用的,怎么能少了你,继续折腾
执行 pecl install oci8 在需要录入的地方输入 shared,instantclient,/usr/local/lib64/oracle/client/lib
其中 /usr/local/lib64/oracle/client/lib 是在官网下载的几个oracle sdk

[root@joe-pc bin]# /usr/local/php/bin/pecl install oci8
downloading oci8-2.0.8.tgz ...
Starting to download oci8-2.0.8.tgz (190,854 bytes)
.........................................done: 190,854 bytes
11 source files, building
running: phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] : shared,instantclient,/usr/local/lib64/oracle/client/lib

在php配置文件里加入oracle支持
编辑 /usr/local/php/etc/php.d/oracle.ini 内容:

extension=oci8.so

启动 php-fpm,妈的报错
NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/oci8.so' - libaio.so.1: cannot open shared object file: No such file or directory in Unknown on line 0
看来这oracle 还缺少libaio支持,也给装上

yum install libaio

然后kill掉php所有进程,重启 php-fpm

/usr/local/php/sbin/php-fpm

ok, 终于搞定了,生命在于折腾

MariaDB初体验,安装测试

系统环境:CentOS 7
MariaDB版本:MariaDB 10.0.14
下载地址:http://mirrors.neusoft.edu.cn/mariadb/mariadb-10.0.14/source/mariadb-10.0.14.tar.gz
其他包地址:https://downloads.mariadb.org/

添加一个mysql用户

useradd mysql

开始编译安装MariaDB

wget http://mirrors.neusoft.edu.cn/mariadb/cmariadb-10.0.14/source/mariadb-10.0.14.tar.gz
tar zxvf mariadb-10.0.14.tar.gz
cd mariadb-10.0.14
cmake .
make
make install

chown -R mysql /usr/local/mysql/
scripts/mysql_install_db --user=mysql
/usr/local/mysql/bin/mysqld_safe --user=mysql &

启动如果报错,应该是MariaDB启动的时候要默认创建一些日志文件,或者运行相关的文件,但是没有创建,或者指定的目录不存在
通常是因为:
一. 在 /var/log/mariadb/ 里创建 mariadb.log 文件没有权限
二. 在 /var/run/mariadb 里创建 mariadb.pid 也没有权限

那么我们分别要创建两个目录

mkdir /var/log/mariadb
mkdir /var/run/mariadb
chown mysql -R /var/run/mariadb #所有权给mysql用户,否则不能创建/var/run/mariadb/mariadb.pid文件

当然以上配置均可以修改,my.cnf配置文件来修改其位置

修改root用户密码:

/usr/local/mysql/bin/mysqladmin -u root password '123456'

其他可能会碰到的问题
1. mysql客户端启动不了
修改/etc/my.cnf

[mysql]
socket=/var/lib/mysql/mysql.sock

2. ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
此错误是因为socket位置导致, 加个软链, 当然修改/etc/my.cnf的sock位置也可以

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

官方编译帮助参考:https://mariadb.com/kb/en/mariadb/documentation/getting-started/compiling-mariadb-from-source/generic-build-instructions/

CentOS7 上网配置,修改hostname,以及使用ifconfig命令,CentOS新特性

默认安装的CentOS 7 mini 版本 是不能使用ifconfig命令的。

如果这时候 还不能联网 可就惨了

先看下CentOS7 的上网配置
修改文件/etc/sysconfig/network-scripts/ifcfg-enp0s3
内容如下:

2014-10-12 00.25.18

ok这样就可以上网了

然后安装ifconfig命令,执行

yum install net-tools

修改hostname
centos7 起修改hostname的方法有所改变

hostnamectl set-hostname blog.xxtime.com

另外 CentOS 7 的防火墙iptables 也有所改变,防火墙默认使用了 firewalld
参见: http://blog.xxtime.com/951

centos 7 开启80端口

CentOS 7 默认没有使用iptables,所以通过编辑iptables的配置文件来开启80端口是不可以的

CentOS 7 采用了 firewalld 防火墙

如要查询是否开启80端口则:

[root@joe-pc ~]# firewall-cmd --query-port=80/tcp
no

显然80端口没有开启

下面我们开启80端口:

[root@joe-pc ~]# firewall-cmd --add-port=80/tcp
success