CentOS6.x 源码编译搭建LAMP环境

源码准备

由于本文搭建LAMP环境使用的是源码安装,在安装过程中需要使用到许多的软件安装包,因此在安装过程中应该首先把需要用到的安装包进行下载,需要使用的软件安装包以及下载地址如下所示:

核心源码文件

apache源码包 httpd-2.4.9.tar.gz

http://httpd.apache.org/

mysql源码包 mysql-5.7.4.tar.gz

http://dev.mysql.com/downloads/

php源码包 php-5.5.14.tar.gz

http://cn2.php.net/downloads.php

可选源码文件

Apache编译依赖包

apr-1.5.1.tar.gz (Apache可移植运行库的组件)

http://apr.apache.org/download.cgi

apr-util-1.5.3.tar.gz (Apache可移植运行库的组件)

http://apr.apache.org/download.cgi

pcre-8.35.zip (支持正则表达式的函数库)

http://sourceforge.net/projects/pcrehttpd-2.4.9.tar.gz

PHP编译依赖包

libxml2-2.9.0.tar.gz (用于解析XML的跨平台C语言库)

ftp://xmlsoft.org/libxml2/

libmcrypt-2.5.8.tar.gz (用于实现加密算法的库)

ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/

zlib-1.2.8.tar.gz (实现压缩和解压缩的库)

http://www.zlib.net

freetype-2.5.3.tar.gz (开源免费的可移植的字体引擎)

http://download.savannah.gnu.org/releases/freetype/

libpng-1.6.12.tar.gz (用于读写png文件的库)

ftp://ftp.simplesystems.org/pub/libpng/png/src/

jpegsrc.v9a.tar.gz (用于读写jpeg文件的库)

http://www.ijg.org/files/

libgd-2.1.0.tar.gz (开源的图像处理库)

https://bitbucket.org/libgd/gd-libgd/downloads

MySQL编译依赖包

bison-2.5.tar.gz(用于自动生成语法分析器程序)

http://www.gnu.org/software/bison/

ncurses-5.8.tar.gz(管理程序在字符终端显示的函数库)

http://www.gnu.org/software/ncurses

上述软件可以使用源码编译安装,也可以使用yum安装,有些软件可能系统自带。其中和APR相关的内容和Autotools相关的内容会单独写文章进行介绍。另外有关运行库和开发库的区别也将另写文章剖析。

环境准备

检测并配置编译环境

1.检查系统中是否存在已安装的LAMP环境,以Apache为例,输入‘rpm -qa | grep -i httpd’,如果存在已安装的Apache,则应使用‘rpm –e httpd-xxx -nodeps’卸载Apache(xxx为版本号),MySql与PHP操作与Apache相同。

2.LAMP环境搭建所需要的软件都使用C语言开发的,所以安装源代码文件最少需要配置(configure)、编译(make)、安装(make install)三个步骤,在虚拟机上输入‘gcc -v’命令,如果gcc已安装,则如下图所示:


CentOS6.x 源码编译搭建LAMP环境_第1张图片
图片.png

否则应该首先安装编译工具,使用yum安装,输入命令行‘yum -y install make cmake gcc gcc-c++ ’。bison用于生成语法分析器程序,ncurses是字符终端下屏幕控制的基本库,两者被MySQL安装所依赖。

防火墙和SELinux配置

编辑/etc/sysconfig/iptables文件,配置防火墙,添加如下两条规则并保存退出

-A INPUT –m state –state NEW –m tcp –p tcp –dport 80 –j ACCEPT
-A INPUT –m state –state NEW –m tcp –p tcp –dport 3306 –j ACCEPT

由于SELINUX的开启可能会对MySQL造成一定的影响,所以提前关闭SELINUX

编辑/etc/selinux/config文件,修改如下内容:

#SELINUX=enforcing      #将该行注释
#SELINUXTYPE=targeted   #将该行注释
SELINUX=disabled        #增加内容

完成上述操作后,重启系统

开始编译

编译安装Apache

编译安装apr和apr-util

cd /usr/local/src/lamp    
tar zxvf apr-1.5.1.tar.gz   # 解压缩命令,tar zxvf apr-xxx.tar.gz(xxx为版本号)
cd apr-1.5.1            
./configure --prefix=/usr/local/apr-httpd  #配置apr安装位置以及安装目录
make                   #编译
make install           #安装

tar zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.1
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
 make
 make install

编译安装pcre

 unzip –o pcre-8.35.zip
 cd pcre-8.35
./configure--prefix=/usr/local/pcre
 make
 make install

编译安装apache

tar zxvf httpd-2.4.9.tar.gz
cd httpd-2.4.9
./configure --prefix=/usr/local/apache2 \             #指定安装目录
--enable-mods-shared=all \                            #将所有模块编译为DSO模块
--enable-deflate \                                    #压缩发送给客户端的内容
--enable-speling \                                    #自动纠正url拼写中的错误
--enable-cache \                                      #基于uri键的内容动态缓冲
--enable-file-cache \                                 #提供文件描述符缓存支持,从而提高Apache性能
--enable-disk-cache \                                 #基于磁盘的缓冲管理器
--enable-mem-cache \                                  #基于内存的缓冲管理器  
--enable-so \                                         #让apache可以支持DSO模式              
--enable-expires=shared \                             #配置expires信息和cache-control信息
--enable-rewrite=shared \                             #url重写引擎模块
--enable-static-support \                             #使用静态连接编译所有二进制支持程序
--sysconfdir=/etc/httpd \                             #指定配置文件路径
--with-z=/usr/local/zlib/ \                           #指定zlib所在路径
--with-apr=/usr/local/apr-httpd/ \                    #指定apr-httpd所在路径
--with-apr-util=/usr/local/apr-util-httpd/ \          #指定apr-util-httpd所在路径
--with-pcre=/usr/local/pcre/ \                        #指定pcre所在路径    
--disable-userdir                                     #禁用用户主目录提供页面访问模块      
make
make install

有关apache便宜安装的configure详细配置选项可以通过./configure --help命令来进行查看

修改配置文件

刚刚编译安装的apache服务器一般是没有配置主机名的,这将在apache首次启动的时候出现警告信息:

AH00558:httpd:Could not reliably determine the server's fully qualified domain
name, using::1.Set the ServerName' directive globally to suppress this message

修改apache配置文件httpd.conf,通常放在/usr/local/apache2/conf/下,配置ServerName项

ServerName localhost:80

进程控制方式

Apache启动脚本通常放在/usr/local/apache2/bin/目录下,其中httpd是可执行文件,apachectl是脚本文件,apachectl脚本会将apache运行时需要的一些参数和环境变量传递给httpd文件。因此官方推荐使用apchectl控制apache的启动,停止和重启。也可以配置apchectl启动脚本中的配置项从而向httpd可执行文件中传入指定的参数。

使用脚本控制

/usr/local/apache2/bin/apachectl -k start             #启动命令
/usr/local/apache2/bin/apachectl -k restart           #强制重启
/usr/local/apache2/bin/apachectl -k graceful          #平滑重启
/usr/local/apache2/bin/apachectl -k stop              #强制关闭
/usr/local/apache2/bin/apachectl -l graceful-stop     #平滑关闭

使用信号控制

kill -TERM `cat /usr/local/apache2/logs/httpd.pid`    #强制关闭
kill -WINCH  `cat /usr/local/apache2/logs/httpd.pid`  #平滑关闭
kill -HUP `cat /usr/local/apache2/logs/httpd.pid`     #强制重启
kill -USR1 `cat  /usr/local/apache2/logs/httpd.pid`   #平滑重启

注意这里/usr/local/apache2/logs/httpd.pid文件保存的是apache主进程的进程id。有关软重启与硬重启,软关闭与硬关闭的工作模式在另行补充。

测试安装结果

根据以上控制方式,我们启动apache服务器,推荐使用apachectl脚本。

/usr/local/apache/bin/apachectl -k start

打开浏览器,在地址栏中输入主机的IP地址,本次安装为:http://192.168.78.2/如果浏览器中出现It works!则表明Apache服务器可以使用。

后续处理工作

每种服务器软件都有必要制成开机时自动启动,Apache服务器开机自动启动,只要在“/etc/rc.d/rc.local”文件,加上Apache服务器的启动命令即可。可以直接打开“/etc/rc.d/rc.local”文件,在最后一行写入Apache启动命令,也可以用echo命令追加进去,如下命令行示:

echo "/usr/local/apache243/bin/apachectl -k start" >> /etc/rc.d/rc.local

