VMWare上的Linux开发平台安装笔记(apache+mysql+php+cvs+proftpd+tomcat)

由 cozo 在 04-13-2004 20:16 发表:

VMWare上的Linux开发平台安装笔记(apache+mysql+php+cvs+proftpd+tomcat)

声明:本文参考了LinuxSir和其它网站上相当多的内容,不敢说原创,但是已经经历过多次的验证,对于新手而言,只要你按照本文的方法做,绝对保证成功。

本文版权归LinuxSir论坛所有,转载请注明出处,谢谢。

[安装目标]

作为学习linux并用作开发之用。由于个人工作关系,希望在linux上建起一套开发的支持平台,即实现apache+php+mysql的基本架构,并实现ftp,便于上传文件,实现cvs,作为版本控制系统,即方便管理,也安全(虚拟的硬盘安全性要大于在windows下的普通文件)。

由于目前正在开发的php程序用到了一些特殊模块,所以编译php时比较麻烦。

最后还安装了tomcat,作为学习java的工具。

本来想把samba装上,更方便在windows上编写php,不过还没有学会配置,以后再说吧。因为是虚拟机,所以以占用最小硬盘空间,占用最少内存为目标。尽量不装多余的东西。

[安装前的准备]

安装平台:Vmware GSX server 3。该版本没有明确支持Fedora,但是已经支持Redhat 9和Red hat AS 3,所以Fedora肯定是没有问题的。为了减少一些麻烦,我们把虚拟机不需要的设备都去掉,留下以下内容:内存(初始128M,安装完以后再减),将默认的硬盘删除,增加两个硬盘(默认为SCSI),第一个硬盘装系统,所以使用预分配空间的平面文件硬盘,大小2G(1G就够了,如果你使用最小安装的话),第二个存放文档数据,大小自定(我使用100M,反正以后想换成更大的硬盘也很容易),也使用平面文件。CDROM,使用ISO文件,占用IDE1:0。一个网卡,使用Bridge模式,(需要使用自定义IP)。

Vmware的虚拟硬盘分为三种,可增长的,平面文件(预分配空间的)和RAW(实际分区),从效率和安全性两个方面考虑,第二种是最好的,效率比可增长的虚拟硬盘要高一倍多。如果在windows客户机上,使用SCSI虚拟硬盘,效果会更明显。IDE虚拟硬盘也有区别,因此,建议系统全部使用平面文件,虽然可能浪费了一些硬盘,但是,对虚拟机和主机的性能都有莫大的好处(能够大大减少磁盘碎片)。

[安装Linux]

版本Fedora Core 1正式版,三张CD,但是最小安装只要第一张CD,如果要安装开发包需要前两张CD,要安装多国语言支持就需要三张了。

安装方法,最简单的,光盘启动安装,启动提示符输入linux reiserfs 按回车,安装程序将支持reiserfs文件系统。(reiserfs文件系统并不是Redhat推荐的方法,因此要使用该参数打开,但是该文件系统效率的确是相当高的,比ext3要好一些,不过Redhat AS 3 根本不支持该系统,除非重新编译内核)。

可以选择图形界面安装,自动分区,(分区前选择要使用的硬盘,我们只选上第一个硬盘,剩下的后面自己动手做,因为系统默认会平均分配几个硬盘,这并不是我们所期望的)。

安装时问防火墙的设置,为了简单,我们不使用防火墙,当然,装好以后也可以配置。

安装方式选择custom,在后面的选择软件包部分只保留开发工具,去掉其它所有部分。(当然,也可以安装最小系统,安装完成以后再手动安装gcc就可以了,因为我们的系统是为了作为服务器来用的,而不是开发平台。如果是最小化安装,安装完成以后到第二张盘上安装gcc-3.3.2和gcc-c++,会提示缺少很多依赖关系,按照顺序安装即可。具体的安装顺序为:

binutils-2.14.90.0.6, glibc-kernheaders-2.4-8.36, glibc-headers-2.3.2-101, glibc-devel-2.3.2-101, cpp-3.3.2-1, gcc-3.3.2-1, libstdc++-devel-3.3.2-1, gcc-c++-3.3.2-1, flex-2.5.4a-30, readline-devel-4.3.7. 其中cpp包在第一张盘上,其它都在第二张盘。最后的两个在安装PHP的时候需要。

这样安装的系统将占用最小的空间。)

如果是图形化安装,可以加上编辑工具里面的vim-enhance,否则还要在装完以后手动去安装这个软件包。还有在选择了开发工具以后,去掉开发工具中的cvs。如果有兴趣,连ctags也去掉,自己安装更新的版本。

安装的语言支持,为了节省时间,可以只用英语,时区选成中国。安装过程中最好将IP地址设好,根据自己的安装方式自定。

[系统设置]

首先修改/boot/grug/grub.conf启动配置文件。因为我们只有一个系统,所以将Timeout设为0,另外,在kernel=这一行的最后,加上vga=0x314,使系统终端支持16位色的800*600分辩率显示。(该功能需要显卡的支持,vmware gsx server 3和workstation 4.5以后都支持。)

详细参考:

