ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

银河麒麟V10安装SVN全攻略:从离线部署到客户端接入

银河麒麟V10安装SVN全攻略:从离线部署到客户端接入 简介这份资源面向在银河麒麟操作系统上部署版本控制服务的运维与开发人员聚焦于从源码编译搭建完整SVN环境这一常见但繁琐的需求。压缩包内共1个docx文档约202KB以图文步骤形式记录了apr、apr-util、SQLite与Subversion各组件的下载地址、解压与configure、make安装流程并涵盖环境变量配置、svnserve.conf、passwd、authz三个核心文件的参数说明以及版本库创建、服务启动与开机自启脚本的完整配置思路。内容还涉及Windows客户端访问地址格式与常见配置注意事项例如首行不可留空等排错细节。目前已有2788人学习适合需要快速复现银河麒麟下SVN服务搭建、对照排查配置问题的读者参考。1. 银河麒麟装 SVN为什么 apt 一把梭经常翻车在银河麒麟 V10 上装 SVN很多人第一反应是sudo apt install subversion结果要么卡在源不可达要么装完svn --version报一堆.so找不到。银河麒麟桌面版和服务器版虽然都基于 Linux但软件源策略、架构尤其是 ARM 版和预装依赖跟常见发行版差别不小直接套 Ubuntu 的教程大概率翻车。这篇讲的是在银河麒麟 V10含 SP1/SP2、x86_64 与 ARM64上从零把 SVN 服务端和客户端跑通包括离线安装、仓库创建、权限配置、开机自启以及和 Windows 小乌龟、IDEA、VS Code 这些客户端的对接。适合正在国产化替代环境里搭源码管理、又不想被“源里没有”卡住的运维和开发。下面按“先能装、再能用、最后能管”的顺序推。2. 装之前先摸清环境架构、源和依赖三件事2.1 先确认架构和系统版本别拿错包银河麒麟的包和架构强绑定ARM64 的机器装 x86_64 的 rpm/deb 一定失败。动手前先跑三条命令把底摸清# 查看系统版本和内核 cat /etc/kylin-release uname -r # 查看 CPU 架构aarch64 就是 ARM64x86_64 是 Intel/AMD uname -m # 查看是否已有 subversion 残留 rpm -qa | grep subversion dpkg -l | grep subversion/etc/kylin-release会告诉你具体是 V10 SP1 还是 SP2这决定了软件源地址。uname -m的输出直接决定你后面下载哪个架构的离线包。如果rpm -qa或dpkg -l有输出说明之前装过先卸载干净再装否则新旧库混在一起svn命令能跑但svnserve起不来这种玄学问题排查起来很费时间。提示银河麒麟服务器版默认用 rpm/yum部分版本是 dnf桌面版可能同时有 apt 和 yum先确认你的系统用哪个包管理器别两个混用。2.2 在线装源能用就用源命令要带对参数如果机器能连内网源或外网源在线装是最省事的。银河麒麟 V10 服务器版一般用 yum# 先刷新缓存确认源可达 sudo yum makecache # 安装 subversion 服务端和客户端同一个包 sudo yum install -y subversion # 桌面版如果是 apt 体系 sudo apt update sudo apt install -y subversion # 验证 svn --version --quietyum makecache这一步不能省源地址变了但缓存没刷新会一直报“找不到包”。svn --version --quiet只输出版本号适合脚本里判断装没装成功。如果yum install报依赖冲突常见原因是系统里已经有旧版apr或sqlite这时候要么升级依赖要么走离线包路线。2.3 离线装内网机器的标准打法国产化环境十有八九是内网离线包才是主战场。银河麒麟的离线包一般是 rpm服务器版或 deb桌面版需要连同依赖一起拷进去。常见做法是找一台同版本、同架构、能联网的机器用yumdownloader把包和依赖全拉下来# 在联网的同版本机器上下载 subversion 及其所有依赖 sudo yum install -y yum-utils yumdownloader --resolve --destdir/tmp/svn-offline subversion # 把 /tmp/svn-offline 整个目录拷到目标机器 # 目标机器上进入目录一次性安装 sudo rpm -ivh *.rpm --nodeps --force--resolve是关键它会把依赖树一起下载不然拷过去装到一半报缺libapr-1.so.0就尴尬了。--nodeps --force是应急手段正常情况不建议加只有在确认依赖已经手动补齐、只是 rpm 数据库记录不一致时才用。装完同样用svn --version --quiet验证。注意ARM64 机器上一定要下 aarch64 的包x86_64 的包装不上报错信息通常是“package subversion is intended for a different architecture”。3. 建仓库、配权限svnserve 模式的最小可用配置3.1 创建仓库并理解目录结构SVN 服务端有两种跑法svnserve轻量自带协议和 Apache mod_dav_svn走 HTTP。内网小团队用svnserve就够了配置简单、性能好。先建仓库# 创建仓库根目录 sudo mkdir -p /data/svn # 创建一个名为 project 的仓库 sudo svnadmin create /data/svn/project # 查看生成的目录 ls /data/svn/projectsvnadmin create之后会生成conf、db、hooks、locks四个目录。conf里三个文件是配置核心svnserve.conf服务总开关、passwd用户密码、authz路径权限。db是版本数据备份仓库就是备份这个目录别手动改里面的文件。3.2 三个配置文件怎么改先改svnserve.conf把注释打开并设对# /data/svn/project/conf/svnserve.conf [general] anon-access none auth-access write password-db passwd authz-db authz realm /data/svn/projectanon-access none表示匿名用户啥也干不了这是内网也必须设的不然谁都能读代码。realm建议写成仓库绝对路径客户端首次连接时弹出的认证提示会显示这个字符串写清楚能避免连错仓库。再改passwd加用户# /data/svn/project/conf/passwd [users] zhangsan Passw0rd_2024 lisi LisiKylin123密码是明文存储的所以文件权限要收紧chmod 600 passwd。最后改authz做路径级权限# /data/svn/project/conf/authz [groups] dev zhangsan,lisi [/] dev rw * [/]表示仓库根路径dev rw给 dev 组读写权限* 表示其他人无权限。这个* 不能漏漏了等于所有人可读。改完三个文件后重启服务生效。3.3 启动 svnserve 并设开机自启# 前台启动测试确认没报错 sudo svnserve -d -r /data/svn --listen-port 3690 # 确认端口在听 ss -tlnp | grep 3690 # 写 systemd 服务实现开机自启 sudo tee /etc/systemd/system/svnserve.service /dev/null EOF [Unit] DescriptionSubversion Server Afternetwork.target [Service] Typeforking ExecStart/usr/bin/svnserve -d -r /data/svn --listen-port 3690 ExecStop/usr/bin/pkill svnserve Restarton-failure [Install] WantedBymulti-user.target EOF sudo systemctl daemon-reload sudo systemctl enable --now svnserve sudo systemctl status svnserve-d是守护进程模式-r /data/svn把仓库根目录暴露出去客户端 URL 就是svn://IP/project。--listen-port显式指定端口避免和别的服务撞。systemd 里Typeforking是因为svnserve -d会 fork 到后台用simple会导致 systemd 以为服务退了。ExecStop用pkill是常见做法也可以用killall svnserve。提示银河麒麟自带防火墙默认可能拦 3690。放行命令sudo firewall-cmd --add-port3690/tcp --permanent sudo firewall-cmd --reload或者用iptables按你的系统实际来。4. 客户端接入小乌龟、IDEA、VS Code 怎么连4.1 Windows 小乌龟连银河麒麟 SVNWindows 上用 TortoiseSVN小乌龟连内网 SVN 服务器前提是网络能通到 3690 端口。在资源管理器里右键 → SVN CheckoutURL 填svn://服务器IP/project首次会弹认证框输入passwd里配的用户名密码。如果连不上先在 Windows 上telnet 服务器IP 3690测端口不通就是防火墙或服务没起。小乌龟有个常见坑svn update手滑点了想回退。正确做法是右键 → TortoiseSVN → Show Log找到目标版本右键 → Revert to this revision这会产生一次新的提交反向合并而不是删历史。直接svn update -r只是把工作副本切到旧版本再提交会报错。4.2 IDEA 和 VS Code 的 SVN 配置IDEA 配置 SVNSettings → Version Control → Subversion把svn命令行客户端路径指到本机装的svn.exeWindows 装小乌龟时勾选 command line client tools 才有。然后在 VCS → Checkout from Version Control → Subversion 填 URL 拉代码。IDEA 里提交前一定要先Update不然容易冲突。VS Code 用 SVN 需要装扩展如 “SVN” 插件装完在设置里指定svn可执行文件路径。VS Code 的 SVN 扩展对文件状态标记M/A/?支持还行但大仓库下刷新慢这是扩展本身的性能问题不是服务器的事。注意git 和 svn 区别是热词但这里只说一句——SVN 是集中式提交必须连服务器Git 是分布式本地能提交。选 SVN 的场景通常是内网、权限管控严、团队习惯集中式。4.3 拉取和提交的规范动作# 拉取项目到本地 svn checkout svn://192.168.1.100/project /home/user/project # 进目录看状态 cd /home/user/project svn status # 提交前先更新减少冲突 svn update # 添加新文件并提交 svn add newfile.c svn commit -m feat: 新增 newfile.c # 查看日志 svn log -l 10svn status里?是未纳入版本控制的文件M是已修改A是待添加。svn commit前必须svn update这是血泪经验——直接提交十有八九撞冲突。svn log -l 10只看最近 10 条日志大了别全拉。5. 避坑与排查银河麒麟 SVN 最常见的 5 个翻车现场5.1 坑一svn: E170013 无法连接主机现象客户端报svn: E170013: Unable to connect to a repository at URL后面跟E000104: Connection refused。原因三种可能——svnserve没启动、端口不是 3690、防火墙拦了。解决服务器上systemctl status svnserve看服务状态ss -tlnp | grep 3690看端口firewall-cmd --list-ports看防火墙。三个都确认后再从客户端telnet IP 3690测。5.2 坑二提交报“某一层上级目录没权限”现象拉代码正常提交时提示svn: E220004: Access denied或“某上级目录无权限”。原因authz里只给了子目录写权限但父目录没给读权限。SVN 的权限是逐级继承的父目录没权限子目录的权限也生效不了。解决在authz里把父路径也加上读权限例如[/] dev r [/trunk/src] dev rw父目录给r子目录给rw这样提交才通。5.3 坑三ARM64 上装完 svn 命令报库缺失现象svn --version报error while loading shared libraries: libapr-1.so.0: cannot open shared object file。原因离线装时依赖没装全或者装了 x86_64 的 apr 库。解决ldd $(which svn) | grep not found看缺哪个库然后找对应架构的包补装。ARM64 上一定要确认apr、apr-util、sqlite都是 aarch64 版本。5.4 坑四密码改了但客户端还认旧的现象passwd里改了密码客户端还是用旧密码能提交。原因客户端缓存了认证信息。小乌龟在%APPDATA%\Subversion\auth下缓存Linux 客户端在~/.subversion/auth下。解决删掉缓存目录重新认证。Windows 上小乌龟可以在 Settings → Saved Data 里清。5.5 坑五svnserve 开机不自启现象重启服务器后 SVN 连不上手动svnserve -d又能用。原因没配 systemd 或配了但enable没执行。解决systemctl is-enabled svnserve确认没启用就systemctl enable svnserve。如果服务文件里ExecStart路径写错比如svnserve不在/usr/bin也会静默失败用which svnserve确认真实路径。6. 进阶仓库备份、钩子脚本和版本回滚的实操技巧仓库跑起来只是开始真正让 SVN 在团队里站住脚的是备份和自动化。备份用svnadmin hotcopy它能在服务运行时安全复制整个仓库# 热备份服务不用停 svnadmin hotcopy /data/svn/project /backup/svn/project_$(date %Y%m%d) # 恢复时直接拿备份目录替换或者 svnadmin loadhotcopy比cp安全因为它会处理锁文件。备份策略我一般用 crontab 每天凌晨跑一次保留最近 7 天。钩子脚本是 SVN 的“后悔药”和“守门员”。hooks目录下有模板去掉.tmpl后缀就生效。最常用的是pre-commit用来强制提交信息格式#!/bin/bash # /data/svn/project/hooks/pre-commit REPOS$1 TXN$2 SVNLOOK/usr/bin/svnlook LOGMSG$($SVNLOOK log -t $TXN $REPOS | grep [a-zA-Z0-9] | wc -c) if [ $LOGMSG -lt 10 ]; then echo 提交信息至少 10 个字符 2 exit 1 fi exit 0这个脚本拦掉“.”“update”这种无意义提交信息。注意钩子脚本必须有执行权限chmod x pre-commit而且里面用的命令要写绝对路径因为钩子执行时的 PATH 可能和你登录时不一样。版本回滚是另一个高频需求。如果想把仓库整体回退到某个日期正确做法不是删历史而是反向合并# 先更新到最新 svn update # 查看某天的版本号 svn log -r {2024-01-01}:HEAD | head -20 # 反向合并到目标版本假设目标版本是 r100当前是 r200 svn merge -r 200:100 svn://192.168.1.100/project # 确认改动后提交 svn commit -m revert: 回滚到 r100 状态svn merge -r 200:100是把 r100 到 r200 之间的改动反向应用工作副本就回到 r100 的内容然后提交产生 r201。这样历史完整保留随时能再查。直接svnadmin dumpload是核弹级操作除非仓库彻底坏了否则别用。最后说个习惯我每次配完 SVN都会在服务器上svn checkout svn://127.0.0.1/project /tmp/test自测一遍确认服务端配置真的生效而不是只看systemctl status显示绿色就完事。这个自测动作帮我省过好几次“服务起了但权限配错”的尴尬。希望帮到你。本文还有配套的精品资源点击获取
返回列表