一、软件包下载
- apr-1.6.3.tar.gz: http://archive.apache.org/dist/apr/apr-1.6.3.tar.gz
- apr-util-1.5.4.tar.gz: http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
- httpd-2.4.63: https://dlcdn.apache.org/httpd/httpd-2.4.63.tar.gz
- subversion-1.14.5.tar.gz: https://dlcdn.apache.org/subversion/subversion-1.14.5.tar.gz
- sqlite-amalgamation-3081101: https://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip
:: 为什么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
文件,找到User
和Group
修改为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.so
和mod_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