CentOS7编译安装Subversion1.9.7及Apache2.4.27并集成

来源:互联网 发布:广州质量追溯软件 编辑:程序博客网 时间:2024/06/18 07:58
1.前言

本篇将介绍如何编译安装SVN服务器端管理软件subverion和Web服务器Apache。本来在前面的系列文章已经讲过使用Nginx作为Web服务器的,所以我一直在找有关subverion集成nginx的资料,在此过程中找到了Nginx作者Igor Sysoev在回答别人类似问题的网址,网址是http://mailman.nginx.org/pipermail/nginx/2007-January/000504.html,不过按照Igor Sysoev的回答并没有成功,因此仍回到Apache与SVN集成,然后再通过Nginx反向代理到Apache的办法。本来直接安装subversion即可实现版本控制,但由于这种方式有一些问题,比如密码是明文保存到文件的,因此采用了Apache集成Nginx的方式。


2.准备
本篇主要讲述编译和配置subversion和Apache(即httpd),但由于编译这两个软件依赖于别的类库,于是总共需要下面7个文件才能完成subverion1.9.5和httpd2.4.25的编译安装,即apr、apr-util、scons、serf、sqlite-amalgamation、httpd和subversion。
我们以root的身份登录系统,将其通过wget下载到/root目录下。
subversion-1.9.5:wget http://mirrors.hust.edu.cn/apache/subversion/subversion-1.9.5.tar.gz
httpd-2.4.25:wget https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.25.tar.gz
serf-1.3.9:wget https://www.apache.org/dist/serf/serf-1.3.9.tar.bz2
scons-2.5.1:wget http://prdownloads.sourceforge.net/scons/scons-2.5.1.tar.gz
sqlite-amalgamation-3190300:wget http://www.sqlite.org/2017/sqlite-amalgamation-3190300.zip
apr-1.5.2:wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.5.2.tar.gz
apr-util-1.5.4:wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.5.4.tar.gz


3.编译安装
3.1预备
考虑到在编译过程中需要一些依赖库支持,通过下面的命令来安装:
yum install zlib zlib-devel openssl openssl-devel –y
另外由于serf需要用scons来编译,而编译scons又需要python支持,因此需要安装python:
yum install python –y


3.2编译安装apr

./configure --prefix=/home/programs/apr
make && make install
说明:apr-util依赖于apr,因此优先于apr-util编译。参数中--prefix=/home/programs/apr表示编译后的安装目录为/home/programs/apr。


3.3编译安装apr-util

./configure --prefix=/home/programs/apr-util --with-apr=/home/programs/apr
make && make install

说明:参数中--prefix=/home/programs/apr-util表示编译后的安装目录为/home/programs/apr-util,同时通过--with-apr=/home/programs/apr参数指定了它的依赖项apr的目录为/home/programs/apr。


3.4编译安装scons
python setup.py install --prefix=/home/programs/scons
说明:serf必须使用scons来编译,因此优先于serf编译。参数中--prefix=/home/programs/apr表示编译后的安装目录为/home/programs/apr。


3.5编译安装serf

cd /root/serf-1.3.9
/home/programs/scons/bin/scons prefix=/home/programs/serf APR=/home/programs/apr APU=/home/programs/apr-util
/home/programs/scons/bin/scons install

说明:参数中- prefix=/home/programs/serf表示编译后的安装目录为/home/programs/serf。


3.6编译安装Apache(httpd)
./configure --prefix=/home/programs/httpd-2.4.27  --enable-dav --enable-so  --enable-ssl --enable-cgi  --enable-rewrite  --with-zlib --with-pcre --with-apr=/home/programs/apr --with-apr-util=/home/programs/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-dav --enable-dav-fs --enable-maintainer-mode
make && make install

说明:因subverion编译时会将生成的mod_dav_svn.so及mod_authz_svn.so拷贝到/home/programs/httpd-2.4.27/modules目录,并且在/home/programs/httpd-2.4.27/conf/httpd.conf设置为自动加载。参数中--prefix=/home/programs/httpd-2.4.27表示编译后的安装目录为/home/programs/httpd-2.4.27。