> > 源码: >
> * * * >
>
> > > Colours 640x400 640x480 800x600 1024x768 1280x1024 1600x1200
> > > -------+----------------------------------------------------
> > > 4 bits| ? ? 0x302 ? ? ?
> > > 8 bits| 0x300 0x301 0x303 0x305 0x307 0x31C
> > > 15 bits| ? 0x310 0x313 0x316 0x319 0x31D
> > > 16 bits| ? 0x311 0x314 0x317 0x31A 0x31E
> > > 24 bits| ? 0x312 0x315 0x318 0x31B 0x31F
> > > 32 bits| ? ? ? ? ? ?
> > >
>
> * * *

使用命令setup,设定System service,我们只需要保留极少的部分,gpm(支持鼠标),crond(计划任务),syslog(系统日志),sshd(远程登录),network(网络连接),xinetd(启动其它服务,比如cvs),我们可以去掉其它所有的选项,以加快系统启动和运行速度。

重启使设定生效,方便我们做下面的更改。

系统在登录时屏幕最上方有两行欢迎词,有对系统的一点说明,不过Fedora默认的内核的名字又长又难看,我们就不要让它显示在这里了。

修改/etc/issue文件,内容一目了然。如果对里面的转义字符不了解,可以用

man issue和man mingetty查看说明。

系统默认的命令提示符的格式不太友好,我们改一下,我直接编辑/etc/bashrc文件,这样会对所有用户产生同样的影响。在最后加上这一句:(你最好改自己目录下的.bashrc文件)

if [ "$TERM" = "linux" ]

then

export PS1="\[\033[0;31m\][\u:\w]\$\[\033[0m\]"

else

export PS1="\[\e]2;\u@\H \w\a\[\033[0;31m\][\u:]\$\[\033[0m\]"

fi

这样,当你直接使用系统本机登录的时候(也就是用vmware的客户端),命令提示符就会成为红色的[root:/usr]#这样的格式,你可以看出以哪个用户名在使用,以及你当前在什么目录下;而当你使用远程(putty)访问的时候,会只留下[root:]#,当前目录和用户名@主机会显示在远程终端的标题栏上,是个很有用的功能。

[关于PS1的详细的解释]

你可以让你的提示符显示任何文本,只要:

export PS1="Some Text>"

就可以了。

""代表转义字符,可以用来显示一些特殊内容:

序列 说明

\a ASCII 响铃字符(也可以键入 \007)

\d "Wed Sep 06" 格式的日期

\e ASCII 转义字符(也可以键入 \033)

\h 主机名的第一部分(如 "mybox")

\H 主机的全称(如 "mybox.mydomain.com")

\j 在此 shell 中通过按 ^Z 挂起的进程数

\l 此 shell 的终端设备名(如 "ttyp4")

\n 换行符

\r 回车符

\s shell 的名称(如 "bash")

\t 24 小时制时间(如 "23:01:01")

\T 12 小时制时间(如 "11:01:01")

@ 带有 am/pm 的 12 小时制时间

\u 用户名

\v bash 的版本(如 2.04)

\V Bash 版本(包括补丁级别) ?/td>

\w 当前工作目录(如 "/home/drobbins")

\W 当前工作目录的“基名 (basename)”(如 "drobbins")

\! 当前命令在历史缓冲区中的位置

\# 命令编号(只要您键入内容,它就会在每次提示时累加)

$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#"

\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "\007")表示的 ASCII 字符

\\ 反斜杠

\[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。

\] 这个序列应该出现在非打印字符序列之后。

由此,就可以用这样

export PS1="[\u:\w]\$"

来设定一个类似于[root:\home]#这样的提示符。

增加色彩:可以为提示符的不同位置使用不同的颜色,加色彩用特殊符号"\e["开头,"m"结尾。比如"\e[31m"会使得后面出现的所有文字都以红色来显示。颜色可以有多重意义,用分号分开:"\e[1;31;44m"会使得后面的文字全部以粗体,红色文字,蓝色背景来显示。在只有16的机器上来讲,这样调配可以去掉一些前景色和背景色相近而看不清文字的问题。

该色彩说明在/etc/DIR_COLORS文件中。

文字属性设置:# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed

文字前景色: # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white

文字背景色: # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

在任意位置都可以使用另一个颜色控制符使得后面的文字颜色与前面不同,比如:

"\e[31mThis is some red word\e[34mThis is some blue word"

如果用这样的颜色来标志提示符,那么你在提示符后面输入的命令序列也将被最后一种颜色来标识,可能这并不是我的本意。因此,可以使用"\e[0m"来清除所有的颜色设定,恢复到系统默认的颜色。只要将这个控制符放到原来的序列末尾就可以了。

"\["和"\]"的用处:颜色控制字符虽然并不会在屏幕上显示出位置,但是它会被计算在文字个数里,一般终端机的屏幕只有80行,到了最右端bash会自动换行显示。但是如果提示符里面包含了颜色控制符,那么在这一行还没有到末尾的时候,就会被自动换行了,因为这些字符也被计算在内了。用这两个转义字符标志出它们中间的字符是非打印字符,不需要计算字数。每一段非打印字符都要包含在这一对标志中间。比如:

"\[\e[31m\]Red Word>\[\e[0m\]"这样就比较完整了。

