手动编译安装lamp 遇到的问题与解决方法

来源:互联网 发布:抽气真空袋知乎 编辑:程序博客网 时间:2024/05/11 16:36
一.没有光驱,采用硬盘安装,使用grub4dos-0.4.4.zip 并且修改boot.ini 引导文件
具体参考http://www.opsers.org/linux-home/base/hard-to-install-centos-5-5rhel5-5.html
格式化了一个20G的FAT32的硬盘出来,里面放入centos镜像文件,安装到分区界面时,系统提示没有空间不能分区。查看了资料,用工具20G的硬盘释放了15G出来作为未分配的自由空间,重新安装,手动分区,就成功安装了centos。

二.默认是英文安装,进到图形界面后,想改语言变中文的,结果导致界面都是乱码。language中选回English(USA)。google后原来是没有支持中文的语言包,就算用英文,打开浏览器网页,也都是乱码。图形界面中application remove/add software 添加玩中文语言包后,可支持中文。

三.配置网络,给系统分配静态IP,打开terminal 编辑 /etc/sysconfig/network-scripts/ifcfg-eth0
设备名称和硬件mac地址都已经写好了,只要加入一些其他信息。

    DEVICE=eth0                 //指出设备名称    BOOTPROTO=static            //启动类型 dhcp|static    BROADCAST=192.168.1.255     //广播地址    HWADDR=00:06:5B:FE:DF:7C    //硬件Mac地址    IPADDR=192.168.0.2          //IP地址    NETMASK=255.255.255.0       //子网掩码    NETWORK=192.168.0.0         //网络地址    GATEWAY=192.168.0.1         //网关地址    ONBOOT=yes                  //是否启动应用    TYPE=Ethernet               //网络类型


设好IP后,设置DNS 编辑文件 /etc/resolv.conf

    nameserver 8.8.8.8    nameserver 8.8.4.4


编辑完后就 service network restart 能ping通内网,但不能上外网.
[root@localhost network-scripts]# ping www.lawtime.cn
ping: unknown host www.lawtime.cn
原因:还需要配置有路由文件
就在  /etc/sysconfig/network-scripts  目录下新件了 文件  route-eth0 添加内容 via 192.168.1.1
重启网络:/sbin/service network restart  然后ping www.lawtime.cn    OK! 能上网了。

四.把centos 的防火墙关闭,对后期的配置安装很有用处。
/etc/init.d/iptables status 得到防火墙状态
/etc/init.d/iptables stop 关闭防火墙
chkconfig --level 35 iptables off 永久关闭

五.下载需要的压缩包,本机下载速度比较慢,采取在局域网内windows下先下载好,再传输到linux下。
yum -y install vsftpd*
yum -y install pam*
yum -y install db4*
chkconfig vsftpd on
useradd vsftpd -M -s /sbin/nologin
userdel -r ftp
useradd ftp -M -s /sbin/nologin
具体配置参考http://os.51cto.com/art/201002/184610.htm
1)建立虚拟用户名单文件 touch /etc/vsftpd/virtusers
2)编辑虚拟用户名单文件:
一行用户名,一行口令
helekang
helekang
3)生成虚拟用户数据文件
[root@KcentOS5 ~]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db设定PAM验证文件,并指定虚拟用户数据库文件进行读取在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)
    auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers 
    account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
按照说明配置好后,在win下用ftp工具连接,但是只能下载,没有写的权限。查看了vsftpd.conf 已经打开了写权限了,但始终不能上传。 解决方法:用chmod -R 命令来开启权限。
chmod -R 777 /路径   777 为最高权限。
或者chmod o+w /路径  o是指其它的用户,w是写的权限。 至此 ftp 可上传可下载,创建删除文件。将需要安装编译的文件都上传至一个目录下。
service vsftpd restart

六.开始安装lamp 环境 详细参考http://apps.hi.baidu.com/share/detail/34808335
1)首先安装 编译环境
yum install gcc】
yum install cpp
yum install gcc-c++

yum install ncurses
yum install ncurses-devel
# 由于是新装的系统,缺少c编译器,先使用yum工具安装之
yum install gd-devel php-gd
yum install zlib-devel
yum install freetype-devel freetype-demos freetype-utils
yum install libpng-devel libpng10 libpng10-devel
yum install libjpeg-devel
yum install ImageMagick
yum install flex
yum install ImageMagick-devel
yum install curl
yum install curl-devel
yum install libxml2-devel
# 用于安装php的库

开始安装,要求楼主是装好两台机器,一台做web 一台做mysql 所以本来不打算在web 下装mysql 但php 需要安装mysql的支持,不知道怎么动态安装,所以只好先在web下安装mysql 听同事说可以只安装mysql client
但没有研究,直接装mysql
1)安装musql
/*
grep mysql /etc/group
# 查询系统中是否有mysql这个用户组,没有则添加。
groupadd mysql
# 增加一个名为mysql的用户组。
grep mysql /etc/passwd
# 查询系统中是否有mysql这个用户,没有则添加。
useradd mysql -g mysql -M -s /sbin/nologin
#增加一个名为mysql的用户。

cd /usr/local/src
tar -zxvf mysql-5.1.44.tar.gz
cd mysql-5.1.44
./configure --prefix=/usr/local/mysql --with-unix-socket-path=/tmp/mysql.sock --localstatedir=/usr/local/mysql/data --with-charset=utf8 --without-debug --enable-assembler --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
make
make install

./scripts/mysql_install_db
# 初始化系统库。

cp support-files/my-medium.cnf /etc/my.cnf -fv
# 设置mysql配置文件。-f,删除目标中同名的文件或目录,并且不给任何提示。

cp support-files/mysql.server /etc/init.d/mysqld
# 添加到起动脚本

chmod 700 /etc/init.d/mysqld
cd /usr/local
chmod 750 mysql -R
chown -R mysql.mysql /usr/local/mysql
# 设置所有者,mysql起动时会以mysql用户的身份运行,这样可以提高系统的安全性。
chown -R mysql.mysql /usr/local/mysql/data
cd /usr/local/mysql/libexec
cp mysqld mysqld.old
strip mysqld
chkconfig --add mysqld
# 添加一个服务
chkconfig --level 345 mysqld on
# 设置开机时起动
service mysqld start
# 启动mysql服务
ln -s /usr/local/mysql/bin/mysql /sbin/mysql
ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin
ln -s /usr/local/mysql/bin/mysqldump /sbin/mysqldump
mysqladmin -uroot password "**************"
# 设置root帐户的密码
mysql -uroot -p
mysql>use mysql;
mysql>delete from user where password="";
# 删除用于本机匿名连接的空密码帐号
mysql>flush privileges;
mysql> show databases;
/* 以上为教程复制内容
遇到的问题:
1)在删除本机匿名链接的空密码这一步不能做,因为后面安装php pdo_mysql 扩展的时候会不知道数据库密码而不能准确安装。
2)在make install mysql 的时候 make4 mysql tetst 的这一步等待了非常长的时间,一度以为是安装出错了,hold住,这一步是在mysql编译测试,等了半个多小时,终于安装成功了。网上有说,这一部其实已经安装成功了,可以另外打开一个ssh窗口干自己的事情,但楼主没敢这么干。
3)安装好后,本机登陆ok 没问题,局域网访问,无法链接,把host 改成 % 仍然无法链接,修改端口仍然无法链接。原来是防火墙在作怪,关掉防火墙,ok了。如果前面一装好就关闭防火墙,就不会有这样的问题了。

七. 安装apache
因为遇到各种问题,重新编译了不下5次。
/*
cd httpd-2.2.14
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite=share --enable-dav=share --enable-dav-fs
--enable-so 
指定允许DSO(动态共享对像)
--enable-rewrite=share 
开启Rewrite支持,以实现URL静态化,建议开启。
--enable-dav-fs
开启WebDAV支持,svn服务器等需要
make
make install
# 如果没有错误的话,那么Apache就已经安装在/usr/local/apache2目录中了
/usr/local/apache2/bin/apachectl start
# 启动服务
cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd
vim /etc/rc.d/init.d/httpd
在 #!/bin/sh 下增加如下两行
# chkconfig: 35 70 30
# description: Apache
chkconfig --add httpd
service httpd stop
service httpd start
# 将apache添加为随机启动

*/ 仍然是那个教程
第一次编译,成功后,关掉防火墙。It works 了  但是在apache2 module 文件夹下只有一个http.exp 文件 没有同事说的很多.so 文件。重新编译,使用了网上多个configure 内容编译,最终:
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite=share --enable-dav=share --enable-dav-fs --enable-module=most --enable-mods-shared=most
成功了,moudule  下有了很多.so 文件
后来同事查找了资料 原来是动态加载模块和静态加载模块的区别 参考文档:http://yangli.iteye.com/blog/1102570

八.安装php

/*

cd php-5.2.13
./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php5 --with-gd --with-jpeg-dir --with-png-dir --with-ttf --with-zlib --enable-mbstring --enable-ftp --with-freetype-dir --with-libxml-dir --with-curl
make
make test
make install
# 编译安装php

cp php.ini-dist /usr/local/php5/php.ini
vi /usr/local/apache2/conf/httpd.conf
加上:
AddType application/x-httpd-php .php
查找DirectoryIndex,修改为
DirectoryIndex index.html index.php
# 修改php配置文件

*/
--with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache2/bin/apxs
遇到的问题:
第一次编译的时候 ,因为没有装mysql 所以configure 没有加以上两句,没有第一个with结果应该是不能结合mysql;没有第二个with结果导致重启apache后 不能编译php 文件,因为moudle 没有 lib_php5.so文件吧
第二次编译后,已经有lib_php5.so 文件了,重启apache  动态链接库加载出错:cannot restore segment prot after reloc: Permission denied 解决方法:参考http://bbs.linuxtone.org/thread-2036-1-1.html
/*
那应该是SELinux的问题,可以考虑把它关闭。
郁闷的是.我把SELinux关闭后还是不行.于是到google上search.发现这个很有用.

编辑/etc/selinux/config,找到这段:
# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.

SELINUX=enforcing

把 SELINUX=enforcing 注释掉:#SELINUX=enforcing ,然后新加一行为:
SELINUX=disabled
保存,关闭。

编辑/etc/sysconfig/selinux,找到:
# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - SELinux is fully disabled.
SELINUX=enforcing

如果SELINUX已经是 SELINUX=disabled,那么就不用改了,否则就把SELINUX=enforcing 注释掉,新加一行:
SELINUX=disabled
保存,退出。

在你保证SElinux 被disable后.还执行下
chcon -t texrel_shlib_t
如: chcon -t texrel_shlib_t /路径/路径/名字.so (这个文件视具体执行文件.)

如果开着的话
这边遇到不能加载libphp5.so模块的问题,
chcon -t texrel_shlib_t /usr/local/apache/modules/libphp5.so



以上两步.已经解决了很多server的问题了.
*/
重启了apache 写了个phpinfo 就可以看到php 的配置了。(兴奋)
其中还没有pdo_mysql 这个重要的扩展。
/*
yum install autoconf
cd /usr/local/src/php-5.2.13/ext/pdo_mysql
/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config --with-pdo-mysql=/usr/local/mysql
make
make install
# 安装php的pdo_mysql扩展
*/
遇到问题, 在make 后 有一个make test 出错了,第一次是因为前面修改了mysql 的默认空密码,数据库阻止访问,另一次直接看不懂。不管,make install 出错,不管。
看了一些文章,说编译php 的时候,带上–with-pdo-mysql=shared 
–with-sqlite=shared 内容。没有去试,因为看到
/usr/local/php/lib/php/extensions/debug-non-zts-20060613下已经有了
/usr/local/php/lib/php/extensions/debug-non-zts-20060613/pdo_mysql.so
所以直接修改了 php.ini
修改:
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613″
加入:
extension=pdo.so
extension=pdo_mysql.so
这里为以后的错误埋下了伏笔, 因为我只有pdo_mysql.so 文件 而没有pdo.so 文件  不该加extension=pdo.so这一句。
重启apache 查看phpinfo  pdo 下已经有mysql
参考文档:
http://lovemjd.blog.51cto.com/1373993/300981
http://www.pkphp.com/2008/04/24/linux%E4%B8%8B%E6%89%8B%E5%8A%A8%E5%AE%89%E8%A3%85pdo_mysql/

至此lamp 已经配置成功了。
楼主再按照教程单独安装了一台mysql 轻车熟路了。


个人心得:
从拿到两台没有光驱的win系统pc 到装完两台centos 和apache +mysql+php ,写这个文档一共经历了5天时间,其中各种失败,各种期望,各种失望。最后成功后的喜悦,无语言表。很感激同事的帮助,也很感谢那些写技术文档的IT人员。经过这一次,学习了很多linux的知识,但还有很多都是生搬硬套的,没有真正理解。
总结一点就是:实践出真知,很多文档与你的实际需求可能会有出入,在操作的时候,会遇到很多的问题。需要一个个实践来解决。错过就懂了。
0 0
原创粉丝点击