Linux os下制作deb包

news2025/1/10 18:15:37

在 linux os下制作 `.deb` 包涉及以下几个主要步骤。假设已经有一个应用程序或软件项目,并且希望将它打包为一个 `.deb` 包。

1. 准备源代码和构建环境

首先,需要准备好应用程序的源代码,并确保它可以在开发环境中成功编译和运行。

2. 创建目录结构

创建一个目录结构用于存放打包所需的文件和信息:

```bash

mkdir -p mypackage-1.0/DEBIAN

mkdir -p mypackage-1.0/usr/local/bin

```

在这个示例中,`mypackage-1.0` 是包的根目录,其中 `DEBIAN` 目录包含控制文件,`/usr/local/bin` 是希望安装二进制文件的位置。

3. 创建控制文件

在 `DEBIAN` 目录中,创建一个名为 `control` 的文件。这个文件包含包的元数据信息,例如包名、版本、维护者、依赖项等。

```bash

nano mypackage-1.0/DEBIAN/control

```

`control` 文件的内容示例:

```text

Package: mypackage

Version: 1.0

Section: base

Priority: optional

Architecture: amd64

Depends: libc6 (>= 2.29)

Maintainer: Your Name <your.email@example.com>

Description: My custom package

 This is a custom package created for demonstration purposes.

```

4. 复制文件到目录结构中

将应用程序的二进制文件或脚本复制到适当的目录中。例如,如果有一个可执行文件 `myapp`,将它复制到 `usr/local/bin`:

```bash

cp myapp mypackage-1.0/usr/local/bin/

```

5. 设置文件权限

确保所有的文件和目录都有正确的权限。即相应的二进制文件有可执行权限:

```bash

chmod 755 mypackage-1.0/usr/local/bin/myapp

```

6. 构建 `.deb` 包

使用 `dpkg-deb` 命令来构建 `.deb` 包:

```bash

dpkg-deb --build mypackage-1.0

```

这将生成一个名为 `mypackage-1.0.deb` 的包文件。

7. 测试安装 `.deb` 包

可以使用 `dpkg` 命令安装刚刚创建的 `.deb` 包,以测试它是否正确安装和运行:

```bash

sudo dpkg -i mypackage-1.0.deb

```

8. 验证安装

确保应用程序安装到正确的位置并能正常运行。可以通过运行程序或检查安装路径中的文件来验证。

9. 处理依赖项(可选)

如果包依赖其他包,可以在 `control` 文件中指定依赖项。在安装时,使用 `apt-get install -f` 来自动安装缺少的依赖项。

10. 发布 `.deb` 包

如果一切正常,可以将 `.deb` 包发布或分发给其他用户,他们可以通过 `dpkg -i` 命令安装包。

反解析一个实际示例:

以vlc_3.0.16-1build7_amd64.deb为例

ar解压vlc_3.0.16-1build7_amd64.deb

解压control.tar.zst

control文件包含vlc_3.0.16-1build7_amd64.deb文件的元数据信息:

解压data.tar.zst

在执行 apt install 或 dpkg -i 时,Debian 包管理系统会根据 .deb 包中的 data.tar.*(通常是 .tar.gz 或 .tar.zst)的内容来决定文件安装的位置。具体位置是由 .deb 包中的文件结构决定的。

data.tar. 的结构:* data.tar.* 文件包含了软件安装后的文件系统结构。例如,如果 data.tar.* 中包含 usr/bin/vlc,那么安装时,这个文件就会被解压到系统的 /usr/bin/vlc 位置。

安装路径: .deb 包的内容在解压时会直接映射到系统文件结构中。例如,usr/bin/ 会对应到系统的 /usr/bin/,usr/lib/ 会对应到系统的 /usr/lib/,依此类推。

是的, 看到现在的小伙伴可能已经发现问题了, 就是我上面截图的目录中不包含./usr/bin呀,是的没错,我来解释下原因:

查看的 data.tar.zst 文件仅代表了vlc工具的一部分内容。

Debian 包可能由多个 .deb 文件组成,特别是大型软件,如 VLC,它可能包含多个子包,每个子包都包含不同的文件集。通常,一个应用程序的二进制文件(如 vlc)会在主程序包中,而其他文件(如文档、桌面文件等)可能在不同的子包中。解压的 vlc_deb 是一个特定的子包,并不包含所有文件,尤其是可执行文件部分。

