[置顶] Centos 使用源码安装subversion apache-httpd

时间:2022-09-09 08:41:13

Centos 使用源码安装subversion apache-httpd

需要用到的安装包有:

subversion-1.9.3.tar.gz
httpd2-2.4.20.tar.gz
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
sqlite-autoconf-3120100.tar.gz
zlib-1.2.8.tar.gz
pcre-8.37.tar.gz

下载链接:
http://apache.opencas.org/subversion/subversion-1.9.3.tar.gz
http://mirrors.noc.im/apache//httpd/httpd-2.4.20.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
https://www.sqlite.org/2016/sqlite-autoconf-3120200.tar.gz
http://zlib.net/zlib-1.2.8.tar.gz
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz

然后解压缩上面那些压缩包。如果在linux中,看到的应该是这个样子。
[置顶]        Centos 使用源码安装subversion apache-httpd

他们的依赖关系是这个样子

[置顶]        Centos 使用源码安装subversion apache-httpd

假设的所有的工具的安装目录都是/usr/local/xxxx

安装apr,进入apr的解压缩目录apr-1.5.2后,执行以下命令

./configure --prefix=/usr/local/apr && make && make install

安装apr-util,进入apr-util的解压缩目录apr-util-1.5.4后,执行以下命令

./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr && make && make install

安装sqlite,进入sqlite的解压缩目录sqlite-autoconf-3120100后,执行以下命令

./configure --prefix=/usr/local/sqlite && make && make install

安装zlib,进入zib的解压缩目录zlib-1.2.8后,执行以下命令

./configure --prefix=/usr/local/zlib && make && make install

安装pcre,进入pcre的解压缩目录pcre-8.37后,执行以下命令

./configure --prefix=/usr/local/pcre && make && make install

安装httpd,进入httpd的解压缩目录httpd2-2.4.20后,执行以下命令

./configure --prefix=/usr/local/apache --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-dav --enable-so && make && make install

--enable-dav --enable-so可以方便加载mod_dav_svn.somod_authz_svn.so文件。但是究竟是不是必须的呢,并没有验证。

安装subversion,进入subversion的解压缩目录subversion-1.9.3后,执行以下命令

./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite --with-zlib=/usr/local/zlib --with-apxs=/usr/local/apache/bin/apxs --with-apache-libexecdir=/usr/local/subversion/libexecdir --enable-mod-activation --enable-mod-activation

make

make install

说明:--with-*的参数指定编译的时候需要哪些工具;--with-apxs=/usr/local/apache/bin/apxs--enable-mod-activation是必须的,可以编译安装后生成mod_dav_svn.somod_authz_svn.so文件,这两个文件是在和httpd集成的时候所需要的。
如果在执行make的时候出现xx.lo is not valid object之类的错误,请删除解压缩的subversion1.9.3目录,并且重新解压缩,重新执行以上 ./configure...makemake install 这些命令。

至此,subversion已经安装完成,下面需要让subversionhttpd进行集成,达到可以加密用户密码和使用http协议访问SVN库的目的。

现在开始创建SVN库,并且配置httpd.conf文件。

为了方便调用svn和httpd中的命令,将他们加入到环境变量中。

vim /etc/profile

在文件的最末尾加上

PATH=$PATH:/usr/local/subversion/bin:/usr/local/apache/bin

退出编辑之后,执行

source /etc/profile

是环境变量立即生效。

使用svnadmin创建svn仓库,假设仓库创建在/svnrepos目录下面,仓库名字叫testrepo

mkdir /svnrepos
svnadmin create /svnrepos/testrepo

配置httpd.conf文件。

vim /usr/local/apache/conf/httpd.conf

在文件末尾加上

#加载svn的两个so文件
LoadModule dav_svn_module /usr/local/subversion/libexec/mod_dav_svn.so
LoadModule authz_svn_module /usr/local/subversion/libexec/mod_authz_svn.so
#配置svn仓库
<Location /testrepo>
DAV svn
SVNPath /svnrepos/testrepo
AuthzSVNAccessFile /svnrepos/testrepo/conf/authz
AuthType Basic
AuthName "testrepo"
AuthUserFile /svnrepos/testrepo/conf/passwd
Require valid-user
</Location>

在httpd.conf文件中查找 ServerName,然后把ServerName 的值改成localhost:80。如果这行被注释了,就取消这行的注释。

SVN库的基本配置
修改testrepo库下面的配置文件/svnrepos/testrepo/conf/svnserve.conf,在[general]标签下面添加一下配置

anon-access = none
auth-access=write
password-db=/hkcts/svnrepos/conf/passwd
authz-db=/hkcts/svnrepos/conf/authz

subversionhttpd集成的时候,subversion就作为了httpd的一个组件,添加用户、重置用户密码就通过httpd的命令htpasswd来执行。添加用户和修改用户是同一个命令,新建一个用户之前,最好检查一下是否已经含有需要创建的用户,要不然一下就重置了这个用户的密码。另外第一次使用htpasswd创建用户的时候,svn库中原来的passwd文件格式和htpasswd将要使用的格式是不相符的,这时候需要删除原来的passwd文件,让htpasswd命令自己创建passwd文件。具体使用方式见下面的命令

# 首次在再passwd文件中使用htpasswd创建用户,执行下面的命令。
# -c表示要创建后面指定的文件
htpasswd -bc AuthUserFile指定的passwd文件 用户名 用户密码

# 不是首次的话,去掉-c这个属性
htpasswd -b AuthUserFile指定的passwd文件 用户名 用户密码

我们新建一个用户test,密码是123456,在/svnrepos/testrepo/conf目录下执行命令

# 首次在再passwd文件中使用htpasswd创建用户,执行下面的命令
htpasswd -bc passwd test 123456

#不是首次的话,去掉-c这个属性
htpasswd -b passwd test 123456

给test用户赋予所有目录的权限

[/]
test = rw

启动httpd服务

apachectl start

如果你的命令正常启动,恭喜你运气很好。
我的系统在启动httpd的时候出现了一个错误是undefined symbol: dav_register_privoder,后来在加载两个so文件之前,首先加载了mod_dav.so问题就解决了。在/usr/local/apache/conf/httpd.conf中修改。

#这句话在httpd.conf中已经存在,可以使用查找命令查找一下,然后直接取消注释就好
#需要放到LoadModule dav_svn_module.....那两句话前面
LoadModule dav_module modules/mod_dav.so

然后再次启动

apachectl stop
apachectl start

你的svn路径已经变成了

http://127.0.0.1/testrepo

另外还有一点需要注意,如果你是使用root账户执行的以上命令,可能会遇到在提交SVN的时候出现提交不上的情况,我这里的解决办法是把SVN库中的所有文件夹的权限设置成777。针对testrepo目录执行

chmod -R 777 testrepo

OVER!