以前搭linux下SVN用到的几个文档,但感觉真没windows下省事

来源:互联网 发布:飞机制造业知乎 编辑:程序博客网 时间:2024/05/16 02:13

Redmine+Apache+SVN+Postfix完整配置指南

Edition

State

Date

Description

1.0

completed

2010-06-08

基于redmine-0.9.4, Ubuntu-server-10.04-i386, subversion-1.6.3

1.1

completed

2010-07-19

更新gem install安装正常,passenger版本更新为2.2.15,修正一处添加redmine站点的不详描述

1.2

completed

2010-08-01

redmine官方更新到版本1.0.0 (数据库表数为48),更新wget地址

序言

安装配置时如果遇到问题,可以到 我博客的对应文章 给我留言,我会尽力回复你的问题。 
(
2013/2/26更新:这篇文章作于2010年,这3年来,我从事的工作已经与linux毫不相关,所以当前,如果你在这篇配置中遇到什么问题,我只能尽力回答,但往往有心无力,见谅。)

版本0.8.x可以参考我写的ubuntu上简单配置redmine

版本0.9.x可以参考我写的redmine-0.9.x配置过程

或者参看我的关于redmine的文章列表

安装ubuntu-10.04-server

这里配置的是Ubuntu server最新的10.04。关于系统安装就不多说什么了,塞进光盘然后一路next~

系统初始配置信息:

IP192.168.242.130
主机名:redmine
预装选择:LAMP serverMail serverOpenSSH server

如果不需要redmine的邮件通知,或者不想自己搭建邮件服务器而使用已存在或者其他SMTP邮件服务来发送邮件的话,可以不用安装Mail server,即postfix。如果是这样,那么下面的这步也可以省去。

完成安装后,既然是新系统,就先更新到最新吧:)

apt-get update

apt-get upgrade

然后我们来开始配置redmine

获取redmine及相关信息

redmine基于ROR,所以对于ROR的开发人员来说部署这个系统要比不了解ROR的人容易的多。这里假设你对ROR是有一定的了解的。如果不了解,照着步骤做即可。

先找到redmine的下载,redmine的官方网站上有很多参考信息,下载列表则是在rubyforge.org上。当前最新版本是0.9.4 1.0.0redmine官方的安装和配置文档包含了linuxwindows的配置,包括对系统需求。但可能文档不尽详尽,安装中会遇到很多问题。如果仅仅只是想体验下安装过程,并想知道怎么解决具体遇到的问题,可以参看我之前写的redmine-0.9.x配置过程

我将redmine放在/usr/local/里:

cd /usr/local/

获取当前版本并解压:

wget http://rubyforge.org/frs/download.php/71723/redmine-1.0.0.tar.gz

tar zxvf redmine-1.0.0.tar.gz

mv redmine-1.0.0 redmine

配置mysql数据库

数据库是mysql,为redmine建立库,库名redmine。同时创建redmine用户,把库的权限分配给这个用户。最后设置用户的密码为'redminePASSWORD'。当然这里的库名、用户名和密码,可以按实际情况替换。

mysql -u root -p

mysql> create database redmine character set utf8;

mysql> grant select,insert,delete,update,create,drop,alter,index onredmine.* to redmine;

mysql> SET PASSWORD FOR 'redmine' = PASSWORD('redminePASSWORD');

mysql> flush privileges;

mysql> exit;

安装与配置

进入redmine的主目录,开始配置数据文件,把配置指向刚才建立的库。

cd /usr/local/redmine

cp config/database.yml.example config/database.yml

vim config/database.yml

配置production部分成如下所示。其中的databaseusernamepassword按实际情况替换。

production:

  adapter: mysql

  database: redmine

  host: localhost

  username: redmine

  password: redminePASSWORD

  encoding: utf8

当前版本的需求是ruby 1.8.6,1.8.7 Rails 2.3.5 Rack 1.0.1。为此首先安装需要的包。

apt-get install rake rubygems libopenssl-ruby libmysql-ruby

可以看到这些包被安装:

irb1.8 libmysql-ruby libmysql-ruby1.8 libopenssl-ruby

libopenssl-ruby1.8 libreadline-ruby1.8 libreadline5 libruby1.8 rake

rdoc1.8 ruby ruby1.8 rubygems rubygems1.8 unzip zip

rake的安装则必须指定版本:

gem install rack --version=1.0.1

