linux下deb包的管理及制作 | 一次成功
1.deb包介绍
在debian/ubuntu环境下,很多情况下,我们安装已经开发的程序运用,可以通过deb包的命令进行程序的部署,对应的项目目录文件也会同步到某些目录下,
有些情况下将程序做成service启动,这样会更方便运用的管理,如通过service xxx start|stop|status|restart。
deb 是 Unix 系统(其实主要是 Linux)下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。
deb 包本身有三部分组成:数据包,包含实际安装的程序数据,文件名为 data.tar.XXX;安装信息及控制脚本包,包含 deb 的安装说明,标识,脚本等,文件名为 control.tar.gz;最后一个是 deb 文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中打开可以看到。
deb 本身可以使用不同的压缩方式。tar 格式并不是一种压缩格式,而是直接把分散的文件和目录集合在一起,并记录其权限等数据信息。之前提到过的 data.tar.XXX,这里 XXX 就是经过压缩后的后缀名。
deb 默认使用的压缩格式为 gzip 格式,所以最常见的就是 data.tar.gz。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最高,但压缩需要的 CPU 资源和时间都比较长。
data.tar.gz包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即 / ),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。
而 control.tar.gz 则包含了一个 deb 安装的时候所需要的控制信息。一般有 5 个文件:
- control,用了记录软件标识,版本号,平台,依赖信息等数据,这是最主要的文件配置,必不可少;
- preinst,在解包data.tar.gz 前运行的脚本;
- postinst,在解包数据后运行的脚本;
- prerm,卸载时,在删除文件之前运行的脚本;
- postrm,在删除文件之后运行的脚本;在 Cydia 系统中,Cydia 的作者 Saurik 另外添加了一个脚本,extrainst_,作用与 postinst 类似。
- rules,通常是给命令dpkg-buildpackage使用
dpkg与apt-get区别
使用 dpkg 命令安装软件时,可以使用 -i
选项并指定 deb 安装包的路径。和 Ubuntu 下的另一个包管理工具 apt-get
(Advanced Package Tool)有所不同。
apt-get
命令并不直接操作 deb 安装包文件,而是从 /etc/apt/sources.list 配置文件中定义的软件镜像源里下载软件包并安装,使用时也只需指定软件的名称(或者也可以附加上版本号)。
apt-get 命令安装软件:
$ apt-get install <package_name[=version]>
dpkg 命令安装软件:
$ dpkg -i <package_file_path>
因此,dpkg 主要是用来安装已经下载到本地的 deb 软件包,或者对已经安装好的软件进行管理。而 apt-get 可以直接从远程的软件仓库里下载安装软件。
2.deb常用命令
1).安装deb包
dpkg -i 包名
2).删除deb包,删除安装的文件
dpkg -r 包名
# e.g. 如hello_1.0_linux_amd64.deb, 就是hello
3).提取deb包文件到指定目录
dpkg -x 包名 dirname
# e.g. dpkg -x hello_1.0_linux_amd64.deb ./hello
# 解释,提取deb包信息到当前的hello目录中,但是DEBIAN包不会提取到hello中
4).查看包中的文件信息
dpkg -c 包名
# stout会列出所有目录文件信息
5).制作deb包
dpkg|dpkg-deb -b source-pakage pakageName
# 在做包前还有些工作是要完成的,见下文
3.deb包的制作
首先介绍下基本流程。
主要流程分以下三步:
1).编辑文件信息
2).编写control信息,单写这个也可以成功打出deb包,如果配置文件较多,比如加入系统服务的那些文件,需要加在xxxxinst文件脚本中
3).构建deb包
下面通过一个简单的例子说明。
dpkg-deb方式构建deb包
1.首先生成项目目录
# mkdir -p hello/opt
2.进入目录中
# cd hello/opt
3.生成编辑文件-简单做个python例子
# touch hello.py
# vim hello.py
以下是文件内容
------
#!/usr/bin/python
print "hello"
------
保存后退出
4.加执行权限
# chmod +x hello.py
5.回到hello主目录下,生成DEBIAN目录
# mkdir DEBIAN
6.编写control信息
# cd DEBIAN
# touch control
# vim control
以下是control内容
------
Package: hello
Version: 1.0
Section: BioInfoServ
Priority: optional
Depends:
# 此处是相关的依赖包,多个用逗号隔开,如有确切版本,则可以 python-django (= 1.11.5)
Suggests:
Architecture: amd64
Installed-Size: 4096
Maintainer: gatieme
Provides: bioinfoserv-arb
Description: A test for using dpkg cmd
------
7.回到hello目录
------
root@test:/data/test/hello# ls -R
.:
DEBIAN opt
./DEBIAN:
control
./opt:
hello.py
------
8.接下来执行做包命令
# 回到hello目录上层,
# cd ..
# ls # hello目录
# dpkg-deb -b hello hello_1.0_linux_amd64.deb # dpkg-deb命令,-b表示构建deb包, hello表示源文件包, hello_1.0_linux_amd64.deb表示构建后的deb包
# 下面是输出
------
dpkg-deb: building package 'hello' in 'hello_1.0_linux_amd64.deb'.
------
# 更多
我们可以通过以下命令来提取deb包的DEBIAN信息
dpkg-deb -e xx包
# 提取对应deb包的DEBIAN目录到当前目录,内部含control,confile,postinst等等信息
到了这里,deb包就完成了,接下来可以通过dpkg相关命令管理deb包。
4.写在后面
deb包的目录树
|——mydeb
|————usr
|————lib
|——可执行文件(安装后,就在你的/usr/lib生成相应的可执行文件)
|————share
|————icons
|——deb.png(图标文件生成到/usr/share/icons/)
|————applications
|——deb.desktop(桌面文件生成到/usr/share/applications/)
|————DEBIAN(大写、用来制作打包文件)
|————control(描述deb包的信息必须的文件)
DEBIAN目录下可用的文件如下
这个目录下面的文件很多,不能一一解释。这里列举几个重要的,也是绝大部分软件必须的:
control文件: 声明很多重要的变量,dpkg通过这些变量来管理软件包
copyright文件: 不用说,版权信息,相当重要
changelog文件: 这是一个必需文件,包含软件版本号,修订号,发行版和优先级。
rules文件: 这实际上是另外一个Makefile脚本,用来给dpkg-buildpackage用的.
compat文件: 这个文件留着是有用的
dirs文件:这个文件指出我们需要的但是在缺省情况下不会自动创建的目录
conrol文件
//包名
Package: Internet-of-things
//版本
Version: 1.0.0-2017.05.03
//包分类
Section: tuils
//优先级
Priority: optional
//依赖软件包
Depends:
//建议
Suggests:
//目标机架构
Architecture: i386 | amd64
//安装后大小
Installed-Size:
//维护者
Maintainer: papa
//原维护者
Original-Maintainer: papa
//提供
Provides:
//包描述
Description: 欢迎来到万物智联
//软件主页
Homepage: http://blog.csdn.net/qq_27818541/
参考
https://blog.csdn.net/gatieme/article/details/52829907
https://blog.csdn.net/youlinhuanyan/article/details/99574723
posted on 2021-02-03 11:16 进击的davis 阅读(10641) 评论(1) 编辑 收藏 举报