简介
deb包是Debian,Ubuntu等Linux发行版的软件安装包,扩展名为.deb.。它类似于tar,把一堆的散装文件打包成一个整体,不同的是,deb需要有DEBIAN文件夹,里面包含了一些版本文件、安装前后所需要执行的一些脚本文件和版权等信息。需要注意的是打包deb并不负责编译,
结构组成
一个完整的deb包组成如下:
|---DEBIAN
|---control
|---postinst
|---postrm
|---preinst
|---prerm
|---copyright
|---changlog
|---conffiles
|---etc
|---usr
|---opt
|---tmp
|---boot
|---initrd-vstools.img
DEBIAN为安装信息及控制包
etc、usr、opt、tmp为文件需要存放的路径(可以把这些文件通过tar打包,然后再到根目录下解包,同样可以把各个文件给送到指定文件夹中去,但无法给每个文件分配权限)
boot 包含文件头等信息,需要特殊软件才能查看
DEBIAN 目录
1、control
control这个文件主要描述软件包的名称(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和联系方式)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。
字段 | 用途 | 例子/其他 |
---|---|---|
Package | 程序名称 | 中间不能有空格 |
Version | 软件版本 | |
Description | 程序说明 | |
Section | 软件类别 | utils, net, mail, text, x11 |
Priority | 软件对于系统的重要程度 | required, standard, optional, extra等; |
Essential | 是否是系统最基本的软件包 | yes/no,若为yes,则不允许卸载(除非强制性卸载) |
Architecture | 软件所支持的平台架构 | i386, amd64, m68k, sparc, alpha, powerpc等 |
Source | 软件包的源代码名称 | |
Depends | 软件所依赖的其他软件包和库文件 若依赖多个软件包和库文件,采用逗号隔开 | |
Pre-Depends | 软件安装前必须安装、配置依赖性的软件包和库文件 常用于必须的预运行脚本需求 | |
Recommends | 推荐安装的其他软件包和库文件 | |
Suggests | 建议安装的其他软件包和库文件 |
例:
Source: rkisp-engine
Section: libs
Priority: extra
Maintainer: Shunqian Zheng <zhengsq@rock-chips.com>
Build-Depends: debhelper (>=9)
Standards-Version: 3.9.6
Homepage: https://github.com/rockchip-linux/camera_engine_rkisp
Package: rkisp-engine
Architecture: arm64
Multi-Arch: foreign
Depends: systemd
Description: 3A libraries match Rockchip rkisp1 driver version 0.1.5.
Version: 2.2.0
2、其他文件
文件名 | 作用 |
---|---|
preinst | 一个脚本文件,用于备份(以便安装失败时回滚) |
prerm | 处理删除前操作的文件脚本 |
postinst | 处理安装后的事件的脚本文件,比如创建快捷方式,删除备份文件等操作,按需添加 |
postrm | 处理删除后操作的脚本文件,按需添加 |
dpkg
打包成deb文件我们需要用到命令dpkg
dpkg 是Debian package的简写,为Debian 操作系统 专门开发的套件管理系统,用于软件的安装,更新和移除。
所有源自**“Debian"的Linux的发行版都使用 dpkg, 例如"Ubuntu”**
语法格式 dpkg [参数]
参数 | 作用 | 示例 |
---|---|---|
-b | 给package目录打包 | dpkg -b package package.deb(第一个参数为将要打包的目录名) |
-R | 安装一个目录下所有的软件包 | dpkg -R /usr/local/src |
-i | 安装软件包 | dpkg -i package.deb |
-r | 删除软件包(保留配置) | dpkg -r package.deb |
-l | 显示已安装软件包列表 | dpkg -l |
-L | 显示于软件包关联的文件 | dpkg -L package.deb |
-c | 显示软件包内文件列表 | dpkg -c package.deb |
-P | 移除软件(不保留配置) | dpkg -P package.deb |
-x | 解压deb中所要安装的文件 | dpkg -x package.deb folder |
-e | 解压deb包中DEBIAN目录下的文件 | dpkg -e package.deb folder |
-A | 从软件包里面读取软件的信息 | dpkg -A package.deb |
例程
我们可以使用最小的deb包来测试一下。
1、创建文件
(1)建立一个目录名称,如packagetest
mkdir packagetest
(2)进入packagetest
,依次创建DEBIAN、usr目录。进入usr目录在创建bin目录。
mkdir DEBIAN usr && cd usr && mkdir bin
DEBIAN目录用与存放配置信息control文件,bin目录用于存放可执行文件。
(3)进入DEBIAN,创建control文件,编辑配置信息。
cd DEBIAN && vim control
2、control文件(编写完成后,要空出来最后一行,否则可能找不到)
Package: packagetest #名称
Version: 1.0.0 #版本
Architecture: amd64 #架构
Maintainer: WonderThink #打包人
Secion: utils #软件类别
Priority: optional #对移动的重要程度
Installed_Size: 20 #大小
Description: This is my second deb package #描述
3、编写可执行文件
使用Shell的写一个最简单的helloworld.sh,先进入usr/bin并创建helloworld.sh
cd usr/bin && vim helloworld.sh
helloworld.sh内容
#!/bin/bash
echo "hello,world!"
对helloworld.sh
文件添加可执行权限
chmod +x helloworld.sh
4、打包deb文件
(1)打包
dpkg -b packagetest
(2)命名
命名命令可以用版本号和平台给deb包命名。
dpkg-name packagetest.deb
(3)安装
sudo dpkg -i packagetest_1.0.0_amd64.deb
安装完成之后,可以在任意目录直接运行helloworld.sh就可以打印出hello,world!了。
(4)卸载
sudo dpkg -r packagetest