惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
J
Java Code Geeks
爱范儿
爱范儿
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
I
InfoQ
月光博客
月光博客
博客园 - 聂微东
博客园 - Franky
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research

陈陈菌博客

如何在 podman 容器内使用 systemd 在 podman 运行 GUI 应用的经验总结 管理 podman 容器与镜像的导入或导出 用 xdg-dbus-proxy 解决容器的文件选择器的问题 解决 VSCodium 或 Code-Server 无法安装 GitHub Copilot 问题 不可变发行版 Fedora Silverblue 的体验记录 解决 apt 或 dnf 无法 tab 补全的问题 对 (MPA) 多页面切换实现丝滑动画的探索 让服务在非 Root 权限下使用 80 或 443 端口 AppImage 应用打包快速上手 Flatpak 使用和应用打包快速上手 如何用 webSocket 实现一个实时聊天应用 Linux 内核编译 | 快速上手 | deb 使用 debootstrap 构建 Debian 系根文件系统 高度可定制的 KDE 窗口装饰器 klassy 有关 docker、podman、nspawn、bwrap 的 Linux 容器图形性能测试 创建任意 Linux 容器并支持 GUI 程序 (Docker) 创建任意 Linux 容器并支持 GUI 程序 (nspawn) 文件同步工具 rsync 的使用 玲珑 (Linyaps) 应用打包 RPM 打包指南 | 精简版 PBR 材质的各种贴图类型入门 APU | Stable-Diffusion 使用记录 如何在 Electron 上启用 WebGPU Grub 主题安装与配置 Fcitx5 主题安装与自定义 不使用 Nginx 的网站开发指南 如何自制一个简易的资源监控程序 SQL 常用 CRUD 语法记录 在 fedora 建立一个 Arch 容器 (bwrap)
Debian 打包入门,与需要注意的问题
GlumiStudio@ · 2024-10-06 · via 陈陈菌博客

2024-10-06 18:46:07

分类: Linux 标签: Debian


众所周知 .deb 是 Debian 发行版所采用的软件包格式。可以将二进制,脚本,图片或各种文件打包成一个类似压缩包形式(ar 归档格式),然后通过 apt install [包] 去安装(解压)文件到各个目录下。

一般可以使用 ar x [deb包] 或使用 dpkg-deb -X [deb包] [解压目录] 命令提取里面的文件。

打包好的 .deb 包解压后会是这样子:

├── control.tar.xz
├── data.tar.xz
└── debian-binary

其中 control.tar.xz 通过解压后里面的含有 deb 包的配置文件。而 data.tar.xz 里面是 deb 包的主体安装文件。debian-binary 里面通常会有一行 2.0,表示该软件包遵循 Debian 包格式版本 2.0 。

如何开始打包 ?

以一个简单例子开始,首先新建一个目录,然后创建以下结构。

├── DEBIAN
│   ├── control
│   ├── preinst
│   ├── postinst
│   ├── prerm
│   └── postrm
├── usr
│   ├── bin
│       └── test
└── etc
    └── test.conf

其中 DEBIAN/control 是必须的,而 usretc 是可选的,为主体安装文件,也可以是其他目录和路径。但它们最终会解压在 / 下面。

control 文件为 deb 的主要配置,一般格式为:

Package: [包名]
Version: [版本号,如:1.82.1]
Section: [包的类型,如:utils/devel/libs/doc 等]
Priority: optional 
Architecture: [描述架构,如: amd64/arm64/all 等]
Depends: [列出包的依赖]
如:libgtk2.0-0 (>= 2.10.0), libc6 (>= 2.3.6)
Maintainer: [维护者]
Description: [包的描述]

其中 Priority 选项有:

required:这是最高的优先级,用于基本的系统,没有这些包,系统将无法正常运行。 important:这些包是系统的重要部分,但系统可以在没有它们的情况下启动。 standard:这是默认的优先级,适用于大多数常规的软件包。 optional:这些包可能是某些用户想要的,但不是每个人都需要的。 extra:这些包通常是非必要的,或者是用于特定目的的。

钩子脚本文件

在 DEBIAN 下可存放着几种脚本,它们会在特定时机用来执行一些操作(都是非必须的,但是推荐使用)。

文件作用
DEBIAN/preinst通常在解压之前执行
DEBIAN/postinst通常解压完成之后执行
DEBIAN/prerm通常卸载包之前执行
DEBIAN/postrm通常卸载包之后执行

确认无误后,我们使用 fakeroot dpkg-deb --build [包文件目录] 命令就可以打包出一个 [目录名].deb 文件了。(其中 fakeroot 模拟 root 权限,确保文件权限正确。)

使用 sudo apt install [deb路径] 即可安装,将那些文件解压至 / 下。

打包时需要注意:

安装主体文件会覆盖对应位置下的同名文件。并且也会因为卸载某个包而删除同路径下的同名文件。请务必做好钩子脚本的安装前与卸载前检查,深思熟虑后再进行某些操作。