提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
由于项目需要在 Linux 系统中使用.deb文件进行安装,在这里简单记录deb制作过包程。包含自动添加mime类型,使用特定后缀文件启动软件。
一、Deb包结构
二、Deb包详细信息
1.DEBIAN
安装信息包括目录中的内容,其中:
文件中包括了安装包的基础信息,名称、版本、架构等;
Package: Client
Version: 8.0.0
Architecture: amd64
Section: utils
Priority: optional
Maintainer: MC
Description :KwClient
postinst、prerm和postrm为脚本文件,当完成安装过程后会自动执行postinst脚本,卸载前会自动执行prerm脚本,完成卸载过程后会自动执行postrm脚本;
例如安装后更新桌面图标、MIME数据库,以及软件目录添加读写权限等。
#!/bin/sh
sudo update-desktop-database /usr/share/applications
sudo update-mime-database /usr/share/mime
sudo chmod -R 777 /opt/Client
2.opt
选择将软件安装在opt中,则将软件包放置在/opt/Client/,其中包含Client可执行文件;
3.usr
usr目录会添加设置软件桌面快捷方式、图标等信息
/usr/bin/Client
里面放置软件包文件,一般会选择将软件安装至/opt/目录下,所以/usr/bin/ 文件夹里面只需要放置一个Client脚本文件用来启动/opt/Client/下的可执行文件,脚本文件可以写带参数调用,如特定后缀下名文件启动软件,如下以‘pof’后缀启动:
#!/bin/bash
gTemplateExt=("pof")
gBinPath=$(dirname "$0")
if [ -d "${gBinPath}/Client" ]; then
gInstallPath=${gBinPath}
else
gInstallPath=/opt
fi
gApp=Client
gFilePath=
function parse_arg()
{
if [ $# -eq 1 ] ; then
gFilePath=$1
fi
}
function run()
{
oldPwd="${PWD}"
if [ -e "${gInstallPath}/Client/${gApp}" ] ; then
{ ${gInstallPath}/Client/${gApp} "$@"; } > /dev/null 2>&1
else
echo "${gApp} does not exist!"
fi
}
function main()
{
parse_arg "$@"
run "$@"
exit 0
}
main "$@"
/usr/share/application/Client.desktop 桌面快捷方式
文件头、显示名称、类型、执行的命令、mime类型、图标
其中Exec指向上面/usr/bin/中的脚本文件
Exec 常用的参数有:%f %F %u %U
%f:单个文件名;
%F:文件列表。用于程序可以同时打开多个本地文件。每个文件以分割段的方式传递给执行程序。
%u:单个URL。
%U:URL列表。每个URL以分割段的方式传递给执行程序。本地文件以文件URL或文件路径的方式传递。
[Desktop Entry]
Name=KwClient
Type=Application
Exec=/usr/bin/Client %f
MimeType=application/x-pof
Icon=/usr/share/icons/Client.png
/usr/share/icons/Client.png 软件图标
桌面快捷方式、开始菜单中都会应用该图标;
/usr/share/mime/packages/application-pof.xml mime自定义类型
其中包含mime类型描述、后缀类型、图标(文件打开方式及该后缀文件都会应用)等;
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-pof">
<comment>POF</comment>
<comment xml:lang="zh_CN">POF 文件</comment>
<glob-deleteall/>
<glob pattern="*.pof"/>
<icon name="/usr/share/icons/Client.png"/>
</mime-type>
</mime-info>
三、Deb打包
为了方便打包,制作打包脚本文件;由于cpu架构的不同,DEBIAN/control/中的架构信息需要改变,所以需要在脚本文件中动态生成,脚本代码如下:
#!/bin/bash
# 项目路径
Dir=$(cd "$(dirname "$0")";pwd)
Package=Client
Version=8.0.0
Architecture=
ARCH=$(uname -m)
if [ ${ARCH} = "x86_64" ] ; then
Architecture=amd64
ARCH=x86_64
elif [ ${ARCH} = "aarch64" ] ; then
Architecture=arm64
ARCH=arm64
elif [ ${ARCH} = "mips64" ] ; then
Architecture=mips64e1
ARCH=mips64
fi
echo "ARCH: ${ARCH}"
echo "Architecture: ${Architecture}"
#deb包名称构成为 软件名称-版本-系统-架构.deb
Deb_Dir=${Dir}/package/${Package}-${Version}-linux-${ARCH}
Deb_Name=${Dir}/package/${Package}-${Version}-linux-${ARCH}.deb
if [[ ! -f ${Dir}/build/bin/Client ]];then
echo "make失败"
exit 1
fi
make_deb()
{
cd package
#先将之前制作的包删除,拷贝新的deb包
rm -rf ${Deb_Dir}
cp -r Client-deb ${Deb_Dir}
echo "Package: ${Package}
Version: ${Version}
Architecture: ${Architecture}
Section: utils
Priority: optional
Maintainer: MC
Description :Client" > ${Deb_Dir}/DEBIAN/control
cp -r ../build/bin/* ${Deb_Dir}/opt/Client/
chmod 755 ${Deb_Dir} -R
dpkg -b ${Deb_Dir} ${Deb_Name}
}
make_deb
echo "打包完成"
总结
以上就是整个deb包的制作过程,本文仅仅简单介绍了deb包的基本信息,其他信息等以后用到再补充。