您的位置:首页 > 运维架构 > Linux

Linux下SVN的安装与配置及相关问题解决方案

2010-12-30 17:24 971 查看

1.
环境准备

1.1
系统环境

[root@localhost mysql]# uname -ar
Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux

1.2
所需软件

1.1
JDK:Java SE Development Kit 6u23
jdk-6u23-linux-i586.bin
1.2
Apache:Unix Source:
httpd-2.2.17.tar.gz [PGP]
[MD5] [SHA1]

1.3
Subversion:subversion-1.6.15.tar.gz
subversion-1.6.15.tar.gz

稳定

hwright
于 2010年11月24日 星期三,8:10:13

Subversion 1.6.15 (MD5: cd7d613d86eb6465fdaf0f34a6cfe9ec)

信息
wget http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.gz

1.3 目录规整

1.
将上述所需软件挂载到/mnt下
2.
将/mnt下的svn目录拷贝到/usr/local/mytools下
[root@localhost ~]# ls /mnt/svn
httpd-2.2.17.tar.gz
jdk-6u23-linux-i586.bin subversion-1.6.15.tar.gz
[root@localhost ~]# cp -R /mnt/svn /usr/local/mytools/
说明:cp –R可以连文件夹一起拷贝,r:recursive
递归)

2.
安装与配置

2.1
JDK的安装与配置

2.1.1
安装

[root@localhost svn]# ls /usr/local/mytools/svn
(列出/usr/local/mytools/svn下的所有内容)
httpd-2.2.17.tar.gz
jdk-6u23-linux-i586.bin subversion-1.6.15.tar.gz

[root@localhost svn]# cd /usr/local/mytools/svn
(进入svn目录)

[root@localhost svn]# ./jdk-6u23-linux-i586.bin
(在当前目录执行jdk-xxx.bin文件进行解压,出现如下信息表示解压成功)
Java(TM) SE Development Kit 6 successfully installed.

Product Registration is FREE and includes many benefits:
* Notification of new versions, patches, and updates
* Special offers on Oracle products, services and training
* Access to early releases and documentation

Product and system data will be collected. If your configuration
supports a browser, the JDK Product Registration form will
be presented. If you do not register, none of this information
will be saved. You may also register your JDK later by
opening the register.html file (located in the JDK installation
directory) in a browser.

For more information on what data Registration collects and

how it is managed and used, see: http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html
Press Enter to continue.....

Done.

[root@localhost svn]# ls
(解压完成后查看,多了一个目录jdk1.6.0_23)
httpd-2.2.17.tar.gz
jdk1.6.0_23
jdk-6u23-linux-i586.bin subversion-1.6.15.tar.gz

2.1.2
配置环境变量

[root@localhost jdk]# cp -R jdk1.6.0_23/ /usr/local/bin/
(为方便管理,把解压后的jdk目录拷贝到/usr/local/bin/目录下)

[root@localhost workspace]# vi /etc/profile
(在/etc/profile文件的export行的前面设置环境变量)

JAVA_HOME=/usr/local/bin/jdk1.6.0_23
(设置JDK HOME,最好一定不要带空格哦)
CLASSPATH=.;$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar:$CLASSPATH
(CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设置CLASSPATH,前面一定要加上.;(
.表示当前路径 ;为分隔符)
,否则可能会报错。注意:两个具体的参数中间用;分割,如$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar,参数和变量之间用:分割,如$JAVA_HOME/lib/tools.jar:$CLASSPATH)

PATH=$JAVA_HOME/bin:$PATH
(Path使得系统可以在任何路径下识别java命令,记得最后面一定要跟上
:$PATH,目的是把系统原理的PATH追加到后面,否则原理的PATH丢失,系统的很多软件或操作就无法使用了)

export JAVA_HOME PATH CLASSPATH

检查环境变量是否配置成功
[root@localhost ~]# java -version
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode)

写程序检查
[root@localhost ~]#vi /usr/local/mytools/workspace/HelloJDK.java
Public class HelloJDK{

Public static void main(String[] args){

System.out.println(“~~~~~~~Hello JDK~~~~~~~”);
}
}
[root@localhost ~]# javac /usr/local/mytools/workspace/ helloJDK.java
(用javac将java代码编译成class文件)
[root@localhost ~]# java /usr/local/mytools/workspace/helloJDK
(用java执行编译过的class文件)
~~~~~~~ Hello JDK ~~~~~~~~

