跨平台发布:隐藏的 BT 数据库被打包进了安装包

举报
樊先生 发表于 2026/10/30 21:17:45 2026/10/30
【摘要】 做跨平台发布,最容易出事的不是编译,而是"发布清单算错了什么"。本文记录我一个下载器项目的真实事故:运行期生成的 BT 完成度数据库,因为藏在隐藏文件里没清掉,被发布脚本当成程序文件下发给所有用户。

一、背景:发布靠脚本算清单

下载器的 Windows 版目录 dist\windows\ 里,除了引擎和界面,还有一些运行期文件。发布时一个 Python 脚本(make_release.py)会扫描目录、生成"需要下发的文件清单"。

二、事故:v1.0.22 发现清单凭空多了文件

某次发版,清单里突然多出两个文件:.torrent.db 和 .torrent.bolt.db。追查发现,它们是 BT 功能运行期生成的完成度数据库,存在于 dist\windows\bt-store\ 下。

问题链:

  1. 这两个文件是隐藏文件(还有 -shm / -wal 伴随文件);
  2. 打包前清理用了普通的 rm -f *,删不掉隐藏文件,所以它们残留在 dist\windows;
  3. make_release.py 没排除它们,把它们当成程序文件算进了更新清单;
  4. 结果:这些用户根本不该拿到的运行期数据库,被推给了所有更新用户。

三、修复

  • make_release.py 增加排除规则,显式跳过 bt-store 下的运行期文件;
  • 打包目录本身在打包前,用"能删隐藏文件"的方式清干净,不留隐患。

四、顺带一个相关坑:引擎 / 界面版本要对齐

这类下载器如果做热更新,曾出现过"只换引擎、没换界面"导致旧界面因缺少令牌被 401 挡在门外的情况。鉴权契约一变,引擎和界面必须同版本一起发,别依赖热更新长期混跑。

五、给做发布流水线的教训

  1. 发布清单要显式排除运行期生成文件,不要默认"全目录下发";
  2. 清理步骤必须用能处理隐藏文件的命令;
  3. 热更新涉及鉴权 / 协议契约改动时,强制同版本发布;
  4. 发版检查单里加一条"清单 diff 人工过一眼",能拦掉大部分这类事故。

【总结】 编译只保证"能跑",发布保证"发出去的东西是对的"。清单 diff 这道关,省不得。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。