其实Linux下SVN还是比较简单, 在网上, 一搜就是一大把的资料。 但很少有人一次安装成功, 因为Linux中的环境太复杂, 很容易环境冲突。
linux svn一般依赖于httpd(Apache Web服务器).
svn独立方式
当然svn还有独立方式, 即不需要apache服务器, 即跳过下面的apache安装, 及配置中关于httpd.conf部分。
在编译subversion时
$./configure -prefix=/opt/svn -without-berkeley-db -with-zlib
(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db)
安装apache
- 检查apache是否安装。
一般server发行版的linux会附带apache web 服务器。 所以需要先看看是否安装了apache, 及安装的版本号。- 通过可执行文件是否存在: 在当前路径下, 转入 $ httpd(apachectl) -v, 如果存在, 那么输入$ whereis httpd(apachectl), 找出其路径, 再通过$ file命令查其安装路径。如果不存在命令; 那么检查/etc/init.d/httpd是否存在, 如果存在, 查看安装路径。 通过vi(m)等工具查看其内容, 可以找到路径。
- 通过发行包工具检查, 如在radhat(fedora)系统中, 使用的是rpm或yum, Debian(包括ubuntu)的dpkg或apt-get工具, Suse使用的是YaST(RPM). 如果是以二进制包安装, 则需要使用这些工具检查, 则说明已安装apache.
- $ rpm -qa | grep "软件或者包的名字"
- $ yum list installed | grep "软件名或者包名"
- $ dpkg -l |grep ii | grep packagename
- $ apt-cache show package
- 如果是源代码码安装, 且通过第一种方式还找不到, 那么...找找几个常用的地, 如/usr/local(/lib)下, /usr(/lib)下, 或看看/var/www, /httpd目录等。
找到apache时, 那么需要决定使用当前apache, 还是升级版本(http://httpd.apache.org/docs/2.2/upgrading.html )。 如果不存在, 安装之。
- 如果是源代码码安装, 且通过第一种方式还找不到, 那么...找找几个常用的地, 如/usr/local(/lib)下, /usr(/lib)下, 或看看/var/www, /httpd目录等。
- 安装apache。
下面简单介绍通过包, 源代码, 自动包管理工具安装apache的方式- 安装 $ yum -y install httpd 设置自启动(fedora) /sbin/chkconfig httpd on
- 安装 $ sudo apt-get install apache2
- 安装 $ yast2 -install apache2
- rpm/deb 包, 官网上不提供。 如果有其包, 可通过rpm -i或dpkg -i
- 源代码:
- 通过 http://httpd.apache.org/download.cgi , 查看最新版本的连接, 如当前最新版本连接为: http://apache.freelamp.com/httpd/httpd-2.2.15.tar.gz (下 面都以这个版本为例)
- 下载 $ wget(curl) http://apache.freelamp.com/httpd/httpd-2.2.15.tar.gz
- 解压 $ tar xvzf httpd-2.2.2.tar.gz(或$ gzip -d httpd-2.2.2.tar.gz 回车 $ tar xvf httpd-2.2.2.tar), 进入httpd-2.2.2
- $ /configure --enable-dav --enable-so --prefix=/usr/local/apache2/ (配置apache安装,前两个参数是必须要加的,你还可以根据您的需要添加其他的参数。)
- 编译 make, 安装make install(需要root权限)
- 测试是否安装成功, $ /usr/local/apache2/apachectl start, 然后输入curl(wget)http://###.###.###.###/ 如出现 "It works!", 则成功.
安装svn。
- 检查svn是否安装。
和上面apache的步骤一个, 下面只是罗列示例命令- 通过可执行文件是否存在: svn help/svnadmin help
- 通过发行包工具检查: rpm -qa | grep subversion
- 想找常用目录下是否有安装包, 如/usr/local(/lib)下, /usr(/lib)
- 安装svn。
下面简单介绍通过包, 源代码, 自动包管理工具安装apache的方式- 安装 $ yum install subversion
$ yum install mod_dav_svn - 安装 $ sudo apt-get install subversion
- rpm/deb 包, http://subversion.apache.org/packages.html 有详细的说明, 在各系统下如何安装。
- 源代码:
- 通过 http://subversion.apache.org/source-code.html , 查看最新版本的连接, 如当前最新版本连接为: http://subversion.tigris.org/downloads/subversion-1.6.11.tar.gz (下 面都以这个版本为例)
- 下载 $ wget(curl) http://subversion.tigris.org/downloads/subversion-1.6.11.tar.gz
- 解压 $ tar xvzf subversion-1.6.11.tar.gz(或$ gzip -d subversion-1.6.11.tar.gz 回车 $ tar xvf subversion-1.6.11.tar), 进入subversion-1.6.11
- $ ./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/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) - 编译 make, 安装make install(需要root权限)
- 设置svnadmin, 可在任何路径下运行 sudo ln -s /usr/local/subversion/bin/svnadmin /usr/local/bin/svnadmin
- 验证 输入svnadmin help
- 安装 $ yum install subversion
建库
上面安装成功后, 可以开始建库。 建库就相对简单, 只列出所有
- 建立仓库根目录
$ mkdir /var/repos - 建仓库。
$ svnadmin create /var/repos/test - 导入项目。(可在配置后再行导入)
$ svn import /home/user/myproject file:///home/svnroot/repository/test -m "初始化导入" - 改变目录所有者
$ chown -R apache:apache(或svn:svn) /var/repos
配置
上面所有物理环境已搭建好, 只要配置httpd的访问, 及加入用户就大功告成了。
- 修改Apache的配置文件httpd.conf
- #SVN模块加载
- LoadModule dav_svn_module modules/mod_dav_svn.so
- LoadModule dav_module modules/mod_dav.so //如果apache已加载, 要去掉本行。
- LoadModule authz_svn_module modules/mod_authz_svn.so#资源配置(如果多个项目, 共用一套验证, 下面配置就可以, 不然需要每个项目组分开建)
- <Location /svn>
- DAV svn
- SVNParentPath /var/repos #svn父目录
- AuthzSVNAccessFile /var/repos/config/authz.conf #启用目录级别授权, 权限配置文件
- AuthType Basic #连接类型设置
- AuthName "Subversion Repository" #连接框提示
- AuthUserFile /var/repos/config/authfile #用户配置文件
- Satisfy Any #表示在同时启用了Allow(允许)和Require的情况下,指定相关策略的,一共有两个备选值,All表示用户必须同时满足Allow和 Require的条件,而Any则是满足其中之一即可。这这里,Satisfy Any用于允许先用匿名方式尝试访问,并根据svnauthz对匿名用户的控制给予访问权限。若没有这句话,则无论svnauthz中是否加入了 "*=r"的写法,匿名用户都是无法访问的。
- #<LimitExcept GET PROPFIND OPTIONS REPORT> #允许匿名访问,不允许Commit,不能与AuthzSVNAccessFile同时使用, 此选项没试过。
- Require valid-user #采用何种认证
- </Location>
- 增加用户
$ htpasswd -m /var/repos/config/authfile usr1 //此目录指向httpd.conf中的"用户配置文件" -c 为创建, -m 为修改
- 增加用户权限
修改/var/repos/config/authz.conf //此目录指向httpd.conf中的"权限配置文件"
$ vi(m) /var/repos/config/authz.conf- [test:/] #这表示,仓库test的根目录下的访问权限
- admin = rw #test仓库wooin用户具有读和写权限
- @developers = rw #@开头的表示组, 组必须存在, 不然死的会很惨。
- @test = r
- [/] #这个表示在所有仓库的根目录下
- * = r #这个表示对所有的用户都具有读权限
- [groups] #这个表示群组设置
- developers = user1, user2 #这个表示某群组里的成员
- test = user2
将这个设置完成后。重启Apache,就可以通过
http://localhost/svn/test