上面这条命令在我以前写配置的时候一直有效,但是在编写此文时,gem的在线安装有些问题。不知是出于网络的问题还是其他原因,我得到了下面的错误:

WARNING: RubyGems 1.2+ index not found for:

       http://gems.rubyforge.org/

 

RubyGems will revert to legacy indexes degradingperformance.

Bulk updating Gem source index for:http://gems.rubyforge.org/

ERROR: While executing gem ... (Gem::RemoteSourceException)

    Errorfetching remote gem cache: SocketError: getaddrinfo: Temporary failure in nameresolution (http://gems.rubyforge.org/yaml)

google之后也没能找到什么结果,所以只好本地安装rack了。

更新(2010/07/19):在线安装已经恢复正常,看来产生上面的错误是临时性的。但仍旧保留下面的本地安装方式。

下载对应的rack-1.0.1.gem到本地后安装:

wget http://rubyforge.org/frs/download.php/65736/rack-1.0.1.gem

gem install --local rack-1.0.1.gem

继续下面的步骤,生成会话存储密钥:

RAILS_ENV=production rake config/initializers/session_store.rb

注:r3055之后的版本移除了config/initializers/session_store.rb,使用下面的命令替代。

rake generate_session_store

然后开始创建数据库表结构,在redmine的根目录下运行:

RAILS_ENV=production rake db:migrate

读取默认配置数据,当遇到选择语言(Selectlanguage)时,选择zh

RAILS_ENV=production rake redmine:load_default_data

Select language: bg, bs, ca, cs, da, de, el, en, es, fi, fr, gl, he, hr,hu, id, it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr,uk, vi, zh, zh-TW [en]zh

====================================

Default configuration data loaded.

至此,redmine简单的配置就完成了。使用其自带的webrick来运行redmine,来检查下redmine的配置吧:)

ruby script/server webrick -e production

默认的管理员用户名和密码都是admin,进入系统后就可以开始熟悉下了。可以为每个人定义语言环境。下图是管理页面。

 

Apache上部署

其自带的webrick可能不能满足使用需求,那么就把它配置到apache上。apache运行ROR有多种方式,这里使用passenger

apt-get install build-essential

apt-get install apache2-prefork-dev libaprutil1-dev libapr1-devruby1.8-dev

然后安装 passenger

gem install passenger

passenger-install-apache2-module

如果报passenger-install-apache2-module这条命令找不到的话,那么通过下面的命令查看执行路径:

gem environment

RubyGems Environment:

  - RUBYGEMS VERSION: 1.3.5

  - RUBY VERSION: 1.8.7 (2010-01-10patchlevel 249) [i486-linux]

  - INSTALLATION DIRECTORY:/var/lib/gems/1.8

  - RUBY EXECUTABLE:/usr/bin/ruby1.8

  - EXECUTABLE DIRECTORY:/var/lib/gems/1.8/bin

  - RUBYGEMS PLATFORMS:

    - ruby

    - x86-linux

  - GEM PATHS:

     - /var/lib/gems/1.8

     - /root/.gem/ruby/1.8

  - GEM CONFIGURATION:

     - :update_sources => true

     - :verbose => true

     - :benchmark => false

     - :backtrace => false

     - :bulk_threshold => 1000

  - REMOTE SOURCES:

     - http://gems.rubyforge.org/

其中,EXECUTABLEDIRECTORY就是命令的全路径,所以对于我例子里的情况执行

/var/lib/gems/1.8/bin/passenger-install-apache2-module

根据提示安装和部署。passenger会在本机编译并成为apache的一个模块。安装过程中会遇到下面的提示信息(根据版本的不同,信息也会稍有变化)

Welcome to the Phusion Passenger Apache 2 module installer, v2.2.13.

 

This installer will guide you through the entire installation process. It

shouldn't take more than 3 minutes in total.

 

Here's what you can expect from the installation process:

 

 1. The Apache 2 module will beinstalled for you.

 2. You'll learn how to configureApache.

 3. You'll learn how to deploy aRuby on Rails application.

 

Don't worry if anything goes wrong. This installer will advise you on howto

solve any problems.

The Apache 2 module was successfully installed.

 

Please edit your Apache configuration file, and add these lines:

 

   LoadModule passenger_module/var/lib/gems/1.8/gems/passenger-2.2.13/ext/apache2/mod_passenger.so

   PassengerRoot/var/lib/gems/1.8/gems/passenger-2.2.13

   PassengerRuby /usr/bin/ruby1.8

 

