3月 08

apache+php+mysql+cronolog+Zend Optimizer整理

【收集整理:张子萌 2010-03-12】

操作系统centos

概要说明:
在centos操作系统下安装,apache+php+mysql+cronolog+Zend Optimizer。网上大部分文档会写明操作系统
和安装各个包的版本。本文档中只是建议版本,因为有些软件版本找起来不是很容易,可以使用其它
版本代替。

1 首先安装apache
# ./configure –prefix=/usr/local/apache –with-included-apr \
–enable-so –enable-deflate=shared –enable-expires=shared \
–enable-rewrite=shared –enable-static-support –disable-userdir \
–enable-rewrite

#make && make install

问题1:
checking for chosen layout… apr
checking for gcc… no
checking for cc… no
checking for cl.exe… no
configure: error: in `/usr/local/src/httpd-2.2.11/srclib/apr’:
configure: error: no acceptable C compiler found in $PATH
See `config.log’ for more details.
configure failed for srclib/apr
编译失败,说明gcc安装不完全
# yum install binutils*
# yum install gcc*
# yum install automake*

问题2
configure: error: mod_deflate has been requested but can not be built due to prerequisite failures
安装zlib-devel*

2.安装mysql

mysql安装一般分为两种:一种为源代码编译安装,一种为直接使用二进制安装。
(本人推荐使用二进制方式安装)

2.1 使用源码编译(简化步骤,主要来源网上整理,个人未测试)。
# tar zxvf mysql-5.0.45.tar.gz
# cd mysql-5.0.45
# ./configure \
–prefix=/usr/local/mysql \
–sysconfdir=/etc \
–enable-thread-safe-client \
–enable-local-infile \
–enable-static \
–enable-assembler \
–enable-thread-safe-client \
–with-charset=utf8 \ //修改默认字符
–with-extra-charset=all \
–with-low-memory \
–with-comment=Source \
–with-client-ldflags=-all-static \
–with-server-suffix=-Comsenz \
–with-mysqld-user=mysql \
–without-debug \
–without-isam \
–without-innodb \
–without-ndb-debug \
–with-big-tables \
–with-apxs=/usr/local/apache/bin/apxs \
–localstatedir=/var/lib/mysql
# make && make install

2.2使用二进制文件安装

2.2.1 创建用户和用户组

# groupadd mysql

# useradd -g mysql mysql

2.2.2 解压二进制文件

# tar zxvf mysql-5.1.44-linux-i686-glibc23.tar.gz

将解压后的文件mv到/usr/local下并改名为mysql

拷贝配置和启动文件

# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

2.2.3 初始化mysql库

/usr/local/mysql/scripts/mysql_install_db –user=mysql

可能遇到的问题:
FATAL ERROR: Could not find ./bin/my_print_defaults
If you are using a binary release, you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run ‘make install’ first.

需要在启动时多加两个参数,如下:
/usr/local/mysql/scripts/mysql_install_db –user=mysql \
–basedir=/usr/local/mysql –datadir=/usr/local/mysql/data

启动数据库查看是否启动成功

# /etc/init.d/mysql start

mysql的基本路径和数据存放路径可以在/etc/init.d/mysql 中修改。如果没有修改则使用脚本默认地址

basedir=/usr/local/mysql ,datadir=/usr/local/mysql/data。

2.2.4 设置权限

# chown -R mysql:mysql /usr/local/mysql(所属mysql用户)

2.2.5 启动服务器并测试

启动服务
# /usr/local/mysql/bin/mysqld_safe –user=mysql &

登录服务
# /usr/local/mysql/bin/mysql -u mysql

如果出现:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 210
Server version: 5.1.44-log MySQL Community Server (GPL)

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

mysql>
出现’mysql>’表示安装成功。

2.2.6 远程连接mysql服务器

测试连接远程服务器,如果远程服务器不能连接请检查以下内容:

如果使用防火墙请开通了3306端口

还无法远程连接mysql服务器的话就做如下操作:

登陆mysql,使用update把mysql.user中的root的host从localhost修改成%

mysql> UPDATE mysql.user SET Host=’%’ WHERE Host=’localhost’ ;

mysql> GRANT ALL PRIVILEGES ON *.* TO ;

mysql> flush privileges;

测试远程登录可否成功。

2.2.7 修改密码

登录mysql服务器

mysql> update user set password=password(‘newpassword) where user=’root’;

或者

2.2.8 添加服务随服务器启动

# chkconfig –add mysql

# chkconfig –level 35 mysql on

3.安装环境需要以下包,可以通过源码包安装,也可以使用centos系统自带的yum工具安装(本人推
荐使用yum工具安装,但是部分包需要下载。源码安装注意安装顺序)。

3.1 使用源码安装,请下载以下包。
freetype-2.3.5.tar.gz
libiconv-1.11.tar.gz
libmcrypt-2.5.7.tar.gz
libpng-1.2.10.tar.bz2
jpegsrc.v6b.tar.gz
gd-2.0.35.tar.gz (建议源码包安装)
mhash-0.9.9.9.tar.bz2 (建议源码包安装)
httpd-2.2.11.tar.gz (建议源码包安装)
mysql-5.1.44-linux-i686-glibc23.tar.gz (建议源码包安装)
php-5.3.1.tar.bz2 (建议源码包安装)

