Catalog · How the catalog works
LiangliangSVN
这是一个配置开源svn服务端的管理工具,使用Pascal(Delphi风格)编写,Vibe Coding作品。虽然SVN已经被git替换,但有些老项目上用以及自己做下文件版本管理还是挺好用的。
- ★ 3 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
LiangliangSVN
当前版本:v1.2.2
LiangliangSVN 是一个使用 FPC/Delphi 技术栈开发的 Linux SVN 服务端 Web 管理平台。当前版本提供用户、用户组、仓库登记、权限规则、authz/passwd 生成、类 VisualSVN 的仓库在线浏览、系统环境初始化、应用快照和审计日志能力,并内置无构建依赖的现代化 Web UI。
以我对SVN的理解,能加上的功能都加上了,可以和商用化的VisualSVN有得一拼。

1. Linux 编译
要求 Linux 服务器已安装 FPC、GNU 本机链接工具链以及 SQLite3 开发/运行库。FPC 的 Pascal 编译器可以独立生成目标文件,但最终生成 Linux ELF 可执行文件仍需要 ld、glibc CRT 对象和 GCC 运行时对象。当前主线只依赖 SQLite,PostgreSQL 已移入未来企业增强版本单独设计:
fpc -iVDebian/Ubuntu 示例:
sudo apt install -y fpc build-essential binutils libc6-dev libsqlite3-dev sqlite3 curl ca-certificates apache2-utilsRHEL/CentOS/Rocky 示例:
sudo dnf install -y fpc gcc binutils glibc-devel sqlite-devel sqlite curl ca-certificates httpd-toolsopenSUSE/SLES 示例:
sudo zypper --non-interactive install fpc gcc binutils glibc-devel sqlite3-devel sqlite3 curl ca-certificates apache2-utils已经安装 FPC 的全新服务器,也可以让编译脚本识别发行版、补齐本机链接依赖并继续编译:
bash build.sh --install-deps--install-deps 会执行系统包管理器,必须由 root 运行或具备 sudo 权限;不传该参数时,build.sh 只检查依赖,不会修改系统。
解压源码包后执行:
cd LiangliangSVN
bash build.sh编译成功后会生成:
bin/liangliangsvn完整部署步骤见:
docs/Linux部署运维手册.MD2. 启动、停止、重启
bash start.sh
bash stop.sh
bash restart.sh脚本支持:
bash build.sh --clean:清理旧编译输出后重新编译。bash build.sh --install-deps:显式安装本机链接工具链和 SQLite 依赖后编译。bash build.sh --clean --install-deps:安装依赖、清理旧产物并完整重编译。bash install_svnauthz_latest.sh:从 Apache 官方源码构建安装最新版svnauthz。LLSVN_CONF=/path/app.ini bash start.sh:使用指定配置文件启动。LLSVN_START_TIMEOUT=30 bash start.sh:调整启动健康检查等待秒数。LLSVN_STOP_TIMEOUT=30 bash stop.sh:调整停止等待秒数。
默认监听:
http://服务器IP:8080/空库首次启动时自动创建超级管理员。默认用户名为 admin,密码是 20 位安全随机值,start.sh 会在启动终端显示一次:
LiangliangSVN 首次管理员账号已创建
用户名: admin
密码: 随机生成的 20 位密码密码不会写入 SQLite 明文字段,也不会长期保存在 logs/server.out。显示后请立即登录修改;已有数据库重启时不会重新生成账号或密码。
如果首次密码已经遗失,先停止服务,再使用离线恢复命令生成新随机密码:
bash stop.sh
bin/liangliangsvn -c conf/app.ini --reset-admin-password
bash start.sh该命令会把 [bootstrap] admin_user 指定账号恢复为启用的 super,并同时更新平台密码与 Apache 密码哈希。
会话空闲超时在 conf/app.ini 中配置,默认 120 分钟:
[security]
session_timeout_minutes=120该值必须大于 0。会话只保存在服务进程内,因此执行 stop.sh/restart.sh 或服务异常重启后,所有用户都必须重新登录。
系统初始化页面默认只生成脚本。需要允许超级管理员从页面执行时,由运维显式修改并重启服务:
[initializer]
enable_execute=1
script_dir=data/initializer
bash_bin=/usr/bin/bash
powershell_bin=powershell.exe
max_log_bytes=524288启用页面执行意味着 LiangliangSVN 服务拥有安装软件包、写系统配置和管理服务的权限,只应在初始化窗口期临时开启,完成后建议恢复为 enable_execute=0。
3. 目录说明
backend/src/ FPC 服务端源码
web/ 内置 Web UI 静态文件
conf/app.ini 运行配置
data/ 运行期数据目录
logs/ 服务日志目录
bin/ 编译输出目录
docs/ 开发总结和后续计划
run/ PID 文件目录4. SQLite 数据库
第二版开始使用 SQLite 作为默认数据库:
data/liangliangsvn.db配置位置:
[database]
driver=sqlite
sqlite_path=data/liangliangsvn.db
legacy_json_store=data/store.json如果从第一版升级,首次启动且 SQLite 为空时,会尝试从 data/store.json 导入旧数据。
v0.11.0 起,当前源码包收敛为 SQLite 本机版,不再要求安装 PostgreSQL 相关 FPC 单元。PostgreSQL 将作为未来版本特性另行设计和验收,规划见 docs/PostgreSQL未来版本设计.MD。
5. 默认输出文件
第一版默认不会直接覆盖生产 SVN 配置,而是生成到:
data/generated/liangliangsvn.authz
data/generated/liangliangsvn.passwd接入真实 Apache mod_dav_svn 时,可以修改 conf/app.ini:
[svn]
authz_output_path=/etc/subversion/liangliangsvn.authz
passwd_output_path=/etc/subversion/liangliangsvn.passwd
public_base_url=https://svn.example.com/svn
repo_owner=apache
repo_group=apache
repo_chmod=ug+rwX,o-rwx建议先在测试环境验证无误,再指向生产路径。
6. 当前功能
- 管理员登录。
- 用户新增、编辑、删除、禁用/启用、重置密码。
- 用户组新增、编辑、删除、成员维护。
- SVN 仓库登记。
- SVN 仓库实体创建,支持填写服务器路径或默认使用
repo_root/repoKey。 - SVN 仓库实体创建后可按配置自动修正属主、属组和权限,适配 Apache
mod_dav_svn访问。 - 仓库登记编辑和删除,默认不删除磁盘 SVN 仓库目录。
- SVN 路径级权限规则维护,支持按仓库选择用户组或用户并用按钮配置无权限、只读、读写。
- 生成 Apache SVN 可使用的
authz文件。 - 调用官方
htpasswd生成 bcrypt(默认 cost 12)passwd 文件;历史{SHA}/$apr1$账号在成功登录或重置密码后自动升级。 - 应用生成文件并记录快照。
- 审计管理操作。
- SQLite 持久化存储。
- 第一版 JSON 数据自动迁移到 SQLite。
authz/passwd临时文件、安全替换、旧文件备份。- 默认强制执行
svnauthz validate;命令缺失或校验失败时不覆盖线上配置。 - 256 位 CSPRNG Session/CSRF、
HttpOnly; SameSite=Strict; SecureCookie 和写请求 CSRF 校验。 - 类 VisualSVN 的仓库浏览 UI:左侧仓库列表、面包屑目录导航、文件表格、在线预览和原始文件入口。
svnlook仓库浏览接口:可见仓库列表、修订信息、目录、文件内容、提交日志。- 仓库浏览搜索:按文件名或路径在当前目录下递归搜索,并按权限裁剪结果。
- 路径历史查看:展示版本、作者、时间、路径和提交说明。
- README 自动预览:进入目录后自动展开
README.md/README.txt/README。 - 文件级差异查看:从文件预览区查看当前版本对上一版本的差异。
- 文件预览增强:行号和轻量关键字高亮。
- 文件预览编码识别:自动识别 UTF-8 和常见 GBK 文本,改善旧 Java 文件中文乱码。
- 最近访问路径:浏览器本地保存最近打开的仓库路径。
- 收藏路径:浏览器本地保存常用目录和文件,和最近访问分开展示。
- Apache SVN 外链:配置
public_base_url后可打开或复制https://svn.example.com/svn/repo/path形式链接。 - 原始文件下载:下载文件名使用 SVN 路径中的真实文件名,不再默认显示为
raw。 - 可视化版本选择:默认显示最新版本号,支持输入修订号或从历史切换快照。
- 提交详情页:展示提交说明、变更路径和按当前路径权限裁剪后的 diff。
- 文件 Blame:通过官方
svn blame查看每一行的修订号和作者。 - 受限内容全文搜索:在当前路径范围内按扫描上限搜索文本内容,并继续按权限裁剪结果。
svnlookchanged/diff 查看。- 仓库物理创建接口,调用
svnadmin create。 - 权限模拟 API 和 UI。
- 可选 Apache reload。
svnadmin hotcopy仓库备份。- 备份列表和恢复到新仓库。
- 基础 Hook 模板:提交备注不能为空。
- Hook 模板扩展:文件大小限制、禁止扩展名、post-commit Webhook。
- Hook 管理页面:状态查看、弹窗编辑内容、禁用、删除备份、重新应用模板。
- 仓库浏览增强:大文件预览限制、二进制内容阻止预览、changed 结构化显示。
- 系统检查页:SQLite、SVN 命令、关键目录、Apache reload、浏览上限。
- 系统检查增强:命令版本、SQLite 文件信息、Apache reload dry-run 建议、Hook 汇总状态。
- 系统初始化页面:操作系统检测、部署模式选择、安装脚本生成、脚本审阅、后台执行日志和推荐配置同步。
- Linux 初始化支持 Debian/Ubuntu、RHEL/CentOS/Rocky/Alma、openSUSE/SLES。
- 初始化部署支持仅 SVN 工具、svnserve、Apache HTTP/HTTPS、自签名或已有证书、初始仓库、防火墙与 SELinux。
- Windows 初始化提供实验性的 PowerShell、Chocolatey 和 svnserve 服务方案,不自动配置 Windows Apache。
- 页面和系统检查显示当前版本号。
- 内置 Web UI,无需 Node.js 或前端构建。
v0.8.0 新增:
- SQLite 持久层继续增强,后续企业数据库能力移入未来版本单独规划。
- 登录失败持久化记录,达到阈值后短期锁定账号并返回 HTTP
429。 - 权限矩阵 API:
GET /api/permissions/matrix。 - 权限矩阵 UI:按用户/用户组与仓库路径交叉查看
none/r/rw,点击单元格可快速更新。 - 权限规则保存改为同格覆盖更新,自动清理旧版本产生的同格重复规则。
v0.9.0 新增:
authz/passwd与最近成功快照的 diff 预览。- 预览接口返回新增、删除、变更行统计。
- 审计日志记录客户端 IP 和 User-Agent。
- 权限规则新增、更新、删除记录 before/after JSON。
- 系统检查页显示目录写权限和 Apache reload 配置就绪状态。
v0.10.0 新增:
- authz/passwd 快照列表、查看、回滚预览和安全回滚。
- 回滚复用临时文件、校验、备份、替换流程。
- 迁移 JSON 导出,包含用户、用户组、仓库、权限、审计和快照。
- 迁移 JSON replace 导入,适合 SQLite 实例之间迁移或重建。
- Web UI 增加快照管理和迁移工具。
v0.11.0 新增:
- 当前主线收敛为 SQLite-only,移除 PostgreSQL 编译依赖。
- 结构化规则快照表,保存用户、用户组、仓库和权限规则。
- 结构化规则快照列表、查看、回滚预览和回滚 API。
- Web UI 增加结构化规则快照管理入口。
- 迁移 JSON 覆盖结构化规则快照。
- 现有 SVN 接管导入:扫描仓库目录、导入 Apache passwd 用户、导入 authz 用户组和权限规则。
v0.12.0 新增:
- 平台 RBAC 基础权限。
- 内置
super/sysadmin/repo_admin/auditor/user五类角色。 - 登录和
/api/me返回角色与权限能力位。 - 后端统一拦截写接口,审计员和普通用户默认只读。
- 超级管理员可修改用户平台角色,系统管理员不能分配角色。
- Web UI 按角色隐藏新增、删除、应用、回滚、导入等写操作入口。
v0.13.0 新增:
- Hook 管理页面。
- 查看每个仓库的
pre-commit/post-commit状态。 - 查看 Hook 内容,超过预览上限时阻止直接展示。
- 禁用 Hook 时重命名为
.disabled.时间戳备份,不直接删除。 - 可从 Hook 页面重新应用已有模板。
- Hook 禁用和模板应用写入审计日志。
v0.14.0 新增:
- 系统检查页增加摘要区。
svnadmin/svnlook/svnauthz/Apache reload命令版本探测。- SQLite 数据库文件大小和修改时间检查。
- Apache reload sudo dry-run 命令建议。
- 汇总所有已登记仓库的 Hook 文件状态。
- 目录检查继续返回存在和写权限。
v0.15.0 新增:
- 权限规则质量检查 API:
GET /api/permissions/quality。 - 检测无效仓库、无效用户、无效用户组、空主体、非法权限值和重复规则。
- 对父子路径覆盖关系输出提示,帮助管理员理解最终 authz 效果。
authz/passwd预览和应用前会阻断明显错误的权限规则。- 权限模拟返回
matchedRules/matchedRuleId/explain,展示命中的规则链路。 - 权限页新增质量检查面板,生成配置页能同步展示阻断原因。
v0.16.0 新增:
- Linux 启停脚本增强:PID 复用保护、启动后进程检查、可选 HTTP 健康检查和日志尾部提示。
build.sh --clean支持安全清理编译输出。- 新增 Linux 部署运维手册:
docs/Linux部署运维手册.MD。 - 新增升级与备份说明:
docs/升级与备份说明.MD。 - 新增常见问题排查:
docs/常见问题排查.MD。 - 新增源码包清理规则:
docs/源码包清理规则.MD。
v1.0.0 最终验收:
- 完成编译、脚本语法、API 主流程、真实浏览器 Web UI 主流程和源码包内容验收。
- 最终验收总结:
docs/v1.0最终验收总结.MD。 - 最终功能清单:
docs/v1.0功能清单.MD。 - 当前 SQLite 单机主线功能规划已完成。
7. 源码包说明
源码包文件名会带版本号,方便归档;解压后的目录固定为:
LiangliangSVN/源码包包含规则和排除规则见:
docs/源码包清理规则.MD8. 当前限制
- 当前仓库浏览需要 Linux 环境安装 Subversion 工具并配置
svnlook_bin/svn_bin。其中 Blame 功能依赖官方svn客户端。 - 普通用户只开放个人信息、退出登录和仓库浏览 API;仓库、目录、搜索、提交详情、Blame 和 diff 均继续按当前用户及用户组的 SVN 路径权限过滤。
- 当前仓库创建需要 Linux 环境安装 Subversion 工具并配置
svnadmin_bin/repo_root。svnadmin_bin可填写绝对路径,也可填写 PATH 中的命令名。 - Windows 开发环境可做 FPC 和前端语法检查;Linux 真实启停仍需在目标服务器执行
bash build.sh/start.sh/stop.sh/restart.sh验收。 - authz diff 当前为逐行文本对比,后续可升级为更精细的 LCS/上下文 diff。
- authz/passwd 文件快照仍只回滚实际输出文件;需要回滚数据库规则时,请使用 v0.11.0 增加的结构化规则快照。
- v0.12.0 的仓库管理员暂未绑定具体仓库范围,当前可维护全部仓库相关配置;后续可增加仓库授权范围表。
- Hook 管理当前只开放
pre-commit/post-commit两类脚本编辑;保存后会在 Linux 下恢复可执行权限。 - v1.0.7 的原始文件入口适合源码和文本文档;二进制文件的严格流式下载作为后续增强。
- v1.1.1 的编码识别优先覆盖 UTF-8 和 GBK;其他历史编码可后续按实际样本继续扩展。
- PostgreSQL 不属于当前主线交付范围,后续会作为企业增强版本单独设计。
9. v1.0.1 修复
- 前端会自动修正常见 UTF-8 乱码显示名,例如默认管理员显示名。
- 后端启动时会修复默认
admin显示名的历史乱码。 - 新增
install_svnauthz_latest.sh,用于从 Apache Subversion 官方源码构建安装svnauthz。
10. v1.0.2 修复
- 修复 Linux
LANG=C、systemd/root 启动等场景下中文保存后变成??的问题。已保存成??的历史数据不可逆,需要重新编辑或删除重建。 - 统一
svnadmin/svnlook/svnauthz命令查找逻辑,绝对路径和 PATH 命令名都可使用。 - 仓库页面明确区分
仅登记和创建实体仓库。 - 新增仓库
删除登记,只删除平台记录和关联权限规则,不删除磁盘 SVN 仓库目录。 - 新增 Hook 删除能力,活动 Hook 会重命名为
.deleted.*备份。 - 前端补充异步错误提示,路径越界、命令缺失等后端错误会直接显示。
11. v1.0.3 修复
- 前端提交 JSON 时把字符串包装为 UTF-8 Base64,后端统一还原,避免中文在 HTTP 请求入口处被非 UTF-8 locale 损坏成
?。 - 新增用户编辑和删除。
- 新增用户组编辑和删除。
- 新增仓库登记编辑,优化删除登记后的列表刷新。
- 页面、系统检查和
/api/health显示版本号v1.0.3,并给 CSS/JS 增加版本参数避免旧缓存。
12. v1.0.4 UI 交互优化
- 用户、用户组、仓库新增表单改为内部窗口,页面默认只显示新增按钮。
- 用户编辑、用户组编辑、仓库编辑改为内部窗口。
- 用户角色分配改为下拉列表。
- 用户组成员维护改为用户列表多选,支持全选和清空。
- 用户组删除增加校验:组下有成员时不允许删除。
- 仓库列表新增实体状态,并将
创建实体仓库放到列表操作区。 - 仓库删除登记增加保护:实体仓库目录存在时不允许删除登记。
- 所有主要列表增加分页,默认每页 50 行。
- 当前版本号更新为
v1.0.4。
13. v1.0.5 Hook 和权限交互优化
- Hook 列表操作新增
编辑,点开内部窗口查看和修改脚本内容。 - 新增
POST /api/repos/hooks/save,保存 Hook 后在 Linux 下恢复755可执行权限。 - 权限页重做为左侧仓库列表、右侧用户组/用户权限分配工作台。
- 权限配置改为
无权限/只读/读写按钮,不再要求管理员手工录入none/r/rw。 - 用户权限视图显示用户组继承权限提示,方便判断用户为什么能访问仓库。
- 当前版本号更新为
v1.0.5。
14. v1.0.6 现有 SVN 接管导入
- 新增接管导入页面,系统管理员可扫描现有 SVN 环境。
- 新增
GET /api/takeover/preview,预览仓库、passwd 用户、authz 用户组、权限规则和导入警告。 - 新增
POST /api/takeover/import,按选项导入到 SQLite。 - 仓库扫描会识别
repo_root下包含format/db/conf的 SVN 仓库目录。 - passwd 导入保留原 Apache htpasswd 哈希,不需要知道用户明文密码。
- authz 导入支持
[groups]、[repo:/path]和[/path]全仓库 section。 - 导入只写 LiangliangSVN 数据库,不会直接覆盖
/etc/svn/authz或/etc/svn/passwd;覆盖仍需在“生成配置”页预览并应用。 - 默认
repo_root调整为/var/svn。 - 当前版本号更新为
v1.0.6。
15. v1.0.7 类 VisualSVN Web Interface
- 仓库浏览页重做为左侧仓库列表、右侧目录浏览工作区。
- 新增
GET /api/repos/browser/repos,按当前登录账号过滤可浏览仓库。 - 新增
GET /api/repos/browser/info,显示当前版本作者、时间和提交说明。 - 新增
GET /api/repos/browser/raw,提供源码和文本文档的原始内容入口。 - 目录浏览改为当前目录直接子项,并在前端提供面包屑导航、父目录返回和文件/目录类型标识。
- 普通用户只显示自己通过用户、用户组或 all 规则获得
r/rw的仓库和路径;管理员仍可查看全部。 - 文件预览保留大文件和二进制阻止策略,避免浏览器卡死或误展示二进制内容。
- 当前版本号更新为
v1.0.7。
16. v1.0.8 仓库浏览体验增强
- 新增
GET /api/repos/browser/history,查看指定路径历史。 - 新增
GET /api/repos/browser/search,按关键字在当前目录下递归搜索路径。 - 搜索结果继续按当前账号权限裁剪,普通用户不会搜到未授权路径。
- 仓库浏览工具栏新增搜索框和路径历史按钮。
- 文件预览区域新增历史按钮,可直接查看当前文件历史版本。
- 搜索结果支持直接打开目录或预览文件。
- 历史结果支持按历史版本打开目录或预览文件。
- 进入目录后自动预览
README.md/README.txt/README。 - 当前版本号更新为
v1.0.8。
17. v1.0.9 文件查看和差异增强
GET /api/repos/browser/diff新增可选path参数,支持按文件或目录裁剪 diff 输出。- 文件预览区新增
差异按钮,可查看当前文件在指定版本的变更。 - 差异弹窗按新增、删除和 hunk 行做基础着色。
- 文件预览新增行号,常见源码文件提供轻量关键字高亮。
- 仓库浏览左侧新增最近访问路径,保存在浏览器本地
localStorage。 - 最近访问支持一键回到目录或文件。
- 当前版本号更新为
v1.0.9。
18. v1.1.0 仓库浏览体验重构
- 仓库浏览去掉外露
HEAD输入框,改为最新 rX版本胶囊和版本选择菜单。 - 浏览、历史、提交详情、搜索结果和 Blame 改为页面内主视图,减少弹窗跳转。
- 新增
GET /api/repos/browser/commit,聚合提交说明、变更路径和当前授权范围内的 diff。 - 新增
GET /api/repos/browser/blame,通过svn_bin调用官方svn blame。 GET /api/repos/browser/search支持type=content,提供受扫描上限保护的内容全文搜索。GET /api/repos/browser/changed支持path参数,按当前路径和权限裁剪变更列表。- 左侧保留最近访问,并新增收藏路径,均保存到浏览器本地
localStorage。 - 系统检查页新增
svn客户端版本检查。 - 当前版本号更新为
v1.1.0。
19. v1.1.1 仓库浏览链接和编码修复
- 新增
public_base_url配置,用于生成 Apachemod_dav_svn对外访问链接。 - 仓库目录和文件视图新增
打开 SVN 地址、复制 SVN 地址。 - 目录列表中每个可见条目可复制对应 SVN 地址。
- 原始文件下载改为使用真实文件名,并支持中文文件名的 UTF-8 下载头。
svnlook cat文件内容读取改为保留原始字节后再识别编码。- 文件预览自动识别 UTF-8、UTF-8 BOM 和 GBK,并返回
encoding字段。 - 当前版本号更新为
v1.1.1。
20. v1.1.2 原始文件下载和仓库权限修复
- 原始文件下载 URL 改为
/api/repos/browser/raw/实际文件名?...,避免浏览器默认保存为raw。 - 后端继续输出
Content-Disposition,作为真实文件名下载的第二层保障。 - 新增仓库创建后权限修正配置:
repo_owner/repo_group/repo_chmod。 - CentOS 可配置
apache:apache,Debian/Ubuntu 可配置www-data:www-data。 - 权限修正使用
chown -R和chmod -R参数数组执行,不经过 shell。 - 当前版本号更新为
v1.1.2。
21. v1.1.3 普通用户访问与会话控制
- 普通用户可以使用平台账号登录,登录后默认进入“仓库浏览”。
- 普通用户前端只显示仓库浏览入口;服务端只允许
/api/me、/api/logout和/api/repos/browser/*,不能读取用户、权限、审计和系统配置。 - 仓库浏览继续按用户、用户组和
all权限规则裁剪仓库与路径。 - 新增
[security] session_timeout_minutes,按最后一次有效请求执行滑动空闲超时,默认 120 分钟。 - 新增
POST /api/logout,同时销毁服务端会话并清除浏览器 Cookie。 - 会话仅保存在进程内,服务停止或重启后旧会话自动失效。
- 前端收到 HTTP
401后会清除本地登录状态并返回登录页。 - 最近访问和收藏改为按登录账号隔离,避免同一浏览器切换账号时显示其他账号路径。
- 仓库浏览工具栏和普通用户移动端导航完成响应式修复。
- 当前版本号更新为
v1.1.3。
22. v1.2.0 系统环境初始化
- 空库首次启动不再使用固定密码,改为生成 20 位系统安全随机密码并在启动终端显示一次。
- 新增离线
--reset-admin-password,用于首次凭据遗失后的随机密码恢复。 - 新增超级管理员专属“系统初始化”页面和
/api/initializer/*接口。 - 支持检测操作系统、包管理器、root/管理员权限和现有 SVN/Apache/OpenSSL 命令。
- 支持 Debian/Ubuntu、RHEL 系、openSUSE/SLES 的 Bash 安装脚本。
- 支持 SVN 工具、svnserve、Apache HTTP/HTTPS 三种部署模式。
- Apache 模式支持自签名证书或已有证书、
mod_dav_svn、authz/passwd、服务启用、防火墙和 SELinux。 - Windows 提供实验性的 PowerShell + Chocolatey + svnserve 脚本,暂不自动配置 Apache。
- 脚本生成与执行分开;实际执行默认由
[initializer] enable_execute=0关闭。 - 执行前校验超级管理员角色、参数白名单、目标平台、root/管理员权限和脚本内容一致性。
- 后台任务一次只运行一个,页面轮询显示日志和退出状态,不提供可能破坏包管理器的强制取消。
- 安装成功后可备份并写入
app.ini推荐配置,同时同步当前服务进程。 - 当前版本号更新为
v1.2.0。
23. v1.2.1 Debian 12 编译工具链修复
- 修复全新 Debian 12 仅安装 FPC 后,链接阶段找不到
crti.o/crtbegin.o/crtend.o/crtn.o和ld时缺少明确处理入口的问题。 build.sh新增--install-deps,支持 apt、dnf、yum 和 zypper。- 编译前主动检查
ld、GCC、四个 CRT 对象和 SQLite 开发链接文件。 - 自动把 GCC 返回的 CRT/SQLite 实际目录以
-Fl传给 FPC,兼容手工安装或搜索路径陈旧的 FPC 配置。 - 缺少依赖时在 FPC 编译前停止,并输出 Debian 12 可直接执行的安装命令。
- 当前版本号更新为
v1.2.1。
24. v1.2.2 安全加固
- 内置 HTTP 服务真正绑定
[server] host,默认只监听127.0.0.1。 - Session、CSRF、salt 和临时名称统一使用操作系统 CSPRNG,不再调用普通
Random。 - 平台密码升级为 PBKDF2-HMAC-SHA256 210000 次;Apache 密码调用官方
htpasswd生成 bcrypt cost 12。 - 历史
$llsvn1$、{SHA}和$apr1$在成功登录或重置密码后自动升级,不再生成弱哈希。 - 移除 URL
?token=认证,所有认证写请求统一要求独立 CSRF 令牌。 - API 改为逐接口、逐方法 RBAC 白名单;迁移秘密与原始 Hook 只允许
super。 - 用户摘要、权限预览、快照、diff 和审计接口统一脱敏,不返回平台或 Apache 密码哈希。
- 仓库登记限制为
repo_root/repoKey直属目录;备份恢复限制为repo_backup_dir的直属有效 hotcopy。 - 仓库、关键目录、备份和 Hook 拒绝符号链接;原始 Hook 编辑默认关闭,模板参数使用严格白名单。
- Cookie 默认启用
Secure,authz 校验默认启用;新增浏览器安全响应头和配套安全回归测试。 - 当前版本号更新为
v1.2.2。