After you restart Apache, you are ready to deploy any number of Ruby onRails

applications on Apache, without any further Ruby on Rails-specific

configuration!

Deploying a Ruby on Rails application: an example

 

Suppose you have a Rails application in /somewhere. Add a virtual host toyour

Apache configuration file and set its DocumentRoot to /somewhere/public:

 

     <VirtualHost *:80>

            ServerNamewww.yourhost.com

            DocumentRoot/somewhere/public        # <-- be sureto point to 'public'!

            <Directory/somewhere/public>

                    AllowOverride all                             # <-- relaxApache security settings

                    Options-MultiViews                           #<-- MultiViews must be turned off

            </Directory>

     </VirtualHost>

 

And that's it! You may also want to check the Users Guide for security and

optimization tips, troubleshooting and other useful information:

 

 /var/lib/gems/1.8/gems/passenger-2.2.13/doc/Users guide Apache.html

 

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)

http://www.modrails.com/

 

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

根据提示信息部署,我这里的步骤稍有不同。

首先,编辑apache的配置文件并添加下面的信息。(注:“passenger-2.2.13”里的版本号需根据实际情况更改,当前(2010/07/19)的更新为passenger-2.2.15)

vim /etc/apache2/apache2.conf

LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.13/ext/apache2/mod_passenger.so

   PassengerRoot/var/lib/gems/1.8/gems/passenger-2.2.13

   PassengerRuby /usr/bin/ruby1.8

然后在/etc/apache2/sites-available添加一个站点:

vim redmine

并添加如下内容:

RailsBaseURI /redmine

web根目录建立redmine主目录的符号链接,并设置权限:

ln -s /usr/local/redmine/public /var/www/redmine

chown -R www-data:www-data /var/www

启用redmine站点:

a2ensite redmine

最后重启apache

/etc/init.d/apache2 restart

或,重新加载配置:

/etc/init.d/apache2 reload

打开浏览器,如果你能够访问到redmine,那么恭喜你,redmine已经在apache上运行良好!

建立SVN版本库

版本控制svn可以参考《subversion权威指南》,网上也有很多下载。不过我不太喜欢这本书,因为看起来会比较无聊:)下面简单地安装svn并建立一个测试用库。

首先,安装subversion版本控制:

apt-get install subversion

创建SVN的根目录,这里我建在/var。然后建立一个演示用的库。

cd /var

mkdir svn

cd svn

svnadmin create demo

然后配置demo库:

cd demo/conf

ls -l

conf目录里是authzpasswdsvnserve.conf这三个文件,分别用于配置用户权限、用户密码和配置此版本库(demo)

-rw-r--r-- 1 root root 1089 2010-06-04 14:45 authz

-rw-r--r-- 1 root root  3352010-06-04 14:44 passwd

-rw-r--r-- 1 root root 2265 2010-06-04 14:44 svnserve.conf

首先配置svnserve.conf的内容:

  • anon-access 匿名访问默认权限,默认为read。
  • auth-access 授权访问默认权限,默认为write。
  • password-db 用户密码文件,默认为与svnserve.conf同目录的passwd文件。
  • authz-db 用户授权文件,默认为与svnserve.conf同目录的authz文件。
  • realm 显示库名

需要注意的是,每行开头不能留空格。

[general]

anon-access = read

auth-access = write

password-db = passwd

authz-db = authz

realm = Demo Repository

passwd文件里存储的是用户名和密码,一行一条记录。

[users]

redmine = redminePASSWORD

authz是授权文件,配置着每个用户和组的权利,下面是把redmine用户放到redmine_group组里并赋予redmine_groupdemo库的读写权限。

[groups]

dev = redmine

[demo:/]

@dev = rw

简单配置完后,启动svnserve

svnserve -d -r /var/svn

最后将SVN服务加入自启动:

cd /etc/rc2.d

vim S88svnserve

并在文件S88svnserve中添加上面的启动命令

svnserve -d -r /var/svn

最后还不能忘了加上执行权限:

chmod +x S88svnserve

然后,在redmine中对应项目的配置里,指向对应的版本库。

邮件配置

这里让redmine用默认配置的Postfix来发送邮件。如果在安装ubuntu的时候没有安装邮件服务器,这里也可以通过下面的命令来安装:

apt-get install postfix

