打包 deb 时需要注意的东西

Posted by KalosAner on June 28, 2025

在打包 .deb 包时,文件名、路径、元数据的大小写和下划线需严格遵守规则,否则可能导致安装失败或冲突。以下是关键注意事项:


1. 包命名规则(control 文件)

  • 只允许小写字母:包名必须全小写(如 my-package),禁止大写(如 My-Package ❌)。
  • 允许字符:小写字母(a-z)、数字(0-9)、加号(+)、连字符(-)、点(.)。
  • 禁止下划线:包名中不能使用下划线(如 my_package ❌),需用连字符替代(my-package ✅)。
  • 版本号:允许使用 +-.~ 和字母,但需符合 Debian 版本规范

正确示例

1
2
Package: my-app
Version: 1.0.0-1

2. 文件路径(安装到系统的文件)

  • 大小写敏感:Linux 文件系统区分大小写。打包文件路径必须与运行时路径完全一致
  • 路径规范
    • 可执行文件 → /usr/bin/ 或 /usr/sbin/
    • 配置文件 → /etc/
    • 库文件 → /usr/lib/
    • 数据文件 → /usr/share/
  • 避免非常规大写:如非必要,路径名尽量全小写(如 /usr/share/my-app/data ✅,避免 /usr/share/MyApp/Data ❌)。

    3. 维护者脚本(preinst/postinst/prerm/postrm

  • Shebang 规范:使用 #!/bin/sh(非 #!/bin/bash),确保兼容性。
  • 内部变量命名:脚本内的变量名避免使用大写(如用 app_name 而非 AppName),防止环境变量冲突。

    4. 严格检查工具

  • 使用 lintian 检查错误: lintian ../*.deb # 检查包问题 lintian 会捕获常见错误(如大小写、下划线、文件权限等)。

常见错误案例

错误类型 错误示例 修复方案
包名含大写/下划线 Package: My_App ❌ Package: my-app ✅
脚本路径大小写错误 /usr/bin/MyApp ❌ /usr/bin/my-app ✅
配置文件路径不一致 安装到 /etc/MyApp.conf,但程序读取 /etc/myapp.conf ❌ 统一为小写路径 ✅

最佳实践总结

  1. 全小写命名:包名、路径、目录名一律小写。
  2. 用连字符替代下划线:如 my-app 而非 my_app
  3. 测试安装路径:用 dpkg -c my.deb 查看包内文件路径是否合规。
  4. 虚拟机测试:在纯净 Debian/Ubuntu 环境中测试安装与运行。

遵循这些规则可避免因大小写/下划线引发的路径解析失败、依赖丢失等问题。