Leo の Blog Where there is a will there is a way! Trust youself can do it!

25五/090

快速搭建Linux开发测试WEB服务器系列9-编译安装PHP扩展

上篇我们介绍了安装 PHP 相关信息. 这篇我们介绍一下如何安装 PHP 的扩展. 目前用的非常广泛的扩展 比如: Memcache, ImageMagick 等. 安装扩展也非常的简单. 掌握了安装方法. 安装其他所需要的扩展也就易如反掌了.

OK. 我们先来安装一下 Memcache 扩展. 可以到 http://pecl.php.net/package/memcache 下载最新的稳定包. 目前 stable 版本是 2.2.5, 我们也将安装该版本. 下载 memcache-2.2.5.tgz 解压安装

1
2
3
4
5
6
7
tar -zxf memcache-2.2.5.tgz -C ~/sources
rm ~/sources/package.xml
cd ~/sources/memcache-2.2.5
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
sudo make install

这样扩展就安装完成了. 现在来修改 php.ini 载入该扩展, 这个和 window 下没有什么区别. 只不过在 window 下安装扩展只要下载该扩展的 dll 文件放入到php的ext目录下即可, linux 下要自己编译成 so 文件.

1
sudo gedit /usr/local/php/php.ini

修改 extension_dir = "./" 改成下面的这样. 具体的路径请在自己安装的系统里确认一下.

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

然后在扩展列表那里添加一行:

extension=memcache.so

保存退出, 重启 Apache 服务, 刷新 http://localhost/phpinfo.php 可以看到 memcache 扩展已经被编译进php扩展模块中.

现在在装个图片处理扩展 ImageMagick,  官方网站: http://www.imagemagick.org 下载最新的包 ImageMagick.tar.gz 解压安装. ImageMagick 是 Linux 下的专门图片处理程序. PHP可以通过安装 imagick 扩展调用其功能. imagick 下载地址: http://pecl.php.net/package/imagick 目前最新稳定版本为 2.2.2, 我们也将安装此版本作为PHP的扩展. 同样下载好安装.

1
2
3
4
5
6
7
8
9
10
11
12
13
tar -zxf ImageMagick.tar.gz -C ~/sources
cd ~/sources/ImageMagick-6.5.2-8
./configure
make
sudo make install
cd ~/downs
tar -zxf imagick-2.2.2.tgz -C ~/sources
rm ~/sources/package.xml
cd ~/sources/imagick-2.2.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
sudo make install

把imagick扩展添加到PHP使其生效和memcache模式一样. 这里不再重复了. 这样. PHP 在linux下的扩展就简单的介绍完了. 以后如果自己需要什么扩展按照以上的模式编译安装就可以了. 这篇就先介绍这些. 下篇我们介绍一套高效的 Web 服务器搭建方案 Nginx + fastCgi + php.

25五/090

快速搭建Linux开发测试WEB服务器系列8-编译安装PHP

这篇我们介绍编译安装PHP, 目前PHP已经发布到5.2.9 版本. 我们本次安装即采用这个版本安装. 安装之前. 先安装几个依赖包. 在前面的系列文章中. 我们依据安装软件的不同软件陆续的安装了一些第三方的软件包. 这里说明一下就是, 如果前面介绍的软件包未安装. 这里请浏览前面的文章, 一次补上. 否则可能会碰到编译失败的情况. 当然, 可能没有人的电脑的环境安装的时候已经安装好了相关的包. 这里提醒一下. 不让到时候死活编译出错. 是件很烦人的事情. 我们采用静态编译安装PHP.  关于静态编译安装和动态编译安装后的PHP效率问题经过测试几乎是没有区别的. 所以安装方式看个人的喜好.

这里先安装一下几个必要的包:

1
2
3
sudo apt-get install flex
sudo apt-get install libxml2 libxml2-dev
sudo apt-get install openssl

另外需要一些其他扩展模块. 这里先安装一个 curl 模块 CURL 模块目前最新版本到了 7.19.5 , 我们使用最新版安装. 包下载地址是: http://curl.haxx.se/download.html , 下载好包 curl-7.19.5.tar.gz 后解压安装.

1
2
3
4
5
6
tar -zxf curl-7.19.5.tar.gz -C ~/sources
cd ~/sources/curl-7.19.5
sudo mkdir /usr/local/curl
./configure --prefix=/usr/local/curl --with-ssl
make
sudo make install

安装 GD 扩展, JPEG 图片处理支持, 下载地址: http://www.ijg.org/files/jpegsrc.v6b.tar.gz 下载好包:jpegsrc.v6b.tar.gz  后解压安装.

1
2
3
4
5
6
7
8
9
10
11
tar -zxf jpegsrc.v6b.tar.gz -C ~/sources
cd ~/sources/jpeg-6b
sudo mkdir /usr/local/jpeg
sudo mkdir /usr/local/jpeg/bin
sudo mkdir /usr/local/jpeg/lib
sudo mkdir /usr/local/jpeg/include
sudo mkdir /usr/local/jpeg/man
sudo mkdir /usr/local/jpeg/man/man1
./configure --prefix=/usr/local/jpeg --enable-shared --enable-static
make
sudo make install

GD扩展 PNG 图片处理支持. 下载地址为: http://www.libpng.org/pub/png/libpng.html 目前版本为: 1.2.35 ,  下载包:libpng-1.2.35.tar.gz 解压安装.

1
2
3
4
5
6
tar -zxf libpng-1.2.35.tar.gz -C ~/sources
cd ~/sources/libpng-1.2.35
cp scripts/makefile.linux makefile
./configure
make
sudo make install

另外安装一下 freetype 支持. 下载地址:http://freetype.sourceforge.net/index2.html , 下载包: freetype-2.3.9.tar.gz 解压安装.

1
2
3
4
5
tar -zxf freetype-2.3.9.tar.gz -C ~/sources
cd ~/sources/freetype-2.3.9
./configure --prefix=/usr/local/freetype2
make
sudo make install

另外2个加密相关的包 mcrypt 和 mhash 下载安装.

libmcrypt: http://mcrypt.sourceforge.net/ 下载 libmcrypt-2.5.8.tar.gz  解压安装

1
2
3
4
5
tar -zxf libmcrypt-2.5.8.tar.gz -C ~/sources
cd ~/sources/libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt
make
sudo make install

libmhash: http://sourceforge.net/projects/mhash 下载: mhash-0.9.9.9.tar.gz  解压安装

1
2
3
4
5
tar -zxf mhash-0.9.9.9.tar.gz -C ~/sources
cd ~/sources/mhash-0.9.9.9
./configure --prefix=/usr/local/libmhash
make
sudo make install

现在相关的准备工作已经做的差不多了. 可以安装PHP了. 到 http://www.php.net 下载目前最新的 php-5.2.9.tar.gz 包. 解压安装.  安装 php 编译过程比较漫长. 中途可以放心去做饭烧菜. 反正在我这个老电脑上是运行了不少时间. ^o^

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
tar -zxf php-5.2.9.tar.gz -C ~/sources
cd ~/sources/php-5.2.9
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-fastcgi \
--enable-force-cgi-redirect \
--with-config-file-path=/usr/local/php \
--with-openssl \
--with-zlib \
--with-zlib-dir=/usr/local/zlib \
--enable-bcmath \
--enable-calendar \
--with-curl=/usr/local/curl \
--with-curlwrappers \
--enable-ftp \
--with-gd \
--with-jpeg-dir=/usr/local/jpeg \
--with-png-dir=/usr/local \
--with-freetype-dir=/usr/local/freetype2 \
--enable-gd-native-ttf \
--with-gettext \
--with-mcrypt=/usr/local/libmcrypt \
--with-mhash=/usr/local/libmhash \
--enable-mbstring \
--enable-exif \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-xmlrpc \
--enable-soap \
--enable-sockets \
--enable-zip
make
sudo make install

