CSDNGitHub

Ubuntu下制做deb包的方式解读

AderXCoding/system/tools/build_deb

本作品采用知识共享署名-非商业性使用-相同形式共享4.0国际许可合同进行许可

1认识deb包1.1认识deb包

deb是Unix系统(虽然主要是Linux)下的安装包,基于tar包,因而本身会记录文件的权限(读/写/可执行)以及所有者/用户组。

因为Unix类系统对权限、所有者、组的严格要求,而deb格式安装包又常常会涉及到系统比较底层的操作,所以权限等的设置尤其重要。

1.2使用deb包

dpkg -c xxx.deb // 安装前根据deb文件查看
dpkg -L debname // 安装后根据包名查看

dpkg -i xxx.deb

注意,假若提示错误,可以加参数—force-all强制安装,但不推荐这样做

dpkg -r debname

dpkg -S filepath

dpkg -X xxx.deb dirname

dpkg -e xxx.deb

1.3deb包的组成结构

deb包本身有三部份组成:

数据包,包含实际安装的程序数据,文件名为data.tar.XXX;

安装信息及控制脚本包,包含deb的安装说明,标示,脚本等,文件名为control.tar.gz;

最后一个是deb文件的一些二补码数据,包括文件头等信息,通常看不到,在个别软件中打开可以看见。

deb本身可以使用不同的压缩方法.tar格式并不是一种压缩格式,而是直接把分散的文件和目录集合在一起,并记录其权限等数据信息。之前提到过的data.tar.XXX,这儿XXX就是经过压缩后的后缀名.deb默认使用的压缩格式为gzip格式,所以最常见的就是data.tar.gz。常有的压缩格式还有bzip2和lzma,其中lzma压缩率最高,但压缩须要的CPU资源和时间都比较长

通常有5个文件:

控制文件描述

control

用了记录软件标示,版本号,平台,依赖信息等数据

preinst

在解包data.tar.gz前运行的脚本

postinst

在解包数据后运行的脚本

prerm

卸载时,在删掉文件之前运行的脚本

postrm

在删掉文件以后运行的脚本

2制做deb包

linux如何打包编译好的程序_linux程序打包_编译打包部署

首先我们须要打算好我们待打包的软件,这儿我们采用了

2.1最基础的方法dpkg-deb

最基础的方法须要我们自己编撰和创建脚本,不使用其他辅助工具,而只使用标准的dpkg-deb打包命令

我们以之前的陌陌笔记本版的代码为反例,为其创建一个deb安装包

首先我们为我们创建一个工作目录electronic-wechat

之后我们创建一个名为EBIAN的目录,用于储存控制信息

之后我们创建对应的二补码包安装安装完成后的路径信息放置在DEBIAN的同级目录下,也就是说我们把当前的目录当作根目录,制做完成后安装时,当前目录下除DEBIAN目录的其他目录还会被默认安装到系统的/目录下

目录结构

在DEBIAN里新建一个文本文档,名为control,编码为utf-8,内容如下所示

Package: electronic-wechat
Version: 1.4.0-2016.08.24
Section: BioInfoServ
Priority: optional
Depends:
Suggests:
Architecture: i386
Installed-Size: 4096
Maintainer: gatieme
Provides: bioinfoserv-arb
Description: A better WeChat on macOS and Linux. Built with Electron by Zhongyi Tong

之后我们回到工作目录上级,使用dpkg-deb命令创建deb包

使用dpkg-deb--help查看使用帮助的信息,可以使用-b选项生成deb包

dpkg-deb -b electronic-wechat electronic-wechat-linux-i386.deb

dpkg-deb打包deb包

验证打包好的deb,我们可以使用dpkg-i安装或则dpkg-X解压命令验证我们的deb包

dpkg-X验证deb包

2.2方式二:使用checkinstall方式创建deb包

假如你早已从它的源码运行”makeinstall”安装了linux程序.想完整移除它将显得真的很麻烦,除非程序的开发者在Makefile里提供了uninstall的目标设置.否则你必须在安装前后比较你系统里文件的完整列表linux如何打包编译好的程序,之后手工移除所有在安装过程中加入的文件.这时侯Checkinstall就可以派上使用。Checkinstall会跟踪install命令行所创建或更改的所有文件的路径(比如:”makeinstall”、”makeinstall_modules”等)并构建一个标准的二补码包,让你能用你发行版的标准包管理系统安装或卸载它,(诸如RedHat的yum或则Debian的apt-get命令)

apt-get install checkinstall

可以使用checkinstall--help来查看帮助信息

checkinstall除了可以生成deb包,还可以生成rpm包,使用简单,而且不灵活,功能粗糙,只做介绍,不推荐使用

并且他适宜从源代码直接建立我们的deb包,我们下载到待打包的源代码之后,先使用make和makeinstall编译安装,之后运行checkinstall即可完成deb的打包

git clone git@github.com:chinaran/color-compile.git   # 下载源代码
cd color-compile   
make && make install # 构建

编译打包部署_linux如何打包编译好的程序_linux程序打包

checkinstall -D --pkgname=color-compile --pkgversion=2014-12-20 --install=no  --pkgsource=../color-compile  # 制作deb

首先提示输入安装包的描述信息

构建deb

接着checkinstall提示用户填入或则更改deb的控制信息,其本质就是control文件的内容

用户填入或者修改deb的控制信息

最后等待生成deb完成

完成

此时当前目录下生成了deb包

2.3方式三:使用dh_make方式创建deb包

deb包所需的默认信息

dh_make -s -e gatieme@163.com -p color-compile_2014-12-20  -f ./color-compile_2014-12-20.tar.gz # 生成制作

此时当前目录下生成了debian目录,此时一般更改两个文件:

dpkg是最基本的制做deb包的方式,推荐使用

dpkg-buildpackage -rfakeroot

此时可以看见,下层目录中已完善了deb包

2.4方式四:更改已有deb包

自己创建deb所需目录结构(控制信息和安装内容),之后打包linux如何打包编译好的程序什么是linuxlinux vi命令,通常使用这些技巧来更改已有的deb包,而不是新建deb包,命令如下:

编译打包部署_linux程序打包_linux如何打包编译好的程序

dpkg -X xxx.deb test #  解包安装内容
cd test
dpkg -e ../xxx.deb #  解包控制信息

更改其中内容

cd ../
dpkg -b dirname xxx_new.deb #  重新打包

3参考debian/control文件中信息说明

1) Package 包名
2) Version 版本
3) Architecture 目标机架构(i386, arm等)
4) Maintainer 维护者
5) Depends 依赖软件包
6) Description 描述

checkinstall详尽类库

自己制做deb包类库

官方的debian制做指南(比较长)

linux/ubuntu中制做deb安装包

制做Ubuntu的deb格式包从HelloWorld做起

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复