3.1.1 安装 freetype
# tar -zxvf freetype-2.3.5.tar.gz
# cd freetype-2.2.1
# ./configure
# make && make install

3.1.2 安装:libpng
# tar jxvf libpng-1.2.10.tar.bz2
# cd libpng-1.2.20/
# ./configure
# make && make install

3.1.3 安装libiconv
# tar zxvf libiconv-1.11.tar.gz
# cd libiconv-1.11/
# ./configure
# make && make install

3.1.4 安装:jpeg6
建立目录
# mkdir /usr/local/jpeg6
# mkdir /usr/local/jpeg6/bin
# mkdir /usr/local/jpeg6/lib
# mkdir /usr/local/jpeg6/include
# mkdir /usr/local/jpeg6/man
# mkdir /usr/local/jpeg6/man/man1
# tar -zxvf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# ./configure –prefix=/usr/local/jpeg6/ –enable-shared –enable-static
# make && make install
注意:这里./configure一定要带–enable-shared参数,不然不会生成共享库

3.1.5 安装 gd
# tar -zxvf gd-2.0.35.tar.gz
# cd gd-2.0.35
# ./configure
# make && make install

注意:查看图片安装程序时候正常

问题1
configure.ac:64: error: possibly undefined macro: AM_ICONV
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
make: *** [configure] Error 1
安装yum install gettext*

3.1.6 安装 libxml2
# tar zxvf libxml2-2.6.30.tar.gz
# cd libxml2-2.6.30/
# ./configure –prefix=/usr/local/libxml2
# make && make install

问题1
/bin/rm: cannot remove `libtoolT’: No such file or directory
安装libtool包

问题2
configure: error: C++ preprocessor /lib/cpp fails sanity check
See `config.log’ for more details.
安装gcc编译器
#yum install gcc-c++

3.1.7 安装:libmcrypt
# tar zxvf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8/
# ./configure –prefix=/usr/local/libmcrypt
# make && make install
# /sbin/ldconfig
# cd libltdl/
# ./configure –enable-ltdl-install
# make && make install

3.1.8 安装mhash
# bunzip2 mhash-0.9.9.9.tar.bz2
# tar xvf mhash-0.9.9.9.tar
# cd mhash-0.9.9.9/
# ./configure
# make && make install

3.1.9 安装mcrypt
# tar zxvf mcrypt-2.6.6.tar.gz
# cd mcrypt-2.6.6/
# ./configure
# make && make install

3.2 使用yum安装
# yum install flex
# yum install libpng*
# yum install libjpeg*
# yum install freetype*
# yum install Fontconfig*
# yum install xpm*
# yum install libxml2*
# yum install gettext*
# yum install libxml2
# yum install libtool*
# yum install gcc*
# yum install gd*

3.3 编译安装PHP

3.3.1.安装fpm,php的一个补丁。FastCGI FastCGI的缩写,本补丁提供高速的脚本语言间通迅的接口。

#wget http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.3-fpm-0.5.13.diff.gz

# gzip -cd php-5.2.3-fpm-0.5.13.diff.gz | patch -d php-5.2.3 -p1

3.3.2 开始编译

我将fpm和apache的支持模块都编译进去

# cd /usr/local/src
# tar xjvf php-5.2.3.tar.bz2
# cd php-5.2.3
# ./configure \
–prefix=/usr/local/php \
–with-apxs2=/usr/local/apache/bin/apxs \
–with-config-file-path=/usr/local/php/etc \
–with-mysql=/usr/local/mysql/ \
–with-libxml-dir=/usr/local/libxml2 \
–with-jpeg-dir \
–with-png-dir \
–with-bz2 \
–without-iconv \
–with-freetype-dir \
–enable-fpm \
–with-mcrypt \
–enable-soap \
–enable-gd-native-ttf \
–enable-ftp \
–enable-mbstring \
–enable-exif \
–disable-cgi \
–with-gd\
–with-openssl=/usr/local/openssl
注意:如果不用加密连接,最后一行可以不用,如需使用请安装openssl。
enable-fpm是FastCGI Process Manager,是一个php的补丁,管理
php的进程整合,并且在nginx和apache连接可以节省系统资源。
–enable-memcache memcache为集中缓存服务,需要安装memchach,只是提高读取,压力不大也可以不要。 libxml-dir如是yum安装也可以不用。
# make
# make install
# mkdir /usr/local/php/etc
# cp php.ini-dist /usr/local/php/etc/php.ini 或拷贝php.ini-development、php.ini-production

问题1
checking lex output file root… ./configure: line 2554: lex: command not found
# yum install flex*

问题2

configure: error: Try adding –with-zlib-dir=

首先确认是否安装zlib-devel,如果有安装,则在编译时添加–with-zlib-dir=/usr/lib

