Files
blog-tech/content/posts/211019-dpkg_package_guide.md
T
2026-07-17 10:20:54 +08:00

86 lines
3.5 KiB
Markdown

---
title: DEB打包方法简介
date: 2021-10-19T10:12:23+08:00
lastmod: 2021-10-19T10:12:23+08:00
draft: false
description: "Debian系Linux,如ubuntu, deepin等系统的deb打包教程"
authors:
- Kushidou
tags:
- Linux
- Deepin/UOS
categories: []
toc: true
comments: true
---
简单介绍deb打包的方法,包括目录树格式和打包注意事项。
<!--more-->
## 文件结构
首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录`/`。一个工作空间的目录树如下:
```
PackageDIR
├─DEBIAN
├─opt
│ └─kushidou-touchscreen
│ └─desktops
├─usr
│ ├─bin
│ └─share
└─var
```
其中,`DEBIAN`目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。
## DEBIAN
`DEBIAN`目录下有一个control文件和至多四个脚本文件。
### control
`control`文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。
| NAME | Description |
| ------------ | ------------------------------------------- |
| Package | 软件名,`dpkg -l` 列出的名字 |
| Version | 版本号-修订号 |
| Section | 软件类型,比如mail, test, x11等 |
| Priority | 优先级/重要性,比如optional 可选的 |
| Architecture | 软件架构,比如x86, arm64 |
| Depends | 依赖环境,用 `,` 隔开,用`(>=< )`指定版本号 |
| Suggests | 推荐安装,指非必要依赖,可以提供更多功能 |
| Maintainer | 作者 <邮箱或者其他联系方式> |
| Descritprion | 简介,可以换行书写 |
![image-20211019094048011](https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20211019101901.png)
### 额外脚本
`DEBIAN`目录下之多放置四个可执行脚本,包括**安装前`preinst`**、**安装后`postinst`**、**卸载前`prerm`**、**卸载前`postrm`**,四个脚本都需要以`#!/bin/bash`开头,内容与普通脚本无异,文件名不需要后缀。
这些脚本主要实现复制快捷方式、建立软连接、添加环境变量、添加额外的文件和配置等操作。这些脚本是以`root`身份运行,注意他们创建文件的访问权限。inst创建的文件无法被dpkg删除,需要使用rm脚本自行处理。
此外`postinst`可以用来启动已安装的程序,`prerm`常用来停止正在运行的程序。
### md5sums
为了防止安装包被篡改,可以计算每个二进制文件的md5值存放在这个文件里。非必要。
## 打包
所有文件配置完成后,进入工作空间上级目录,执行指令
```bash
dpkg -b ./PackageDIR packagename.deb
```
deb包命名的一般规则为 **软件名\_版本-修订号_架构.deb**
## 其他信息
一般公开发行的安装包应该包含其他信息,如版权信息、changelog、doc、man手册等。这些文件都有各自的编撰格式,主要是为了方便系统识别和二次开发,与用户直接体验无关。