至此在linux下面进行的JDK的安装和配置已经完成啦,继续下面的安装咯

2.2Apache与SVN的整合

2.2.1
安装所需的软件包,比如apr、apr-util和zlib等等

[root@localhost svn]#cd /usr/local/mytools/svn
[root@localhost svn]#wget
http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.gz (获取subversion-deps-1.6.12.tar.gz软件,里面包含需要的apr,apr-util,zlib等包)
[root@localhost svn]#tar zxvf subversion-deps-1.6.12.tar.gz
[root@localhost svn]#cd subversion-1.6.12

[root@localhost subversion-1.6.12]#cd /apr
(进入apr包,安装)
[root@localhost apr]#./buildconf
[root@localhost apr]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/apr && make && make
install

[root@localhost apr]#cd ../apr-util(进入apr-util包,安装)
[root@localhost apr-util]#./buildconf
[root@localhost apr-util]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/apr-util --with-apr=/usr/local/bin/subversion1.6.15/svn/apr
&& make && make install

[root@localhost apr-util]cd ../zlib
(进入zlib包,安装,解决了svn编译错误configure:
error: subversion requires zlib)
[root@localhost zlib]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/zlib && make && make install

[root@localhost openssl-1.0.0c]# ./config --prefix=/usr/local/bin/subversion1.6.15/svn/openssl && make && make install
(下载openssl包并进行安装,为后续安装neon做准备)

[root@localhost neon]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/neon --with-apr=/usr/local/bin/subversion1.6.15/svn/apr --with-apr-util=/usr/local/bin/subversion1.6.15/svn/apr-util
--with-openssl=/usr/local/bin/subversion1.6.15/svn/openssl
&&make && make install(安装neon)

2.2.2
Apache的安装

[root@localhost httpd-2.2.17]# ./buildconf
(进入apache的源文件安装目录,先buildconf,一定要先做这一步,否则Apache安装后文件夹不正确。刚开始没有执行./buildconf
直接./configure && make && make install进行安装的,安装完成后进入apache安装目录,发现只有bin、build等等,conf等配置文件夹都丢失,于是到官网了解,在http://apr.apache.org/compiling_unix.html页面发现有如下提示:Note
that if you are compiling directly from the Subversion repository, you'll need GNU autoconf and GNU libtool installed, and you'll need to run ./buildconf before running the commands listed above.
于是先执行./buildconf ,然后再./configure && make && make install,安装完成后目录已经齐全)

[root@localhost httpd-2.2.17]#./configure --prefix=/usr/local/bin/apache2.2.17 --enable-dav --enable-so && make && make install
(配置,编译,安装)
[root@localhost httpd-2.2.17]# ls /usr/local/bin/apache2.2.17/
(安装完成后查看如果包含如下文件或文件夹,表示安装成功)
apr
bin cgi-bin error
icons lib man
modules
apr-util
build conf htdocs
include logs manual
zlib

2.2.3
SVN的安装

[root@localhost svn]#cd /usr/local/mytools/svn
(进入SVN的安装文件目录)

[root@localhost svn]# tar zxvf subversion-1.6.15.tar.gz
(用tar命令解压tar.gz文件)

[root@localhost svn]# ls
(查看解压后的文件)
httpd-2.2.17.tar.gz
subversion-1.6.15 subversion-1.6.15.tar.gz

[root@localhost svn]# cd subversion-1.6.15
(进入解压目录)

[root@localhost subversion-1.6.15]# ls
(查看解压目录下的文件)
aclocal.m4
build-outputs.mk contrib
HACKING README www
autogen.sh
CHANGES COPYING
INSTALL subversion
BUGS
COMMITTERS doc
Makefile.in tools
build
configure gen-make.opts
notes TRANSLATING
build.conf
configure.ac gen-make.py
packages win-tests.py

[root@localhost subversion-1.6.15]# ./configure –help
(查看configure的帮助文档)

[root@localhost svn]#sqlite-amalgamation-3.6.13.tar.gz
(下载并加压该包)
[root@localhost svn]tar xzvf sqlite-amalgamation-3.6.13.tar.gz
[root@localhost svn]# mkdir /usr/local/mytools/svn/subversion-1.6.15/
sqlite-amalgamation | cp sqlite-3.6.13/
sqlite3.c /usr/local/mytools/svn/subversion-1.6.15/
sqlite-amalgamation (在svn安装包下创建sqlite-amalgamation,并且将sqlite-3.6.13包中的sqlite3.c拷贝到sqlite-amalgamation,可以解决svn编译时出现的configure:
error: Subversion requires SQLite
问题)