前面我们还提到终端机的窗口标题栏可以被系统所控制,这是由转义字符"\e]2;"和"\a"来控制的。在它们中间的字符将会作为窗口的标题栏,同样,你可以将上面所有的转义字符放进去,让你的标题栏动态的显示你当前所处的目录,或者当前的时间等等。(颜色恐怕不会起作用。)另外,整个的这一段字符都应该包含在\[和\]之间,包括它们中间要实际显示的内容。因为这些内容是用来显示在标题栏上的,而不会占用你这一行中的空间。

[关于DIR_COLORS]

另外,在我的机器上,ls列出文件时,目录名默认的颜色为蓝色,在黑色背景上很难看出来,(如果系统支持高色彩,就不存在这个问题,后面再说。)这里要去改一下/etc/DIR_COLORS文件,根据里面的定义,很容易的可以修改任意文件类型的显示方式:字体,标志线,颜色,背景块的颜色等等,修改完成以后,注销重新登录就可以了。

同样,使用putty远程登录的时候也存在这个问题,这时候需要修改/etc/DIR_COLORS.xterms文件,定义跟前面的文件是完全相同的。

[部分增强功能]

如果前面使用文本模式安装,没有装vim-enhance,(增强版的vim,语法显亮和自动完成功能都要用这个版本。)要手动去装,在第一张盘上,Fedora/RPMS下面,

#rpm -ivh vim-enhance*.rpm

安装以后,它会建立一个vi的alias,注销重登录生效。你原来的vi命令基本也没有用了,可以到bin目录下给它改个名字,然后做一个vi的链接指向/usr/bin/vim。

现在来帮vim定制一下显示方式,这里有个现在的.vimrc文件,放到用户的主目录,再在下面建立一个.vim目录,将tagexplorer.vim和taglist.vim两个文件放进去。

如果你去掉了开发工具里面的ctags,安装ctags-5.5.2,这个程序可以分析文件内的变量定义,数据结构定义以及函数定义等等,而另外两个程序就是利用它的这个功能,为vim的程序编辑提供高级功能。

该文件默认已经安装,你不必重新安装,只要确保.vimrc文件中上面两个插件所指的ctags的程序指向它正确的位置即可(默认在/usr/bin/ctags)。

将这个文件解压后,配置,编译,安装。

#tar -zxvf ctags-5.5.2.tar.gz

#cd ctags-5.5.2

#./configure --prefix=/opt/ctags

#make && make install

安装完成以后打开你的主目录下的.vimrc文件来修改一下,这时候启动vim可能会报错,直接回车进入。因为文件里面原来指向两个插件的目录是/root/.vim/,现在改成你自己的就可以。

稍加介绍一下,taglist被映射到键盘的F3,按下去,会在旁边开一个小窗口,列出当前正在编辑的文件中所有的变量、函数等等,将鼠标移到某个定义上,按下回车,右边的窗口就会移动到这个定义在文件中对应的位置。如果在定义上按下"p",右边的窗口会指向这个位置,但是光标仍然在目录窗口中,如果按下"o",会打开一个新的子窗口,跳到该定义出现的位置。

tagexplorer更强大,它被映射到F4,按一下,同样在左边开一个小窗口,不过里面是当然目录下所有的文件和子目录,可以通过在目录上回车移动到上下级目录,在文件上回车会在右边的窗口打开这个文件。在文件名上,按下"o",它会直接展开这个文件,列出里面所有的变量函数等等的定义,在定义上面回车,就会直接在右边打开这个文件,并定位到这个定义出现的位置。在左边的窗口按下"?"会出现基本的命令帮助。

tagexplorer: http://vim.sourceforge.net/scripts/...p?script_id=483

taglist: http://vim.sourceforge.net/scripts/...p?script_id=273

ctags: http://ctags.sourceforge.net/

[中文问题]

如果你默认语言为英文,你在终端将无法使用中文。或者如果你将默认语言设成中文,在命令行下很多地方会出现乱码,必须安装zhcon来解决这个问题,这个程序不但提供了命令行界面的东方语言显示功能,还自带了很多种输入法。

http://aleron.dl.sourceforge.net/so...on-0.2.3.tar.gz

在编译安装之前,要先修改一下其中两个文件的源代码:

在src目录下,mouse.h和inputclient.h,在两个文件的顶部加上

#include "assert.h"

否则编译的时候会失败。

修改以后,按照configure,make,make install的顺序安装就可以了。安装完成以后,执行

#zhcon 应该就可以看到中文显示了。

[远程终端方式]

vmware的客户端使用起来并不是很方便,所以我们选择远程登录的方式来使用linux,终端软件选择putty,小巧但是很强大,而且可以随时调整窗口的大小。即使你的linux不支持framebuffer,也不会影响我们使用。

putty只有一个可执行文件,新建一个配置文件,设定登录方式为ssh,设定连接的IP,更改字体,使用支持中文的字体,比如新宋体,其它基本上都使用默认,更改一下窗口的大小,我使用40*110的窗口大小,还有系统提醒的声音,可以设为鸣叫,就像本机使用一样。

连接以后,可以先修改一下上面提到的/etc/DIR_COLORS.xterms文件,设定自己喜欢的显示方式,然后在/etc/bashrc中设定PS1的地方增加一行,

export LANG=zh_CN

直接加到else的后面,也就是说只有在使用远程登录的时候才使用中文环境。退出重新登录以后,大部分命令就会使用中文提示,vi也可以直接输入中文。

你如果直接启动putty主程序来使用,那必须要在启动程序以后点击你要使用的那个配置文件,然后点一下load,然后才能登录,这样很麻烦,而且容易出现误操作,覆盖你原来的所有设置。给putty生成一个快捷方式,在程序的后面加上参数"@配置名",双击该快捷方式,putty就会直接启动该配置文件相关的系统了。但是如果要修改某个选项,还是要打开putty主程序,load进你要修改的选项,设定相关的选项,再点击保存才可以,否则,你所做的任何更改,关闭程序以后将会丢失。

我们后面的操作基本上全部使用putty来完成。

[系统的启动和关闭(及vmware-tools的安装)]

vmware GSX Server 3 可以使用Web界面控制系统的启动和关闭。同时,在它的安装目录下也提供了一个批处理文件,vmware-cmd.bat,其中调用一个perl脚本,完成命令行上的对虚拟系统的控制。当我们决定只使用putty来控制系统的时候,你就会觉得打开vmware的客户端来启动系统实在是一个浪费。

新建一个快捷方式,将vmware-cmd.bat中的那条脚本命令复制进来,在最后加上两个参数,一个是你要启动的系统的完整路径,包括最后的.vmx文件名,第二个是控制命令,包括start,stop,suspend,resume等等。对于stop,可以加上参数soft,这样会发一个命令给系统,自动关机,而不是强制断电。

完整的命令行如下:

"C:\Program Files\VMware\VMware GSX Server\perl.exe" "C:\Program Files\VMware\VMware GSX Server\vmware-cmd" "F:\VMWare\FedoraLinux\redhat.vmx" start

这里还要更改一下虚拟机的设定(用vmware客户端),在Option中的Startup/Stop项中,把启动系统使用的用户设为System。就可以用以上快捷方式直接启动该系统,等系统启动完成,就可以使用putty登录系统了,完全不需要vmware的前台。

对于软关机,需要vmware-tools的配合。在windows下安装vmware-tools很容易,但是linux下就没那么方便了。首先我们要装上kernel-source,因为vmware-tools要编译自己作为内核的模块,要用到当前内核同样版本的头文件。mount上第一张安装盘,安装kernel-source*.rpm,该文件依赖于gcc32,不过我们没有必要装这个,容易造成gcc两个版本的混乱。

#rpm -ivh --nodeps kernel-souce*.rpm

强制安装。装完以后在vm菜单里选择安装vmware-tools,这时候vmware会自动将tools的光盘调入光驱,但是还是需要我们手动mount,然后将里面唯一的文件解压出来,放到任一目录下,进入该目录,执行vmware-install.pl脚本。

安装过程会问几个路径,全部用默认就可以了。最后会帮你自动调用vmware-config-tools脚本,首先会提醒你该系统应该使用gcc3.2.3来编译,但是当前安装的是gcc3.3.2,是否继续,输入yes回车继续,然后它会自动找到合适的头文件,编译完成以后,vmware-tools就开始起作用了,你可以试试power菜单上的shutdown和reboot,它会让系统自己软关机。

安装完成以后,内核源文件就没用了,使用rpm -e卸载掉它。

这样,开机和关机都可以用一个命令来解决,而不用担心非法关机的问题。另外,在虚拟系统的选项里面,也可以设定host关机时采取的动作。

这里还遇到了一个问题,当使用这个命令行首先启动了linux系统以后,再使用vmware客户端启动另一个虚拟系统(win2000)的时候,出现了鼠标无法被捕获的问题,提示DirectInput Error。

这个是由于启动权限问题引起的。如果linux的Option中是使用System帐号启动的,那就把所有的虚拟机全部设成System帐号启动就可以了。

[安装应用程序]

现在可以开始装各种服务了。首先建立一个普通用户,useradd cozo;passwd cozo.

在任意目录下建立一个临时文件夹,用来存放下载的源码。在这里使用root的home目录下的/server,即/root/server。

将下载的apache,php(相关文件),mysql,cvs以及proftpd的压缩文件放在这里。

所有程序的安装方法是完全相同的,都是以下顺序:

解压:#tar -zxvf *.gz

进入其目录:#cd apache*|php*|mysql*|cvs*

生成配置文件:#./configure

编译:#make

安装:#make install

经过上述步骤,程序本身就已经装好了,剩下只是配置的工作。不过每个程序的configure都有很多的参数,可以使用./configure --help|more 来查看详细信息。这里介绍一下各自的基本参数。(注:如果configure过程出错,就不会生成所有的make文件,接下来的两个过程就会找不到make文件无法进行。重新configure就可以了。)

另外,本文的安装方式,所有文件都在它们自己的目录下,包括man手册,所以,为了方便查询手册,最好是安装完成以后手动将这些文件复制到/usr/local/man/下面去。

[安装mysql]

版本4.0.18。 http://www.mysql.com/downloads/mysql-4.0.html 注意,在页面的最下面才是Source的下载,上面都是Binnary版。

我们把所有手动安装的软件都装在/opt目录下,便于管理。

#./configure --prefix=/opt/mysql --with-mysqld-user=cozo --with-charset=gb2312 --with-extra-charsets=all --with-unix-socket-path=/docs/mysql/mysql.sock --localstatedir=/docs/mysql --without-debug --without-docs --without-innodb

[注]关于configure的选项的一点说明:

--prefix=/opt/mysql 把mysql-4.0.18指定安装到/opt/mysql目录中;

--with-charset=gb2312 指定mysql默认语言为gb2312,也就是中文;

--with-extra-charsets=all 对多语言的支持;

--with-unix-socket-path=/docs/mysql/mysql.sock

这个是指定mysql服务器启动后,联机套接字文件所处的位置和文件名,也就是说,如果mysql服务器成功启动后,就能在/docs/mysql目录中看到mysql.sock文件。如果看不到,肯定是mysql启动不了。

--localstatedir=/docs/mysql

指定数据库存放的位置,与程序所在位置分开,即安全,也利于管理。

--with-mysqld-user=cozo 这个是让mysql服务器也能让系统中普通用户cozo也能启动mysql服务器。用普通用户来启动mysql的好处是:mysql的进程会自己死掉自动退出。当然root用户也可以,不过有时mysql有些进程死了,但不会自动退出,root自己也杀不掉。所以用普通用户就有这样的好处,大多不会出现mysql进程已死,但不会退出的情况;

最后三个选项分别是不编译调试信息,不编译文档,主使用innodb数据库结构(该项慎用)。

安装完成以后要进行配置才能启动mysql。

到/opt/mysql/share/mysql目录中,这里有几个推荐的配置文件,比如my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf, 在mysql启动的时候它要到/etc目录下找my.cnf配置文件,读取参数,因此我们选一个合适的放到那里就可以了。一般用medium。

#cp my-medium.cnf /etc/my.cnf

然后初始化mysql授权表。

#/opt/mysql/bin/mysql_install_db

这样,在/docs目录下就会多出一个mysql目录,所有的数据库都是放在这个目录里的。将数据目录的权限赋给用户cozo,否则会造成服务无法启动。

#chown -R cozo.cozo /docs/mysql

然后启动数据库就可以了。

#/opt/mysql/share/mysql/mysql.server start

查看一下进程,看看是不是启动成功了。

#ps -aux | grep mysql

为了让前面编译时的那个普通用户有权限启动数据库,要把整个mysql目录放到他的名下:

#chown -R cozo.cozo /opt/mysql/

-R是指将该目录下的所有子目录也改变所有者。

数据存放目录默认的权限是700,这样会造成php程序没有读取该目录的权限,找不到mysql.sock文件,phpmyadmin之类的程序就无法连接mysql,所以还要给数据库目录增加权限。

#chmod 755 /docs/mysql

接下来就可以使用了。建议装好apache和php以后,使用phpmyadmin来更直观的修改数据库的权限。

要想让系统启动时mysql服务自动启动,将它的启动命令行,也就是/opt/mysql/share/mysql/mysql.server start添加到/etc/rc.d/rc.local文件内。

[安装apache]

版本2.0.49。 http://httpd.apache.org/download.cgi

#./configure --prefix=/opt/apache --enable-track-vars --enable-cgi --with-config-file-path=/opt/apache/conf --enable-so

apache的配置参数非常多,可以看一下它的help,方法同上。这里大部分采用默认配置,只是改变了它的安装路径,启用自动变量注册和CGI功能。最后一个选项,指定apache的配置文件的保存路径。

安装完成以后,apache应该已经可以启动了。

#/opt/apache/bin/apachectl start

因为本机没有浏览器,可以打开主机的浏览器,用它的IP来访问,应该可以看到它的默认界面了。

编辑/opt/apache/conf/httpd.conf,apache所有的参数都在这里。要修改的参数并不多,将DocumentRoot指向你存放主页的地方,修改其下的Option项,我增加了ExecCGI,这样允许直接在主目录下执行cgi程序。另外,如果你想让cgi-bin目录下的cgi程序可以执行的话,一定要把它对应的目录权限部分的Option项添加上这个权限,它默认为None,你是没有办法执行cgi的。修改主机名,管理员信箱,我的主机名用IP地址。AddDefaultCharset ISO-8859-1改成GB2312,否则中文网页会出问题。DirectoryIndex后面加上index.php index.cgi等等。

如果你改变了DocumentRoot指向的目录,修改那个目录的权限为755。修改了配置以后要重启apache。用前面启动时的命令,加restart参数就可以了。

同样,将apache的启动命令行添加到/etc/rc.d/rc.local文件内。

[安装php]

版本4.3.5。 http://www.php.net/downloads.php

如果要php支持其它的一些扩展功能,需要先装扩展。这里我们首先安装xslt函数的支持,要用到两个包,expat-1.95.7和salot-1.0.1,这个包用于php文档中提到的xslt函数的支持,用来在服务器端解析xsl和xml文件。

先安装expat。 http://sourceforge.net/projects/expat/

它的安装方式与其它完全相同,也不需要加特别的参数。

#./configure --prefix=/opt/expat

然后make && make install。

在接下来安装sablot之前,先装上js开发包,这可以让它支持包含javascript的xslt文件解析。

http://www.gingerall.org/charlie/ga...lated.xml?s=org

我们使用的是两个rpm包。(它的源码包编译过程也比较特殊,而且无法make install?)。

#rpm -ivh js-1.5rc5a-1.i386.rpm

#rpm -ivh js-devel-1.5rc5a-1.i386.rpm

如果不装第二个开发包的支持,你的系统中就没有js的相关头文件和链接库文件,编译sablot会失败。

然后安装sablot。 http://www.gingerall.org/charlie/ga/xml/d_sab.xml?s=org

这个包有些特殊,根据它的文档说明,你如果要指定expat的安装目录,用configure来指定是没有用的,必须用到环境变量。首先生成四个环境变量:

#export CPLUS_INCLUDE_PATH=/opt/expat/include:/usr/include/js

#export LIBRARY_PATH=/opt/expat/lib:/usr/lib/js

#export LD_LIBRARY_PATH=/opt/expat/lib:/usr/lib/js

#export SABLOT_GPL=1

然后进行配置。配置中最后一项参数,表明你愿意在GPL协议下使用该软件。否则--with-readline将无法使用。。

#./configure --prefix=/opt/sablot --enable-encoding --enable-warning --with-readline --enable-javascript

参数的具体意义可以看configure的帮助,不过encoding这个参数帮助中没有,如果你没有加一条,那么你编译出来的php就少了一个xslt_set_encoding函数,那你就只能用在utf-8编码的文件上了。不过要使用这个选项,必须要保证你的编译器能够找到iconv的库文件(gcc已经自带了,php也带了一套)。

然后是make && make install。

下面安装GD库。

要用到四个支持库:gd-2.0.22, jpeg v6b, freetype-2.1.7, libpng-1.2.5, 还有一个zlib-1.2.1, php已经自带了,不过我们还是装一个单独的,防止与libpng冲突。

首先是freetype。 http://sourceforge.net/project/show...p?group_id=3157

解压,配置:

#./configure --prefix=/opt/freetype

没有其它要使用的选项,然后make && make install。

然后是zlib。 http://sourceforge.net/projects/libpng/

它的配置参数也只需要一个prefix=/opt/zlib。

(如果使用的最小化安装,那么系统中没有zlib的文件,下面的libpng编译时通不过。把/opt/zlib下的include和lib目录内的文件分别复制到/usr/include和/usr/lib。)

下面是libpng。 http://sourceforge.net/projects/libpng/

解压后执行configure会发现没有反应,因为这是个空的配置文件。它有一套makefile在scripts目录下,找一个合适的直接拿来用就可以了。也就是说,我们没有办法控制它的安装目录了。

#cp scripts/makefile.gcmmx makefile

makefile.gcmmx是针对MMX指令集优化的,注意,makefile.gcc是标准的gcc版本,但是这个文件有问题,无法make install.

复制完成后直接make && make install。

下面是jpeg。 ftp://ftp.uu.net/graphics/jpeg/

它也只有一个prefix=/opt/jpeglib。

然后是make && make install。你会发现你的make install总是报错,文件不存在。这是它的脚本问题,你要创建它所有需要的目录,它才能把文件安装过去。

#mkdir -p /opt/jpeglib/include

#mkdir -p /opt/jpeglib/lib

#mkdir -p /opt/jpeglib/bin

#mkdir -p /opt/jpeglib/man/man1

然后执行make install就可以了。

最后还需要一步,make install-lib,否则php和gd2都无法找到它的头文件。

最后编译gd2。 http://www.boutell.com/gd/

它的参数也不多。

#./configure --prefix=/opt/GD2 --with-png=/usr/local/lib --with-jpeg=/opt/jpeglib --with-freetype=/opt/freetype

还有一个xpm,一般不会用到,这里也不安装了。

配置完成以后会提示所支持和不支持的包,注意以上的三个选项都被支持就可以了。

然后make && make install。

接下来要安装php。

要注意下载的包,源码包的名字里不包含任何的与主机相关的信息,比如i686之类的,那个是编译以后的安装包。源码包的名字应该只有php-4.3.5-tar.gz。

注意,在make以前,还要生成一个环境变量:

#export LDFLAGS=-lstdc++

如果你没有这一步,那么你的php在make到最后一步的时候就会出错,出现一些libsablot.so中有未声明的函数之类的问题。

#./configure --prefix=/opt/php --with-mysql=/opt/mysql --with-apxs2=/opt/apache/bin/apxs --enable-track-vars --enable-force-cgi-redirect --with-config-file-path=/opt/php/etc --with-iconv --with-xml --enable-xslt --with-expat-dir=/opt/expat --with-xslt-sablot=/opt/sablot --with-zlib-dir=/opt/zlib --with-gd=/opt/GD2 --enable-sockets --enable-gd-native-ttf --with-ttf=/opt/freetype --with-jpeg-dir=/opt/jpeglib --with-png-dir=/usr/local/lib --enable-inline-optimization --enable-magic-quotes --with-freetype-dir=/opt/freetype --with-sablot-js --with-readline=/usr

参数说明:

--prefix=/opt/php 指定把php-4.3.5安装到/opt/php目录中;

--with-mysql=/opt/mysql 指定mysql数据服务器安装的位置;

--with-apxs2=/opt/apache/bin/apxs 这是加入apache中为DSO模块的位置;

--enable-track-vars 为启动cookie的get/post等追踪功能;

--with-config-file-path=/opt/php/etc 指定php的配制文件存放的目录是/opt/php/etc目录,我们安装完成后,也要把php.ini复制到这个目录中来;

后面的就是指明要使用xslt函数和连接库所在的位置。

安装好以后,复制源码目录下的ini文件

#cp php.ini-dist /opt/php/etc/php.ini

打开这个php.ini文件,修改参数。大部分不用修改,default_charset基本上也不用改,因为我们已经指定了apache的这个参数,不过也可以在下面加上default_charset="gb2312"。一般来说,可以更改脚本执行时间,文件上传大小等。编译安装过程的最后有一个提示,让你把/opt/php/lib/php目录放到ini文件里include里面去,照做就是了。

打开apache的配置文件httpd.conf,加上两行

AddType application/x-httpd-php .php

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

通过第二行你可以把php源文件改名成phps以后,用浏览器直接浏览这个文件,就可以以显亮的脚本方式查看源代码了,非常方便。

可以加到文件最后,也便于以后查找。重启apache以后,应该就可以访问你的php文件了。记得将网页目录下所有文件属性改为755(好像只要nobody可读就行,但是cgi程序的话,就要有可执行权限,php程序不需要)。LoadModule的添加php的make install已经帮你做了。

这时候就可以安装phpmyadmin了,版本2.5.4。 http://xj.onlinedown.net/down/phpMy....5.4-php.tar.gz

它的安装很简单,直接解压后复制到你的网页目录中,或者给apache建立一个虚拟目录,修改一下其中的config.inc.php文件中数据库的用户名和密码就可以使用了。

安装mmcache,版本2.4.6。 http://prdownloads.sourceforge.net/...tar.gz?download

这是个新兴的php加速加密程序,目前已有很多大型网站采用该模块,与zend相比,它是免费的。

安装之前,如果你使用的是最小化安装,还需要安装几个包:

m4-1.4.1-14, autoconf-2.57-3, automake-1.7.8-1, libtool-libs-1.5.8, libtool-1.5.8, 其中m4在第一张盘上,其它在第二张盘上。

解压以后,进入该目录,然后执行:

#export PHP_PREFIX="/opt/php"

#$PHP_PREFIX/bin/phpize

#./configure --enable-mmcache=shared --with-php-config=$PHP_PREFIX/bin/php-config

虽然它的configure的帮助里面有prefix参数,不过那是autoconf自动生成的,实际它只要make得到一个so模块文件就可以了,不需要安装。也就不需要那个参数了。

make以后,在它的源码目录下的modules目录下,生成了一个mmcache.so,我们只需要这一个文件。

#cp modules/mmcache.so /opt/php/lib/php

当然,你把它拷到哪里都无所谓,因为我们需要到它的php.ini里面去指定这个模块的位置。

打开/opt/php/etc/php.ini,在任意地方(建议使用文件的最下方,the end的上面一个空段)输入以下内容:

[mmcache]

zend_extension="/opt/php/lib/php/mmcache.so"

mmcache.shm_size="16"

mmcache.cache_dir="/tmp/mmcache"

mmcache.enable="1"

mmcache.optimizer="1"

mmcache.check_mtime="1"

mmcache.debug="0"

mmcache.filter=""

mmcache.shm_max="0"

mmcache.shm_ttl="0"

mmcache.shm_prune_period="0"

mmcache.shm_only="0"

mmcache.compress="1"

保存文件,然后建立/tmp/mmcache目录,并给予777的权限。

重启apache,再看看你的info.php,在php credits的上面,Zend的版权栏里,是不是多出了“with Turck MMCache v2.4.6, Copyright (c) 2002-2003 TurckSoft, St. Petersburg, by Dmitry Stogov ”的字样,这时候mmcache已经生效了。

它的加速功能是不需要我们干预的,但是要想加密你的代码,就得自己动手了,不过还好,我们有个现成的工具,可以帮助我们快速的加密整个网站。

phpcoder: http://sourceforge.net/project/show...?group_id=85927

它的用法和phpmysql一样,整个解压以后复制到你的web目录就可以使用了。界面很简朴,功能也很明确。

[安装cvs]

版本1.11.14。 http://ccvs.cvshome.org/servlets/ProjectDownloadList

它的解压方式可以与前面不同,因为它的后缀不同。

#tar -jxvf cvs-1.11.13.tar.bz2

在安装开发工具的时候,cvs应该已经被安装进去了,一来版本较低,二来不如我们自己定制的。先查看一下:

#rpm -qa | grep cvs

应该可以找到两个包含cvs的软件包,不过只要卸载第一个,也就是cvs-1.11.5-3的那个就可以了:

#rpm -e cvs

然后安装我们自己的cvs包。

#./configure --prefix=/opt/cvs --with-cvs-admin-group=cvs