问题3

configure: error: mysql configure failed.

检查mysql的版本是否与操作系统匹配。在64位系统上使用32位数据库会有此问题。如果是使用rpm包安装,可以将

lib部分做软连接到/usr/local/mysql.

问题4

make是出现错误undefined reference to libiconv_open

编辑Makefile,找到 EXTRA_LIBS = ….. -lcrypt行,在最后加上 -liconv,保存后重新编译。

或在 make 编译时 使用make ZEND_EXTRA_LIBS=’-liconv’ 进行编译即可

注:在当前版本php中没有–enable-memory-limit这个参数。

4. 安装Zend Optimizer
# cd /usr/local/src
# tar xzvf ZendOptimizer-3.2.8-linux-glibc21-i386.tar.gz
# ./ZendOptimizer-3.2.8-linux-glibc21-i386/install.sh

注意:安装Zend Optimizer过程的最后不要选择重启Apache。

5. 整合Apache与PHP
5.1 编辑配置apache配置
# vi /usr/local/apache/conf/httpd.conf
找到:
AddType application/x-gzip .gz .tgz
在该行下面添加
AddType application/x-httpd-php .php

找到:

DirectoryIndex index.html

将该行改为

DirectoryIndex index.html index.htm index.php

找到:
# Include conf/extra/httpd-mpm.conf
# Include conf/extra/httpd-info.conf
# Include conf/extra/httpd-vhosts.conf
# Include conf/extra/httpd-default.conf
去掉前面的“#”号,取消注释。
注意:以上 4 个扩展配置文件中的设置请按照相关原则进行合理配置!

修改完成后保存退出。
# /usr/local/apache2/bin/apachectl restart

5.2 验证apache与php整合是否成功
apache所指向的根目录下创建phpinfo.php页面。
# vi phpinfo.php

通过浏览器:http://x.x.x.x/phpinfo.php
查看确认整合和成功,并确认安装的各种模块成功。

5.3 确认 PHP 能够正常工作后,在 php.ini 中进行设置提升 PHP 安全性。
编辑 php.ini
找到:
disable_functions =
设置为:

passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status,error_log,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server

找到

expose_php = On

修改为:

expose_php = Off

6. 安装cronolog切割日志

6.1 安装cronolog
# tar zxvf cronolog-1.6.2.tar.gz
# ./configure
# make && make install

6.2 配置
# vi /usr/local/apache/conf/httpd.conf
找到
CustomLog “logs/access_log” common
修改为
CustomLog “|/usr/local/sbin/cronolog /usr/local/apache/logs/access_log.%Y%m%d” common

6.3 重启apache确认日志分割成功

3月 05

linux系统中的在线安装升级工具

linux安装软件时经常需要依赖其他软件包,使用源码和安装包安装给工作带来很多不便。幸好linux厂商提供了强大的
更新升级工具:
yum用于centos、RedHat和fedora
apt-get用于Ubuntu
pacman用于Arch
安装工具均为单进程,所以只能逐个升级。我收集的主要使用命令如下。

yum 使用
um update packagename #升级包
yum -y upgrade #升级系统中的所有包
yum check-update #显示可升级的软件包
yum clean #删除下载后的旧的header。和clean all相同
yum clean oldheaders #删除旧的headers
yum clean packagename #删除下载后的软件包
yum info #显示可用软件包信息
yum info packagename #显示指定软件包信息
yum install packagename #安装指定软件包
yum list #显示可用软件包
yum list packagename #列出软件包
yum list installed #显示安装了的软件包
yum list updates #显示可升级的软件包
yum provides packagename #显示软件包所包含的文件
yum remove packagename #删除制定的软件包,确认判定指定软件包的依存关系。
yum search 关键字 #利用关键字搜索软件包。搜索对象是,RPM文件名,Packager(包),Dummary,Description的各型

apt-get 使用
apt-cache search packagename #搜索包
apt-cache show packagename #获取包的相关信息
apt-cache depends packagename #了解使用依赖
apt-cache rdepends packagename #查看该包被哪些包依赖
apt-get install packagename #安装包
apt-get install packagename – – reinstall #重新安装包
apt-get -f install #修复安装”-f = ——fix-missing”
apt-get remove packagename #删除包
apt-get remove packagename – – purge #删除包,包括删除配置文件等
apt-get update #更新源
apt-get upgrade #更新已安装的包
apt-get dist-upgrade #升级系统
apt-get dselect-upgrade #使用 dselect 升级
apt-get build-dep packagename #安装相关的编译环境
apt-get source packagename #下载该包的源代码
apt-get autoclean #清理无用的包
apt-get check #检查是否有损坏的依赖

pacman 使用
pacman -S packagename #安装软件包
pacman -R packagename #删除软件包
pacman -Syu #升级系统中的所有包
pacman -Ss package #查询软件包
pacman -Qs package #查询已安装的包
pacman -Sw package #下载但不安装包

(本文为张子萌整理,如有遗漏请提醒)