这里之所以要特意配置个邮件服务器,完全是为了使整个redmine系统完整。完全可以使用其他邮件服务。默认配置的Postfix已经能够满足当前的发信情况。关于邮件系统和Postfix的讨论严重超出了本文范围,对于不熟悉Postfix的人,我推荐阅读Postfix基础配置,如果想了解更多,可以阅读Postfix虚拟邮件系统完全配置(尽管此文还未完全完成)。如果想要知道邮件系统的来龙去脉,邮件服务器如何处理邮件,那么我强烈建议阅读《Postfix权威指南》一书,这本书对于邮件系统的讲解深入浅出,是本好书。redmine邮件的配置文件同样在主目录的config里:

cp email.yml.example email.yml

vim email.yml

移动到末尾可以看到默认的配置,将production改为如下所示。其中的域名等信息按实际情况替换。

production:

  delivery_method: :smtp

  smtp_settings:

    address: localhost

    port: 25

    domain: swordair.com

    authentication: :none

更多邮件信息参考:官方邮件配置参考。里面包括了如何来写验证信息等内容。

至此,你就获得了一个敏捷运行的redmine项目管理系统。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

今天试着在ubuntu下搭建svn服务器,查了不少资料,也费了不少时间。下面简单记录一些自己的心得。
1.
首先如果你的ubuntu下已经开启了一个或多个svn服务器,如果想要再开启一个,就会提示你端口冲突,因为它默认使用的端口号为3690,所以应该终止所有的svn服务,使该端口处于空闲状态,只需“sudo killall svnserve”即可。
2.
既然要搭建svn的服务器,自然要先安装它:
sudo apt-get install subversion

3.在启动svn服务之前,应该首先创建一个文件仓库,用来存放我们要做的项目文件
sudo svnadmin create <
文件路径>(例如sudo svnadmin create/home/svn/pro
4.
创建好该文件仓库之后,可以修改其权限
sudo gedit <
文件路径>/svnserve.conf
(1)
将#password前的#去掉,注意前面不能留下任何的空格
(2)anon-access = read

    auth-access = write
   
 password-db = passwd这几行前的#也可以去掉
5.
添加用户名和密码
sudo gedit <
文件路径>/passwd
用户名=密码,按照该格式添加
6.
启动svn服务
svnserve -d -r <
文件路径>
-d -r
的意义不做赘述,可通过help命令查看
7.
之后本机或其他计算机就可以访问该svn服务器了
提取出服务器上的文件
svn checkout svn://<
服务器ip>/<文件仓库的名字,此处为”pro“>
当然还可以在其后加"-r <版本号>",指定要提取的版本
8.
提取出的文件可以对其做任意的修改

要注意的一点是,在 wc下做文件操作时,比如删除或移动文件,不能直接用 rm, mv来进行,这样 svn 不能追踪到文件的变化,你必须使用 svn del或是 svn move来完成删除或移动的操作。下面举几个命令的例子:

svn add filename #新增一个文件
svn move filename foo/bar/baz #
移动 filename foo/bar/baz
svn rename filename1 filename2 #
给文件改名

9.修改完后,就可以提交修改了

svn commit -m "<关于此次修改的相关注释信息>"  --username <用户名> --password <密码>

10.使用"svnupdate"命令可更新当前的wc版本

建议 Windows下的用户使上面提到的 TortoiseSVN软件,完全图形化界面,使用非常简单。本人也做过尝试,确实可以访问在ubuntu下的svn服务器,而且操作十分简便。

 

 

 

 

 

 

ubuntuSVN服务器安装配置

一、SVN安装
1.安装包
$ sudo apt-get install subversion

2.添加svn管理用户及subversion组
$ sudo adduser svnuser
$ sudo addgroup subversion
$ sudo addgroup svnuser subversion 

3.创建项目目录
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir fitness
$ sudo chown -R root:subversion fitness
$ sudo chmod -R g+rws fitness

4.创建SVN文件仓库
$ sudo svnadmin create /home/svn/fitness

5.访问方式及项目导入:
$ svn co file:///home/svn/fitness
或者
$ svn co file://localhost/home/svn/fitness
* 注意:
如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).
//--
下面的命令用于将项目导入到SVN 文件仓库:
$ svn import -m "New import" /home/svn/fitnessfile:///home/svnuser/src/fitness
一定要注明导入信息

