DEB安装包自定义制作方法
一个deb包由debian-binary、control.tar.gz(或control.tar.xz)和data.tar.gz(或data.tar.xz)三个文件组成,支持多架构安装。控制文件(control)包含软件包信息如版本、架构、维护者等,预安装脚本(preinst)、安装脚本(postinst)、卸载脚本(prerm、postrm)用于管理安装流程,数据文件(data)包含软件程序和数据。制作流程包括创建目录结构、编写控制文件、生成copyright文件、创建预安装和后安装脚本、复制程序文件、生成debian-binary文件,最后进行打包操作。
deb包的结构
一个标准格式文件(AR),其中包含三个组成部分:二进制文件、控制文件以及数据文件(XZ格式,或GZ格式)。
deb解压到当前目录 : ar -x xxx.deb
解压之后的文件列表如下:

control.tar.gz(或者control.tar.xz)
该压缩文件中包含有软件包的控制信息、依赖关系以及安装脚本等内容。当采用gzip压缩算法时,文件名设置为control.tar.gz;而采用xz压缩算法时,文件名则为control.tar.xz。
control.tar.gz解压到当前目录:tar -xvf control.tar.gz
解压之后的文件列表如下:

control文件:用于存储软件标识信息、版本信息、操作系统平台以及依赖信息数据等数据。此文件为必选文件,后续文件均为可选文件。
2、preinst文件:安装前执行的shell脚本,用于解压data.tar.gz前的脚本
3、postinstall文件:在安装完成后运行的shell脚本,即在解压data.tar.gz之后运行的脚本
4、prerm文件:卸载之前执行的shell脚本,即在删除文件之前运行的脚本
5、postrm文件:卸载之后执行的shell脚本,即在删除文件之后运行的脚本
6、copyright文件:版权声明
7、md5sums文件:data压缩包内各文件的md5校验值,此文件是非必须的
control文件字段规范
Package:软件名称
Version:软件版本
Section:软件分类
Priority:软件包优先级分为:
required:必需软件包(删除将导致系统完全损坏);
important:必要软件包(最低限度的必要工具);
standard:默认安装且不会与同级别包冲突的软件包;
optional:可能与其他软件包冲突的普通软件包。
Architecture:支持的硬件架构,常用的架构包括x86_64、x86、arm64和armhf。尽管不同架构名称可能对应完全兼容的架构,但dpkg仍会拒绝安装不符合架构要求的deb包,例如arm64与armv8、armhf与armv7a视为不兼容。若设置为"all",则表示与体系结构无关的软件包,如shell、Perl脚本和文档等;
Multi-Arch:软件包在多架构安装中的表现方式:
no:省略字段时的默认值,通常无需显式设置;
same:可与自身安装,但不能用于满足自身不同架构的依赖;
foreign:不能与自身安装,但可允许满足不同架构的非限定依赖(若依赖带有显式架构限定符,则忽略"foreign");
allowed:允许反向依赖通过":any"限定包名表示接受来自不同架构的依赖,但无其他作用。
Maintainer:软件包维护者
Description:软件包描述(仅在已上传到apt源时显示)
Essential:是否为系统基本软件包(yes/no),若为yes,则不允许强制卸载
Source:软件包源代码名称
Depends:软件所依赖的其他软件包和库文件(多个用逗号分隔)
Pre-depends:安装前必须安装的软件包和库文件,通常用于配置预运行脚本
Recommends:推荐安装的软件包和库文件
Suggests:建议安装的软件包和库文件
Homepage:软件项目主页
(注意 : control文件最后需要空一行)
案例如下:

data.tar.gz(或者data.tar.xz)
该压缩文件包含软件的所有可执行程序和数据文件。当采用gzip压缩[算法]时,文件名为data.tar.gz;而采用xz压缩算法时,文件名为data.tar.xz。
control.tar.gz解压到当前目录:tar -xvf data.tar.gz
解压之后的文件列表如下:

debian-binary
此文件以字符串的形式保存deb包格式的版本号;
deb包制作流程
1、创建包目录结构:
mkdir -p deb_pkg
mkdir -p deb_pkg/control
mkdir -p deb_pkg/data
2、创建control文件
cd deb_pkg/control
touch control
echo "Package:abc_software" >> control
echo "Version:2.3.15" >> control
echo "Section:Software" >> control
输出该ECHO命令将跳转至以下链接,显示可选的Priority字段值并将其发送至指定控制台:
echo "Architecture:amd64" >> control
echo "Maintainer:tangzhangyin" >> control
echo "Description:abc客户端软件包" >> control
echo " " >> control
3、创建copyright文件
cd deb_pkg/control
touch copyright
echo "abc_software" >> copyright
echo "Copyright : Copyright (C) 2021 abc " >> copyright
echo "Author : tangzhangyin" >> copyright
echo "Concact : tangzhangyin@163.com" >> copyright
3、创建preinst文件
cd deb_pkg/control
touch preinst
echo "#!/bin/bash" >> preinst
echo "echo "start to install abc_software" " >> preinst
4、创建postinst文件
cd deb_pkg/control
touch postinst
echo "#!/bin/bash" >> postinst
echo "echo "installing abc_software" " >> postinst
5、复制程序文件到data目录
cd deb_pkg/data
mkdir -p usr/bin/
cp xxx.bin usr/bin/
6.创建debian-binary文件
echo "2.0" > deb_pkg/debian-binary
7.deb打包操作
cd deb_pkg/control
tar -czvf ../control.tar.gz -C control .
cd deb_pkg/data
tar -czvf ../data.tar.gz data .
cd deb_pkg/
rm -rf deb_pkg/control
rm -rf deb_pkg/data
ar -r abc_software.deb debian-binary control.tar.gz data.tar.gz
在控制文件和数据目录下,应排除控制文件夹和数据文件夹。
