Linux 环境下制作 deb 软件包
一、简介
前面的笔记中已经展示过了,怎么移植的一个工具境到 ARM 环境中,对于使用 buildroot 和 yocto 的朋友来说,此笔记就没有作用了,因为管理工具包会帮我们把这个工作处理了,就算需要自定义包操作方式也不一样,可以参考上一篇笔记。
而对于 ubuntu 这样的操作系统,虽然可以使用 apt-get install
这样的命令去安装对应的工具,但是对于特定板子的适配,从 /etc/apt/sources.list 配置的镜像库中,找不到对应的工具包。比如 GPU、NPU、MPP、显卡等。那么这部分的适配,还得需要我们根据厂商提供的 SDK 进行移植,但是每次都将需要将一个个的 so、.a、相关的配置文件拷贝到对应的路径下也是比较麻烦的,所以我们可以将需要操作的文件直接打包成 deb 文件包,到对应的环境中安装即可。
二、dpkg 命令
这里使用 dpkg 命令进行打包,所以在了解打包流程之前,先了解一下 dpkg 命令
work@work:~$ dpkg --help 用法:dpkg [<选项> ...] <命令> 命令: -i|--install <.deb 文件名> ... | -R|--recursive <目录> ... --unpack <.deb 文件名> ... | -R|--recursive <目录> ... -A|--record-avail <.deb 文件名> ... | -R|--recursive <目录> ... --configure <软件包名> ... | -a|--pending --triggers-only <软件包名> ... | -a|--pending -r|--remove <软件包名> ... | -a|--pending -P|--purge <软件包名> ... | -a|--pending -V|--verify <软件包名> ... 检查包的完整性。 --get-selections [<表达式> ...] 把已选中的软件包列表打印到标准输出。 --set-selections 从标准输入里读出要选择的软件。 --clear-selections 取消选中所有不必要的软件包。 --update-avail <软件包文件> 替换现有可安装的软件包信息。 --merge-avail <软件包文件> 把文件中的信息合并到系统中。 --clear-avail 清除现有的软件包信息。 --forget-old-unavail 忘却已被卸载的不可安装的软件包。 -s|--status <软件包名> ... 显示指定软件包的详细状态。 -p|--print-avail <软件包名> ... 显示可供安装的软件版本。 -L|--listfiles <软件包名> ... 列出属于指定软件包的文件。 -l|--list [<表达式> ...] 简明地列出软件包的状态。 -S|--search <表达式> ... 搜索含有指定文件的软件包。 -C|--audit [<表达式> ...] 检查是否有软件包残损。 --yet-to-unpack 列出标记为待解压的软件包。 --predep-package 列出待解压的预依赖。 --add-architecture <体系结构> 添加 <体系结构> 到体系结构列表。 --remove-architecture <体系结构> 从架构列表中移除 <体系结构>。 --print-architecture 显示 dpkg 体系结构。 --print-foreign-architectures 显示已启用的异质体系结构。 --assert-<特性> 对指定特性启用断言支持。 --validate-<属性> <字符串> 验证一个 <属性>的 <字符串>。 --compare-vesions <a> <关系> <b> 比较版本号 - 见下。 --force-help 显示本强制选项的帮助信息。 -Dh|--debug=help 显示有关出错调试的帮助信息。 -?, --help 显示本帮助信息。 --version 显示版本信息。 Assert 特性: support-predepends, working-epoch, long-filenames, multi-conrep, multi-arch, versioned-provides. 可验证的属性:pkgname, archname, trigname, version. 调用 dpkg 并带参数 -b, --build, -c, --contents, -e, --control, -I, --info, -f, --field, -x, --extract, -X, --vextract, --ctrl-tarfile, --fsys-tarfile 是针对归档文件的。 (输入 dpkg-deb --help 获取帮助) 选项: --admindir=<目录> 使用 <目录> 而非 /var/lib/dpkg。 --root=<目录> 安装到另一个根目录下。 --instdir=<目录> 改变安装目录的同时保持管理目录不变。 --path-exclude=<表达式> 不要安装符合Shell表达式的路径。 --path-include=<表达式> 在排除模式后再包含一个模式。 -O|--selected-only 忽略没有被选中安装或升级的软件包。 -E|--skip-same-version 忽略版本与已安装软件版本相同的软件包。 -G|--refuse-downgrade 忽略版本早于已安装软件版本的的软件包。 -B|--auto-deconfigure 就算会影响其他软件包,也要安装。 --[no-]triggers 跳过或强制随之发生的触发器处理。 --verify-format=<格式> 检查输出格式('rpm'被支持)。 --no-debsig 不去尝试验证软件包的签名。 --no-act|--dry-run|--simulate 仅报告要执行的操作 - 但是不执行。 -D|--debug=<八进制数> 开启调试(参见 -Dhelp 或者 --debug=help)。 --status-fd <n> 发送状态更新到文件描述符<n>。 --status-logger=<命令> 发送状态更新到 <命令> 的标准输入。 --log=<文件名> 将状态更新和操作信息到 <文件名>。 --ignore-depends=<软件包>,... 忽略关于 <软件包> 的所有依赖关系。 --force-... 忽视遇到的问题(参见 --force-help)。 --no-force-...|--refuse-... 当遇到问题时中止运行。 --abort-after <n> 累计遇到 <n> 个错误后中止。 可供--compare-version 使用的比较运算符有: lt le eq ne ge gt (如果版本号为空,那么就认为它先于任意版本号); lt-nl le-nl ge-nl gt-nl (如果版本号为空,那么就认为它后于任意版本号); < << <= = >= >> > (仅仅是为了与主控文件的语法兼容)。 'apt' 和 'aptitude' 提供了更为便利的软件包管理。
注意: 关于每个命令的详细使用,我这里就不过多介绍了,百度一下很容易找到
三、deb 软件打包
-
创建测试程序
这里创建一个简单的测试文件 hello.c,程序如下,并执行下面步骤#include <stdio.h> int main() { printf("hello app test!\n"); return 0; } 注意: 使用命令
gcc hello.c -o hello
编译成可执行文件,如果需要在 ARM 环境下,请用交叉编译工具 -
创建打包文件
创建一个文件夹,用于存放需要打包的文件,并且文件的路径便是安装的路基,如下图所示
-
编写control 文件
用于描述 deb 包的名称、版本、描述、作者、依赖等Package: testapp Version: 1.0 Section: utils Priority: optional Architecture: amd64 Depends: libc6 (>= 2.15), libgcc1 (>= 1:3.0), libstdc++6 (>= 4.1.1) Maintainer: Your Name <yourname@email.com> Description: Test program Production of deb software package for testing 注意: 报名不能有 _ + - 等字符,否则打包的时候会出现错误
-
deb 打包
dpkg -b testapp testapp-1.0.deb -
安装 deb 软件包
sudo dpkg -i testapp-1.0.deb -
查看是否安装成功
dpkg -l | grep testapp -
程序使用测试
hello -
卸载程序
# 卸载程序及配置文件 dpkg -P <package> # 卸载程序 dpkg -r <package> -
其他常用命令
# 查看软件包的内容 dpkg -c <package_file_path> # 查看软件包(已安装)的详细信息 dpkg -s <package> 或 dpkg --status <package> # 查看软件包的安装位置 dpkg -L <package> 或 dpkg --list-files <package> # 解压 deb 软件包 dpkg -x <package_file_path> ./<file_name> dpkg -x testapp-1.0.deb ./
参考资料
ubuntun制作deb安装包:https://blog.csdn.net/weixin_51495377/article/details/132797013
为ubuntu系统制作deb安装包:https://blog.csdn.net/weixin_44789033/article/details/132759829
手把手教你如何在linux环境下制作deb软件包:https://blog.csdn.net/qq_43257914/article/details/131609720
本文来自博客园,作者:浇筑菜鸟,转载请注明原文链接:https://www.cnblogs.com/jzcn/p/18161283
如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! cn_jiaozhu@qq.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异