[root@localhost subversion-1.6.15]# ./configure --prefix=/usr/local/bin/subversion1.6.15 --with-apxs=/usr/local/bin/apache2.2.17/bin/apxs
--with-apr=/usr/local/bin/subversion1.6.15/svn/apr --with-apr-util=/usr/local/bin/subversion1.6.15/svn/apr-util --with-zlib=/usr/local/bin/subversion1.6.15/svn/zlib --with-ssl --enable-maintainer-mode
(在当前目录下执行configure命令进行配置,--with-apxs参数表示将SVN安装到Apache下面)
[root@localhost subversion-1.6.15]#make
[root@localhost subversion-1.6.15]#make install
(在make时出错/usr/bin/ld:
cannot find -lexpat

collect2: ld returned 1 exit status

make: *** [subversion/svn/svn] Error 1
原因缺少了lexpat包,使用yum查找到相应的源并进行安装
yum list expat*(估计包升级了,如果查找lexpat找不到就找expat包)
yum install expat****.386
使用yum安装后源文件一般存储在/var/cache/yum目录下
如果使用的是光盘安装,可以在安装光盘中找到相应的expat库文件

2.2.4
Apache与SVN的整合

1.
进入SubVersion的安装目录,查找到mod_dav_svn.so和mod_authz_svn.so两个文件,将它们拷贝到Apache的modules目录下
(进入subversion1.6.15目录查找mod_dav_svn.so和mod_authz_svn.so两个文件,没有找到,于是到Apache2.2.17/modules下面查找,发现这两个文件已经在安装的时候被拷贝到modules目录下了)
2.
修改Apache的安装目录/conf目录下的httpd.conf
2.1
设置监听:Listen 192.168.1.249:8898
2.2
加载Module,按上述步骤安装好后,这两个module配置项已经在httpd.conf中了
LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so
2.3
在httpd.conf文件最后添加如下信息
<Location /svn>
#表示以/svn的方式访问
DAV svn
SVNParentPath /usr/local/mytools/SVNRoot #设置SVN的父目录,这样一个Apache配置可以对应多个SVN项目,如果想只对应单个项目,可以这样设置SVNPath
/usr/local/mytools/SVNRoot/prj_test_002 #跟具体的项目名称
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile /usr/local/mytools/SVNRoot/passwd
#访问SVN的用户信息,在此设置的用户可以访问所有SVN项目
#AuthzSVNAccessFile /usr/local/mytools/SVNRoot/svnaccessfile #访问SVN的权限设置文件,可以从SVN的某个项目的conf文件下面拷贝authz文件并重命名,[root@localhost
SVNRoot]# cp authz /usr/local/mytools/SVNRoot/svnaccessfile
Require valid-user
</Location>

2.4
[root@localhost SVNRoot]#/usr/local/bin/apache2.2.17/bin/htpasswd –c passwd admin

(将passwd文件创建在SVNRoot下面,此处的参数只需要-c即可,passwd是用来保存访问
svn的用户名和密码的,其中上面命令中的admin是用户名,回车后系统要求输入密码和确认密码,输入完成后进入SVNRoot查看vi
passwd,用户名和密码格式为:用户名:加密密码;在linux下,明文密码可能会存在无法操作的现象,所以会采用加密密码)
3. [root@localhost bin]# /usr/local/bin/apache2.2.17/bin/apachectl start
(启动apache服务)
4.
访问使用http:// Listen 192.168.1.249:8899/svn/prj_tester_002即可访问

2.2.5
导入工程到SVN

[root@localhost bin]#svn import /usr/local/mytools/workspace/
http://192.168.1.249:8898/svn/prj_tester_02 -m “import” --username
admin –password manager (将/usr/local/mytools/workspace/工作区的所有内容导入到svn服务器)

