svn+apache 安装方法

1. 操作系统 centOS 5.2

2. apache 2.2.17

3. subversion-1.6.13

4. sqlite-amalgamation-3.7.3.tar.gz

5. db-4.2.52.NC.tar.gz(berkeley db)

 

1 .下载安装apr,下载地址:http://apr.apache.org/
[root@localhost pub]# tar -jxvf apr-1.3.12.tar.bz2 首先解压缩
[root@localhost pub]# mkdir /usr/local/apr         建立apr要安装到的目录
[root@localhost pub]# cd apr-1.3.12
[root@localhost apr-1.3.12]# ./configure –prefix=/usr/local/apr 开始配置编译
[root@localhost apr-1.3.12]# make;make install    安装

2.安装apr-util
[root@localhost pub]# tar -jxvf apr-util-1.3.9.tar.bz2
[root@localhost pub]# cd apr-util-1.3.9
[root@localhost apr-util-1.3.9]# mkdir /usr/local/apr-util
[root@localhost apr-util-1.3.9]# ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr
[root@localhost apr-util-1.3.9]# make;make install

3.安装neon
在安装之前,需要确认libxml2,如果没有安装需要安装上!
[root@localhost pub]# rpm -q libxml2
libxml2-2.6.26-2.1.2.8
[root@localhost pub]# rpm -q libxml2-devel
libxml2-devel-2.6.26-2.1.2.8

[root@localhost pub]# tar -zxvf neon-0.25.5.tar.gz
[root@localhost pub]# mkdir /usr/local/neon
[root@localhost pub]# cd neon-0.25.5
[root@localhost neon-0.25.5]# ./configure –prefix=/usr/local/neon
[root@localhost neon-0.25.5]# make;make install

4.安装Berkeley DB

[root@localhost pub]# cd /usr/local/src
[root@localhost src]# tar -zxvf /var/ftp/pub/db-4.6.18.tar.gz
[root@localhost src]# cd db-4.6.18/
[root@localhost db-4.6.18]# cd build_unix/
[root@localhost build_unix]# mkdir /usr/local/berkeleydb
[root@localhost build_unix]# ../dist/configure –prefix=/usr/local/berkeleydb –enable-cxx
其中-enable-cxx就是编译C++库,这样才能编译Berkeley DB数据库的PHP扩展php_db4.
yum -y install gcc-c++安装一下就可以了

[root@localhost build_unix]# make;make install
[root@localhost build_unix]# echo ‘/usr/local/bekeleydb/lib/’>>/etc/ld.so.conf
[root@localhost build_unix]# ldconfig
这2句的作用就是通知系统Berkeley DB的动态链接库在/usr/local/berkeleydb/lib/目录

5.安装sqlite-amalgamation-3.6.13.tar.gz
[root@localhost pub]# tar -zxvf sqlite-amalgamation-3.6.13.tar.gz
[root@localhost pub]# mkdir /usr/local/sqlite
[root@localhost pub]# cd sqlite-3.6.13/
[root@localhost sqlite-3.6.13]# ./configure –prefix=/usr/local/sqlite
[root@localhost sqlite-3.6.13]# make;make install

6.编译安装httpd, 下载地址:http://httpd.apache.org/
[root@localhost pub]#tar xvzf httpd-2.2.4.tar.gz//解压apache2安装包
[root@localhost pub]#cd httpd-2.2.4//进入解压后的目录
[root@localhost httpd-2.2.4]# mkdir /usr/local/apache2
[root@localhost httpd-2.2.4]# ./configure -prefix=/usr/local/apache2 –enable-dav –enable-so –enable-maintainer-mode –enable-rewrite –with-apr=/usr/local/apr/bin/apr-1-config –with-apr-util=/usr/local/apr/bin/apu-1-config
//配置apache安装,后面的第一个参数是定制apache安装到那个目录,–enable-dav –enable-so是和subversion整合时需要的
[root@localhost httpd-2.2.4]# make;make install 完成安装,如果没有错误,真的太幸运了,哈哈。出现错误是很挠头的!
[root@localhost pub]# cd /usr/local/apache2/
[root@localhost apache2]# bin/apachectl start 启动web服务,并访问,注意防火墙,如果能正确的访问,说明没有问题,ok了!
[root@localhost apache2]# bin/apachectl stop 可以停止,接着安装其他的软件包了。