3.7安装subverion
由于编译subversion需要sqlite支持,所以将下载的sqlite-amalgamation-3190300.zip解压后将文件夹重命名为sqlite-amalgamation并拷贝到/home/download/subversion-1.9.7/目录下。
unzip /home/download/sqlite-amalgamation-3190300.zip -d /home/download/subversion-1.9.7/sqlite-amalgamation
cd /home/download/subversion-1.9.7
./configure --prefix=/home/programs/svn --with-apr=/home/programs/apr --with-apr-util=/home/programs/apr-util --with-serf=/home/programs/serf --enable-mod-activation --with-apache-libexecdir=/home/programs/httpd-2.4.27/modules --with-apxs=/home/programs/httpd-2.4.27/bin/apxs  --without-berkeley-db
make && make install
支持已经完成了subversion和apache的编译和安装,这里都是通过—prefix参数将编译后的安装目录设置到了/home/programs目录下。


4.配置

4.1用户配置
在本实例中subversion的进程和Apache的进程将会以svn来运行,因此需要创建svn用户账号。

useradd svn -s /sbin/nologin -M


4.2环境变量配置
为便于每次运行命令时需要输入冗长的路径信息(或切换到其所在目录),在本处将本系列文章截止到目前的应用程序都添加环境变量中,类似Windows中设置path环境变量,在CentOS7中是在/etc/profile中配置,截止目前在文件末尾添加的内容:
export PATH=$PATH:/home/programs/httpd-2.4.27/bin:/home/programs/svn/bin
即将svn和Apache的可执行文件的路径都添加到PATH环境变量中,以后执行这些命令时可以直接执行了。

最后,通过source /etc/profile使我们的配置生效。


4.3SVN配置
由于将svn的可执行文件路径添加到/etc/profile中的PATH变量中了,因此可直接执行svn安装目录下的bin子目录中的文件;比如查看版本svn --version。但是第一次执行svn --version命令的时候会报错:
svn: error while loading shared libraries: libserf-1.so.1: cannot open shared object file: No such file or directory
解决办法就是在/etc/ld.so.conf.d/目录下手动创建serf-1.3.9.conf文件,文件内容是libserf-1.so.1文件所在的目录,在本虚拟机中libserf-1.so.1在/usr/local/lib下,因此serf-1.3.9.conf文件内容如下:
/usr/local/lib
将文件保存并退出后再通过如下命令查看加载情况:

/sbin/ldconfig –v


4.3.1创建svn版本库
mkdir -p /home/programs/svn/repo
cd/home/programs/svn/repo
svnadmin create phpproject
svnadmin create javaproject
svnadmin create dotnetproject
即创建/home/programs/svn/repo目录,此目录为svn的根目录,并在此目录下依次创建了phpproject、javaproject和dotnetproject三个版本库。
因为我们最终是要让subversion支持多个版本库,因此关于svn账号、授权的信息不能放在某个单独的库下,因此我们直接放在/home/programs/svn/repo这个svn的版本库根目录下,主要是三个文件:
authz:用于存放版本库的授权信息。
passwd:用于存放账号和密码。
svnserve.conf:用于svnserve形式启动的配置文件。
我们从phpproject版本库中拷贝出这三个文件,然后基于它们修改作为多版本库的控制文件:
cp/home/programs/svn/repo/phpproject/conf/authz /home/programs/svn/repo/conf/authz
cp/home/programs/svn/repo/phpproject/conf/passwd /home/programs/svn/repo/conf/passwd
cp/home/programs/svn/repo/phpproject/conf/svnserve.conf /home/programs/svn/repo/conf/svnserve.conf
4.3.2创建svn账号
为安全起见,将用户密码作处理后保存到文件中,这就需要使用Apache自带的htpasswd工具,它可以生成passwd文件,其中用户名为明文,用户密码为md5哈希值。
htpasswd -c /home/programs/svn/repo/conf/passwd sgh@lequangroup.com #once only
htpasswd /home/programs/svn/repo/conf/passwd xx@lequangroup.com

注意:htpasswd位于/home/programs/httpd-2.4.27/bin,即我们编译安装Apache时指定的目录,因为将/home/programs/httpd-2.4.27/bin添加到/etc/profile中了,所以可以直接htpasswd,如果指定的目录不存在passwd文件,就需要带上”-c”参数,表示创建文件,但是之后就不需要了。如果每次都带上,反而只有最后一次的执行结果。
最终生成的文件内容如下:
wKioL1lCs86iOIHWAACWYgof_P0413.png-wh_50 
4.3.3编辑svnserve.conf文件
可以通过vim/home/programs/svn/repo/conf/svnserve.conf来编辑,最终文件内容如下:
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
[sasl]

4.3.4编辑配置SVN授权文件
执行命令vim/home/programs/svn/repo/conf/authz来编辑,最终文件内容如下:
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
developers = jerry,haley
administrators = root,admin

[/]
@administrators=rw
haley = r
jerry = rw
* = r

[javaproject:/]
@administrators = r
@developers = rw

[phpproject:/]
root = rw
haley = rw
jerry = r

[dotnetproject:/]
@administrators = rw
jerry = rw
说明:在上面的文件中前面带”@”的是用户组,例如dotnetproject这个版本库administrators组有读写权限,而jerry这个用户也有读写权限,而其它用户则没有权限。


4.4subverion与apache集成
直接使用svn协议来操作也是可以的,不过目前比较流行的还是subverion与apache集成,然后借助一个web的svn管理工具,这样svn管理起来就方便很多了。在这一节就将如何讲subverion与apache集成。
因为在当前服务器上已经安装nginx作为web server,并且使用了80端口,所以只好让apache使用8000端口了。这里提一下,网上到处是svn与apache集成的介绍,很少有svn与nginx集成的介绍。我找了一些英文资料,发现在nginx网站上也有人在2007年问过这个问题,而nginx的作者、俄罗斯的Igor Sysoev也回答过这个问题,网址是:http://mailman.nginx.org/pipermail/nginx/2007-January/000504.html,按照作者的说法是可能通过配置支持的,但我没试过,有感兴趣的可以试一下。

4.4.1 httpd.conf的修改

在apache的配置文件httpd.conf需要修改的地方有:
修改监听端口,由80修改为8000;
更改apache运行时所使用的user和group,均由daemon修改为svn;
include一个关于svn配置的文件,文件名为httpd-svn.conf,位于/home/programs/httpd-2.4.27/conf/extra/。注:这个文件默认没有,是稍后将创建的。
同时,为便于按日跟踪apache日志,利用了/home/programs/httpd-2.4.27/bin/目录下的rotatelogs来切割日志文件,这样一来ErrorLog和CustomLog的配置就变为:
ErrorLog "|/home/programs/httpd-2.4.27/bin/rotatelogs/home/programs/httpd-2.4.27/logs/error_log.%Y%m%d 86400 480"
CustomLog "|/home/programs/httpd-2.4.27/bin/rotatelogs/home/programs/httpd-2.4.27/logs/access_log.%Y%m%d 86400 480" common
上述命令中86400表示以天为单位分割,86400是一天的总秒数,而480表示按照东八时区的时间来分割(与UTC相隔8小时,480分钟)。
同时,由于编译时参数的制定,启用了多个mpm模块,仅保留一个将其余的注释掉,否则启动时会报错。修改前后的对比如下图:
wKioL1lCs-uwxzTHAABqs1aJidk214.png-wh_50 

上图中有红色框的都是修改后的内容,而下方的就是修改前的内容。


4.4.2在Apache中增加svn的相关配
首先在/home/programs/httpd-2.4.27/conf/extra/目录创建前文提到的httpd-svn.conf文件:
vim/home/programs/httpd-2.4.27/conf/extra/httpd-svn.conf
文件内容如下:
<Location /svn>
  DAV svn
  #support more repositories
  SVNParentPath /home/programs/svn/repo

  #list all repositories
  #SVNListParentPath on
  AuthType Basic
  AuthName "Please input Username and Password"
  AuthUserFile /home/programs/svn/repo/conf/passwd
  AuthzSVNAccessFile /home/programs/svn/repo/conf/authz
  Require valid-user
</Location>
在这里使用的是多版本库的配置,使用了SVNParentPath设置,并且有关用户账号、授权信息都是指向svn版本库的根目录下的文件。
4.4.3权限设置
因为设置了Apache以svn/svn这个user/group来运行,因此需要让svn账号有读写/home/programs/svn目录下的权限,可执行命令:

chown –R svn:svn/home/programs/svn/repo

chmod –R 777 /home/programs/svn/repo



5.检验配置

在浏览器中输入 http://192.168.1.151:8000/svn/lq


 



原创粉丝点击