对于linux系统中的服务有时候会使用service命令或chkconfig命令进行管理,这两个工具的操作目录是/etc/init.d/下,因此为了将apache服务纳入,我们将apache服务器的启动脚本复制到该目录下,并其设置开机自动启动。

cp /usr/local/apache/bin/apachectl /etc/init.d/httpd     #复制执行脚本
chmod +x /etc/init.d/httpd                               #赋予执行权限
chkconfig –add httpd                                     #设置开机自动启动

编译安装MySQL

这里编译mysql我们采用cmake,有关make和cmake的使用和区别我们另行介绍。

编译安装bison

tar zxvf bison-2.5.tar.gz  
cd bison-2.5  
./configure  
make  
make install  

编译安装ncurses

tar zxvf ncurses-5.8.tar.gz  
cd ncurses-5.8  
./configure  
make  
make install  

编译安装mysql

tar xvf mysql-5.6.14.tar.gz
cd mysql-5.6.14
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \                #指定安装目录
-DMYSQL_DATADIR=/usr/local/mysql/data \                  #指定数据存放目录
-DSYSCONFDIR=/etc \                                      #指定配置文件路径
-DWITH_MYISAM_STORAGE_ENGINE=1 \                         #指定MYISAM存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                       #指定INNODB存储引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 \                         #指定MEMORY存储引擎
-DWITH_READLINE=1 \                                      #提供行内编辑,历史管理等功能。
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \            #指定mysql.sock文件位置
-DMYSQL_TCP_PORT=3306 \                                  #指定监听端口
-DENABLED_LOCAL_INFILE=1 \                               #允许从本地导入数据
-DWITH_PARTITION_STORAGE_ENGINE=1 \                      #安装支持数据库分区
-DEXTRA_CHARSETS=all \                                   #使MySQL支持所有的扩展字符
-DDEFAULT_CHARSET=utf8 \                                 #指定字符集utf8
-DDEFAULT_COLLATION=utf8_general_ci                      #指定校对集utf8_general_ci
make
make install

修改配置文件

默认读取的配置文件是/usr/local/mysql/下的my.cnf文件

[mysqld]
basedir = /usr/local/mysql                                   #mysql安装主目录
datadir = /usr/local/mysql/data                              #mysql存放数据的目录
socket = /usr/local/mysql/mysql.sock                         #用于本地连接的sock文件
user = mysql                                                 #运行时的用户身份
port = 3306                                                  #mysql绑定的端口

[mysqld_safe]
pid-file = /usr/local/mysql/data/node-2.pid                 #记录mysql进程pid文件

配置mysql

创建系统用户和用户组

groupadd mysql
useradd -g mysql mysql

修改/usr/local/mysql目录权限

chown -R mysql:mysql /usr/local/mysql

进入安装目录,执行初始化脚本,创建系统自带的数据库和表

cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

添加服务,拷贝服务脚本到init.d目录,启动并设置开机启动

cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start 

在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置

注意:在CentOS 6.4版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。

此外在使用"yum update"更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题。

添加环境变量

将mysql二进制文件添加到PATH中,要不不能直接调用mysql,修改/etc/profile文件,在文件末尾添加

PATH=/usr/local/mysql/bin:$PATH
export PATH

关闭文件,运行下面的命令,让配置立即生效

source /etc/profile

在终端内直接输入mysql进入mysql的环境,执行下面的命令修改root密码

mysql -uroot  
mysql> SET PASSWORD = PASSWORD('123456');

或者使用mysql提供的mysql_admin二进制文件修改密码

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

若要设置root用户可以远程访问,执行

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%' IDENTIFIED BY 'password' WITH GRANT OPTION;

红色的password为远程访问时,root用户的密码,可以和本地不同。

如果是生产环境,强烈推荐运行如下命令移除test数据库和内建的匿名用户

/usr/local/mysql/bin/mysql_secure_installation

你可以使用如下命令启动mysql守护进程,使其进入后台运行

/usr/local/mysql/bin/mysqld_safe &

你可以使用mysql-test目录下的mysql-test-run.pl脚本测试mysql进程

perl /usrl/local/mysql-test/mysql-test-run.pl

输入mysql -uroot -p回车,提示输入密码,输入正确的密码进入mysql的shell环境说明mysql安装完成。

