当前位置:

首页 > 软件教程 > 制作Ubuntu的deb包并不困难:深入了解deb安装包的内部结构及使用方法

制作Ubuntu的deb包并不困难:深入了解deb安装包的内部结构及使用方法

Deb文件是一种用于分发和安装LinuxDebian及其衍生发行版程序的存档文件,通常包含应用程序数据。它们对于处理依赖项、桌面集成以及运行安装前和安装后脚本非常方便。与Deb格式类似的另一种包格式是Fedora系列发行版常用的rpm文件。本文通过示例演示如何制作简单的deb包,解释了deb包内各文件的作用,以及安装后如何生效和维护。deb包剖析deb是一种常见的Unixar存档格式,内含应用程序和其他实用程序文件。其中的关键组成部分是控制文件(control),它包含了有关deb包和安装程序的重要信息。

本文目录

    Linux制作一个deb包如此简单:Ubuntu的deb安装包文件的内部组成分析与使用原理

    Deb 文件是一种用于分发和安装 Linux Debian 及其衍生发行版程序的存档文件,通常包含应用程序数据。它们对于处理依赖项、桌面集成以及运行安装前和安装后脚本非常方便。与 Deb 格式类似的另一种包格式是 Fedora 系列发行版常用的 rpm 文件。

    本文通过示例演示如何制作简单的deb包,解释了deb包内各文件的作用,以及安装后如何生效和维护。

    deb 包剖析

    deb 是一种常见的 Unix ar 存档格式,内含应用程序和其他实用程序文件。其中的关键组成部分是控制文件(control),它包含了有关 deb 包和安装程序的重要信息。

    • 在内部,deb包 包含了模拟 Linux 的典型文件系统目录结构的文件集合,例如 /usr 、/usr/bin 、/opt等 。在安装过程中,放置在其中一个目录中的文件将被复制到实际文件系统中的同一位置。例如 软件包内的/usr/bin/binaryfile 这样的二进制文件将安装到系统的 /usr/bin/binaryfile。
    • 在外部,所有 deb 包文件都遵循特定的命名约定:
    _-_.deb

    假设您要发布名为 mynano 的程序,版本 1.0,该程序是为 64 位处理器(AMD64)构建的。您的 deb 文件名将类似于 mynano_1.0-0_amd64.deb

    制作 deb 包

    我们已准备好生成包。请确保您的系统已安装 dpkg-deb 工具(dpkg 软件包提供)。稍后将使用dpkg-deb生成最终的deb包。

    (1) 建立工作目录以存放包文件,按照之前的命名约定进行命名。

    mkdir mynano_1.0-1_amd64/

    (2) 创建内部结构 将程序文件放在目标系统上应安装的位置。假设您希望将可执行文件安装到:/usr/bin/

    首先创建目录:

    mkdir -p mynano_1.0-1_amd64/usr/bin/

    mkdir命令的-p标志将创建嵌套目录,如果其中任意目录不存在则自动创建。然后将可执行文件复制到其中:

    # 假设你开发的程序可执行文件为 ~/YourProjects/mynano/src/targets/release/mynano
    cp ~/YourProjects/mynano/src/targets/release/mynanomynano_1.0-1_amd64/usr/bin/

    (3) 创建文件control 该文件位于DEBIAN目录中(注意目录名为大写字母)

    先创建文件夹:DEBIAN

    mkdir mynano_1.0-1_amd64/DEBIAN

    然后创建空文件:control

    touch mynano_1.0-1_amd64/DEBIAN/control

    填写control文件内容:

    Package: mynano
    Version: 1.0
    Architecture: amd64
    Maintainer: linuxlibs 
    Description: 基于nano的自定义编辑器
    Depends: nano (>= 5.0)

    其中:

    • Package– 程序名称;
    • Version– 程序版本;
    • Architecture— 目标架构;
    • Maintainer– 包裹维护负责人的姓名和电子邮件地址;
    • Description– 程序的简要说明。
    • Depends- 本软件包依赖的其他软件包。

    该文件可能包含其他有用的字段,例如Depends指出deb包的依赖项列表。那么如果借助 apt 命令安装 deb包的时候,就会先安装上 nano>=5.0版本的软件包,再安装 mynano。

    (5) 最后一步:构建 deb 包 按如下方式调用dpkg-deb:

    dpkg-deb --build --root-owner-group 

    在我们的示例中:

    dpkg-deb --build --root-owner-group 

    这里的 –root-owner-group 标志使所有 deb 包内容都归 root 用户所有,这是标准方法。如果没有这样的标志,所有文件和文件夹的属主都为您当前的用户,但考虑到 deb 软件包将安装到的系统中并不一定存在与你同名账号,所以使用–root-owner-group 更合理。

    上面的命令将在工作目录旁边生成一个.deb的文件,或者如果包内有错误或丢失,则打印错误。如果操作成功,就可以分发这个生成的 deb 包给他人了。

    (6) 使用deb包安装到系统:可以看到,通过apt方式安装我们制作的deb包的时候,会自动安装上依赖项:nano 软件包

    # apt install ./mynano_1.0-1_amd64.deb
    正在读取软件包列表... 完成
    正在分析软件包的依赖关系树... 完成
    正在读取状态信息... 完成
    注意,选中 'mynano' 而非 './mynano_1.0-1_amd64.deb'
    将会同时安装下列软件:
    nano
    建议安装:
    hunspell
    下列【新】软件包将被安装:
    mynano nano
    升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 79 个软件包未被升级。
    需要下载 280 kB/1,135 kB 的归档。
    解压缩后会消耗 881 kB 的额外空间。
    您希望继续执行吗? [Y/n] y
    获取:1 /root/my-nano-editor-src/mynano_1.0-1_amd64.deb mynano amd64 1.0.0 [855 kB]
    获取:2 https://mirrors.ustc.edu.cn/ubuntu jammy/main amd64 nano amd64 6.2-1 [280 kB]
    已下载 280 kB,耗时 1秒 (422 kB/s)
    正在选中未选择的软件包 nano。
    (正在读取数据库 ... 系统当前共安装有 231799 个文件和目录。)
    准备解压 .../archives/nano_6.2-1_amd64.deb...
    正在解压 nano (6.2-1) ...
    正在选中未选择的软件包 mynano。
    准备解压 .../mynano_1.0-1_amd64.deb...
    正在解压 mynano (1.0.0) ...
    正在设置 nano (6.2-1) ...
    update-alternatives: 使用 /bin/nano 来在自动模式中提供 /usr/bin/editor (editor)
    update-alternatives: 使用 /bin/nano 来在自动模式中提供 /usr/bin/pico (pico)
    正在设置 mynano (1.0.0) ...
    正在处理用于 install-info (6.8-4build1) 的触发器 ...
    正在处理用于 man-db (2.10.2-1) 的触发器 ...
    Scanning processes...
    Scanning processor microcode...
    Scanning linux images...

    (7) 【非必须】卸载安装的软件 mynano:

    # apt remove mynamo -y
    正在读取软件包列表... 完成
    正在分析软件包的依赖关系树... 完成
    正在读取状态信息... 完成
    下列软件包将被【卸载】:
    mynano
    升级了 0 个软件包,新安装了 0 个软件包,要卸载 1 个软件包,有 79 个软件包未被升级。
    解压缩后会消耗 0 B 的额外空间。
    您希望继续执行吗? [Y/n] y
    (正在读取数据库 ... 系统当前共安装有 231872 个文件和目录。)
    正在卸载 mynano (1.0.0) ...

    (8) 【非必须】查询 mynano_0.1-1_amd64.deb 的依赖关系:dpkg -I ./mynano*deb

    以上制作deb包的方式,还有哪些可改进的地方:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 Linux
    相关文章 更多
    linux删除用户与用户组的方法及命令教程
    linux删除用户与用户组的方法及命令教程

    掌握Linux中删除用户和用户组的正确方法,避免残留文件和进程冲突。本文深入解析userdel和groupdel命令的参数用法,提供处理“用户仍在使用”等常见错误的实战方案。

    Linux如何开启端口号?开放端口命令详解
    Linux如何开启端口号?开放端口命令详解

    详细讲解Linux如何开启端口号以及常用的开放端口命令。

    crossover卸载软件下载及重新安装教程
    crossover卸载软件下载及重新安装教程

    遇到CrossOver运行错误或需要更新版本时,如何彻底卸载旧版并干净重装?本教程详解macOS和Linux下的卸载步骤、残留文件清理方法及官方下载渠道,确保软件环境纯净稳定。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。