银河麒麟源码编译安装SVN 1.8.14完整指南

发布时间:2026/10/17 1:58:02
银河麒麟源码编译安装SVN 1.8.14完整指南 简介在银河麒麟操作系统中采用源码方式安装SVN服务器难点在于需手工编译Subversion、apr、apr-util和SQLite等多个组件并完成版本库与权限配置。该资料仅提供1个docx文档包体大小约202KB内容围绕从零搭建SVN的完整命令行操作过程展开主要覆盖组件下载地址、configure编译选型、/etc/profile环境变量设置、svnserve --version验证、版本库创建以及svnserve.conf、passwd、authz三个配置文件的样例写法并给出了svnserve -d -r启动命令与Linux开机自启脚本编写方法可明显缩短排错时间。已有2791人浏览学习对有内网代码托管需求或正在学习SVN搭建的读者具有较高的参考价值。1. 银河麒麟上装 SVN为什么源码编译比 yum 稳如果你拿到一台银河麒麟服务器第一反应大概率是yum install subversion。能装上当然省事但装完你会发现两个问题一是版本普遍偏旧仓库里带的 subversion 往往停在 1.7 或 1.8 的早期版本二是它默认只装了客户端svnserve服务端和svnadmin这套工具链不一定齐全等你真正建库配权限时才发现缺东西。本文走的这条源码编译路线核心是把 Subversion 1.8.14、apr 1.6.5、apr-util 1.6.1 和 SQLite 从头编一遍全部装进/usr/local前缀下和系统自带的库互不干扰。适合内网离线服务器、以及需要在国产系统上自建 SVN 代码托管环境的开发者。跟着这套流程走完你会得到一个版本可控、权限清晰、能开机自启的完整 SVN 服务端。2. 依赖先装齐编译 apr 1.6.5 与 apr-util 1.6.1 的顺序和套路2.1 为什么先装 apr/apr-util动态链接与版本探测Subversion 的 configure 脚本在编译前会做一系列依赖探测其中最挑剔的就是 APRApache Portable Runtime。它本质上是一个跨平台的系统调用封装层SVN 的线程池、文件锁、socket 通信都建立在它之上。系统库里虽然可能带着 apr但版本通常太老或者没装开发头文件configure 一跑就报APR not found之类的错误。另一个容易忽略的点是apr 和 apr-util 必须版本匹配。apr-util 1.6.1 的 configure 会明确检查 apr 的最低版本如果检测到/usr/local/apr下的 apr 版本过旧编译最后一步make make install会直接失败。所以顺序必须是先 apr、再 apr-util、最后才是 subversion。源码包建议从 Apache 官方存档站点下载老版本都在 archive.apache.org 下留底内网环境优先把 tar.gz 包下载到本地再拷入服务器。2.2 apr 1.6.5 编译三步走以我把源码放在/home/server/svn为例下载完apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz和subversion-1.8.14.tar.gz后先解压三个包然后从 apr 开始编。整个过程用 console 切换 root 后执行# 进入 root 模式切到源码目录 su - root cd /home/server/svn/apr-1.6.5 # 指定安装前缀这是后续 sys 路径规划的基础 ./configure --prefix/usr/local/apr # 编译并安装两段命令必须连着跑 make make install这里--prefix/usr/local/apr很关键。很多第一次源码安装的开发者习惯省略 prefix 让它装到/usr/local默认路径但后面 configure subversion 时--with-apr参数会按指定目录去找 apr 的配置文件路径不独立就容易出现头文件和库文件版本混乱。装完后检查一下/usr/local/apr/bin/apr-1-config是否存在这个文件是后续版本探测的入口。2.3 apr-util 与 SQLite依赖关系和常见路径误区apr-util 的 configure 需要显式指定 apr 的位置用--with-apr指向刚才的 prefix这一步网上教程经常写错成系统默认路径导致编译出的库链接到了错误位置的 apr。正确写法是cd /home/server/svn/apr-util-1.6.1 ./configure --prefix/usr/local/apr-util --with-apr/usr/local/apr make make install--with-apr/usr/local/apr告诉 configure 去这个目录下找 apr而不是依赖 PATH 环境变量里的内容。编完之后先别急着编 subversion还有一个隐式依赖是 SQLite。Subversion 1.8 的版本库元数据存储在内嵌的 SQLite 数据库中但源码包不自带 SQLite 源码需要把下载的sqlite-amalgamation-3071501.zip解压后把sqlite3.c等文件放到 subversion 源码树下的一个约定目录里cd /home/server/svn/subversion-1.8.14 mkdir sqlite-amalgamation cp /home/server/svn/sqlite-amalgamation-3071501/* sqlite-amalgamation/提示这一步不做等会 configure 会直接报错说找不到 sqlite3.c而且错误信息写得很隐晦只说 db 初始化失败很容易被误判成编译器问题。3. 编译 Subversion 1.8.14configure 参数与 PATH 环境变量生效3.1 configure 参数--with-apr 与 --with-apr-util 的指向依赖就位后切到 subversion 源码目录执行 configure。这里必须同时指定 apr 和 apr-util 的位置否则 configure 会试图去找系统默认路径然后撞上版本不匹配的问题。另一个可选项是--without-serfSVN 1.8 默认会对 HTTP/HTTPS 访问做功能探测如果只打算用svn://协议做内网托管直接关掉能省去一大串 openssl、serf 相关依赖的折腾cd /home/server/svn/subversion-1.8.14 ./configure --prefix/usr/local/svn \ --with-apr/usr/local/apr \ --with-apr-util/usr/local/apr-util \ --without-serf make make install编译过程比较长机器配置一般的话大概五到十分钟。make 中途如果报错先回看 configure 的输出凡是出现configure: error: no acceptable ...基本都是缺头文件或依赖路径不对跟编译参数本身没关系。我在实际安装中遇到的九成问题都出在这一步要么 sqlite 目录没建要么 apr 路径指错很少是编译器本身的问题。3.2 写环境变量并验证 svnserve --version安装完成后/usr/local/svn/bin下的svn、svnserve、svnadmin三个工具都装好了。但此时 shell 还找不到它们需要把路径写进/etc/profile。我一般用 vim 编辑在文件末尾追加一行vim /etc/profile # 在文件末尾加入以下内容 PATH$PATH:/usr/local/svn/bin export PATH # 保存并退出然后使配置生效 source /etc/profile有两点要注意第一export PATH 这句建议显式写出来有的发行版 profile 只读不导出重启后 PATH 还是会丢第二source 只是对当前会话生效务必重启后再验证一次。然后跑版本确认svnserve --version看到svnserve, version 1.8.14这一行就说明编译链完整。如果系统里原本就装了旧版 subversionwhich svnserve可能指向/usr/bin/svnserve此时把/usr/local/svn/bin调整到 PATH 前面或者干脆把命令写成全路径/usr/local/svn/bin/svnserve避免新旧版本混淆。4. 版本库与三件套配置排查实例与权限设计的核心坑4.1 svnadmin create目录规划与版本库结构版本库做好目录规划很重要我习惯把/home/svn作为所有仓库的根目录每个项目在根目录下建独立子目录。先创建根目录再针对具体项目建库mkdir -p /home/svn/project svnadmin create /home/svn/project执行完svnadmin create后在/home/svn/project下会看到 conf、db、hooks、locks 等目录和 README.txt。db 目录里存的是版本数据hooks 下放的是服务端钩子脚本日常维护最常打交道的是 conf 目录下的三个文件svnserve.conf、passwd、authz。建库这一步本身很少出问题真正的坑全集中在 conf 配置上。4.2 svnserve.conf / passwd / authz三件套逐行解析svnserve.conf 是服务端的主配置内容不多但格式极其敏感。以下是最简可用配置[general] anon-access none auth-access write password-db passwd authz-db authz参数含义如下表所示四个参数缺一不可且要顶格写、前面不能有空格配置项取值作用anon-accessnone匿名用户没有任何权限auth-accesswrite经过身份验证的用户可读写password-dbpasswd指定用户文件路径authz-dbauthz指定权限文件路径passwd 文件定义了用户名和密码格式是用户名 密码等号两侧空格可省略但不能写反[users] admin 123456authz 文件是权限精细控制的核心它比 TCP 层的 svnserve.conf 多一层目录级授权。配置一个管理员组并赋权[groups] g_admin admin [/] g_admin rw * 这里的语法有讲究组名前面必须带g_admin rw表示整个组对根目录有读写权* 表示其他所有用户对该目录没有任何权限注意等号后面是空的不是漏写了权限值这本身就表示拒绝。另外[/]指的是版本库根目录如果你有多个项目想单独给某个项目配权限要写成[project:/]这种格式不要和 SVN 的 URL 路径混在一起。4.3 典型故障与排查空行、相对路径、权限和端口这一节写几个我实际撞过的配置故障全部以「现象、原因、解决」的方式来记录。现象一配置保存后客户端连接报svn: E170013: Unable to connect服务端日志却不记录任何认证信息。原因svnserve.conf 的[general]之前留了空行或者每行前面不小心带了空格。SVN 对 conf 文件的解析非常严格首行不允许空行行首不允许空白字符这是格式解析层的硬性要求不是权限问题。解决用 vim 打开文件确保光标在第一行第一个字符的位置时[general]就在那里然后逐行检查每一行开头是否顶格。修改后重启 svnserve 再连接一次。现象二认证通过但访问仓库时报Access denied可文件权限明明是 rw。原因authz 文件里g_admin少了符号变成了g_admin rw。SVN 把不带的名字当作单用户处理此时找不到名为 g_admin 的用户权限判定失败。解决核对组的引用格式组必须带用户不需要带。修改后无需重启服务svnserve 会在下次请求时重读 authz。现象三客户端连服务端 IP 的 3690 端口完全无响应本地ps -ef|grep svnserve显示进程还在。原因银河麒麟系统的防火墙默认没放行 3690 端口svnserve 监听在本地 3690外网无法进入。解决用 firewall-cmd 临时放行并保留到永久规则中firewall-cmd --add-port3690/tcp --permanent firewall-cmd --reload firewall-cmd --list-ports现象四启动命令写了svnserve -d -r /home/svn/project客户端访问时用svn://IP/project却提示仓库不存在。原因-r参数指定的是版本库根目录。如果你把 -r 直接指到了具体的 project 库那 URL 里就不能再带 project 路径否则 SVN 会在 project 下再找一层 project。解决统一用-r /home/svn作为根客户端 URL 写svn://192.168.1.100/project/。这样以后新建第二个项目时不用改启动参数。5. 启动、开机自启与客户端验证最后的 700 字收尾技巧5.1 启动命令与进程确认把版本库根目录作为参数启动服务-d表示守护进程模式加上-r指定根目录。这一步比想象中的容易出错很多人把-r拼成-R或者写成全角字符的横线导致参数无法识别。启动后立刻用ps和端口两个维度做双确认/usr/local/svn/bin/svnserve -d -r /home/svn ps -ef | grep svnserve ss -ltnp | grep 3690ss -ltnp能看到 3690 端口监听情况和对应进程比单独ps查到的信息更可靠因为进程存在但端口没监听的情况我遇到过不止一次一般是配置文件中 authz 语法错误导致 svnserve 启动失败但进程残留。5.2 开机自启脚本绝对路径与 rc.local 执行权限开机自启的常见翻车点是环境变量未加载。在启动脚本里svnserve 的路径必须写全不能用 PATH 简写否则开机时如果/usr/local/svn/bin还没被挂进 PATH脚本就会报命令找不到。我在/root下建一个脚本touch /root/svn.sh vim /root/svn.sh #!/bin/bash /usr/local/svn/bin/svnserve -d -r /home/svn给脚本赋执行权限注意用绝对路径写入 rc.local并在最后一步确认 rc.local 本身有执行权限。银河麒麟部分版本默认不给 rc.local 加执行位这个是新手最容易漏的点chmod 777 /root/svn.sh echo /root/svn.sh /etc/rc.d/rc.local chmod x /etc/rc.d/rc.local5.3 端到端验证Windows 客户端访问与后续检查三件套配好后我在 Windows 上装一个 TortoiseSVN用svn://192.168.1.100/project/访问IP 换成你服务器的实际地址输入 passwd 里配的 admin 账号能 checkout 出空目录说明整条链路已通。如果想验证开机自启是否真正生效重启后再跑一遍三个命令是我固定的检查习惯reboot ps -ef | grep svnserve svn list svn://192.168.1.100/project/ --username adminsvn list比 checkout 更快不落本地文件就能验证完认证和权限。从那以后我每次装完 SVN都会强制走一遍reboot → ps -ef|grep svnserve → svn list三条验证半小时能跑完的事绝不留到开会时当着团队面才翻车。希望帮到你。本文还有配套的精品资源点击获取