mysql.sock文件 是随每一次 mysql server启动生成的。其作用是mysql客户端与服务器处于同一台机器时,发起本地连接时采用unix domain socket方式进行连接。 对于本地连接这样做的效率高于采用tcp/ip socket方式进行连接。而对于外部的远程连接则只能采用tcp/ip socket方式建立连接。

有关tcp/ip socket连接方式和unix domain socket连接方式的比较另写文章说明。

编译安装PHP

编译安装libxml2库

libxml2是一个xml的c语言版的解析器,不仅支持c语言,还支持c++、php、Pascal、Ruby、Tcl等语言的绑定。

tar –zxvf libxml2-2.7.8.tar.gz
cd ./libxml2-2.7.8
./configure --prefix=/usr/local/libxml2/
make
make install

如果安装成功以后,在/usr/local/libxml2/目录下将生成bin,include,lib,share四个目录。在后面安装PHP5源代码的配置时,会通过在configure命令的选项中加上"--with-libxml-dir=/usr/local/libxml2"选项,用于指定安装libxml2库文件的位置。

编译安装libmcrypt库

tar –zxvf libmcrypt-2.5.8.tar.gz
cd ./libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt/
make
make install

如果安装成功就会在/usr/local/libmcrypt/目录下生成bin,include,lib,man,share五个目录。然后在安装PHP5源代码包的配置时,就可以通过configure命令加上“--with-mcrypt-dir=/usr/local/libmcrypt”选项,指定这个libmcrypt库文件的位置。

编译安装zlib库

zlib是提供数据压缩用的函式库。

tar –zxvf zlib-1.2.5.tar.gz
cd ./zlib-1.2.5
./configure --prefix=/usr/local/zlib/
make
make install

如果安装成功将会在/usr/local /zlib目录下生成include,lib,share三个目录。在安装PHP5配置时,在configure命令的选项中加上“--with- zlib-dir=/usr/local/libmcrypt”选项,用于指定zlib库文件位置。

编译安装libpng库

tar –zxvf libpng-1.5.4.tar.gz
cd ./libpng-1.5.4
./configure --prefix=/usr/local/libpng/ --enable-shared 
make
make install

如果安装成功将会在/usr/local/libpng目录下生成bin,include,lib和share四个目录。在安装GD2库配置时,通过在configure命令选项中加上“--with-png=/usr/local/libpng”选项,指定libpng库文件的位置。

编译安装jpeg库

tar –zxvf jpegsrc.v8c.tar.gz
cd ./jpeg-8c/
mkdir /usr/local/jpeg/
mkdir /usr/local/jpeg/bin/(创建存放命令的目录)
mkdir /usr/local/jpeg/lib/(创建jpeg库文件所在目录)
mkdir /usr/local/jpeg/include/(创建存放头文件目录)
mkdir –p /usr/local/jpeg/man/man1(建立存放手册的目录) 
./configure --prefix=/usr/local/jpeg/ \
--enable-shared \
--enable-static(建立共享库使用的GNU的libtool和静态库使用的GNU的libtool) 
make && make install

在安装GD2库配置时,可以在configure命令的选项中加上“--with-jpeg=/usr/local/jpeg8”选项,指定jpeg8库文件的位置。安装PHP时也要指定该库文件的位置。

编译安装freetype库

tar –zxvf freetype-2.4.6.tar.gz
cd ./freetype-2.4.6
./configure --prefix=/usr/local/freetype/ --enable-shared
make && make install

如果安装成功将会在/usr/local/freetype目录下存在bin,include,lib和share四个目录。并在安装GD2库时,通过configure命令选项中加上“--with-freetype=/usr/local/freetype/”选项,指定freetype库文件位置。

编译安装autoconf库

tar –zxvf autoconf-2.68.tar.gz
cd ./autoconf-2.68
./configure
make && make install

唯一注意的地方是configure时,不用指定路径。

编译安装gd库

tar –zxvf gd-2.0.35.tar.gz
cd ./gd-2.0.35
./configure --prefix=/usr/local/gd \
--with-jpeg=/usr/local/jpeg/ \
--with-png=/usr/local/libpng/ \ 
--with-zlib=/usr/local/zlib/ \
--with-freetype=/usr/local/freetype/
make && make install

如果安装成功会在/usr/local/gd/目录下存在bin、include和lib这三个目录。在安装PHP5时,通过在configure命令选项中加上“--with-gd=/usr/local/gd”选项,指定GD库文件的位置。

编译安装PHP

tar –zxvf php-5.4.11.tar.gz
cd./php-5.4.11
./configure --prefix=/usr/local/php                                   #指定PHP安装目录 
 --with-config-file-path=/usr/local/php/etc                           #指定配置文件目录
 --with-apxs2=/usr/local/apache2/bin/apxs                             #指定apache所在目录       
 --with-mysql=/usr/local/mysql                                        #指定mysql所在目录 
 --with-mysqli=/usr/local/mysql/bin/mysql_config                      #指定mysqli扩展目录
 --with-libxml-dir=/usr/local/libxml2                                 #指定libxml2安装路径
 --with-png-dir=/usr/local/libpng                                     #指定libpng安装路径
 --with-jpeg-dir=/usr/local/jpeg                                      #指定jpeg安装路径
 --with-freetype-dir=/usr/local/freetype                              #指定freetype安装路径
 --with-gd=/usr/local/gd                                              #指定gd库安装路径
 --with-zlib-dir=/usr/local/zlib                                      #指定zlib安装路径
 --with-mcrypt=/usr/local/libmcrypt                                   #指定libmcrypt安装路径
 --with-xpm-dir=/usr/lib64                                            #指定libXpm安装路径
 --enable-soap                                                        #支持soap通信协议                 
 --enable-mbstring=all                                                #激活mbstring函数
 --enable-sockets                                                     #激活套接字支持

配置apache关联php

编辑配置文件/usr/local/apache2/etc/httpd.conf,在LoadModule最后面添加以下内容

LoadModule php5_module     modules/libphp5.so

通常正确编译安装PHP后会自动增加,如果没有,需要手工添加。

接下来要检查apache目录下生成的php动态连接库文件,在目录/usr/local/apache/modules,找到是否存在libphp5.so文件。若不存在则说明php安装不正确。

在/etc/httpd/conf/httpd.conf文件中添加如下内容:

AddType application/x-compress.Z
AddType application/x-gzip .gz .tgz
Addtype application/x-httpd-php .php .phtml
Addtype application/x-httpd-php-source.phps
DirectoryIndex index.php index.html index.htm

配置结束后重启Apache。

Apache服务器的根目录默认为:/usr/local/apache2/htdocs/,此目录下面存放资源:index.php添加内容为


在客服端验证,出现下图说明环境搭建成功

CentOS6.x 源码编译搭建LAMP环境_第2张图片
图片.png

至此,LAMP三个最重要的组件Apache,MySQL和PHP编译完成,并进行了初步的配置工作。

后续工作

对于未在编译安装时指定的模块,php提供了一个工具phpize来帮助我们编译php模块,我们只需使用此工具在php源码包中找到并编译所需的扩展,将生成的.so文件添加到配置文件的extension_dir目录中,并在扩展中开启该模块即可。

对于未在编译安装时指定的模块,apache提供了一个工具apxs来帮助我们在编译其某一模块时与其进行关联。我们编译的php就是基于此方法生成.so文件与apache关联的。

接下来我们介绍使用PHP自带的工具phpize编译并安装php扩展。我们以openssl和mysql两套扩展为例。

phpize 命令是用来准备 PHP 扩展库的编译环境的。下面例子中,扩展库的源程序位于源码文件的ext目录中

添加openssl扩展

cd /root/php-5.5.15/ext/openssl
/usr/local/webserver/php/bin/phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
./configure --with-openssl \
--with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
Build complete.
Don't forget to run 'make test'.

编译完成后将生成的openssl.so添加到php.ini中,重启apache,重启完成后即可调用openssl库中的方法生成公钥、私钥对。

添加mysql扩展

cd /root/php-5.5.15/ext/mysql
/usr/local/webserver/php/bin/phpize 
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
./configure --with-php-config=/usr/local/webserver/php/bin/php-config \
 --with-mysql=/usr/local/webserver/mysql/
make && make install
Build complete.
Don't forget to run 'make test'.
Installing shared extensions:     /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-
20121212/

mysql.so会自动添加extension_dir所指目录中,修改php.ini添加 extension=mysql.so 重启apache即可调用mysql扩展。

你可能感兴趣的:(CentOS6.x 源码编译搭建LAMP环境)