linux下deb包的管理及制作⼀次成功
1.deb包介绍
在debian/ubuntu环境下,很多情况下,我们安装已经开发的程序运⽤,可以通过deb包的命令进⾏程序的部署,对应的项⽬⽬录⽂件也会同步到某些⽬录下,
有些情况下将程序做成service启动,这样会更⽅便运⽤的管理,如通过service xxx start|stop|status|restart。
deb 是 Unix 系统(其实主要是 Linux)下的安装包,基于 tar 包,因此本⾝会记录⽂件的权限(读/写/可执⾏)以及所有者/⽤户组。
deb 包本⾝有三部分组成:数据包,包含实际安装的程序数据,⽂件名为 data.tar.XXX;安装信息及控制脚本包,包含 deb 的安装说明,标识,脚本等,⽂件名为 ;最后⼀个是 deb ⽂件的⼀些⼆进制数据,包括⽂件头等信息,⼀般看不到,在某些软件中打开可以看到。
deb 本⾝可以使⽤不同的压缩⽅式。tar 格式并不是⼀种压缩格式,⽽是直接把分散的⽂件和⽬录集合在⼀起,并记录其权限等数据信息。之前提到过的 data.tar.XXX,这⾥ XXX 就是经过压缩后的后缀名。
deb 默认使⽤的压缩格式为 gzip 格式,所以最常见的就是 。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最⾼,但压缩需要的 CPU 资源和时间都⽐较长。
包含的是实际安装的程序数据,⽽在安装过程中,该包⾥的数据会被直接解压到根⽬录(即 / ),因此在打包之前需要根据⽂件所在位置设置好相应的⽂件/⽬录树。
⽽ 则包含了⼀个 deb 安装的时候所需要的控制信息。⼀般有 5 个⽂件:
control,⽤了记录软件标识,版本号,平台,依赖信息等数据,这是最主要的⽂件配置,必不可少;
preinst,在解包 前运⾏的脚本;
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
linux系统安装步骤csdnMaintainer: 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: blog.csdn/qq_27818541/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。