打包与校验
Deb 包文件名命名规范(推荐):
- 版本号从
config.ini的version字段读取,不来自文件名。文件名中包含版本号是可选的;推荐写法不包含版本号。 - 平台不校验文件名;它通过扩展名识别包类型(
.deb= 单包,.tar.gz= 双包压缩包),并在解析包之后从config.ini校验身份。下表名称仅为推荐,便于按打包层级区分包。注意<appid>和<platform>均取自config.ini,<platform>只能是x86_64或aarch64。
| 打包方式 | 格式 | 示例 |
|---|---|---|
| 单包 | <appid>_<platform>.deb | myapp_x86_64.deb |
| 双包(压缩包) | <appid>_<platform>.tar.gz | myapp_x86_64.tar.gz |
| 双包(数据包) | <appid>.deb | myapp.deb |
| 双包(源包) | <package>.deb | myapp-backend.deb |
Lintian 校验要求:
- 所有
Error(E) 级别问题必须在提交前修复 Warning(W) 级别问题应审查;平台关键警告必须修复Info(I) 级别问题为信息性,可选处理- 仅对已记录、有意的偏差使用
lintian --suppress-tags=<tag>
双包压缩包结构:
.tar.gz 压缩包必须具有以下结构:
<appid>_<platform>.tar.gz
├── <appid>.deb # 应用数据包(建议与 config.ini.id 保持一致)
└── <package>.deb # deb源包(名称默认即可,无需修改)
压缩包根目录不得包含子目录 — .deb 文件必须位于压缩包根级别。
说明:
<appid>.deb:deb数据包,通过当前包可以在应用中心对包进行展示操作等<package>.deb:deb源包,用于完成deb服务功能
方式一:单包模式
步骤1:构建 Deb 包
dpkg-deb --build ./<应用根目录> ./<appid>_<version>_amd64.deb
步骤2:校验包
dpkg-deb -c <appid>_<version>_amd64.deb
dpkg-deb -I <appid>_<version>_amd64.deb
lintian <appid>_<version>_amd64.deb # 如有 lintian
步骤3:生成校验和
sha256sum <appid>_<version>_amd64.deb > <appid>_<version>_amd64.deb.sha256
步骤4:测试安装
sudo dpkg -i <appid>_<version>_amd64.deb
sudo systemctl status <system_id>
sudo dpkg --purge <appid> # 卸载
方式二:双包模式
步骤1:构建deb源包
dpkg-deb --build ./<应用根目录> ./<package>.deb
步骤2:构建deb数据包
mkdir -p /tmp/<appid>/DEBIAN
mkdir -p /tmp/<appid>/usr/local/<appid>
# 复制 TOS 7.0 配置文件到数据包
cp config.ini /tmp/<appid>/usr/local/<appid>/
cp <appid>.lang /tmp/<appid>/usr/local/<appid>/
cp -r images /tmp/<appid>/usr/local/<appid>/
# 如果是外部打开,还需复制 nginx 配置
cp -r nginx /tmp/<appid>/usr/local/<appid>/ 2>/dev/null || true
# 创建 DEBIAN/control(参见 8.13.2)
# ...
# 构建数据包
dpkg-deb --build /tmp/<appid> ./<appid>.deb
步骤3:打包提交压缩文件
tar -czf <appid>_<platform>.tar.gz <appid>.deb <package>.deb
步骤4:校验、校验和、测试安装
# 校验
dpkg-deb -c <package>.deb && dpkg-deb -I <package>.deb
dpkg-deb -c <appid>.deb && dpkg-deb -I <appid>.deb
# 校验和
sha256sum <appid>_<platform>.tar.gz > <appid>_<platform>.tar.gz.sha256
# 测试安装
sudo dpkg -i <package>.deb
sudo dpkg -i <appid>.deb
sudo systemctl status <system_id>