日历

2017年十二月
« 9月    
 123
45678910
11121314151617
18192021222324
25262728293031

最近评论

    linux企业应用

    linux下安装subversion1.6.5和apache2

    以下安装是在RHEL5.5默认安装的情况下,以root身份进行安装!
    这个实验我安装了n次,最后总是不成功,因为涉及到略多的软件和配置。下面是安装步骤和配置,自己记下来。希望给下次配置的时候不要像以前那么费劲了!

    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,在配置之前,首先来了解一下配置语句。
    主要配置语句如下:
    <Location /svn>    意思是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
    </Location>

    那么现在首先配置最简单的版本库,那就是单版本库
    1)如果只配置一个单版本库,且希望任何人都可以访问你的服务,那么配置语句设置成以下就可以了
    LoadModule dav_svn_module     modules/mod_dav_svn.so
    LoadModule authz_svn_module   modules/mod_authz_svn.so
    <Location /www> #如果进行访问,在浏览器里输入:http://server IP/www,就可以直接访问了
    DAV svn         #告诉Apache使用svn模块响应URL的请求
    SVNPath /svn/svnroot/www # 这里是版本库所在的路径
    </Location>
    如果是配置多版本库,而且允许任何人访问你的服务,配置语句如下:
    <Location /svn>
    DAV svn
    SVNLISTParentPath on     #此句,最好加上,否则在浏览器中输入http://server IP/sev的时候将看不到,除非用户记下了版本库的名字,哈哈
    SVNParentPath /svn/svnroot #注意这里是SVNParentPath了,而不是SVNPath,^_^
    </Location>
    以上是配置单版本库和多版本库,但是一定要注意一个问题,单版本库和多版本库千万不能同时存在,否则,就会出现问题,最常见的问题如下:
     <?xml version=”1.0″ encoding=”utf-8″ ?>
    – <D:error xmlns:D=”DAV:” xmlns:m=”http://apache.org/dav/xmlns” xmlns:C=”svn:”>
      <C:error />
      <m:human-readable errcode=”2″>Could not open the requested SVN filesystem</m:human-readable>
      </D:error>
    解决的方法就是只保留一个版本库,即,删除或注释掉单个版本库,删除或注释掉多个版本库的配置。如果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):
    <Location /svn> #/svn这个名字可以随便换,换成/也是可以的,只要自己感觉方便
    DAV   SVN
    SVNListParentPath  on
    SVNParentPath   /svn/svnroot
    AuthType  Basic
    AuthName  “Subversion repository”
    AuthUserFile  /svn/passwd.conf
    Require   valid-user
    AuthzSVNAccessFile /svn/authz.conf
    </location>

    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中<Location /svn>指定的),输入用户名和密码后,就可以看到刚才创建的两个库了,但是这两个库中没有任何内容。呵呵^_^
    其他需要注意事项:
    (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中<Location /svn>指定的),输入用户名和密码后,就可以看到刚才创建的两个库了,仓库中已经存在我们导入的数据了, 说明导入成功了!^_^!

    以下部分我没有配置,网上搜索到的,以后也许能用到,先记下来:
    版本库服务器的同步
      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.目录位置一定要对应好了,否则出现问题能累死人

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

    评论已关闭。