news 2026/9/30 7:54:22

银河麒麟V10源码编译SVN 1.8.14:依赖编译与配置避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
银河麒麟V10源码编译SVN 1.8.14:依赖编译与配置避坑指南

简介:本资源面向在银河麒麟操作系统上部署版本控制服务的运维与开发人员,聚焦于从源码编译搭建完整SVN环境这一典型场景,帮助读者解决国产化平台下组件依赖复杂、配置项繁多的问题。压缩包内共1个docx文档,约202KB,以图文步骤形式记录操作要点,便于对照执行与查阅。内容涵盖apr、apr-util、SQLite与Subversion的下载编译安装,环境变量配置,版本库创建,以及svnserve.conf、passwd、authz三个核心文件的权限与用户配置,并延伸至服务启动、Windows客户端访问及开机自启脚本设置。目前已有2788人学习,适合需要快速落地SVN服务、排查配置错误的中级运维人员参考。

1. 银河麒麟装 SVN:为什么源码编译比 yum 更值得折腾

在银河麒麟 V10 上装 SVN,很多人第一反应是yum install subversion,但实际跑起来经常遇到版本对不上、依赖拉不全、离线环境直接卡死的情况。尤其是 ARM 架构的银河麒麟系统,官方源里的 SVN 版本往往停在 1.8 甚至更早,而项目上又要求用 1.8.14 这个特定版本做版本管理。这时候源码编译就成了绕不开的路。

这份资源给的就是一套完整的源码编译方案:从 apr、apr-util、sqlite 三个依赖开始,到 subversion-1.8.14 本体编译,再到版本库创建、svnserve.conf 三件套配置、开机自启脚本。整套流程在银河麒麟 V10 SP1 上验证过,适合需要在国产化环境里搭 SVN 服务端、又不想被包管理器版本绑架的运维和开发。下面按实际动手顺序拆开讲。

2. 依赖三件套:apr、apr-util、sqlite 的编译顺序不能乱

2.1 为什么 apr 必须第一个编

SVN 的底层网络通信和内存池管理全靠 APR(Apache Portable Runtime)。apr-util 又依赖 apr 的头文件和库,sqlite 则是 SVN 用来存版本库元数据的嵌入式数据库。这三个的编译顺序是硬性的:apr → apr-util → sqlite → subversion。顺序错了,configure 阶段就会报找不到 apr 的错。

下载地址在项目正文里给了 archive.apache.org 的归档链接,我一般会先把三个包传到/home/dmdba/svn/下统一解压。注意银河麒麟默认可能没装wget,离线环境直接用 U 盘或 scp 传。

# 切换到 root,避免后续 make install 权限不足 su - root # 进入工作目录 cd /home/dmdba/svn/ # 解压三个依赖包 tar -zxvf apr-1.6.5.tar.gz tar -zxvf apr-util-1.6.1.tar.gz unzip sqlite-amalgamation-3071501.zip

解压完先别急着编 sqlite,它不需要./configure,后面直接拷进 SVN 源码目录就行。

2.2 apr 和 apr-util 的 configure 参数

编译 apr 时--prefix指定安装路径,我习惯统一放到/usr/local/下,方便后面 SVN 的--with-apr直接指过去。

cd /home/dmdba/svn/apr-1.6.5 ./configure --prefix=/usr/local/apr make && make install

--prefix=/usr/local/apr这个参数决定了头文件去/usr/local/apr/include找,库文件去/usr/local/apr/lib找。如果这台机器之前装过系统自带的 apr,/usr/local/apr能避免和/usr/lib下的旧版本冲突。

apr-util 的 configure 多一个关键参数--with-apr,必须指向刚才 apr 的安装路径:

cd /home/dmdba/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 脚本会拼出双斜杠路径导致检测失败。不带斜杠最稳。

2.3 sqlite 的特殊处理方式

sqlite-amalgamation 包解压出来是一个sqlite-amalgamation-3071501目录,里面就一个sqlite3.c和一个sqlite3.h。SVN 编译时需要的是把这个目录整个拷到 subversion 源码的sqlite-amalgamation子目录下,而不是单独编译安装 sqlite。

# 确认 sqlite 解压后的目录名 ls /home/dmdba/svn/sqlite-amalgamation-3071501/ # 应该看到 sqlite3.c 和 sqlite3.h # 等 subversion 解压后,把整个目录拷进去 # 这一步放到下一章 subversion 编译前做

常见做法是先把 subversion 源码解压好,再执行拷贝。如果先拷了但目录名不对,SVN 的 configure 会报cannot find sqlite3.c。

3. 编译 subversion-1.8.14:configure 参数与 sqlite 嵌入

3.1 解压与 sqlite 目录对接

subversion-1.8.14 的源码包解压后,根目录下没有sqlite-amalgamation文件夹,需要手动创建并把 sqlite 的源码放进去。

cd /home/dmdba/svn/ tar -zxvf subversion-1.8.14.tar.gz cd subversion-1.8.14 # 创建 sqlite-amalgamation 目录并拷贝源码 mkdir sqlite-amalgamation cp /home/dmdba/svn/sqlite-amalgamation-3071501/sqlite3.c sqlite-amalgamation/ cp /home/dmdba/svn/sqlite-amalgamation-3071501/sqlite3.h sqlite-amalgamation/

注意目录名必须是sqlite-amalgamation,这是 SVN 的 configure 脚本硬编码查找的路径。拷完后ls sqlite-amalgamation/应该能看到两个文件。

3.2 configure 三参数与 make 编译

subversion 的 configure 需要同时指定 apr 和 apr-util 的路径:

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

--prefix=/usr/local/svn决定了 svn 命令、svnadmin、svnserve 都装到/usr/local/svn/bin/下。--with-apr和--with-apr-util分别指向前面编好的两个依赖。如果 configure 输出里看到checking for APR... yes和checking for APR-util... yes,说明依赖识别成功。

make 过程在 ARM 架构的银河麒麟上大概需要 3 到 5 分钟,具体看 CPU 核数。如果 make 报错sqlite3.c: No such file or directory,回头检查 3.1 的拷贝步骤。

3.3 环境变量与版本验证

装完后 svn 命令还不在 PATH 里,需要改/etc/profile:

vim /etc/profile # 在末尾加入: PATH=$PATH:/usr/local/svn/bin # 保存退出后使配置生效 source /etc/profile

验证安装结果:

svnserve --version

正常输出会显示svnserve, version 1.8.14。如果提示command not found,先确认/usr/local/svn/bin/svnserve文件存在,再检查 PATH 是否拼写正确。我一般会额外跑一句which svnserve确认实际调用的路径。

4. 版本库创建与 svnserve.conf 三件套配置

4.1 svnadmin create 与目录结构

版本库根目录选/home/svn/,项目名假设为project:

mkdir -p /home/svn/project svnadmin create /home/svn/project

执行完svnadmin create后,/home/svn/project/下会多出conf、db、hooks、locks、format、README.txt这些文件和目录。其中conf下就是需要改的三个配置文件:svnserve.conf、passwd、authz。

4.2 svnserve.conf 的顶格陷阱

svnserve.conf的配置项必须顶格写,行首不能有空格。这是最容易翻车的地方——用 vi 编辑时如果开了自动缩进,粘贴进去的配置前面会带空格,SVN 启动时直接报配置错误。

[general] anon-access = none auth-access = write password-db = passwd authz-db = authz

anon-access = none表示匿名用户无任何权限,auth-access = write表示认证用户可读写。password-db和authz-db分别指向同目录下的passwd和authz文件。

注意:vi 里用:set paste关闭自动缩进再粘贴,能避免顶格问题。

4.3 passwd 与 authz 的权限模型

passwd文件定义用户和密码:

[users] admin = 123456

authz文件定义群组和目录权限:

[groups] g_admin = admin [/] @g_admin = rw * =

[/]表示对版本库根目录的权限配置,@g_admin = rw给 g_admin 群组读写权限,* =表示其他所有用户无权限。这里* =后面留空就是拒绝,不要写成* = none,SVN 不认这个写法。

配置完三个文件后启动服务:

svnserve -d -r /home/svn

-d是守护进程模式,-r /home/svn指定版本库根目录。注意路径只到/home/svn,不要写到/home/svn/project,否则客户端访问时 URL 会多一层。

Windows 客户端访问地址格式:svn://服务器IP/project。比如svn://123.206.73.117/project。

5. 避坑排查:从配置报错到开机自启失效

5.1 svnserve.conf 首行留空导致启动失败

现象:svnserve -d -r /home/svn执行后无报错,但客户端连接提示Authentication error或直接拒绝。

原因:svnserve.conf的[general]段前有空白行,或者配置项行首有空格。SVN 解析配置文件时对首行和缩进敏感。

解决:用cat -A svnserve.conf查看,如果行首出现^I或空格,用:set paste重新编辑,确保[general]和所有配置项都顶格。

5.2 客户端能拉取但提交报权限不足

现象:svn checkout正常,svn commit提示Authorization failed。

原因:authz里[/]的权限写成了r而不是rw,或者用户不在g_admin群组里。

解决:检查authz中@g_admin = rw是否拼写正确,以及passwd里的用户名是否和authz的群组成员一致。改完不需要重启 svnserve,配置是每次请求时读取的。

5.3 开机自启脚本路径写相对路径

现象:重启银河麒麟后ps -ef | grep svnserve看不到进程。

原因:/root/svn.sh里写的是svnserve -d -r /home/svn,但开机时环境变量还没加载,找不到 svnserve 命令。

解决:脚本里用绝对路径/usr/local/svn/bin/svnserve -d -r /home/svn。用which svnserve确认绝对路径。

#!/bin/bash /usr/local/svn/bin/svnserve -d -r /home/svn

赋执行权限chmod 777 /root/svn.sh,然后在/etc/rc.d/rc.local末尾加/root/svn.sh。

5.4 make install 后 svn 命令找不到

现象:source /etc/profile后svn --version仍然提示command not found。

原因:PATH 拼写错误,或者/usr/local/svn/bin下确实没有可执行文件。

解决:先ls /usr/local/svn/bin/确认 svn、svnadmin、svnserve 是否存在。如果存在,检查/etc/profile里 PATH 那行有没有多余空格或拼写错误。实在不行直接在命令行export PATH=$PATH:/usr/local/svn/bin临时验证。

5.5 防火墙拦截 3690 端口

现象:服务端ps能看到 svnserve,但 Windows 客户端连接超时。

原因:银河麒麟默认防火墙没放行 SVN 的 3690 端口。

解决:firewall-cmd --add-port=3690/tcp --permanent然后firewall-cmd --reload。如果用的是 iptables,对应加一条 ACCEPT 规则。

6. 开机自启脚本的绝对路径写法与验证习惯

开机自启这块,我踩过最深的坑就是脚本里用了相对路径。当时在命令行手动执行/root/svn.sh一切正常,重启后就是起不来。后来bash -x /root/svn.sh跟了一遍才发现,开机时/etc/rc.d/rc.local的执行环境 PATH 极简,svnserve根本不在搜索路径里。

所以脚本里所有命令都写绝对路径,这是铁律:

#!/bin/bash # SVN 开机自启脚本 # 注意:所有命令必须用绝对路径,开机时环境变量未加载 /usr/local/svn/bin/svnserve -d -r /home/svn

写完脚本后,我一般会做三步验证:第一步chmod 777 /root/svn.sh确保可执行;第二步bash /root/svn.sh手动跑一遍确认不报错;第三步ps -ef | grep svnserve确认进程起来了。然后reboot重启,重启后再ps -ef | grep svnserve复查一次。只有重启后进程还在,才算真正验证通过。

还有一个细节:/etc/rc.d/rc.local文件本身在某些银河麒麟版本上默认没有执行权限,需要chmod +x /etc/rc.d/rc.local。如果加了脚本路径但重启后没生效,先检查这个文件的权限。

另外,如果后续要改版本库根目录或者加新项目,记得svnserve的-r参数指向的是根目录,新增项目只需要在/home/svn/下svnadmin create新目录,然后改authz加权限即可,不用重启服务。这个习惯让我在管理多个项目时省了不少事。

从那以后我每次配完 SVN 都强制走一遍「手动执行脚本 → 查进程 → 重启 → 再查进程」的流程,再也没出现过开机自启失效的问题。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 7:52:06

COSCon 首日观察:开源生态转向协作与信任,AI和云原生成技术焦点

算起来,这已经是第十个年头了。从最初几百人的技术聚会,到如今横跨多个城市、线上线下联动的年度盛事,COSCon 见证了中国开源社区从萌芽到繁茂的全过程。作为每年必到的老面孔,我在首日开场前半小时到场时,发现签到台前…

作者头像 李华
网站建设 2026/9/30 7:51:26

Agent 多智能体编排工程笔记

摘要:单个 agent 做不完的任务,要拆给一批 agent 协同。这篇文章不复述某一家框架怎么用,而是把多智能体编排共有的机制拆开——控制流怎么走、agent 之间怎么通信、共享状态放在哪、下一步交给谁、什么时候停、结果怎么合。机制之上,看两种主流范式、几种常见拓扑,以及把…

作者头像 李华
网站建设 2026/9/30 7:51:08

从td_error到clip:Actor-Critic与PPO推导及避坑指南

简介:这份PDF资料围绕强化学习中Actor-Critic框架与PPO算法展开,面向已具备神经网络与梯度下降基础、希望深入理解策略梯度与近端策略优化的学习者。内容从Actor网络选动作、Critic网络评估状态价值入手,推导td_error、优势函数与重要性采样&…

作者头像 李华
网站建设 2026/9/30 7:51:08

CSDN页面完美打印指南:一键展开代码段并清除噪音模块

很多人都有过这种经历:在CSDN上找一篇代码教程,读起来挺顺眼,想打印出来或者存成PDF慢慢看,按下CtrlP之后,出来的东西立刻现出原形——代码段只显示前几行,后面露出一排省略号;页面顶部、侧边栏…

作者头像 李华
网站建设 2026/9/30 7:50:46

基于YOLOv8与PyQt5的西红柿成熟度检测系统实战

1. 从一颗西红柿说起:这套系统到底解决什么问题 第一次接触这个需求是在一个农业合作社的项目交流会上,对方拿着一筐西红柿问我:能不能用摄像头自动区分哪些是青的、哪些是半熟的、哪些已经红透可以装箱了。当时人工分拣一条线上要站六个人&a…

作者头像 李华
网站建设 2026/9/30 7:50:32

Unity休闲游戏UI开发:GUI Pro - Casual Game资源包实战与优化指南

最近项目需要做一款休闲手游的前端UI,找了很多现成方案都不太满意,索性直接上手了这套在Asset Store里口碑不错的GUI Pro - Casual Game资源包。用下来感受很深,它不只是一堆按钮图标的堆砌,而是一整套面向休闲游戏场景的UI解决方…

作者头像 李华