(说明:在用svn import的时候老是出现SVN:cannot
create repository “…..x.txn” Permission denied问题,后来在网上查了好多资料,发现有一个说需要把SVNRoot下面的prj_tester_02设置为777的权限,即:chmod
–R 777 prj_tester_02,-R表示递归将prj_tester_02文件夹下的所有的文件和文件夹都修改权限。经过调整后,确实可以创建了。按道理,root用户拥有至高无上的权限,为什么还会存在permission
denied呢?是不是不允许root用户进行svn
import,同时基于安全性考虑,加上对Linux的用户和权限的优良特性的神秘向往,决定新建一个普通用户尝试svn
import)
[root@localhost bin]#groupadd apachesvn
[root@localhost bin]#useradd apachesvn –p apachesvn
[root@localhost bin]#gpasswd –a apachesvn apachesvn
[root@localhost bin]#chown –R apachesvn:apachesvn prj_tester_02
(变更版本库prj_tester_02的所有者)
[root@localhost bin]#chmod –R 755 prj_tester_02
(变更prj_tester_02的权限)
[root@localhost bin]# svn import /usr/local/mytools/workspace/
http://192.168.1.249:8898/svn/prj_tester_02 -m “import” --username admin
–password manager (再次尝试仍然出现permission denied问题,再次尝试chmod
–R 777 prj_tester_02,又可以了,就没有其他的解决办法了,继续google,查到一个方法)
[root@localhost bin]#chown -R daemon prj_tester_02
[root@localhost bin]#chmod -R 755 prj_tester_02
(再次使用尝试svn import,成功了,原来是需要将svn项目资源库的所有者改成daemon啊,顺便了解一下linux的用户:
[root@localhost bin]#vi /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
apachesvn:x:502:502::/home/apachesvn:/bin/bash
在Linux系统中用户是分角色的,不同的用户所拥有的权限和操作也不同,需要注意的是用户的角色主要是通过UID识别的。

root用户是系统唯一的管理员账户,拥有至高无上的权力,是真实用户,可登录系统,可操作系统任何文件和命令。

虚拟用户是伪用户或假用户,与真实用户区分开来,这类用户不具备登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等,这类用户都是系统自带的,当然也可以手动添加。
普通用户由系统管理员添加,能登录系统,只能操作自己的家目录的内容,权限有限


[root@localhost home]# svn import ./test http://192.168.1.249:8898/svn/prj_tester_02 -m "import" --username admin --password manager
(如果在导入工程的时候出现SVN:Path “prj_tester_02”
exist,可尝试使用如下方法解决)
[root@localhost home]# svn import
./test http://192.168.1.249:8898/svn/prj_tester_02/test -m "import" --username admin --password manager
(源文件或目录与资源库中的文件和目录保持一致)

2.2.6
SVNRoot的svnaccessfile说明

用户对SVN的访问权限可以使用svnaccessfile进行配置,该配置是全局的,对SVNRoot下的多个资源库有效,请记得如果使用该文件进行权限控制,需要将httpd.conf文件中#AuthzSVNAccessFile前面的#号去掉
[root@localhost SVNRoot]# vi svnaccessfile
[groups]
#设置用户的所属群组
admin=jack,rose
developer1 = sara,kite
developer2 = wook,cookie
tester=money
docs=john
training=mark

#
为所有库指定默认访问规则
#
所有人可以读,管理员可以写,不被系统识别的危险分子没有任何权限
[/]
* = r
@admin = rw
dangerman =

#
开发人员和测试人员可以完全访问他们的项目版本库
[prj_tester_01:/]
@ developer1 = rw
@ tester = rw
[prj_tester_02:/]
@ developer2 = rw
@ tester = rw

#
文档人员(比如需求人员)对所有的docs目录有写权限
[/trunk/doc]
@ docs = rw

#
培训人员可以完全访问培训版本库
[prj_training:/]
@training = rw

2.2.7
在windows系统中访问svn

所有的配置都结束了,此时可以在windows中进行访问啦,开心的输入http://192.168.1.249:8898/svn/prj_tester_02,得到的答案是无法连接到服务器,到底咋回事儿呢,在linux下明明可以的嘛。哦对了,应该是Linux防火墙的问题,于是乎调整防火墙配置:
[root@localhost home]#chkconfig iptables on | off
(关闭和开启防火墙的配置,需要重启生效,重启后不会复原)
[root@localhost home]#service iptables start | stop
(关闭和开启防火墙服务的配置,立即生效,不需要重启,重启后会复原为原来的防火墙设置)
[root@localhost home]#vi /etc/sysconfig/iptables
(如果iptables在开启状态,可以到/etc/sysconfig/iptables开放端口号,这样外部就可以访问啦)
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8898 -j ACCEPT
经过如上设置后,再次通过windows访问SVN
http://192.168.1.249:8898/svn/prj_tester_02,成功

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: