linux的程序打包deb
deb安装包
deb是Unix系统(其实主要是Linux)下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。
由于 Unix 类系统对权限、所有者、组的严格要求,而 deb 格式安装包又经常会涉及到系统比较底层的操作,所以权限等的设置尤其重要。
deb组成
查看deb包含哪些文件
两个命令结果都是一样的,查看deb安装包内有哪些文件。
dpkg -c xxx.deb // 安装前根据deb文件查看
dpkg -L debname // 安装后根据软件名称查看
deb包本身有三部分组成
组成 详细
数据包 包含实际安装的程序数据,文件名为“data.tar.XXX”
安装信息及控制包 包含deb的安装说明,标识,脚本等,文件名为“control.tar.gz”
二进制数据 包含文件头等信息,需要特殊软件才能查看
deb本身可以使用不同的压缩方式. tar格式并不是一种压缩格式,而是直接把分散的文件和目录集合在一起,并记录其权限等数据信息。之前提到过的 data.tar.XXX,这里 XXX 就是经过压缩后的后缀名. deb默认使用的压缩格式为gzip格式,所以最常见的就是 data.tar.gz。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最高,但压缩需要的 CPU 资源和时间都比较长
详细介绍:
data.tar.gz
包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即/),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。
control.tar.gz
则包含了一个deb安装的时候所需要的控制信息。
控制文件 描述
control 用了记录软件标识,版本号,平台,依赖信息等数据
preinst 在解包data.tar.gz前运行的脚本
postinst 在解包数据后运行的脚本
prerm 卸载时,在删除文件之前运行的脚本
postrm 在删除文件之后运行的脚本
备注:
- inst是install(安装)的缩写
- pre是表示XX之前的前缀
- post是表示XX之后的前缀
- rm是remove(移除)的缩写
安装&移除
deb包安装
dpkg -i xxx.deb
deb包移除
dpkg -r debname
查看某个文件属于哪个安装包
dpkg -S filepath
指定安装路径
dpkg -X xxx.deb dirname
制作deb流程
准备好可执行的二进制文件
这个二进制文件要可执行,提前要考虑兼容性,如果程序有目录要完整的一个程序目录。
这里只拿一个单独的二进制文件打包。测试文件下载
新建软件文件夹
我们测试名称为MyDeb
新建一个名为DEBIAN文件夹
此文件夹内存放控制信息
在DEBIAN里新建一个文本文档, 名为control, 编码为utf-8, 内容如下所示:
例子:
Package: MyDeb
Version: 1.0.0-2018.01.11
Section: Software
Priority: optional
Depends:
Suggests:
Architecture: i386
Installed-Size: 4096
Maintainer: gatieme
Provides: bioinfoserv-arb
Description: xxx
我们创建一个简单的。
package: MyDeb #安装包的名称
version: 1.0.0 #版本
architecture: i386 #平台
maintainer: young #维护者
description: you can description the deb #描述安装包的信息
然后我们创建对应的二进制包安装完成后的路径信息放置在DEBIAN的同级目录下,也就是把当前的目录当成根(“/”)目录,制作完成后安装时,当前目录下除了DEBIAN目录的其他目录都会被默认安装到系统的“/”目录下。
下面是一个程序目录的例子。
|——mydeb
|————usr
|————bin
|——可执行文件(安装后,就在你的/usr/bin生成相应的可执行文件)
|————share
|————icons
|——deb.png(图标文件生成到/usr/share/icons/)
|————applications
|——deb.desktop(桌面文件生成到/usr/share/applications/)
|————DEBIAN(大写、用来制作打包文件)
|————control(描述deb包的信息必须的文件)
完整实验例子目录结构:
MyDeb
├── DEBIAN
│ └── control
├── opt
│ └── MyDeb
│ ├── heart
│ └── heart.desktop
└── usr
├── bin
│ └── heart -> /home/vincent/桌面/MyDeb/opt/MyDeb/heart
└── share
├── applications
│ └── heart.desktop
└── icons
└── heart_98.png
8 directories, 6 files
打包
sudo dpkg -b MyDeb/ MyDeb-linux-amd64.deb
————————————————