其次我们给出这个解析示例的原因是, 举一反三的目的, 给一个标准的示例, 那么我们在构架deb包的时候可以依据标准示例来做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2037494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Istio学习整理

一、Service Mesh Service Mesh 的中文译为 “服务网格” &#xff0c;是一个用于处理服务和服务之间通信的基础设施层&#xff0c;它负责为构建复杂的云原生应用传递可靠的网络请求&#xff0c;并为服务通信实现了微服务所需的基本组件功能&#xff0c;例如服务发现、负载均衡…

【嵌入式】指针与整数的桥梁、跨平台编程的黄金钥匙:揭开 uintptr_t 和 intptr_t 的神秘面纱

目录 一、intptr_t 和 uintptr_t 详解二、适用场景三、示例四、写在最后 一、intptr_t 和 uintptr_t 详解 intptr_t 和 uintptr_t&#xff0c;这两个数据类型是ISO C99定义的。主要用于处理指针和整数之间的转换。它们在需要将指针转换为整数进行操作&#xff0c;或者将整数转…

spring boot入门案例

一、案例需求 请求Controller中的方法&#xff0c;并将返回值响应到页面 二、代码实现 1.依赖管理——pom.xml文件 &#xff08;1&#xff09;引入 &#xff08;2&#xff09;引入依赖集合 &#xff08;3&#xff09;引入插件&#xff1a;为了方便运行&#xff0c;将project…

[Meachines] [Medium] Haircut Curl命令注入+TRP00F自动化权限提升+Screen4.5.0权限提升

信息收集 IP AddressOpening Ports10.10.10.24TCP:22,80 $ nmap -p- 10.10.10.24 --min-rate 1000 -sC -sV ORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 e9:75:c1:e4:b3:63…

驱动开发系列10 - Linux Graphics 图形栈介绍

目录 一:Linux 图形栈总体结构 1. 整体图形栈: 2. 现代3D图形栈: 二:Xorg 介绍 Xorg 概述: Xorg的发展历史: Xorg绘制原理: Xorg的缺点: 三:Wayland 介绍 一:Linux 图形栈总体结构 1. 整体图形栈: 应用程序->桌面环境->GUI框架->Display Client->Displ…

探索边缘计算与云计算之间的区别

IT管理员不需要在边缘和云之间进行选择&#xff0c;但需要了解每种技术的优缺点&#xff0c;以便最好地将它们融入到企业运营中。 许多组织使用云作为其整体IT平台的一部分。资源管理的灵活性和更高的整体利用率的承诺可以等同于节省成本。 此外&#xff0c;对许多人而言&…

聚焦巴黎奥运会 | AI技术如何成为赛场上的智能明星?

备受关注的2024年巴黎奥运会已圆满落幕&#xff01; 本届巴黎奥运会不仅是全球瞩目的体育盛事&#xff0c;更是展示中国科技创新实力的重要舞台。从精彩的赛事转播到精密的比赛设备&#xff0c;再到先进的场馆建设&#xff0c;中国的"黑科技"正伴随着中国运动员的矫健…

达梦DSC集群部署.docx

1. 前期规划 1.1. 集群规划 节点1节点2业务服务名DSC业务IP192.168.25.101192.168.25.102内部数据交换网络IP10.10.10.110.10.10.2dmdcr_cfgCSSDCR_EP_NAMECSS0CSS1DCR_EP_HOST10.10.10.110.10.10.2DCR_EP_PORT11286ASMDCR_EP_NAMECSS0CSS1DCR_EP_HOST10.10.10.110.10.10.2DC…

服务器数据恢复—raid5阵列热备盘未全部启用导致阵列崩溃的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台EMC某型号存储中有一组RAID5磁盘阵列。该raid5阵列中有12块硬盘&#xff0c;其中2块硬盘为热备盘。 服务器存储故障&#xff1a; 该存储raid5阵列中有两块硬盘离线&#xff0c;只有1块热备盘启用替换掉其中一块离线盘&#xff0c;另外…

如何让RStudio使用不同版本的R

下面内容摘录自&#xff1a; 专栏问答&#xff1a;管理和选择不同的R&#xff0c;如何做好R的笔记_rstudio如何在不同的r版本中进行切换-CSDN博客 欢迎订阅我们专栏 问题一&#xff1a;如何发现RStudio需要安装和使用不同版本的R。这是为什么呢&#xff1f; R允许用户在同一系统…

Spring容器启动的过程(main)

大体流程如下 1、初始化 首先&#xff0c;Spring会通过用户提供的配置信息&#xff08;例如XML文件或者注解&#xff09;来初始化一个BeanFactory&#xff0c;这个BeanFactory是Spring容器的核心&#xff0c;它负责创建和管理所有的Bean。 2、读取配置生成并注册BeanDefini…

单点Redis中面临哪些问题

我的后端学习大纲 我的Redis学习大纲 1.面试&#xff1a;请说下在单点Redis中面临哪些问题&#xff1a; 1.1.单点Redis的问题&#xff1a; 1.数据丢失问题&#xff1a;Redis是内存存储&#xff0c;服务重启可能会丢失数据 2.并发能力问题&#xff1a;单节点Redis并发能力虽然…

springboot系列十二:拦截器和文件上传

文章目录 基本介绍拦截器应用实例需求分析代码实现注意事项和细节 文件上传需求说明代码实现注意事项和细节课后扩展 基本介绍 1.在Spring Boot项目中, 拦截器是开发中常用手段, 要来做登陆验证, 性能检查, 日志记录等. 2.基本步骤: √ 编写一个拦截器实现HandlerInterceptor…

【简单】 猿人学web第一届 第3题 罗生门

请求逻辑分析 数据接口为https://match.yuanrenxue.cn/api/match/3?page1 这一题的 请求参数 与 cookie 都没有加密参数 每次请求数据接口前都会请求 jssm 接口 requests 照着请求逻辑去请求&#xff0c;发现是失败的&#xff08;数据接口返回包含 js标签 代码&#xff09;…

Unity数据持久化 之 Json序列化与反序列化

语法规则可以看这篇文章&#xff1a;Unity数据持久化 之 Json 语法速通-CSDN博客 Q:Unity是通过什么来对Json文件进行处理的&#xff1f; A:JsonUtility&#xff1a;Unity 提供了 JsonUtility 类&#xff0c;用于将对象序列化为 JSON 字符串或将 JSON 字符串反序列化为对象。…

从 MySQL 迁移到 TiDB:使用 SQL-Replay 工具进行真实线上流量回放测试 SOP

导读 在 MySQL 迁移至 TiDB 的过程中&#xff0c;兼容性和性能验证至关重要。SQL-Replay 是一款实用工具&#xff0c;用于评估数据库的兼容性和性能&#xff0c;支持日志解析、查询回放、性能测量和报告生成等功能。 本文介绍了 SQL-Replay 工具的安装和使用步骤&#xff0c;…

基于springboot的医院后台管理系统的设计与实现

TOC springboot167基于springboot的医院后台管理系统的设计与实现 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这…

【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)

目录 C语言格式化输出占位符及其标志字符详解&#xff08;基于ISO/IEC 9899:2024&#xff09;1. 格式说明符的基本结构1.1 标志字符&#xff08;Flags&#xff09;示例代码 1.2 宽度&#xff08;Width&#xff09;示例代码 1.3 精度&#xff08;Precision&#xff09;示例代码 …

一键换肤(Echarts 自定义主题)

一键换肤&#xff08;Echarts 自定义主题&#xff09; 一、使用官方主题配置工具 官方主题配置工具&#xff1a;https://echarts.apache.org/zh/theme-builder.html 如果以上主题不满足使用&#xff0c;可以自己自定义主题 例如&#xff1a;修改背景、标题等&#xff0c;可…

字节跳动飞书一面0715

进程间通信方式有哪些 1、管道通信&#xff0c;分为匿名管道和有名管道&#xff0c;匿名管道只能在有亲缘关系如父子进程间使用。有名管道可以允许无亲缘关系进程间的通信。它们都是半双工的通信方式&#xff0c;数据只能单向流动。 2、消息队列&#xff0c;用内核中的链表实现…