一、软件包下载

:: 为什么apr-util用1.5的版本编译,是前面试过最新的1.6.3,结果出现了一堆找不到XML_的错误,后面网上找了些资料说回到1.5版本就正常了。

二、安装依赖

这里依赖包直接用yum来安装,想编译的本质是想用root用户启动httpd,默认下载的都不允许用root,这个需要修改源码编译。

yum -y install gcc gcc-c++ make pcre-devel expat-devel perl pcre

三、编译安装

1、 安装apr-1.6.3.tar.gz

tar -zxf apr-1.6.3.tar.gz
cd apr-1.6.3
./configure   #安装不指定路径时 默认安装到/usr/local/apr
make & make install

2、安装apr-util-1.5.4.tar.gz

tar -zxf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --with-apr=/usr/local/apr  #安装不指定路径时 默认也安装到/usr/local/apr
make & make install

3、安装 httpd-2.4.63

3.1 修改文件允许root运行

在源码中,找到include/http_config.h 文件,在最前面添加如下语句

#ifndef BIG_SECURITY_HOLE
#define BIG_SECURITY_HOLE
#endif

3.2 编译

tar -zxf httpd-2.4.63.tar.gz
cd httpd-2.4.63
./configure --prefix=/usr/local/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite -enable-modules=most --enable-mpms-shared=all --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config
make & make install

3.3 测试

编辑/usr/local/httpd/conf/httpd.conf文件,找到UserGroup修改为root

Listen 8080 # 应为80端口给了nginx,这里改一下端口
ServerName 127.0.0.1:8080

User root
Group root
/usr/local/httpd/bin/apachectl -k start

查看,httpd已经是root用户启动了

4、安装和subversion

tar –zxf subversion-1.14.5.tar.gz
cd subversion-1.14.5
# 再将 sqlite-amalgamation-3081101.zip解压成sqlite-amalgamation目录直接放到subversion-1.14.5目录下

./configure --prefix=/usr/local/svn --with-apxs=/usr/local/httpd/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-zlib --enable-maintainer-mode --with-lz4=internal --with-utf8proc=internal

测试:

/usr/local/svn/bin/svnserve --version

四、配置Apache+Svn

1、将svn目录下的mod_dav_svn.somod_dav_svn.so复制到http目录的modules目录中

cp /usr/local/svn/libexec/mod_* /usr/local/httpd/modules/

2、加载httpd中的这二个模块

编辑/usr/local/httpd/conf/httpd.conf文件,添加

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

3、配置SVN转发

/usr/local/httpd/conf/httpd.conf文件最后添加,装http根路径转到svn目录下

<Location />
        DAV svn
        SVNPath /home/svn/
        AuthType Basic
        AuthName "Authorization Realm"
        AuthUserFile /home/svn/passwdfile
        AuthzSVNAccessFile /home/svn/authz
        Require valid-user
        SVNAdvertiseV2Protocol Off
</Location>
  • SVNPath:svn项目目录
  • AuthUserFile 账号密码文件,这里后面需要新建一个,这密码是加密的与svn服务配置的账号密码一样就可以了
  • AuthzSVNAccessFile 权限设置文件,与svn服务使用同一个文件

配置好后,重启httpd

/usr/local/httpd/bin/apachectl -k restart

五、创建Svn仓库

# 创建svn仓库
/usr/local/svn/bin/svnadmin create /home/svn

# user svn登录用户名 
# password svn密码,这个与svn用户配置一样就可以了
/usr/local/httpd/bin/htpasswd -cb /home/svn/passwdfile user password

# 如果非root用户启动httpd,需要修改svn目录的权限
chown apache:apache -R /home/svn

六、用systemctl管理并设置开机启动

vim /usr/lib/systemd/system/httpd.service

[Unit]
Description=httpd web
After=syslog.target  network.target
Wants=network.target

[Service]
PIDFile=/usr/local/httpd/logs/httpd.pid  
ExecStart=/usr/local/httpd/bin/httpd  
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target
vim /usr/lib/systemd/system/svnserve.service

[Install]
WantedBy=multi-user.target

[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=/usr/local/svn/bin/svnserve
ExecStart=/usr/local/svn/bin/svnserve --daemon -r /home/svn

[Install]
WantedBy=multi-user.target

设置开机启动

systemctl enable httpd
systemctl enable svnserve