subversion svn apache linux
一、 工具准备
Apache Web服务器:httpd-2.2.4.tar.bz2 <>
Subversion源码包及依赖包:subversion-1.4.3.tar.bz2 < <>
(下面假设apache和svn源码都解压到了/home/tmp下)
Apr-1.2.8.tar.gz
Apr-util-1.2.8.tar.gz
二、安装Apache
Apache的安装就根平时安装Apache没什么两样,都记得要打开dav模块和动态模块选项。安装安装命令如下:
1、 安装apache apr
# tar -zvxf apr-1.2.8.tar.gz
# cd apr-1.2.8
# ./configure -prefix=/usr/local/apr
# make
# make install
2、 安装apache apr-util
# tar -zvxf apr-util-1.2.8.tar.gz
# cd apr-util-1.2.8
# ./configure -prefix=/usr/local/apr-util -with-apr=/usr/local/apr
# make
# make install
3、安装Http
# tar xfj httpd-2.2.4.tar.bz2
# cd httpd-2.2.4
# ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all --enable-cgi --enable-rewrite --enable-deflate --enable-dav --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-mpm=worker
# make
# make install
安装完成后使用命令 apachectl -l查看安装的模块,如果看到mod_dav.so的模块证明在-enable-dav这步操作成功。因为这个是apache的验证模块,如果不能正确安装那下面的操作就无效。
三、安装Subversion
SVN的安装一定要注意:
* SVN 依赖的APR版本要正确。如果Apache为2.0.x,对应的APR版本应为0.9.x;Apache为2.2.x,对应的APR版本应为1.2.x。由于subversion-deps包里的APR是0.9.x的,因此编译svn时要删除从deps里解压出来的apr, apr-util,改而使用apache 2.2里提供的。
* 如果apache不是安装在默认路径,configure必須加上--with-apxs选项,如:./configure --with-apxs=/home/apache2/bin/apxs
1、安装命令如下:
# tar xfj subversion-1.4.3.tar.bz2
# tar xfj subversion-deps-1.4.3.tar.bz2
# subversion-deps的文件也会解压到subversion-1.4.3目录中
# cd subversion-1.4.3
# rm -rf apr
# rm -rf apr-util
# ln -s /root/soft/httpd-2.2.4/srclib/apr apr
# ln -s /root/soft/httpd-2.2.4/srclib/apr-util apr-util
# ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs
# make
# make install
以上的编译通常情况都能顺利编译成功,得到相应的可执行程序。我后来编译发现一个问题,这样软连过来的文件,有的时候会报文件缺少的错误,所以我这样做,在编译的过程中指定路径。
# ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/uar/local/apa-util
检查WebDav for SVN 模块:
# cd /usr/local/apache/modules
检查 mod_dav_svn.so 和 mod_authz_svn.so,如果上述第2步编译成功,这两个模块应该可以看到。
2、 创建svn用户:
# groupadd svn
# useradd -g svn svn
以后代码库的创建维护等,都用这个帐户来操作。
3、 vi /etc/profile
准备环境变量:
$ SVN_HOME=/usr/local/subversion
$ export SVN_HOME
$ PATH=$PATH:$SVN_HOME/bin
$ export PATH
创建版本库:
以svn用户登录
cd /home/svn
上述命令创建了版本库sandbox,用于测试:
$ svnadmin create --fs-type fsfs sandbox
还可以再创建工程的版本库:
$ svnadmin create --fs-type fsfs projects
创建启动Subversion的脚本:
$ echo '/usr/local/subversion/bin/svnserve -d -r /home/svn/' > startup.sh
$ chmod +x startup.sh
$ ./startup.sh
将启动脚本放置到开机自动启动脚本中:
以root身份修改文件:/etc/rc.d/rc.local,添加以下文字:
su -c /home/svn/startup.sh svn
4、配置Apache Httpd
# cd /usr/local/apache/conf
# vi httpd.conf
加载WebDav for SVN模块:
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
添加最后两行(默认编译后,configure会自动加上):
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
修改启动httpd的默认用户:
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
#User daemon
#Group daemon
User svn
Group svn
将执行httpd的用户和组设为svn,这样做是为了让httpd进程能访问版本库的数据。
在Apache Http Server里配置虚拟主机:
将httpd.conf中的虚拟主机的注释去掉,然后编辑/usr/local/apache/conf/extra/httpd-vhost.conf。
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
添加虚拟主机svn.yourcompany.com,当然,这个主机名需要使用你自己的域名。
# vi /usr/local/apache/conf/extra/httpd-vhost.conf
ServerAdmin
ServerName 192.168.0.8
ErrorLog logs/localhost-error_log
CustomLog logs/localhost-access_log common
DAV svn
SVNListParentPath on
SVNParentPath /home/svn
AuthType Basic
AuthName “Subversion Repository”
AuthUserFile /home/svn/passwd
Require valid-user
5、 创建用户密码文件
# cd /home/svn
# /usr/local/apache/bin/htpasswd -cm passwd harry
# New password:****
# Re-type new password:****
# Adding password for user harry
我们创建了一个用户harry ,密码123456的页面验证。
# /usr/local/apache/bin/htpasswd -m passwd fengjie
# New password:****
# Re-type new password:****
# Adding password for user fengji
(htpasswd命令。第一次用参数-c创建文件;参数-m是对密码进行MD5加密)
至此我们就把subversion安装完毕,现在可以在页面<>地址访问了,然后输入我们设置的用户名和密码,进入。
四、以上我们讲了subversion和apache的结合使用。Subversion是连接方式可以分多种,如下图
协议 访问方法
通过本地磁盘访问。
与Apache组合,通过WebDAV协议访问。
同上,但支持SSL协议加密连接。
svn:// 通过svnserve服务自定义的协议访问。
svn+ssh:// 同上,但通过SSH协议加密连接
我们上面介绍的是http的结合方式,如果要用svn://的方式,其实当我们安装完成后就已经可以使用这种方式了,但是它的控制文件是在你新建的项目中做设置。
1、svn的连接方式,我这里介绍是通过另外一台linux机对svn的服务器进行连接,服务器安装同上,我这里略过不说,我们这里主要讲通过liunx客户端来连接.
# yum search svn
# yum install mod_dav_svn
检查:[root@localhost ~]# rpm - qa | grep svn
mod_dav_svn-1.1.4-2.ent
(注:使用yum升级安装CentOS可以使用,红帽不能使用这个命令,因为redhat升级不是免费的)
安装完毕
检查// telnet 192.168.100.191 3690
成功显示:
[root@localhost ~]# telnet 192.168.0.15 3690
Trying 192.168.0.15...
Connected to 192.168.0.15 (192.168.0.15).
Escape character is '^]'.
( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline svndiff1 absent-entries ) ) )
失败显示:出现这样的错误“[root@localhost ~]# telnet 192.168.0.17 3690
Trying 192.168.0.17...
telnet: connect to address 192.168.0.17: No route to host
telnet: Unable to connect to remote host: No route to host“
解决方案:需要关闭服务器防火墙
防火墙关闭方法 setup
或者在防火墙里开启3690端口
我们在/home/svn/下建了两个库。就是projects和sanbox。如何创建在上面有
2、如果我么想用svn模式访问,就要在svn服务器端的设置。
# cd /hom/svn/projects/conf
# vi service.conf 进入service.conf文件
[general]
# anon-access = read
# auth-access = wirte
# password-db = passwd
# authz-db = authz
# realm = My First Tepository
其中anon-access表示匿名用户权限,auth-access表示认证用户的权限设置,password-db指向帐号密码的文件位置,可以使用绝对路径。Authz-db是认证用户的设置。Realm数显示的连接信息。正常情况下我们修改把#去掉就可以了,如果不让匿名用户使用就设置anon-access=none
3、 接着设置密码文件
# vi /home/svn/projects/conf/passwd
[users]
# harry = sallyssecret
# sally = sallyssecret
我们比如用了harry 用户,但是密码可以设置成别的比如:harry = 123456想开几个用户都从这里设置。
4、 设置用户访问策略文件
# vi authz
[groups]
#harry_and_sally = harry,sally
[/svn/projects]
#harry = rw
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
分了一个组:harry_and_sally
[groups]
#harry_and_sally = harry,sally
在目录下制定权限
[/svn/projects]
# * = #所有用户禁止对/svn/projects库进行访问
#harry = rw #只打开harry用户对/svn/projects的读写权限
* = 表示禁止所有用户访问/svn/projects目录。Harry = rw只允许harry用户对/svn/projects有读写的权限。
定义projects库,下的/baz/fuz文件的访问权限
# [projects:/baz/fuz] #定义projects库下/bac/fuz文件的访问权限
# @harry_and_sally = rw #打开组的访问权限对projects库下文件/baz/fuz的访问
# * = r #所有用户对projects库下文件/baz/fuz的只读权限
这样可以按照我们的方式去配置服务器的访问权限。
可以在linux客户端访问。
# svn import svn://192.168.7.233/projects /root/myproject -m “first’
这样吧myproject的内容上传到服务器的 project库中。可以查看svn list -verbose svn://192.168.7.233/project
Subversion完全命令手册
服务器端命令
1、 创建仓库(Repository)
Svnadmin create /路径/projects,svnadmin是subversion系统管理命令。
2、 添加新项目(import new project)
Svn import /home/svn/projects <> -m “comment”
3、 检出(checkout)项目
Svn checkout <> projects
4、 列出仓库中的项目(list)
Svn list -verbose <>
5、 状态查询(status)
Svn status
Svn status projects/test/fish.c 查看那某个文件的信息内容
6、 添加文件或目录(add)
Svn add
7、 删除文件或目录
Svn delete
8、 提交(commit)
Svn commit <>
9、 更新(update)
Svn update 更新仓库中的文件到本地
10、 标签和特出版本项目
使用copy命令
Svn copy <> < 用于创建某个特定版本的快照
Svn list <>查看那某个版本的内容
11、 另一种查看方式
Svn diff 它会精确的找出你所做的修改。它会打开你文件中的内容
12、 检查日志
Svn log
svnadmin list-unused-dblogs
svnadmin create
svnadmin dump
svnadmin help
svnadmin load
svnadmin lstxns
svnadmin recover
svnadmin rmtxns
svnadmin setlog
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook help
svnlook history
svnlook info
svnlook log
svnlook proplist
svnlook tree
svnlook youngest
客户端的命令
svn add
svn cat
svn checkout
svn cleanup
svn commit
svn copy
svn delete
svn diff
svn export
svn help
svn import
svn info
svn list
svn log
svn merge
svn mkdir
svn move
svn propdel
svn propedit
svn propget
svn proplist
svn propset
svn resolved
svn revert
svn status
svn switch
svn update
阅读(1838) | 评论(0) | 转发(0) |