源码准备
由于本文搭建LAMP环境使用的是源码安装,在安装过程中需要使用到许多的软件安装包,因此在安装过程中应该首先把需要用到的安装包进行下载,需要使用的软件安装包以及下载地址如下所示:
核心源码文件
apache源码包 httpd-2.4.9.tar.gz
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语言库)
libmcrypt-2.5.8.tar.gz (用于实现加密算法的库)
ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/
zlib-1.2.8.tar.gz (实现压缩和解压缩的库)
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文件的库)
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已安装,则如下图所示:
否则应该首先安装编译工具,使用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添加内容为
<?php
echo phpinfo();
?>
在客服端验证,出现下图说明环境搭建成功
至此,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扩展。