deb包结构介绍和打包解包
1、deb包基本结构
deb包是Debian 及其衍生系统(如 Ubuntu)使用的软件包格式
一个deb包一般包含两部分,数据部分和控制部分
数据部分
包含了软件实际安装到系统中的文件,解压后通常有以下几个目录
/bin,/usr,/etc,/lib,/var,分别存放二进制执行文件,软件包多数文件存放路径,配置文件,库文件,日志文件等
控制部分
包含了软件包的元数据和控制信息,解压后主要有以下文件:
必须包含文件有control,其他文件postinst、postrm、preinst、prerm按需创建和配置
control 文件:包含了软件包的基本信息,如软件包名称(Package)、版本号(Version)、描述(Description)、依赖关系(Depends)、维护者信息(Maintainer)等
如
Package: example-package
Version: 1.0-1
Maintainer: John Doe <johndoe@example.com>
Description: This is an example package for demonstration purposes.
Depends: libc6, libssl-dev
各控制脚本作用
pretinst 软件安装前执行操作,常用于检查系统环境,创建必要的文件
postinst 软件安装后执行操作,常用于启动服务,更新配置
prerm 软件卸载前执行操作,常用于停止服务,备份配置
postrm 软件卸载后执行操作,常用于清理残留文件和配置
具体在安装、卸载、覆盖安装时执行顺序
首次安装:preinst->postinst
卸载:prerm->postrm->postrm
升级:prerm->preinst->postrm->postinst
查看一个包结构,如tree包
这个包比较简单,没有控制脚本,核心文件就是二进制文件/usr/bin/tree
2、deb包制作管理
可以使用系统自带的dpkg-deb和dpkg命令对包做简单修改并重新打包
解包:dpkg-deb -R exapmle.deb ./repackage #将exapmle.deb内容全部解压到./repackage
打包:dpkg-deb -b ./repackage new.deb #构建./repackage内容生成new.deb包
dpkg-deb参数说明
-R 解压控制信息和控制文件,-e 解压控制信息,-x 解压控制文件,-b 构建包
-c 列出软件包内文件的详细信息,-I 、-f 列出包的说明信息,-W 列出包名和版本信息
dpkg-deb大部分参数,dpkg也有,可以由dpkg来完成解包和打包
制作一个简单的deb包,来测试
mkdir -p helloworld/{DEBIAN,usr,bin}
echo -e "Package:helloworld\nVersion:1.0\nArchitecture:all\nMaintainer:hello@cs.com\nDescription:helloworld" > \
helloworld/DEBIAN/control
touch helloworld/DEBIAN/{preinst,postinst,prerm,postrm}
echo "echo preinst" > helloworld/DEBIAN/preinst
echo "echo postinst" > helloworld/DEBIAN/postinst
echo "echo prerm" > helloworld/DEBIAN/prerm
echo "echo postrm" > helloworld/DEBIAN/postrm
chmod 755 helloworld/DEBIAN/*
echo "helloworld" > helloworld/usr/hello.txt
echo "cat /usr/hello.txt" > helloworld/bin/hello
tree helloworld/
sudodpkg -b helloworld/ helloworld_1.0_all.deb
sudo dpkg -i helloworld_1.0_all.deb
bash hello
whereis hello
sudo dpkg -P helloworld
部分测试截图
图中有包结构信息,安装和卸载包时控制脚本执行顺序
本文来自博客园,作者:赛博狗尾草,转载请注明原文链接:https://www.cnblogs.com/gpysir/p/18818993