它的参数比较少,也没什么好解释的,详细信息可以看./configure --help。

安装完以后要做的配置比较多。

首先我们要有一个cvs的管理组,也就是前面配置的时候指定的那个组。

然后创建一个目录来保存你所有的cvs存储的文件,就是Repository,最好是够大,而且安全的分区上。我把它放在根目录下,将目录归到cvsroot用户的名下。

#groupadd cvs

#mkdir /cvsroot

#useradd -g cvs -d /cvsroot cvsuser

创建环境变量CVSROOT,它是你连接cvs时的默认连接方式。现在我们可以简单的使用目录来定义这个变量,因为你在本机上使用,还没有什么权限的问题。打开/etc/bashrc文件,在最后添加

CVSROOT=/cvsroot

export CVSROOT

然后logout,再重新登录进来,以使变量生效。

接下来初始化你的cvs根目录。

#/opt/cvs/bin/cvs -d /cvsroot init

这里有一点说明,cvs本身是一个c/s架构的软件,但是这个软件只有一个可执行文件,那就是这个cvs文件,它既是主机,也是客户端。

执行以上命令以后,在/cvsroot下会生成一个CVSROOT目录,里面保存着cvs的重要配置信息。而你的项目,则会以项目名为目录名保存在/cvsroot下。

初始化以后,你的cvs应该已经可以用了。我们把cvs服务作为xinetd方式来启动,这样就不会一直占用你的系统资源,因为毕竟不会经常连接cvs的。

在使用xinetd之前,如果你使用的是最小化安装,还要手动安装xinetd-2.3.12,在第一张盘上。安装以后,默认就已经配置成自启动的了。可以到setup-service里确认一下。

在/etc/xinetd.d目录下新建一个cvspserver文件,输入下列内容:

service cvspserver

{

disable = no

socket_type = stream

wait = no

user = root

server = /opt/cvs/bin/cvs

server_args = -f --allow-root=/cvsroot pserver

log_on_failure += USERID

}

注意这里的服务器启动参数里面的--allow-root=/cvsroot,该参数指明服务所允许使用的目录,如果在cvs里面指定其它的目录,即使该目录做了cvs init,也会提示你"no this repository",如果要在一个服务器上指定多个目录(比如有几个项目组同时开发,但是互相之间没有任何的关联),可以使用多个“--allow-root=”选项,同时每个目录都要做init。

保存文件,重启xinetd服务以使该服务生效:

#service xinetd restart

这时候就可以测试你的cvs服务是否可用了。到你现在的某个非空目录下,将该目录下的文件作为一个新项目上传,建议使用几个文本文件作为测试:

#/opt/cvs/bin/cvs import -m "this is a information" ProjectName Version_1 JustStart

如果返回的信息是

N filename

...

就说明上传成功了。这时候你可以到/cvsroot目录下看看你的项目是不是已经存在了。用ls -l看一下你新上传的这个目录的权限,如果它的用户不是cvsroot,而是root,那这个项目在别的机器上或者本机登录的其它用户是无法checkout的。你可以直接在这里删除这个测试目录。

现在来新建你的cvs专用用户。cvs在它的主目录的CVSROOT内读取三个文件,passwd、readers和writers。后两个文件比较简单,就是用户名的列表,每个用户名占一行。readers文件内的用户只能读,writers文件内的用户有读写权限。第一个文件比较复杂,它里面保存的是所有的cvs用户的列表,格式为:

username:password:sysuser,username是用户登录时用的名字,可以是系统内不存在的用户名,也就是说只有cvs本身使用这个用户名(建议全部使用系统内不存在的用户名),也可以是系统内已有的用户名,但是root的话是不可以的(因为root本身不能远程登录,因此放在这里也没有意义。)password是用户登录的密码,如果该用户名也属于本机用户,两个密码可以不同。第三个sysuser是指该用户所对应的本机用户。这里全部使用cvsuser,这样该用户名上传的文件都会作为cvsuser用户的文件,那么其它的登录用户就有读写的权限了。中间的密码是加密的密码,该文件可以使用apache的一个工具来生成。

#cd /opt/apache/bin

#./htpasswd passwd newuser

#enter the password:newpass

这个程序可以帮助你生成passwd文件,并将用户名和加密后的密码按照格式放进去。第一次使用时要加-c参数,才会创建新的passwd文件。多添加几个用户,比如:anonymous,reader,writer。

然后将生成的passwd文件移动到/cvsroot/CVSROOT内,编辑该文件,在每一行的后面加上":cvsuser",并将anonymous的密码去掉,两个冒号中间留空即可。然后新建文件readers,将reader和anonymous写进去,各占一行,新建writers,将writers写进去。你可以生成更多的用户,并分配相应的权限。

这时候在远程登录的时候,就可以用相应的用户来登录了,而且已经具有了相应的权限。但是本机怎么办呢?再打开/etc/bashrc来编辑,将上次写的CVSROOT=/cvsroot改成:

CVSROOT=:pserver:writer@localhost:/cvsroot

这样,所有的本机用户,在使用cvs上传文件的时候,都会存为cvsroot用户的文件,其它的用户也就可以使用了。远程用户连接也使用这

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus