辽宁铁岭人,现居大连。1970年生。 先后供职于 中国国际海运网、大连学堂科技、大连华仁视线网络科技有限公司、大连中科海云科技有限公司,任职技术总监。 精通PHP、JAVA、Javascript、HTML、CSS等网络编程技术及Linux操作系统。 精通面向对象编程、设计模式、重构及互联网产品设计。
分类: LINUX
2011-03-25 13:27:36
-1、安装openssl
./config --prefix=/usr/local/openssl
make
make install
0、安装apache2
#重新编译apache时,加上特别的参数 --with-apr,如果是第一次安装,可以不需要这个参数
#如果不加上dav等参数,无法load mod_dav_svn.so等
#如果不加上ssl,也不可启用ssl验证
./configure --enable-dav --enable-dav-fs --enable-so --enable-ssl
--with-apr-util=/usr/local/apr-util --enable-dav-lock
--with-ssl=/usr/local/openssl
make
make install
(1)
/usr/local/apache2/bin/apachectl -k start // 启动 apahce
/usr/local/apache2/bin/apachectl -k stop // 停止 apache
(2)
/usr/local/apache2/bin/apachectl -k restart
(3)
/usr/local/apache2/bin/apachectl graceful (推荐)
# 配置Subversion需要 --with-apxs=/usr/local/apache2/bin/apxs
1、Berkeley DB(非必须,安装OpenLDAP时,需要这个数据库)
地址:
Subversion的库有两个模式,一个BDB,一个事Fs,即文件模式,通常我们建库都会使用fs模式,这也是默认的模式。
../dist/configure --prefix=/usr/local/berkeley-db
make
make install
2、安装apr和apr-util
下载地址
./configure
make
make install
# configure的时候不指定路径的话默认是安装到/usr/local/下
# 下面这步要把berkeley数据库一起编译进去,否则berkeley就白装了,如果没有 安装BDB,就不需要--with-berkeley
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ --with-berkeley-db=/usr/local/berkeley-db
make
make install
3、安装sqlite3.6.14
#Subversion-1.6.0版本需要Sqlite,版本要3.4以上,我用的是3.6,Redhat E5默认安装3.3,很容易引起错误,可用以下命令查看:
rpm -qa | grep sqlite
亦可以用rpm 强制删除已安装的sqlite,卸载后,可能引起其它工具无法使用,比如rpm,它也是依赖sqlite才能运行,可能会很麻烦。我第一次安装时,就出了这麻烦,不记得怎么解决的了。
. SQLite 3.x or newer (REQUIRED for client and server)./configure --enable-threadsafe --disable-tcl --prefix=/usr/local/sqlite3.6
make
make install
如果不安装neon,访问http和https时出现下面错误:
svn: Unrecognized URL scheme
ra_dav:模块,才能访问https和http
ra_local:file:///
ra_svn:svn://
需要--with-ssl参数,否则使用SVN时,会出现下面错误:
svn: SSL is not supported
./configure --prefix=/usr/local/neon --with-ssl
make
make install
5、安装subversion
./configure --with-apxs=/opt/oss/sbin/apxs
--with-apr=/usr/local/apr/bin/apr-1-config
--with-apr-util=/usr/local/apr-util/bin/apu-1-config
--with-sqlite=/usr/local/sqlite3.6 --with-neon=/usr/local/neon
----另一种 配置apxs的
./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-berkeley-db=/usr/local/berkeley-db --with-sqlite=/usr/local/sqlite3.6
如果berkeley报错的不要了
./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite3.6
make
make install
#装完后用svnadmin –version查看下是否有信息,有的话说明安装成功
6、配置
首先创建一个repository
svnadmin create /home/svn/projectname
把/home/svn/projectname/conf/passwd, /home/svn/projectname/conf/svnserve.conf, /home/svn/projectname/hooks/control-file里的参数配置一下
passwd里放的是每个用户名和密码
svnserve.conf里放的是关于匿名和非匿名用户的权限
control-file里放的是具体到每个文件夹,每个用户的读写权限
再来要打开subversion的端口,subversion默认端口是3690
su - root -c "svnserve -d -r /home/svn/projectname"
命令执行后可以用
ps -ed | grep svnserve
查看svnserve服务是否已经启动
还可以用
netstat -ant | grep 3690
查看3690端口是否已经被监听
7、导入资源
首先把当前路径设置到放代码的路径,比如说
/home/htdocs/projectname
然后执行
svn import svn://localhost/projectname -m "projectname"
等命令行重新出现后就完成了。
8、Check out
从客户端把代码check out。
三、在apache中配置SVN
vi /usr/local/apache2.2.9/conf/httpd.conf
① 如果你看到如下两句,说明安装是成功的
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
如果有下面一句就用#注释掉
#LoadModule foo_module modules/mod_foo.so
② 定义apache访问svn配置:
DAV svn
# SVNPath /opt/svndata
SVNParentPath /opt/svndata
AuthzSVNAccessFile /opt/svn/conf/authz.conf
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /opt/svn/conf/passwd.conf
Require valid-user
我使用的httpd.conf配置
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
DAV svn
# SVNPath /opt/app/svn/repos/
SVNParentPath /opt/app/svndata/
SVNListParentPath on
AuthzSVNAccessFile /opt/app/svndata/conf/authz
# AuthzSVNAccessFile /opt/app/svndata/conf/svn-auto-file
# Satisfy Any
#
Require valid-user
#
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /opt/app/svndata/conf/svn-auto-file
CustomLog logs/svn_logfile "%t %u %{SVN-ACTION}e" env=SVN-ACTION
#############
/opt/app/svndata/conf/authz 文件的配置如下:
[groups]
admin=svnuser,dhj
[/]
*=r
@admin=rw
[dhj:/trunk]
svnuser = rw
* = r
四、配置svn
①建立svn版本库目录
mkdir -p /opt/svndata/repos #可以多建版本库目录
②建立svn版本库
svnadmin create /opt/svndata/repos
mkdir -p /opt/svndata/repos #可以多建版本库
③建立本地访问控制文件
/usr/local/apache2.2.9/bin/htpasswd -c /opt/svn/conf/passwd.conf username
然后输入密码即可,默认是MD5加密的
/usr/local/apache2.2.9/bin/htpasswd /opt/svn/conf/passwd.conf username1 #追加用户
④建立本地项目控制文件
touch /opt/svn/conf/authz.conf
本例authz.conf内容为:
[groups]
#
admin=username
#[
>
#
[/]
@admin = rw #指定用户组成员可以读写根目录所有应用
[repos:/abc/aaa]
username1= rw #指定用户username1可以读写:/abc/aaa目录的文件
-----其他的配置
2)权限分配(可以根据自己的情况来处理,也可看网上的)
# vi /home/svnroot/repository/authz.conf
[groups] //这个表示群组设置
Tester = test,svnroot,nbj,user1,user2 //这个表示某群组里的成员
#anonymous = guest
[test:/] //这表示,仓库test的根目录下的访问权限
@Tester = rw //test仓库Tseter组中用户具有读和写权限
* = r //test仓库中所有用户具有读的权限
[document:/] //这表示,仓库document的根目录下的访问权限
@Tester = rw //test仓库Tseter组中用户具有读和写权限
#@anonymous = r
* = r //test仓库中所有用户具有读的权限
//注意:在编辑authz.conf文件时,所有行都必须要顶头写,不能有缩行出现,否则会报错:"Access denied: 'user1' "。
目前对apache下的svn权限管理做了优化配置,用户密码采用加密模式,安全性要比以前好了。apache下的svn用户信息保存在/data /svn/passwd_dav.conf中,如果需要添加修改用户和密码,请IT部管理人员使用apache的htpasswd工具(例如:/usr /local/apache2/bin/htpasswd /data/svn/passwd_dav.conf username这样的命令)。 用户访问控制文件保存在/data/svn/authz_dav.conf,我已经把以前沿用的策略应用到其中,以前的用户密码照常使用,并且现在以用户 组的方式来管理权限,配置起来更加方便。 关于svn的安全配置都保存在passwd_dav.conf,authz_dav.conf这两个文件中 建立新目录 917 svnadmin create newdm_backend 930 chown -R daemon:daemon newdm_backend/
至此,整个安装过程完成了!
五、测试连接
① 启动apache
/usr/local/apache2.2.9/bin/apachectl start
② 打开浏览器,输入 #本例服务器ip是192.168.1.107
使用刚才创建的权限用户名与密码登录即可访问
注意:在你上传文件的时候可能会有如下权限不足的提示
Permission denied
svn: Commit failed (details follow):
svn: Can't create directory '/opt/svndata/repos/db/transactions/0-1.txn': Permission denied
这是因为apache在线程用户没有权限访问svn的仓库,两者分别属于不同的用户者
本例apache属于daemon拥有者,而svn仓库属于svn拥有者
解决方法:
chown -R daemon /opt/svndata/repos
chmod -R 755 /opt/svndata/repos
重启下apache:
/usr/local/apache2.2.9/bin/apachectl stop
/usr/local/apache2.2.9/bin/apachectl start
3. “Could not open the requested SVN filesystem” errorcode=2
如果出现这个错误你就得看一下Apache的httpd.conf文件里面相关版本库路径是不是正确,请确保使用的是绝对路径.
其他的配置参考
4 Svn配置
4.1 建立版本库目录
[root@localhost root] #mkdir –p /svn
svn是我自己建立的目录,各人根据具体情况设计名字
4.2 建立一个用户,用与管理这个版本库目录
[root@localhost root] #useradd -m -s /bin/bash lyl
lyl是建立的用户名,可以根据习惯改
4.3 用建立的用户管理我们刚建的版本库目录
[root@localhost root] #chown –R lyl.lyl /svn
用lyl来管理我们的版本库目录/svn
4.4 启动服务器
用用户lyl来管理版本库目录/svn,则须转为lyl,命令如下:
[root@localhost root] #su lyl
启动svn服务
[root@localhost root] #svnserve -d -r /svn/;
-d表示以daemon方式(后台运行)运行
-r/svn/指定根目录是/svn/
检查服务器是否启动正常:
[svn_leader@localhost root]$ ps –ef|grep svnserve
如果显示如下,即为启动成功:
lyl 6941 1 0 15:07 ? 00:00:00 svnserve -d --listen-port 9999 -r /svn
5 建立版本库
[root@localhost home]# cd /svn
[root@localhost svnrepos]# svnadmin create p1;
P1可以改,在p1目录下会有下面目录:conf dav db format hooks locks README.txt
6 配置允许访问test的用户
进入到conf,命令为:
[root@localhost safety]# cd conf
出现三个文件:authz passwd svnserve.conf
6.1 修改svnserve.conf
[root@localhost conf]# vi svnserve.conf
出现:
[general]
………………………
# anon-Access = read
# auth-access = write
………………………
# passWord-db = passwd
………………………
# authz-db = authz
内容修改为:
[general]
………………………
anon-access = none
auth-access = write
………………………
password-db = passwd
………………………
authz-db = authz
6.2 修改passwd
[root@localhost conf]# vi passwd
文件格式如下:
[users] <用户1> = <密码1> <用户2> = <密码2> |
其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示 例:
[users]
alan = password
king = hello
这个里面的user表示当前test版本库的成员.
6.3 修改authz
[root@localhost conf]# vi authz
用户组格式:
[groups] <用户组名> = <用户1>,<用户2> |
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。用户必须要在 passwd文件里能找到,它是给那个里面的user赋权限.
版本库目录格式:
[/目录] @<用户组名> = <权限> <用户名> = <权限> |
示例:
[groups]
admin = alan
[/]
@admin = rw
[/svn/p1/WebProject]
king = rw(表示king能够读写/svn/p1/WebProject目录下的所有信息)
[/svn/p1/web]
zp=r(表示zp能够读/svn/p1/web目录下的所有信息)
到此svn服务器的的安装和配置就已经完成了