jiay 发表于 2018-11-23 07:25:22

Linux上配置apache+svn+trac

  Subversion是新一代的版本控制工具,它是一个自由、开放源码的版本控制系统。它是一个通用系统,可用来管理任何类型的文件, 其中包括程序源码。Subversion是近年来崛起的版本管理工具,被誉为是cvs的接班人。

  最近帮公司在一台服务器上安装了Subversion和Trac,由于服务器是公司前几年买的比较老,型号是HP ML350,拿到手一看,操作系统竟然还是Fedora Core>  想重装OS,可是没办法啊服务器的OS安装比较麻烦,重装了的话可能涉及到驱动方面的安装,太老了搞不好就毁了,到时再找HP的技术支持那就搞大了,不好向老大交代

  ,那就只好老老实实的自己编译安装吧,说了一大堆废话,下面把我的安装步骤讲一下吧,呵呵~~
  首先:下载Apache,Subversion和Trac的安装包,Apache2.2.8,subversion1.4.6和trac-0.10.4。Apache是web服务器,用来通过web访问subversion。安装包都可以从官方网站上下载。
  下载地址:
  http://apache.mirror.phpchina.com/httpd/httpd-2.2.8.tar.gz
  http://subversion.tigris.org/downloads/subversion-1.4.6.tar.gz
  http://subversion.tigris.org/downloads/subversion-deps-1.4.6.tar.gz
  http://ftp.edgewall.com/pub/trac/trac-0.10.4.tar.gz
  1. 编译安装Apache:
  //解压apache2安装包
  # tar zxvf httpd-2.2.8.tar.gz
  //进入解压后的目录
  # cd httpd-2.2.8
  //配置apache
  # ./configure --enable-dav --enable-so --enable-ssl --enable-maintainer-mode --prefix=/usr/local/apache2 --enable-mods-shared=all
  //进行编译
  # make
  //编译后进行安装
  # make install
  //安装完毕,进行测试。先修改apache配置文件
  # vi /usr/local/apache2/conf/httpd.conf
  将ServerName 修改为ServerName:80
  //启动apache服务
  # /usr/local/apache2/bin/apachectl start
  //打开浏览器
  http://localhost/
  ,如果出现Apache的测试页面,可以看到It works!说明apache已经可以正常工作了。
  2. 编译安装Subversion:
  PS:在安装之前先确认你的OS上已经安装了python和swig,如果没有安装的话可以下载source code或rpm包来安装,因为我的OS上原本已经安装了所以我没有去重新安装,我安装的版本是:python-2.3.3和swig-1.3.19
  //解压subversion安装包
  # tar zxvf subversion-1.4.6.tar.gz
  # tar zxvf subversion-deps-1.4.6.tar.gz
  //进入解压后的目录
  # cd subversion-1.4.6
  //配置subversion
  # ./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl --with-zlib --enable-maintainer-mode --without-berkeley-db PYTHON=/usr/bin/python --with-swig=/usr/bin/swig --enable-shared --enable-static --enable-swig-binding=python --with-included-apr
  //进行编译
  # make
  //编译后进行安装
  # make install
  经过上面的步骤mod_dav_svn.so and mod_authz_svn.so将会被copy到/usr/local/apache2/modules/下,
  同时在 /usr/local/apache2/conf/httpd.conf will be added the following section:
  LoadModule dav_svn_module   modules/mod_dav_svn.so
  LoadModule authz_svn_module   modules/mod_authz_svn.so
  检查一下是否都正确,如果没有的话可能就要手动加进去。
  注意一下运行. /configure时加的这几个参数PYTHON=/usr/bin/python --with-swig=/usr/bin/swig --enable-shared --enable-static --enable-swig-binding=python,开始的时候编译svn的时候没有加这几个参数,单独使用svn 都没问题,但是后面安装好trac后却怎么也不行,打开网页一直有错误,从Browser访问Trac的时候,出现了下面的错误:
  ---------------------------------------------------------------------------------------------
  Python Traceback
  Traceback (most recent call last):
  File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 387, in dispatch_request
  dispatcher.dispatch(req)
  File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 191, in dispatch
  chosen_handler = self._pre_process_request(req, chosen_handler)
  File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 263, in _pre_process_request
  chosen_handler = f.pre_process_request(req, chosen_handler)
  File "/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 73, in pre_process_request
  self.get_repository(req.authname) # triggers a sync if applicable
  File "/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 92, in get_repository
  % self.repository_type)TracError: Unsupported version control system "svn"
  ---------------------------------------------------------------------
  上网找了半天看见一片文章上说make svn的时候要加上这几个参数"PYTHON=/usr/bin/python --with-swig=/usr/bin/swig --enable-shared --enable-static --enable-swig-binding=python"
  同时执行了上面的make && make install后还要编译安装Subversion SWIG Python bindings
  Swig-py的安装说明在subversion-1.4.6/subversion/bindings/swig/INSTALL文件里。说的比较详细,要做的事情如下:
  #cd subversion-1.4.6
  #make swig-py
  #make install-swig-py
  那么你可以看到swig-py的install目录是/usr/local/subversion/lib/svn-python。用如下命令讲这个扩展包扩展到python:
  #echo /usr/local/subversion/lib/svn-python >/usr/lib/python2.3/site-packages/subversion.pth
  剩下的就是测试svn的swig-py包是不是能work了,很简单。
  #python
  >>>import svn.repos
  如果不报错,就完事大吉了。
  如果报错,那么检查几件事情:
  I. subversion的configure是不是enable了shared和static,是不是带--with-swig;
  II. libsvn_swig_py-x.so是否存在于/usr/local/subversion/lib目录;
  III. /usr/local/subversion/lib是否已经增加到ld.so.conf文件 (/etc/ld.so.conf)
  IV. 请使用ldconfig -v |grep swig来检查是否有swig的下列动态库
  libsvn_swig_py-1.so.0 -> libsvn_swig_py-1.so.0.0.0
  如果一切正常,这个安装就完成了。
  安装完成后,运行svnserver --version确认版本为1.4.6。
  SVN服务器安装结束.
  3. 配置svn
  最好不要让root用户参与到svn的权限管理和日常的运行和维护工作中来,所以我们建立一个用户(如svn)
  同时为了处理好权限的问题,我们可以建立一个组(如svnrw),其他希望使用svn的用户加入这个组
  在root权限下用下面的命令创建用户和组:
  #groupadd svnrw
  #useradd svn -g svnrw
  #passwd svn
  然后切换到用户svn来创建svn仓库,对svn进行配置
  首选选择一个目录位置作为svn仓库的存放位置,在我的例子中是讲/home/svn作为存放位置
  //创建版本库"my_project",默认指定仓库的文件格式为fsfs
  #svnadmin create /home/svn/my_project
  //修改一些权限
  chown -R svn:svnrw /home/svn
  chmod -R g+w home/svn/my_project
  chmod g+s home/svn/my_project/db
  //接下来修改Apache配置文件
  # vi /usr/local/apache2/conf/httpd.conf
  //在文件末尾添加
  ### svn settings
  #
  DAV svn
  SVNListParentPath on       ----允许在网页上显示svn父目录list
  SVNParentPath /home/svn    ----/home/svn是我这边的SVN的父目录
  AuthType Basic                               ----连接类型设置
  AuthName "Subversion Repository"               ----连接框提示
  AuthUserFile /etc/svntrac.htpasswd         ----用户配置文件
  Require valid-user
  //这里设置SVNParentPath而不是SVNPath的好处是可以几个repository同时访问
  //加了LimitExcept这样匿名用户可以浏览,check out代码,但是不能commit, 认证用户有commit权限
  //其中svntrac.htpasswd文件是通过htpasswd命令来创建的,第一次设置用户时使用-c表示新建一个用户文件
  # htpasswd -c /etc/svntrac.htpasswd svn
  New password: xxxxxx
  Re-type new password: xxxxxx
  Adding password for user svn   //添加成功
  另外要修改 apache进程的权限:因为所有跟版本库传输的操作都是通过apache进程进行的,所以即使你给svn用户设置了很大的权限,但是apache进程没 有访问版本库或者相关文件的权限也没有用,apache进程的权限设置在 /usr/local/apache2/conf/httpd.conf 文件中配置,找到文件中的这两行:
  User daemon    //将daemon用户改为svn,让apache进程以svn身份运行
  Group daemon   //将daemon组改为svnrw
  //重启apache
  # /usr/local/apache2/bin/apachectl restart
  //打开浏览器访问
  http://localhost/svn
  ,如果有东西显示就说明成功。
  接下来可以import代码文件了,可以在其他机子上完成:
  svn import -m "Hello, my project" http://svn_server_address/svn/my_project
  说明:
   是导入的路径,不写就是当前路径
  path目录下,需要建立三个目录: trunk, tags, branches (类似CVS)这不是必须的,但是这对今后的项目管理很有好处
  把最初的代码放在trunk目录下!
  import之后用command "svn co http://svn_server_address/svn/my_project"就该可以check out刚才import的代码了
  应该说svn和apache就处理好了!接下来就是安装配置Trac....
  4. 安装配置Trac
  Trac
  是一个非常优秀的源代码浏览工具,现在也很流行。在安装前,需要注意的是,Trac需要以下几个软件的支持,安装前一定要先安装好。
  要预先安装的软件包在trac-0.10.4的INSTALL文件里有列出,copy如下:
  * Python, version >= 2.3.
  + Please keep in mind, that for RPM-based systems you will also need
  python-devel and python-xml packages.
  * Subversion, version >= 1.0. (>= 1.1.x recommended)
  * Subversion SWIG Python bindings (not PySVN).
  * PySQLite, version 1.x (for SQLite 2.x) or version 2.x (for SQLite 3.x)
  * Clearsilver, version >= 0.9.3 (0.9.14 recommended)
  * A web server capable of executing CGI/FastCGI scripts, or Apache HTTPD with
  mod_python. (Trac also comes with a standalone server, but its use is not
  recommended for use in a production environment.)
  以上各包,一个也不能少,除非你不用apache来做web(而使用tracd,这是trac本身都不建议使用的httpd),当然我们用CGI方式来运行python脚本,所以省掉一个mod_python.
  补充说明下,光有PySQLite而没有SQLite显然是不行的
  由于我使用的是Fedora 2的OS,我直接安装的是针对它的rpm包:
  sqlite-2.8.16-1.1.fc2.rf.i386.rpm
  sqlite-devel-2.8.16-1.1.fc2.rf.i386.rpm
  python-sqlite-1.0.1-1.1.fc2.rf.i386.rpm
  clearsilver-0.10.1-1.1.fc2.rf.i386.rpm
  python-clearsilver-0.10.1-1.1.fc2.rf.i386.rpm
  这几个软件包可以在
  http://www.rpmfind.net
  和
  http://www.rpmfind.com
  上找到适合自己系统的版本,下载后直接安装即可。当然你也可以通过下载源码编译安装这些包。
  然后开始安装trac:
  #tar zxvf trac-0.10.4.tar.gz
  #cd trac-0.10.4
  #python ./setup.py install
  关于trac本身的安装就这么简单,详情请参考trac-0.10.4/INSTALL文档。其中还有后续章节所涉及内容的详述,包括如何使用 trac-admin初始化一个trac项目,如何启动tracd服务,以及如何配置使用apache来提供trac的web服务。
  trac安装的缺省路径是/usr,trac-admin和tracd都在/usr/bin目录,trac的模版等都在/usr/share/trac目录。
  使用trac-admin命令可以初始化一个trac项目,一个trac项目对应一个SVN repository,这是应用中应该注意的。
  #trac-admin /home/trac/my_project initenv
  这个命令即可启动初始化/home/trac/my_project项目的交互进程,是建立trac项目,运行后提示如下:
  Project Name > 输入项目名称
  Database connection string > 因为前面使用的是sqlite 所以直接回车即可
  Repository type >仓库类型svn回车
  Path to repository >仓库路径 输入刚才的/home/svn/my_project
  Templates directory > 模板路径,还是回车
  初始化完成后,可以通过修改/home/trac/my_project/conf/trac.ini来改变设置,甚至可以改变svn repository的设置,你需要做的只是在改完后使用trac-admin /home/trac/my_project resync来重新同步trac项目和svn repository。
  更细节的配置内容请参考trac相关文档。
  顺便修改一下权限
  chown -R svn:svnrw /home/svn
  trac有两种方式提供web服务,其一是trac自带的tracd,它本身就是一个httpd,启动方式如下:
  tracd --port 8000 /home/trac/my_project
  或者你有两个项目,则在后面加一个目录:
  tracd --port 8000 /home/trac/my_project1 /home/trac/my_project2
  这种方式很简单,但问题是trac本身都不建议你用,因为tracd不够完善.
  但不管怎么样,你可以试用一下tracd,看看你的安装配置是不是都可以work了,毕竟加上apache,是件相对复杂很多的事情,所以,在这之前用tracd来检验一下还是必要的。
  启动服务后,你就可以在一台客户机上使用浏览器来来浏览你开启的web服务了。比如:
  http://localhost:8000/my_project
  如果可以看到trac的默认首页,就说明是OK的,然后就开始将trac集成到apache.
  把trac集成的到apache有很多方法,可以使用mod_python模块,可以使用cgi模块或者fast-cgi模块
  我这里使用了cgi模式,这个方法比较简单。如果你需要速度快一点,那使用fast-cgi好了.
  首先把trac源代码目录中cgi-bin目下的两个文件拷贝到你存放cgi的地方,比如/usr/local/apache2/cgi-bin目录下。
  然后修改apache的配置文件httpd.conf
  vi /usr/local/apache2/conf/httpd.conf
  然后添加以下内容:
  #
  ### Trac settings
  #
  Alias /trac/chrome/common "/usr/share/trac/htdocs"
  Options Indexes MultiViews
  AllowOverride None
  Order allow,deny
  Allow from all
  ScriptAlias /trac /usr/local/apache2/cgi-bin/trac.cgi
  SetEnv TRAC_ENV_PARENT_DIR "/home/trac"
  AuthType Basic
  AuthName "Trac Login"
  AuthUserFile /etc/svntrac.htpasswd
  Require valid-user
  密码文件svntrac.htpasswd我们和svn共享,这样就只需要管理一套密码了.
  保存,退出,重启apache.再访问
  http://localhost/trac
  看看是不是可以得到trac的默认首页,然后点击"browse source",你应该可以看到svn仓库里的资源.
  这里需要注意的是:
  SetEnv TRAC_ENV "/home/trac/my_project"   #单个项目时用这样写
  SetEnv TRAC_ENV_PARENT_DIR "/home/trac"    #多个项目时这样写
  还有如果多个项目使用一个密码文件可以这样配置"trac/*/login",单个的话就"tra/login"
  对于多个项目的话当在浏览器里输入
  http://localhost/trac
  时显示的是一个简单的Available Projects页面,如果希望修改这个页面,请编辑/usr/share/trac/templates/index.cs, 下面是我根据我们项目需要而更改的index.cs文件
  Available Projects Of XXX Team
  Wiki Navigation
  XXX Team's Projects

  2.1.21 --- For ss project,>  2.1.27 ---- My example project
  2.2.0 code ---- My example project
  Sol ---- Sol project
  Real Case ---- Real project
  XXX Team's Member
  xxx
  xxx
  Powered by Trac 0.10.4
  By Edgewall Software.
  Visit the Trac open source project at
  http://trac.edgewall.org/
  上述只是一个例子,个人可以根据需要修改。
  管理Trac访问许可
  Trac的许可权限管理简单而有效,它可通过trac-admin命令来管理。用trac-admin可管理用户的许可权限,但用户的管理是通过 Apache的htpasswd命令设置的,根据上面的Apache CGI配置,用户名和密码是存放在/etc/svntrac.htpasswd文件中。下面这个命令可用来列出当前有效的许可权限和已设置的许可权限。
  ~# trac-admin /home/trac/my_project permission list
  User    Action
  --------------------------
  anonymous   BROWSER_VIEW
  anonymous   CHANGESET_VIEW
  anonymous   FILE_VIEW
  anonymous   LOG_VIEW
  anonymous   MILESTONE_VIEW
  anonymous   REPORT_SQL_VIEW
  anonymous   REPORT_VIEW
  anonymous   ROADMAP_VIEW
  anonymous   SEARCH_VIEW
  anonymous   TICKET_CREATE
  anonymous   TICKET_MODIFY
  anonymous   TICKET_VIEW
  anonymous   TIMELINE_VIEW
  anonymous   WIKI_CREATE
  anonymous   WIKI_MODIFY
  anonymous   WIKI_VIEW
  Available actions:
  BROWSER_VIEW, CHANGESET_VIEW, CONFIG_VIEW, FILE_VIEW, LOG_VIEW,
  MILESTONE_ADMIN, MILESTONE_CREATE, MILESTONE_DELETE, MILESTONE_MODIFY,
  MILESTONE_VIEW, REPORT_ADMIN, REPORT_CREATE, REPORT_DELETE, REPORT_MODIFY,
  REPORT_SQL_VIEW, REPORT_VIEW, ROADMAP_ADMIN, ROADMAP_VIEW, SEARCH_VIEW,
  TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, TICKET_MODIFY,
  TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE,
  WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW
  上面列出的内容是还没进行许可权限设置时的情况,Available actions段的内容就是有效许可权限的列表,每个权限的解析可查询TracGuide中的TracPermission节的内容。其中 TRAC_ADMIN许可相当于Linux中的root用户,拥有最高的权限。如果我们要把TRAC_ADMIN许可授予jims用户,则可这样设置:
  ~# trac-admin /home/trac/my_project permission add jims TRAC_ADMIN
  WIKI_ADMIN是WIKI系统的管理员,具有WIKI_CREATE,WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW权限。也就是WIKI页面的创建、删除、修改和查看四种权限,授予方式同上。
  删除用户的许可可用remove关健字,如:
  ~# trac-admin /home/trac/my_project permission remove jims TRAC_ADMIN
  在Trac的权限管理中可以设置组以简化权限配置,下例将设置一个admin组,具有TRAC_ADMIN许可权限,把jims和ringkee两个用户加入到该组中,使他们也具有TRAC_ADMIN许可权限:
  ~# trac-admin /home/trac/my_project permission add admin TRAC_ADMIN
  ~# trac-admin /home/trac/my_project permission add jason admin
  ~# trac-admin /home/trac/my_project permission add jims admin
  在Trac的用户中,有两个默认的用户,一个是anonymous,表示匿名用户;一个是authenticated,表示所有已通过验证的用户。我们可以把许可权赋予这两个用户,从而简化我们的许可权限配置。
  备份和恢复Trac
  Trac系统的备份和恢复也可使用trac-admin工具来完成,还可支持热备份。备份命令如下:
  ~# trac-admin /home/trac/my_project hotcopy ~/backup
  执行该命令时,Trac会自动锁住SQLite数据库,并把/home/trac/my_project目录拷贝到~/backup目录。恢复备份也很简 单,只需停止Trac进程,如Apache服务器或tracd服务器。接着把~/backup整个目录恢复回/data/trac目录就可以了。
  到此trac也配完了。
  关于svn的备份可以参考
  http://hi.baidu.com/zhangwf/blog/item/f94ca8518a5aa38a8d54305b.html
  我因为是要从一台原来的svn server 更换到新的server, 所以我是把原来svn server上的svn 仓库直接进行备份动作后拷贝到新的svn server的仓库中来的。
  本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11995/showart_1011475.html

页: [1]
查看完整版本: Linux上配置apache+svn+trac