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

推荐订阅源

N
News and Events Feed by Topic
V
V2EX
博客园 - 【当耐特】
Vercel News
Vercel News
雷峰网
雷峰网
爱范儿
爱范儿
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
NISL@THU
NISL@THU
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
P
Proofpoint News Feed
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
I
InfoQ
Google Online Security Blog
Google Online Security Blog
L
LINUX DO - 最新话题
Project Zero
Project Zero
Engineering at Meta
Engineering at Meta
V
Visual Studio Blog
AI
AI
Schneier on Security
Schneier on Security
B
Blog RSS Feed
T
Tor Project blog
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Cyber Attacks, Cyber Crime and Cyber Security
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
V2EX - 技术
V2EX - 技术
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
Arctic Wolf
Webroot Blog
Webroot Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main

陈陈菌博客

如何在 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) 在 fedora 上建立一个 debian 容器 (bwrap) i3wm | 自制一个极简的屏幕亮度调节器 在 Linux 下启用内存压缩技术 zram 搭建一个本地轻量级聊天 Ai 我又又又重新上线了博客 如何通过命令行管理 wine 容器 (包括 proton) Btrfs 文件系统创建 swap 文件的方法 如何创建适用于 Linux 桌面的程序启动文件 在 Linux 控制 intel CPU 调度的方法 Arch Linux 的基本安装
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路径] 即可安装,将那些文件解压至 / 下。

打包时需要注意:

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