7安装subversion1.6.5
http://subversion.tigris.org/
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=10339&expandFolder=10339&folderID=260  subversion-1.6.5.tar.gz和subversion-deps-1.6.5.tar.bz2下载地址
[root@localhost pub]# tar -zxvf subversion-1.6.5.tar.gz
[root@localhost pub]# tar -jxvf subversion-deps-1.6.5.tar.bz2

./configure以前,需要yum -y install openssl-devel否则会一直报错,提示你configure的时候加上–with-openssl,即使你加上了也会报错,因为需要一个 openssl.h(具体的名字忘了)的头文件,如果你没有安装openssl-devel这个软件包的话,这个.h文件系统中是没有的。再解压缩 subversion-devel-1.6.11.tar.gz后,会在解压缩subversion-1.6.11.tar.gz产生的文件夹内生成 zlib文件,在configure时,要加上他的路径,否则configure: error: –with-zlib requires an argument.也是报错!
[root@localhost subversion-1.6.5]#./configure –prefix=/usr/local/subversion –with-apxs=/usr/local/apache2/bin/apxs –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util –with-neon=/usr/local/neon –with-sqlite=/usr/local/sqlite –with-ssl –with-zlib=/var/ftp/pub/subversion-1.6.5/zlib –enable-maintainer-mode –without-berkeley-db

在make之前一定要执行下一步,否则就会报错如下:
/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
make: *** [subversion/svn/svn] Error 1
我也是出现错误了,报错了,然后百度,google一顿狂搜,愣是没有搜到我要的答案,不过大体上知道是缺少一个库文件,这个文件的名称应该包含lib,或expat,因为提示是没有找到lexpat嘛,所以,我就一个软件包一个软件包的测试,才找到这个软件包的,在安装完这个软件包之后,make才继续进行下去的!!!!需要安装的软件包主要是这两个:expat-1.95.8-8.2.1.i386.rpm和expat-devel- 1.95.8-8.2.1.i386.rpm
[root@localhost Server]# rpm -ivh expat-1.95.8-8.3.el5_4.2.i386.rpm
warning: expat-1.95.8-8.3.el5_4.2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing…                ########################################### [100%]
   1:expat-devel            ########################################### [100%]
[root@localhost Server]# rpm -ivh expat-devel-1.95.8-8.3.el5_4.2.i386.rpm
warning: expat-devel-1.95.8-8.3.el5_4.2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing…                ########################################### [100%]
   1:expat-devel            ########################################### [100%]
[root@localhost subversion-1.6.5]#make
[root@localhost subversion-1.6.5]#make install
完成安装。

启动/usr/local/apache2/bin/apachectl start后,如果报错,这个我也查找了N久,才解决报错内容如下:

[root@localhost bin]# ./apachectl start
httpd: Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_dav_svn.so into server: /usr/local/subversion/lib/libsvn_subr-1.so.0: undefined symbol: apr_memcache_add_server

需要在/etc/ld.so.conf中添加一下内容,并执行ldconfig
[root@localhost ~]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/apache2/modules/
/usr/local/subversion/bin/
/usr/local/berkeleydb/bin/
[root@localhost ~]#ldconfig

这样在启动apache服务的是否就没有报错了!

安装完成之后,需要配置subversion,在配置之前,首先来了解一下配置语句。
主要配置语句如下:
    意思是Subversion版本可的URL是http://MyServer IP/svn/
DAV  svn    告诉Apache是哪个模块响应哪个URL的请求,在这里是SubVersion模块
SVNPath  /path   单版本库时使用此项指明版本库的路径,但是在多版本库中不要使用此项
SVNListParentPath  on   对于SubVersion1.3或更高的版本,这个指示会列出所有SVNParentPath中的版本库
SVNParentPath /path   告诉Subversion需要查看的版本库位于/path之下
SVNIndexXSLT    “/svnindex.xsl”  使用它可以在用浏览器浏览时更好看
AuthType        Basic   激活基本认证,就是用户名和密码
AuthName “Subversion repository” 用来说明何时弹出要求用户输入认证信息的认证对话框
AuthUserFile   /path/passwd.conf 指定使用的认证密码文件
AuthzSVNAccessFile /path/authz.conf 位置,Subversion版本库的访问控制文件的路径
Require  valid-user  指定只有输入了正确的用户名和密码的用户可以访问URL


那么现在首先配置最简单的版本库,那就是单版本库
1)如果只配置一个单版本库,且希望任何人都可以访问你的服务,那么配置语句设置成以下就可以了
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
#如果进行访问,在浏览器里输入:http://server IP/www,就可以直接访问了
DAV svn         #告诉Apache使用svn模块响应URL的请求
SVNPath /svn/svnroot/www # 这里是版本库所在的路径

如果是配置多版本库,而且允许任何人访问你的服务,配置语句如下:

DAV svn
SVNLISTParentPath on     #此句,最好加上,否则在浏览器中输入http://server IP/sev的时候将看不到,除非用户记下了版本库的名字,哈哈
SVNParentPath /svn/svnroot #注意这里是SVNParentPath了,而不是SVNPath,^_^

以上是配置单版本库和多版本库,但是一定要注意一个问题,单版本库和多版本库千万不能同时存在,否则,就会出现问题,最常见的问题如下:
 
-
 
  Could not open the requested SVN filesystem
 

解决的方法就是只保留一个版本库,即,删除或注释掉单个版本库,删除或注释掉多个版本库的配置。如果SVNPath或SVNParentPath后的路径写错了,也会出现这样的错误。

2) 认证访问
对用户的访问进行限制,最简单的限制是通过HTTP的基本认证机制,apache提供了一个htpasswd工具来建立和管理可接受的用户名和密码,使用htpasswd可以建立你希望访问你版本库的用户。
比如:
root@localhost svn]/usr/local/apache2/bin/htpasswd -cm /svn/passwd.conf usera #第一次使用htpasswd时,使用c参数是创建后面的passwd.conf文件,m参数是使用md5进行加密
New password:
Re-type new password:
Adding password for user usera
root@localhost svn]# cat passwd.conf  可以查看新建立用户名与密码的对应问题。
usera:$apr1$jBxj7/..$7QvnzhPVSrn3pXUB6XhPJ.
[root@localhost svn]# /usr/local/apache2/bin/htpasswd -m /svn/passwd.conf userb #在创建完htpasswd.conf后,再添加用户时,可以不使用任何参数。但是如果使用参数c,则会重新创建passwd.conf文件
New password:
Re-type new password:
Adding password for user userb
[root@localhost svn]# cat passwd.conf
usera:$apr1$jBxj7/..$7QvnzhPVSrn3pXUB6XhPJ.
userb:$apr1$AT3ZZ…$jwyfVWT7Hou4/rklZ13Fi.

[root@localhost ~]# awk ‘BEGIN{FS=”:”}{print length($2)}’ /svn/passwd.conf
37
37
我们可以使用awk来查看一下加密后的密码长度,在这里显示是37位。而对于系统用户密码使用md5进行加密后,密码长度为34位,差了3位,仔细观察一下,使用md5加密的密码开始的前三位是$1$,但是在这里$1$之间加了3位,是apr,这是使用htpasswd进行加密的一个不同点。
认证文件添加成功后,需要在httpd.conf的Location区里添加一些指示来告诉Apache如何使用这些密码文件,AuthType指定系统使用的认证类型,使用Basic认证系统即可,AuthName是你提供给认证域一个任意的名称,大多数浏览器会向用户询问用户名和密码的窗口中显示这个名称,最后,使用AuthUserFile指定使用htpasswd城建的密码文件的位置。但是如果只有以上这些还是不够的,即没有指定向那些用户要求输入用户名和密码,最简单的方式是向所有的用户要求用户名和密码,那么添加Require valid-user,就是告诉Apache任何用户都要进行认证。如果是对多个仓库,需要在httd.conf的Location区块中再添加一个控制语句AuthzSVNAccessFile,他后面接权限控制文件,在这里设置为authz.conf,内容,我设置为:
[root@localhost ~]# cat /svn/authz.conf
[groups]
admin = apache
[firstrepo:/]
@admin = rw
usera = rw
[secondrepo:/]
@admin = rw
userb = rw
[/]
* = r

那么现在,httpd.conf中Location区块的就变成这个样子了(单仓库没有SVNParentPath,SVNListParentPath,AuthzSVNAccessFile,只有SVNPath):
#/svn这个名字可以随便换,换成/也是可以的,只要自己感觉方便
DAV   SVN
SVNListParentPath  on
SVNParentPath   /svn/svnroot
AuthType  Basic
AuthName  ”Subversion repository”
AuthUserFile  /svn/passwd.conf
Require   valid-user
AuthzSVNAccessFile /svn/authz.conf


3)创建仓库(repository)
创建仓库需要用的svnadmin命令,具体操作如下
[root@localhost ~]# /usr/local/subversion/bin/svnadmin create /svn/svnroot/firstrepo #创建仓库
[root@localhost ~]# ls /svn/svnroot/firstrepo/         #创建完成后,可以查看一下,在firstrepo这个仓库下多了很多文件和目录
conf  db  format  hooks  locks  README.txt
[root@localhost ~]# /usr/local/subversion/bin/svnadmin create /svn/svnroot/secondrepo #再创建一个,并查看一下
[root@localhost ~]# ls /svn/svnroot/secondrepo/
conf  db  format  hooks  locks  README.txt
如果是单个仓库,那么,只创建一个仓库就行了。
现在来查看一下刚才创建的两个库,在浏览器地址中输入http://server IP/svn(注意这里为什么要输入svn,是因为httpd.conf中指定的),输入用户名和密码后,就可以看到刚才创建的两个库了,但是这两个库中没有任何内容。呵呵^_^
其他需要注意事项:
(1)单个版本库的httpd.conf Locatioon区中SVNPath /svn/svnroot/firstrepo跟/usr/local/subversion/bin/svnadmin create /svn/svnroot/firstrepo目录要一样,要不会很挠头的!!多个版本库知道svn的父目录,这里是SVNParentPath /svn/svnroot 就可以了
(2)如果是对多个仓库,需要在httd.conf的Location区块中再添加一个控制语句AuthzSVNAccessFile,他后面接权限控制文件。单个版本库不需要,多个版本库要设置不同版本库的权限
(3)目录svnroot目录的权限设置成755
4)向仓库中导入数据
刚才我们查看了,仓库中没有任何数据,是应为我们没有导入任何数据,现在开始导入数据了,哈哈
首先看一下命令格式:svn import /要导入仓库的路径 file:///svn/svnroot/仓库名 -m “一些说明”
[root@localhost ~]# /usr/local/subversion/bin/svn import /etc file:///svn/svnroot/firstrepo -m “the first repository”
提交后的版本为 1。
#以上命令是将/etc这个目录中的内容导入(import)到第一个仓库中(firstrepo),第一次提交后的还会出现 “提交后的版本为 1。”,每提交一次版本更新一次
[root@localhost ~]# /usr/local/subversion/bin/svn import /home file:///svn/svnroot/secondrepo/ -m “Second repository”
#以上命令是将/home目录中的内容(import)到第二个仓库(secondrepo)中。

查看一下刚才导入数据的仓库,在浏览器地址中输入http://server IP/svn(注意这里为什么要输入svn,是因为httpd.conf中指定的),输入用户名和密码后,就可以看到刚才创建的两个库了,仓库中已经存在我们导入的数据了, 说明导入成功了!^_^!

以下部分我没有配置,网上搜索到的,以后也许能用到,先记下来:
版本库服务器的同步
  1.单版本库跟服务器目录的同步:
进入到版本库下的hooks下去
svn checkout file:///版本库的目录 /本地要取出的目录
[root@localhost ~]# /usr/local/subversion/bin/svn checkout file:///svn/svnroot/firstrepo/ /home/export
  Cd /data/svn/svnroot/www/hooks
  Vi post-commit

#!/bin/sh
SVN=/usr/local/subversion/bin/svn
WEB=/data/www #web目录要更新同步的目录
$SVN update –username apache –passwd 123456 $WEB      #这里面的username跟password一定要有读写的权限
   
  Chmod 757 post-commit #给它可执行的权利
  2.多版本更服务器目录的同步
  进入到版本库下的hooks下去
svn checkout file:///版本库的目录 /本地要取出的目录
Cd /data/svn/svnroot/www/hookd
  Vi post-commit

#!/bin/sh
SVN=/usr/local/subversion/bin/svn
$SVN update –username apache –passwd 123456 /home       #里面的username跟password一定要有读写的权限
   
  Chmod 757 post-commit #给它可执行的权利

注意:
1.svn checkout file:///版本库的目录 /本地要取出的目录 ——>这步一定要做要不会同步修改的
2.目录位置一定要对应好了,否则出现问题能累死人

希望这篇文章对各位有用,减少各位的麻烦,祝福各位好运!

Related posts:

   1. FreeBSD下svn(subversion)的安装部署(转)
   2. linux下apache编译安装和基于域名 基于IP地址 基于端口的虚拟主机的设置
   3. mysql php源码安装和配置步骤 Discuz和Ucenter安装配置
   4. linux下安装awstats7.0

你可能感兴趣的:(Apache,Linux)