linux下打造LAMP开发环境[从源码安装]

最近要搞个采集来耍耍,所以必须得弄个环境。但自打从上一个公司离开后,8个多月没直接在linux上干活了。今年8月份的时候,打算在机子上装个LAMP环境的,但只把Apache和MySQL编译到了机器上,而MySQL仅仅是安装到了指定目录,并未运行起来。由于懒惰,结果到了想用机器做点东西时才想起还有这回事。

O、环境交代

  • OS: Fedora 11
  • 编译环境: gcc (GCC) 4.4.0 20090506 (Red Hat 4.4.0-4)
  • 文本编辑器:vi vim emacs 等
  • 其他:YUM RPM tar gzip ….等基础工具基本具备

一、Apache 安装
Apache我没有使用源码包和RPM包,而是系统自带的。有个好处就是依赖问题自动解决,省力省事。缺点就是,如有特别需要的模块或者功能,可能需要编译安装才能达到要求。那么,开始吧,不过我先讲讲简单的yum安装和移除httpd吧。下面简单记录下安装过程中使用到的命令:

# 安装如下,非常非常的easy!
$ sudo yum -y install httpd
#升级也是如此
$ sudo yum -y update httpd
#当然,卸载更是如此了,哈哈
$ sudo yum erase httpd
# 注:为啥 我把参数-y从命令中取消呢? 因为此选项每次遇到问题都回答yes,由于卸载事关重大,所以就保险点吧,不然其他依赖是怎么被删掉的都还不知道。

好了,自动安装工具使用了,果然简单的所,哈哈。可是,优越性一下子就让我发愁了,那些我能用,那些功能我还不能用,这些都不是很清楚,要达到此目的,就必须从源码按需编译了,呵呵。另外一个原因呢,是我想要这个软件和我之后其他的软件都放到一个目录下,便于管理。
apache的编译安装过程还算比较简单,可照如下方式进行:

# 哦,哦,差点忘了,东西都还没下载,所以下载了再开始吧
$sudo wget -O /usr/local/src/web-tools/tars/httpd-2.2.14.tar.bz2 http://labs.xiaonei.com/apache-mirror/httpd/httpd-2.2.14.tar.bz2
$cd /usr/local/src/web-tools/tars
$tar -xjf httpd-2.2.14.tar.bz2 -C ../extracted-dirs/
$cd ../extracted-dirs/httpd-2.2.14/
#开始了,不过,我要模块化,所以选项里有个–enable-so,其他的,字面意思即可,或者翻configure帮助吧。
$ sudo ./configure –prefix=/usr/local/webserver/apache2_2 –enable-so –enable-cgi –enable-rewrite –enable-mods-shared=all –enable-ssl –with-ssl –with-port=80
$sudo make
$sudo make install

安装完毕后,使用apachectl命令来管理httpd进程。为了每次启动机器后自动开启apache httpd服务,只需编辑下面这个文件,在后面添加一行启动命令即可。如下:

$vi /etc/rc.d/rc.local
#…略…
apachectl -k start
# 或者 /sbin/service httpd start
#…略…

当然,按照源码安装的方式,系统并不会自动为apache建立apache账户,还需手动要为apache运行开辟账户才对,这里来补充一下:

$sudo groupadd apache
$sudo useradd -g apache apache

二、MySQL安装
当时使用的是源码安装,可以参考mysql手册,或者其他高人写的文章。我就记录一下安装过程。
首先,建立安装目录,当然,最好可以将数据库数据文件独立出来。其次,总得把mysql源码包down下来吧(废话),我到官网下(官网上面有各种系统的安装包或者源码包,可根据自己系统的情况选择,截止本文发表时,Compressed GNU TAR archive (tar.gz)的最新更新为mysql-5.1.40.tar.gz了)。注:随时可以找到最新安装包,旧有安装包的地址估计不好找了,下面就用我自己的mysql版本来讲解吧。
下面且看我的准备及安装过程(我的mysql版本是 5.1.30):

$cd /usr/local/src/web-tool/tars
$sudo wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.30.tar.gz/from/http://mysql.cdpa.nsysu.edu.tw/
$sudo tar -xzf mysql-5.1.30.tar.gz -C ../extracted-dirs/
$cd ../extracted-dirs/mysql-5.1.30/
$sudo groupadd mysql 注:献给mysql分配用户和组
$sudo useradd -g mysql mysql
$./configure ‘–prefix=/usr/local/webserver/mysql’ ‘–enable-assembler’ ‘–with-extra-charsets=complex’ ‘–enable-thread-safe-client’ ‘–with-big-tables’ ‘–with-readline’ ‘–with-ssl’ ‘–with-embedded-server’ ‘–enable-local-infile’ ‘–with-plugins=innobase’
$make 注:编译过程估计需要40分钟左右(我的机子2G内存、 Pentium Dual-Core 2.0 mHz),可以看看电视,或着做个饭吃了再回来。
$make install 注:这里10分钟左右,泡杯麦片喝吧。
$sudo chmod +w /usr/local/webserver/mysql
$sudo chown -R mysql:mysql /usr/local/webserver/mysql
$sudo mkdir -p /data 注:用来存放MySQL数据表文件,独立一点,或许还可以分块硬盘给它。
$sudo chown -R mysql:mysql /data
$cd /usr/local/webserver/mysql/
$sudo ./bin/mysql_install_db –basedir=/usr/local/webserver/mysql –datadir=/data –user=mysql 注:初始化
$sudo ./bin/mysqld_safe –user=mysql & 注:让MySQL跑起来
$mysql 注:试运行一下
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.30-log Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql>
注:出现这样的提示符,说明我们已经大功快告成了,为什么说是“快告成”,呵呵,看下面:
$sudo ./bin/mysqladmin -u root -h localhost password ’123456′ 注:为MySQL设置创始人密码,这个不能忘,当然也可以登录MySQL后设置。

好了,至此MySQL的编译、安装及配置均告一段落,接下来就要进行最后一个项目—-PHP 的安装了。

三、 PHP
在安装之前,需要做一些准备工作,将需要的库都安装好,下面这个是我以前(2009-08-05)在我本本上的安装记录(那时,我的系统还没配置sudoer):

1、安装libiconv
[root@localhost tars]# tar xzf libiconv-1.13.tar.gz
[root@localhost tars]# cd libiconv-1.13
[root@localhost libiconv-1.13]# ./configure –prefix=/usr/local/
[root@localhost libiconv-1.13]# make
[root@localhost libiconv-1.13]# make install

2、安装libmcrypt
[root@localhost tars]# tar xzf libmcrypt-2.5.8.tar.gz
[root@localhost tars]# cd libmcrypt-2.5.8
[root@localhost libmcrypt-2.5.8]# ./configure
[root@localhost libmcrypt-2.5.8]# make
[root@localhost libmcrypt-2.5.8]# make install
[root@localhost libmcrypt-2.5.8]# /sbin/ldconfig
[root@localhost libmcrypt-2.5.8]# cd libltdl/
[root@localhost libltdl]# ./configure –enable-ltdl-install
[root@localhost libltdl]# make
[root@localhost libltdl]# make install

3、安装mhash
[root@localhost tars]# tar xzf mhash-0.9.9.9.tar.gz
[root@localhost tars]# cd mhash-0.9.9.9
[root@localhost mhash-0.9.9.9]# ./configure
[root@localhost mhash-0.9.9.9]# make
[root@localhost mhash-0.9.9.9]# make install
[root@localhost mhash-0.9.9.9]# cd ../

[root@localhost tars]# ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
[root@localhost tars]# ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
[root@localhost tars]# ln -s /usr/local/lib/libmcrypt.so.4 /usr/local/libmcrypt.so.4
[root@localhost tars]# ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/local/libmcrypt.so.4.4.8
[root@localhost tars]# ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
[root@localhost tars]# ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
[root@localhost tars]# ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
[root@localhost tars]# ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
[root@localhost tars]# ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

4、安装mcrypt
[root@localhost tars]# tar xzf mcrypt-2.6.8.tar.gz
[root@localhost tars]# cd mcrypt-2.6.8
[root@localhost mcrypt-2.6.8]# /sbin/ldconfig
[root@localhost mcrypt-2.6.8]# ./configure
……报错如下
checking for libmcrypt – version >= 2.5.0… no
*** Could not run libmcrypt test program, checking why…
*** The test program compiled, but did not run. This usually means
*** that the run-time linker is not finding LIBMCRYPT or finding the wrong
*** version of LIBMCRYPT. If it is not finding LIBMCRYPT, you’ll need to set your
*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point
*** to the installed location Also, make sure you have run ldconfig if that
*** is required on your system
***
*** If you have an old version installed, it is best to remove it, although
*** you may also be able to get things to work by modifying LD_LIBRARY_PATH
***
configure: error: *** libmcrypt was not found
看看刚刚装的libmcrypt的版本:
[root@localhost mcrypt-2.6.8]# libmcrypt-config –version
2.5.8
明明libmcrypt 版本为2.5.8的 大于 2.5.0呢,为啥这里不认呢?Baidu了一下,发现少链接了个文件
[root@localhost mcrypt-2.6.8]# ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
后来发现这样也不行,貌似是没链接完全的问题。解决办法如下:
回头重来一遍
然后,进行

好了,经过一番折腾,这就开始安装PHP:

$ sudo ./configure ‘–prefix=/usr/local/webserver/php’ ‘–with-apxs2=/usr/local/webserver/apache2_2/bin/apxs’ ‘–with-config-file-path=/usr/local/webserver/php/etc’ ‘–with-mysql=/usr/local/webserver/mysql’ ‘–with-mysqli=/usr/local/webserver/mysql/bin/mysql_config’ ‘–with-iconv-dir=/usr/local’ ‘–with-freetype-dir’ ‘–with-jpeg-dir’ ‘–with-png-dir’ ‘–with-zlib’ ‘–with-libxml-dir=/usr’ ‘–enable-xml’ ‘–disable-rpath’ ‘–enable-discard-path’ ‘–enable-safe-mode’ ‘–enable-bcmath’ ‘–enable-shmop’ ‘–enable-sysvsem’ ‘–enable-inline-optimization’ ‘–with-curl’ ‘–with-curlwrappers’ ‘–enable-mbregex’ ‘–enable-mbstring’ ‘–with-mcrypt’ ‘–with-gd’ ‘–enable-gd-native-ttf’ ‘–with-openssl’ ‘–with-kerberos’ ‘–with-mhash’ ‘–enable-pcntl’ ‘–enable-sockets’

晕厥一下,一个错误在配置的时候冒了出来:


Sorry, I cannot run apxs. Possible reasons follow:

1. Perl is not installed
2. apxs was not found. Try to pass the path using –with-apxs2=/path/to/apxs
3. Apache was not built using –enable-so (the apxs usage page is displayed)

The output of /usr/local/webserver/apache2_2/bin/apxs follows:
/usr/local/webserver/apache2_2/bin/httpd: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

报错这种事情比较脑壳痛,只能先分析原因,然后Google/baidu了。还好,Zend比较负责,给了几条建议:
对于第一条,我的本本已经自带了(Perl-v5.10.0),对于第二条,这个我也在本文的开头就安装了。第三条,我也配置过 –enable-so选项呢(参考文章开头)。那么原因只有后面的 libiconv.so.2 找不到的原因了,OK,我来找找这个家伙到底在哪里躲猫猫(真是危险的游戏~~):

$ whereis libiconv.so.2
libiconv.so: /usr/local/lib/libiconv.so /usr/local/lib/libiconv.so.2
$ sudo ln -s /usr/local/lib/libiconv.so.2 /usr/lib/

这下,/usr/lib/下也有这个文件的链接了,我想应该没有漏网之鱼了吧。然后重新执行前面的 configure动作,巨双无比,配置通过。OK开始下一个动作:

$ make
。。大约10分钟过去了。。。却等来了许多下面这种error
ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor’:
/usr/local/src/web-tools/extracted-dirs/php-5.2.11/ext/iconv/iconv.c:2491: undefined reference to `libiconv_open’
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] 错误 1

你知道,人生最大的痛苦是什么不?不是别的,是配置通过了,编译也通过了数百秒,但快完成编译的时候来报个错!也就是传说中的天亮了床上画个地图。但是痛苦归痛苦,下面来看看如何解决。又通过一番Googe/Baidu(好东西阿,要充分利用),问题发现了:
还记得不,我们开始有个libiconv的东东,这个家伙貌似很不和群。网友同学正是智慧的力量,这个在配置的时候,并没有自动把它加到额外库里面,所以,不得不手动了。两种方法,一是在Makefile中找到ZEND_EXTRA_LIBS,把’-libiconv’加到后面,另外就是直接在make 时跟上命令 ZEND_EXTRA_LIBS=’-liconv’。我比较懒,所以选择了后者,看看效果如何:

$ sudo make ZEND_EXTRA_LIBS=’-liconv’

#OK ,这回成功了
$ sudo make install
#完成后,别忘了执行下面的语句,这个命令执行中提醒的
$ sudo libtool –finish /usr/local/src/web-tools/extracted-dirs/php-5.2.11/libs
#下面呢,就是给php一个方便访问的途径
$ sudo ln -s /usr/local/webserver/php/bin/php /usr/bin/
$ php -v
PHP 5.2.11 (cli) (built: Nov 7 2009 02:39:44)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
# OK,成功!

好了,到这里,PHP总算是安装完毕。另外,整个LAMP环境也就差不多快建立起来了。等等??,我又用了一个“快”字,为什么? 当然,光是安装完毕是不行的,打开httpd.conf,进行最后的组装吧:

$sudo vim /usr/local/webserver/apache2_2/conf/httpd.conf
…..
User apache
Group apache
#指定用户运行httpd
……
DocumentRoot “/var/www/html”


#改变网站根目录
LoadModule php5_module modules/libphp5.so
#再看看php模块加上没,原来php编译时自动添上了(8错8错),记得之前版本的还无此功能。
AddType application/x-httpd-php php
#在文件的末尾加上PHP的MIME类型,好了,保存。然后重启apache:
$sudo apachectl -k restart
httpd: Could not reliably determine the server’s fully qualified domain name, using ::1 for ServerName
#貌似ServerName未设置,那么
$sudo vim /usr/local/webserver/apache2_2/conf/httpd.conf
#找到 “ServerName localhost:80”,将其前面的注释符号”#“去掉,
#再次重启apache
$sudo apachectl -k restart
#OK,一切正常。

到此为止,所有的LAMP环境基本配好。那么,还在犹豫什么,开始自己的LAMP之旅吧(我的采集,哈哈,可以动身啦)。

参考文档:张宴

About 寒江独钓雪

A man's freedom world!
This entry was posted in LAMP环境, linux. Bookmark the permalink.

One Response to linux下打造LAMP开发环境[从源码安装]

  1. 开心凡人 says:

    文章不错,呵呵

留下评论

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>