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

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 JDKJava SE Development Kit 6u23 jdk-6u23-linux-i586.bin

1.2 ApacheUnix Source: httpd-2.2.17.tar.gz [PGP] [MD5] [SHA1]

1.3 Subversionsubversion-1.6.15.tar.gz

subversion-1.6.15.tar.gz

稳定

hwright 20101124日 星期三,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可以连文件夹一起拷贝,rrecursive 递归)

 

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 CLASSPATHjava加载类(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 javacjava代码编译成class文件

[root@localhost ~]# java /usr/local/mytools/workspace/helloJDK java执行编译过的class文件

~~~~~~~ Hello JDK ~~~~~~~~

 

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

2.2ApacheSVN的整合

2.2.1          安装所需的软件包,比如aprapr-utilzlib等等

[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软件,里面包含需要的aprapr-utilzlib等包

[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安装目录,发现只有binbuild等等,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          ApacheSVN的整合

1.       进入SubVersion的安装目录,查找到mod_dav_svn.somod_authz_svn.so两个文件,将它们拷贝到Apachemodules目录下

进入subversion1.6.15目录查找mod_dav_svn.somod_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用户是系统唯一的管理员账户,拥有至高无上的权力,是真实用户,可登录系统,可操作系统任何文件和命令。

  虚拟用户是伪用户或假用户,与真实用户区分开来,这类用户不具备登录系统的能力,但却是系统运行不可缺少的用户,比如bindaemonadmftpmail等,这类用户都是系统自带的,当然也可以手动添加。

普通用户由系统管理员添加,能登录系统,只能操作自己的家目录的内容,权限有限

 

[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          SVNRootsvnaccessfile说明

用户对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,成功

 

Linux下SVN的安装与配置及相关问题解决方案_第1张图片

 

你可能感兴趣的:(Linux下SVN的安装与配置及相关问题解决方案)