//--------------------------//
6.访问权限设置
修改 /home/svn/fitness目录下:
svnserve.conf 、passwd 、authz三个文件,行最前端不允许有空格
//--
编辑svnserve.conf文件,把如下两行取消注释
password-db = password
authz-db = authz

//补充说明
# [general]
anon-access = read
auth-access = write
password-db = passwd
其中 anon-access 和 auth-access 分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,但如果想拒绝匿

名用户的访问,只需把 read 改成 none 就能达到目的。

//--
编辑/home/svnuser/etc/passwd 如下:
[users]
mirze = 123456
test1 = 123456
test2 = 123456
//--
编辑/home/svnuser/etc/authz如下
[groups]
admin = mirze,test1
test = test2
[/]
@admin=rw
*=r
这里设置了三个用户mirze,test1,test2密码都是123456
其中mirze和test1属于admin组,有读和写的权限,test2属于test组只有读的权限

7.启动SVN服务
svnserve -d -r /home/svn
描述说明:
-d 表示svnserver以“守护”进程模式运行
-r 指定文件系统的根位置(版本库的根目录),这样客户端不用输入全路径,就可以访问版本库
如: svn://192.168.12.118/fitness

这时SVN安装就完成了.
局域网访问方式:
例如:svn checkoutsvn://192.168.12.118/fitness --username mirze --password 123456/var/www/fitness


-----------------------------------------------------------------------

二、HTTP:// [apache]
1.安装包 [已安装subversion]
$ sudo apt-get install libapache2-svn

创建版本仓库:
sudo svnadmin create /目录地址
目录地址必须存在,这个就是保存版本仓库的地方,不同的版本仓库创建不同的文件夹即可,比如:
sudo svnadmin create /home/svn/project
本来/home/svn/project这个目录下什么都没有,执行下面的命令之后再去看一下,多出一些文件和文件夹,我们需要操作的是conf这个文件夹,这个文件夹下有一个文件,叫做passwd,用来存放用户名和密码。
然后把这个版本仓库目录授权给apache读写:
sudo chown -R www-data:www-data /目录地址
然后来到打开apache配置文件:
sudo gedit /etc/apache2/mods-available/dav_svn.conf

加入如下内容:
<Location /project>
DAV svn
SVNPath /home/svn/project
AuthType Basic
AuthName “myproject subversion repository”
AuthUserFile /home/svn/project/conf/passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>

location说的是访问地址,比如上述地址,访问的时候就是
http://127.0.0.1/project
其中有两行被注释掉了,以保证每次都需要用户名密码。
最后一步就是创建访问用户了,建议将用户名密码文件存放在当前版本仓库下conf文件夹下,这样版本仓库多的时候无至于太乱。
因为conf文件夹下已经存在passwd文件了,所以直接添加用户:
sudo htpasswd -c /home/svn/project/conf/passwd test
然后输入两遍密码,laoyang这个用户就创建好了。
打开/home/svn/project/conf/passwd这个文件,会开到形如如下形式的文本:
test:WEd.83H.gealA //后面是加密后的密码。
创建以后,再次需要往别的版本仓库添加这个用户,直接把这一行复制过去就可以了。
重启apache就可以了。
sudo /etc/init.d/apache2 restart


-----------------------------------------------------------------------

三、同步更新 [勾子]

同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。

知识点:
1、SVN的hooks
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。
2、同步命令rsync的具体参数使用
3、具有基个语言的编程能力bash python perl都可以实现

post-commit具体实现细节
post-commit脚本

编辑文件:sudo vim /home/svn/fitness/hooks/post-commit

注意:编辑完成post-commit后,执行:sudo chmod 755 post-commit

内容:

#!/bin/sh
export LANG=zh_CN.UTF-8
sudo /usr/bin/svn update /var/www/www --username mirze --password 123456

#Set variable
SVN=/usr/bin/svn
WEB=/home/test_nokia/
RSYNC=/usr/bin/rsync
LOG=/tmp/rsync_test_nokia.log
WEBIP="192.168.0.23"
export LANG=en_US.UTF-8

#update the code from the SVN
$SVN update $WEB --username user --password 
password
#If the previous command completed successfully, to continue the following
if [ $? == 0 ]
then
 echo "" >> $LOG
 echo `date` >> $LOG
 echo"##############################" >> $LOG
 chown -R nobody:nobody/home/test_nokia/
 #Synchronization code from theSVN server to the WEB server, notes:by the key
 $RSYNC -vaztpH --timeout=90 --exclude-from=/home/svn/exclude.list$WEB root@$WEBIP:/www/ >> $LOG
fi

以上是具体的post-commit程序
注意事项:
1、一定要定义变量,主要是用过的命令的路径。因为SVN的考虑的安全问题,没有调用系统变量,如果手动执行是没有问题,但SVN自动执行就会无法执行了。
2、SVNupdate 之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码如果只是手动一样会更新,但自动一样的不行。
3、加上了对前一个命令的判断,如果update的时候出了问题,程序没有退出的话还会继续同步代码到WEB服务器上,这样会造成代码有问题
4、记得要设置所属用户,因为rsync可以同步文件属性,而且我们的WEB服务器一般都不是root用户,用户不正确会造成WEB程序无法正常工作。
5、建议最好记录日志,出错的时候可以很快的排错
6、最后最关键的数据同步,rsync的相关参数一定要清楚,这个就不说了。注意几个场景:
这里的环境是SVN服务器与WEB服务器是开的
把SVN服务器定义为源服务器 WEB服务器为目的服务器
场景一、如果目的WEB服务器为综合的混杂的,像只有一个WEB静态资源,用户提交的,自动生成的都在WEB的一个目录下,建议不要用–delete这个参数
上面这个程序就是这样,实现的是源服务器到目的服务器的更新和添加,而没有删除操作,WEB服务器的内容会多于源SVN的服务器的
场景二、实现镜像,即目的WEB服务器与源SVN服务器一样的数据,SVN上任何变化WEB上一样的变化,就需要–delete参数
场景三、不需要同步某些子目录,可能有些目录是缓存的临时垃圾目录,或者是专用的图片目录(而不是样式或者排版的)要用exclude这个参数
注意:这个参数的使用不用写绝对路径,只要目录名称就行 aa代表文件 aa/ 代表目录,缺点就是如果有多个子目录都是一样的名称那么这些名称就都不会被同步
建议用–exclude-from=/home/svn/exclude.list用文件的形式可以方便的添加和删除
exclude.list

.svn/
.DS_Store
images/

利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。

 

 

 

 

 

 

·        安装命令

sudoapt-get install subversion

·        创建项目目录

sudomkdir /home/svn

cd/home/svn/project

sudochmod -R 777 project/

·        创建svn仓库

sudosvnadmin create /home/svn/project

执行命令后生成以下文件

·        设置访问权限

进入config/svnserve.conf,打开anon-access= readauth-access= writeanon-access无需账户可以readauth-access验证用户可以write

进入config/password,添加账户和密码

进入config/authz,设置访问权限,admin=andyandy用户属于admin权限组,@admin=rwadmin权限组可以read

·        启动svn服务器

svnserve-d -r /home/svn  

-d 表示svnserver守护进程模式运行

-r 指定文件系统的根位置,这样客户端不用输入全路径,就可以访问版本库
如:svn://192.168.1.3/project

·        导入项目到svn服务器

window平台安装svn客户端TortoiseSVN,使用TortoiseSVNimport功能

 

 

 

刚刚成立新的公司,需要建立公司的配置库,建立版本管理工具是必要的,自己通过在ubuntu中国上面一点一点学习,积攒了安装Subversion的如下经验:

ubuntuversion:12.04

本文涉及的范围

要通过 HTTP 协议访问 Subversion文件仓库,需要安装并配置好 Web 服务器。Apache2 被证实可以很好的与 Subversion 一起工作。关于 Apache2 的安装超出了本文的范围(假设已经安装好Apache2) ,尽管如此,本文还是会涉及如何配置 Apache2 使用 Subversion。 
类似的,要通过 HTTPS 协议访问 Subversion 文件仓库,您需要在您的 Apache2 中安装并配置好数字证书,这也不在本文的讨论范围之中。

安装 Subversion

Subversion已经包含在 main仓库中。所以,要安装 Subversion,您只需要简单的运行:

1

$ sudo apt-get install subversion

2

$ sudo apt-get install libapache2-svn

服务器配置

通过上面的命令已经安装了所需的软件包。接下来将阐述如何创建 Subversion 仓库以及如何设置项目的访问权限。

创建 Subversion 仓库(Respository)

许多位置都可以放置 Subversion 仓库,其中两个最常用的是:/usr/local/svn 以及 /home/svn。我们选择把 Subversion 仓库放在 /home/svn/repos,并且假设我们需要建立两个仓库 project1 和 project2。

通常的情况下,首先创建一个名为“Subversion” 的用户组,该组是 Subversion 仓库所在的目录的拥有者。

使用如下命令增加组,并且把用户加到组里:

1

$ sudo addgroup subversion

2

$ sudo usermod -G subversion -a www-data//将www-data用户加入到subversion组

www-data是专门为 web server运行而创建的用户,系统中已经预先创建好了。

查看上面两个命令的执行结果:

1

$ cat /etc/group | grep subversion

2

subversion:x:1001:www-data

执行如下命令创建仓库目录,我这里创建两个项目:

1

$ sudo mkdir -p /home/svn/proj1

2

$ sudo mkdir -p /home/svn/proj2

下面命令用于创建 Subversion 仓库:

1

$ sudo svnadmin create /home/svn/project1

2

$ sudo svnadmin create /home/svn/project2

设置仓库的用户和组:

1

$ sudo chown -R www-data:subversion /home/svn/proj1

2

$ sudo chown -R www-data:subversion /home/svn/proj2

访问方式

Subversion仓库可以通过多种不同的方式进行访问——通过本地硬盘,或者通过各种网络协议。无论如何,文件仓库的位置总是使用 URL来表示。

下面是几种不同的 URL 模式及其对应的访问方法:

·        file:///—— 直接访问本地硬盘上文件仓库

·        http://—— 通过 WebDAV 协议访问支持 Subversion 的 Apache2 Web 服务器

·        https://—— 类似 http://,支持 SSL 加密

·        svn://—— 通过自带协议访问 svnserve 服务器

·        svn+ssh://—— 类似 svn://,支持通过 SSH 通道

通过 WebDAV 协议访问(http://)

WebDAV(Web-based DistributedAuthoring and Versioning) 一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。

Apachemod_dav_svn配置

要通过 WebDAV 协议访问 SVN 文件仓库,首先必须配置 Apache 2 Web 服务器。加入下面的代码片段到/etc/apache2/mods-available/dav_svn.conf 文件中:

01

<Location /svn>

02

    DAV svn

 

03

    # Alternatively, use SVNParentPath if you have multiple repositories

04

    # under a single directory

 

05

    SVNParentPath /home/svn/repos

06

    AuthType Basic

 

07

    AuthName "Subversion repository"

08

 

 

09

    # 指定基本用户验证的密码文件路径

10

    AuthUserFile /etc/subversion/dav_svn.passwd

 

11

 

12

    # 指定文件仓库访问的授权配置文件路径

 

13

    <IfModule mod_authz_svn.c>

14

        AuthzSVNAccessFile /etc/subversion/dav_svn.authz

 

15

    </IfModule>

16

 

 

17

    #<LimitExcept GET PROPFIND OPTIONS REPORT>

18

        Require valid-user

 

19

    #</LimitExcept>

20

 </Location>

重启 Apache2 Web 服务器

1

$ sudo service apache2 restart

密码文件 dav_svn.passwd的创建

1

$ sudo htpasswd -c /etc/subversion/dav_svn.passwd user_name

它会提示你输入密码,当您输入了密码,该用户就建立了。“-c” 选项表示创建新的 /etc/subversion/dav_svn.passwd 文件,所以 user_name 所指的用户将是文件中唯一的用户。如果要添加其他用户,则去掉“-c”选项即可:

1

$ sudo htpasswd /etc/subversion/dav_svn.passwd other_user_name

授权配置文件dav_svn.authz

首先需要加载mod_authz_svn.so 
在目录 /etc/apache2/mods-enabled 下创建软链接到 ../mods-available/authz_svn.load

1

$ cd /etc/apache2/mods-enabled

2

$ sudo ln -s ../mods-available/authz_svn.load

../mods-available/authz_svn.load文件的内容为:

1

LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so

这里我指定了三个组: design 组 和 test 组,design组读写权限,test组只有读的权限。另外,设置一个管理员账号admin,管理员对所有项目有读写权限。

授权文件 /etc/subversion/dav_svn.authz 的内容如下:

01

[groups]

02

design=user1,user2,user3

 

03

test=user4,user5

04

 

 

05

[project1:/]

06

admin=rw

 

07

@design=rw

08

@test=r

 

09

 

10

[project2:/]

 

11

admin=rw

12

@design=rw

 

13

@tester=r

如果在Check in的时候遇到如下错误:

1

Can’t open ‘/home/svn/myproject/db/txn-current-lock’: Permission denied

这是因为文件所属的用户和组不对造成的问题,可以重新对整个项目目录设置用户和组:

1

$ sudo chown -R www-data:subversion /home/svn/proj1

如果你不想将项目目录的拥有者设置成 www-data 的话,比如你可能想设置为 root:

1

$ sudo chown -R root:subversion /home/svn/proj1

必须将 root 加入 subversion 组:

1

$ sudo usermod -G subversion -a root

还要设置组的属性:

1

$ sudo chmod -R g+rws /home/svn/proj1

然后查看 txn-current-lock 文件的权限和用户以及组信息,应该类似于:

1

$ ls -l /home/svn/myproject/db/txn-current-lock

2

-rw-rwSr-- 1 root subversion  0  2009-06-18  15:33  txn-current-lock

使用svn客户端工具的配置

如果你不需要使用WebDAV方式访问,可以不配置以上的步骤。

建立好svn仓库以后,每个仓库下应该包含以下文件

我们主要配置"conf"下的配置文件,包含三个 

authz用于配置权限信息

passwd用于配置用户以及其密码

svnserve.conf配置校验模式  用户以及权限文件的路径

 

上面我们建立了两个项目的版本库,把passwdauthz文件复制一份到/home/svn目录中,以便统一配置,使这两个项目都是用这两个文件,不使用自己目录下的配置文件,但是svnserve.conf使用各自的。

首先,打开svnserve.conf

(1)修改2个版本库的svnserve.conf文件
   
把授权权限打开:
         anon-access =none
         auth-access = write
    proj1版本库中修改svnserve.conf:
         password-db =../../passwd
         authz-db = ../../authz

    proj2
版本库中修改svnserve.conf:
         password-db =../../passwd
         authz-db = ../../authz

(2)
修改根目录中的passwd文件,也就是刚刚拷贝到svn根目录下的
   
passwd文件中创建用户和密码:
      [users]
      qianxin = qx
      yiyu = yy
      gongyu = gy
      zhaoming = zm
      dai = dai
      yinjun = yj
      wangying = wy

   
一共创建了7个用户
(3)
修改根目录中的authz文件
   
authz中设置权限:
     [groups] #分组
     prj1_group = dai,gongyu,wangying
     prj2_sh_group = zhaoming,yinjun
     prj2_xa_group = qianxin,yiyu

     [/]  #根目录,即所有的版本库(包括prj1prj2),这里的目录以/home/svn为根目录
     qianxin = rw #管理员
 
     [proj1:/] 
#prj1项目
     qianxin = rw  #由于指定了"*= r",覆盖了父目录权限的继承,因此需要另外指定管理员对该版本库的访问权限
     @prj1_group = rw 
#组权限,前面必须加@
     * = r   #除了prj1_group组以外所有人的权限

     [proj2/shanghai:/] #prj2中的shanghai项目
     qianxin = rw 
#同上
     @prj2_sh_group = rw 
     * =    
#除了prj2_sh_group组以外所有人都无法访问该版本库

     [proj2/xian:/] #prj2中的xian项目
     prj2_xa_group = rw 
    注意点:
    子目录继承父目录的访问权限,如果指定了管理员对根目录具有读写权限,则管理员对子目录也具有读写权限。
   
但是,如果在子目录中设置* =来割断对父目录权限的继承,则子目录中必须设置管理员权限为rw,下面这种设置是有问题的:
    [arm:/]
    qianxin = rw

    [arm:/diary/shanghai]
    dai = rw
    gongyu = rw
    * =

    
由于管理员qianxin/diary/shanghai没有任何权限,因此就无法进行导入(导入要求对所有目录都有写的权限)。正确的做法是在子目录的权限配置中也加上“qianxin = rw”

至此,Subversion 服务器的配置已经完成了,借助 SVN 客户端软件就可以通过 svn:// 的方式访问到上面配置的两个文件仓库了。

 

 

Linux Ubuntu 开机自动启动svn服务

init.d目录建立一个脚本文件svnd.sh 
# cd /etc/init.d
# vim svnd.sh
输入svnd.sh内容如下(/var/svnsvn安装目录):

#!/bin/bash
#svnserve startup
svnserve -d -r /var/svn

保存退出。
更新,修改权限:
# update-rc.d svnd.sh defaults
# chmod 777 svnd.sh

 

0 0