上面的 configure 参数不要直接COPY张贴到终端, 由于 WIN下的换行和linux的不一样. 其实只运行了 ./configure 这一句而已. 下面给出一行的configure 语句, COPY下面的即可执行 configure 操作了.  上面是方便查看PHP的编译环境设置而已.

1
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --enable-fastcgi --enable-force-cgi-redirect --with-config-file-path=/usr/local/php --with-openssl --with-zlib --with-zlib-dir=/usr/local/zlib --enable-bcmath --enable-calendar --with-curl=/usr/local/curl --with-curlwrappers --enable-ftp --with-gd --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local --with-freetype-dir=/usr/local/freetype2 --enable-gd-native-ttf --with-gettext --with-mcrypt=/usr/local/libmcrypt --with-mhash=/usr/local/libmhash --enable-mbstring --enable-exif --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-xmlrpc --enable-soap --enable-sockets --enable-zip

OK, PHP编译安装完成. COPY php.ini 文件到 /usr/local/php/php.ini 然后稍微修改一下. 把 PHP 错误显示模式打开. 设置: display_errors = On 然后保存退出.

1
2
sudo cp php.ini-recommended /usr/local/php/php.ini
sudo gedit /usr/local/php/php.ini

接下来我们测试一下PHP是否安装成功. 是否能和 Apache 正常的配合运行.  修改一下 apache 的配置文件, 使之支持解析PHP

PHP 如果安装成功顺利的话, 默认的在 httpd.conf 的 loadModule 那里已经添加好了 一行:

loadModule php5_mod    modules/libphp5.so

我们只要在这行下面添加些信息即可让apache支持php脚本. 添加下面信息.

AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps

然后在修改一下DirectoryIndex. 找到: DirectoryIndex index.html 后面添加变下面这样, 保存退出!

DirectoryIndex index.html index.htm index.php

接下来在 /usr/local/apache2/htdocs 下建立一个测试文件, phpinfo.php 输入内容 <?php phpinfo(); ?> 重启 Apache 服务.

1
sudo /etc/init.d/apache.server restart

现在打开浏览器, 在地址栏里输入: http://localhost/phpinfo.php 看看 php 是否已经正常安装好. 服务器的配置信息也全部显示出来了.

OK, 真要去做饭了. 这篇就先介绍到这里. 后面我们再介绍一下给现在的系统添加些扩展. 比如 memcache 之类的扩展.  下篇再说吧.

24五/090

快速搭建Linux开发测试WEB服务器系列7-编译安装Subversion

这篇我们来安装版本控制软件 Subversion, 这个是一个用的很普遍版本控制软件. 官方网站为: http://subversion.tigris.org/ 目前最新版是 1.6.2, 我们本次就使用这个最新版本. 官方下载 subversion-1.6.2.tar.gz, 另外还有一个依赖包 subversion.deps-1.6.2.tar.gz 这个依赖包我们不使用了. 我们独立安装他需要的依赖包. 因为官方自带的依赖包安装起来总是会有些问题.

首先先安装一些必要的包.  libxml2, openssl

1
2
sudo apt-get install libxml2 libxml2-dev
sudo apt-get install libssl-dev openssl

在上篇 编译安装 Apache 的时候, apr 和 apr-util 包我们已经安装过了. 这里就不需要在安装了. 接下来我们安装软件包 neon, 可以到 http://www.webdav.org/neon/ 下载 最新的 neon-0.28.4.tar.gz  版本的包, 解压安装

1
2
3
4
5
tar -zxf neon-0.28.4.tar.gz -C ~/sources
cd ~/sources/neon-0.28.4
./configure
make
sudo make install

另外再安装 zlib 包. 可以在 http://www.zlib.net/下载最新的 zlib-1.2.3.tar.gz 解压安装到 /usr/local/zlib

1
2
3
4
5
tar -zxf zlib-1.2.3.tar.gz -C ~/sources
cd ~/sources/zlib-1.2.3
./configure --prefix=/usr/local/zlib
make
sudo make install

在 sf.net 上下载一个 expat , 目前版本是 expat-2.0.1.tar.gz . 手动解压安装一下.

1
2
3
4
5
tar -zxf expat-2.0.1.tar.gz -C ~/sources
cd ~/sources/expat-2.0.1
./configure
make
sudo make install

另外需要SQLite3 支持. 下载 http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz ,解压然后复复制 sqlite3.c 文件到 subversion 目录下

现在解压安装 subversion-1.6.2, Subversion 默认是使用 Berkeley DB 数据库管理文件的. 这样据说是有可能引起死锁. 我们不使用该模式保存文件. 而是使用 FSFS 系统. 编译安装 subversion 的时间比较长. 需要花点时间耐心等待一下.

1
2
3
4
5
6
7
8
9
tar -zxf subversion-1.6.2.tar.gz -C ~/sources
mkdir ~/source/subversion-1.6.2/sqlite-amalgamation
tar -zxf sqlite-amalgamation-3.6.13.tar.gz
cp ~/downs/sqlite-3.6.13/sqlite3.c ~/sources/subversion-1.6.2/sqlite-amalgamation/sqlite3.c
rm -rf ~/downs/sqlite-amalgamation-3.6.13
cd ~/source/subversion-1.6.2
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-neon=/usr/local --with-zlib=/usr/local/zlib --with-ssl --without-berkeley-db
make
sudo make install

到这里, Subversion 软件已经安装完毕,  现在测试一下他能否正常工作.

我们建立版本库的基本保存目录在 /home/svn, 所有的项目都保存在 /home/svn/projects 目录下.

1
2
sudo mkdir /home/svn
sudo mkdir /home/svn/projects

现在建立一个版本库. 这里设定为 test, 建立命令的用法为: svnadmin create svn_save_path, 具体的SVN命令语法请参考其他资料. 这里只是简要说明一下.

sudo /usr/local/subversion/bin/svnadmin create /home/svn/projecst/test
ls /home/svn/projecst/test

查看一下. 这里已经有一些文件在  /home/svn/projecst/test 下了. 说明 Subversion 已经可以正常工作了. 我们继续往下测试. 在 /tmp 目录下建立一个文件夹 t 然后/tmp/t/ 下面再随意建立个文件. 比如: readme.txt 内容随意. 然后我们进行代码入库测试.

数据导入版本库的命令语法: svn import 数据源地址 file:///版本库地址 -m "日志,标记信息", 看下面的例子.

1
sudo /usr/local/subversion/bin/svn import /tmp/t file:///home/svn/projects/test -m "Project Test. This is First Import"

OK, 我们看到终端已经打印出结果信息. readme.txt 已经被加入到版本库中. 当前的版本号为 1

现在再做一个数据导出测试. 在 /tmp/ 下建一个 文件夹 为 /tmp/tt , 然后导出刚才添加到版本库的数据.

导出命令语法: svn checkout file:///版本库地址 目标地址, 看下面的实例.

1
2
3
4
mkdir /tmp/tt
/usr/local/subversion/bin/svn checkout file:///home/svn/projects/test /tmp/tt
ls /tmp/tt
sudo chmod -R 777 /home/svn/project/test

OK, 我们看到数据已经成功导出到 /tmp/tt 文件夹中. 然后修改一下版本库的权限, 到后面可以让不同的客户短都能提交数据. 到这里 Subversion 软件已经安装成功了. 接下来需要配置一下使subversion和apache 一起工作. 并且要限制访问者权限.

在Subversion安装成功后, mod_dav.so 和 mod_dav_svn.so 应该自动被复制到 /usr/local/apache2/modules/目录下了. 并且 httpd.conf 文件也被做了相应的修改了.  正常的应该在 载入模块的部分被添加了下面两行.

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

我们在 httpd.conf 文件的尾部增加下面的信息. 保存退出!

<Location /svn>
DAV svn
SVNParentPath /home/svn/projects
SVNListParentPath on
AuthzSVNAccessFile /home/svn/svn-access-auth.conf
AuthType Basic
AuthName "Subversion Repository "
AuthUserFile /home/svn/svn-auth-passwd.conf
Require valid-user
</Location>

上面的一段就是配置通过 http://IP/svn 网络访问版本库的信息了. 其中:

AuthzSVNAccessFile 是版本库目录控制文件的配置文件. 文件名和保存目录可以随意指定.

AuthUserFile 是版本控制的用户帐号和密码文件, 文件名和保存目录可以随意指定.

我们现在来给版本库系统添加2个帐号. 一个是管理员(admin)帐号, 一个是(来宾)帐号 guest. 密码自定. 第一次给用户帐号文件添加帐号时需要多添加两个参数 -c -m 表示创建用户帐号文件. 以后就不需要这2个参数. 看例子:

1
2
sudo /usr/local/apache2/bin/htpasswd -c -m /home/svn/svn-auth-passwd.conf admin
sudo /usr/local/apache2/bin/htpasswd /home/svn/svn-auth-passwd.conf guest

现在设置项目存取控制文件 /home/svn/svn-access-auth.conf

sudo gedit /home/svn/svn-access-auth.conf

内容设置管理员可以浏览提交版本库内容, 来宾只能浏览版本信息. 内容如下: 具体的控制信息设置. 请参考其他文档.

[groups]
adminers = admin
guestes = guest

[/]
* = r

[test:/]
@adminers = rw
@guestes = r

这样通过 http://ip/svn/test 就能访问这版本库了.  并且 guest 帐号只能浏览. admin帐号可以通过subversion客户段提交修改过的信息到版本库.

到这里就 Subversion 部分就介绍完了.  下篇我们介绍一下编译安装 PHP

24五/090

快速搭建Linux开发测试WEB服务器系列6-编译安装Apache

这篇我们来编译安装一个流行的Web服务器 Apache, 这个在服务器用来做开发测试服务器是很不错的. 当然我们可能会在生产服务器上会根据具体的应用而使用 Nginx 等其他之类的服务器, 内部开发还是推荐 Apache 做服务器.

我们同样也是通过编译源码安装该服务. 可以到 apache.org 上下载需要的包. 这里我们下载的是 httpd-2.2.11.tar.gz, apr-1.3.3.tar.gz, apr-util-1.3.4.tar.gz. 单独的只要安装 Apache 服务器的话, apr和apr-util包可以不安装. 现在我们安装这个主要是接下来我们还会给这个工作站配置 Subversion 服务,  而且会把 Subversion 和 Apache 结合在一起.  subversion 是一个很不错的源码管理软件. 相信每个团队协作开发都非常的喜欢它的.

在安装 Apache 服务之前, 需要先安装一些支持包. 这里最常用的就是压缩模块 mod_deflate 是需要 zlib 的支持的. 先安装一下.

1
sudo apt-get install zlib1g-dev

现在我们先编译安装 apr 包, 解压后然后进入解压后的文件夹. 比如 文件下载放在 ~/downs 目录下. 源码包都解压到 ~/sources 目录下.安装 apr-util 包类似, 我们使用默认安装目录: /usr/local,   安装apr-util 包是指定一下apr包的路径. 安装非常简单. 像下面这样即可.

1
2
3
4
5
6
7
8
9
10
tar -zxf apr-1.3.3.tar.gz -C ~/sources
tar -zxf apr-util-1.3.4.tar.gz -C ~/sources
cd ~/sources/apr-1.3.3
./configure
make
sudo make install
cd ../apr-util-1.3.4
./configure --with-apr=/usr/local/apr
make
sudo make install

现在可以编译 Apache了. 我们把他安装到 /usr/local/apache2, apr 和 apr-util 使用我们刚才安装好的版本. 另外尽量的把apache的模块都安装进来, 方便开发测试. 首先解压下载好的压缩包

1
2
3
4
5
tar -zxf httpd-2.2.11.tar.gz -C ~/sources
cd ~/sources/httpd-2.2.11
./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-rewrite=shared --enable-dav=shared --enable-so --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config
make
sudo make install

到这里. 工作站的 Web 服务就安装好了. 只需要修改一下配置文件工作站就可以当做一台 Web 服务器使用了.

修改 apache 的配置文件 /usr/local/apache2/conf/httpd.conf, 修改前先备份一下.

1
2
sudo cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.backup
sudo gedit /usr/local/apache2/conf/httpd.conf

找到 #ServerName www.example.com:80 这行, 修改为: ServerName 127.0.0.1 保存.

OK, 现在可以启动 apache 服务了.

1
sudo /usr/local/apache2/apachectl start

在工作站的浏览器地址栏里输入 : http://localhost 应该可以看到 It works , 证明 apache 已经正常运行了. 我们先关闭 apache 服务, 和 前面安装的 MySQL 服务一样. 我们把它加入到随机启动服务中.

1
2
3
sudo /usr/local/apache2/apachectl stop
sudo cp /usr/local/apache2/apachectl /etc/init.d/apache.server
sudo update-rc.d apache.server defaults

这里如果你以后想删除 apache.server 随机启动到话执行

1
2
sudo update-rc.d -f apache.server remove
sudo rm /etc/init.d/apache.server

OK, 简单的 Apache 就安装成功了. 关于 Apache 服务器设置和 PHP 集成 及其他方面我们在后面陆续介绍. 下篇我们介绍 源码控制工具 Subversion 的安装和简单使用.

24五/090

快速搭建Linux开发测试WEB服务器系列5-编译安装MySQL

这篇我们开始安装数据库服务, 使用 MySQL 数据库. 选用最新的 5.1.34 版. 从 http://www.mysql.com 上下载源码包. 我们使用编译源码方式安装 MySQL 数据库.

编译安装 MySQL, 先确保系统已经安装如下工具. gunzip, tar, gcc, make, libtool

通常 gunzip, tar, gcc, make 都默认安装. 下面我们装一下 libtool

1
sudo apt-get install libtool

还有个一个比较怪的包需要安装, 没有这个包, configure 无法正常工作. 这个问题在网上被问的比较多的.

1
sudo apt-get install libncurses5-dev

下载好源码包后记得MD5SUM确认一下下载包的完整性. 将下载好的包解压好进入目录.开始编译.

1
2
3
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static  --with-charset=utf8
make
sudo make install

OK, 现在MySQL数据库已经成功安装完毕. 现在配置数据库用户.

1
2
3
4
5
6
7
sudo groupadd mysql
sudo useradd -g mysql mysql
sudo /usr/local/mysql/bin/mysql_install_db --user=mysql
sudo chown -R root .
sudo chown -R mysql var
sudo chgrp -R mysql .
sudo cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

这里要修改一下 my.cnf 一行代码, 注释掉skip-federated这行才能正常启动

启动数据库, 修改管理员密码.

1
2
3
sudo /usr/local/mysql/share/mysql/mysql.server start
/usr/local/mysql/bin/mysqladmin -u root password 'mypassword'
/usr/local/mysql/bin/mysqladmin -u root -h mHardy password 'mypassword'

测试一下. 数据库运行正常. 关闭数据库服务.

1
sudo /usr/local/mysql/share/mysql/mysql.server stop

设置添加随系统自动启动.

1
2
sudo cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql.server
sudo update-rc.d mysql.server defaults

OK, 数据库服务安装完毕. 已经设置随机自动启动. 下篇我们开始编译 Apache 服务器.