[Qt]-打包程序为Debian的deb格式的安装包

2021年7月18日 4点热度 0条评论

参考:https://segmentfault.com/a/1190000005029385
参考:UnityLaunchersAndDesktopFiles

deb是Debian Linux的软件包格式。一般来说是需要通过编译源码然后制作deb包。
但是,为了快速方便,下面直接在程序打包的基础上来进行deb包的封装。

步骤如下:

先完成程序的打包

先把程序打包完成。

创建需要的目录结构和文件

首先建立一个工作目录,比如在主文件夹下建立YouAppName目录:

$ cd ~
$ mkdir YouAppName 
$ cd YouAppName

deb文件在安装的时候默认是将文件释放到Linux系统的根目录下,即/

如果我们这里设定安装路径为/opt,那么就安装到opt下。

操作如下:

mkdir -p opt
# 把之前打包好的cp到设置目录结构的opt下
cp -a YouAppName/opt/ 

我们创建一个opt目录,这样安装的时候就可以安装到系统的/opt下面去了。你创建什么目录,它安装到哪里去(前提得是Linux系统下的标准目录。)

同时我们还需建立一个DEBIAN目录,需要在DEBIAN目录下创建一个control文件,并加入以下内容:

package: YouAppName 
Version: 1.0
Section: utils
Priority: optional
Architecture: amd64
Depends:
Maintainer: you email or inc
Description: YouAppName-deb

desktop

[Desktop Entry]
Version=1.0 #app的版本
Name=YouAppName #app的名字
Comment= this app use for test #说明信息 
Exec=/opt/YouAppName/YouAppName.sh #app的执行路径,请使用绝对路径
Icon=/opt/YouAppName/lib/YouAppName.png #icon 路径,请使用绝对路径
Terminal=false #是否在终端启动
Type=Application
Categories=Utility;Application;

大概的项目结构(非debian标准)

注: 请根据实际情况灵活配置目录,请参考下面我组织的结构

//  TODO 后面有空补充完善

└── YouAppName  #目录
    ├── opt #目录
    │   ├── YouAppName #目录 自己应用程序的名字
    │       |── YouAppName  # 程序或文件 Qt生成的或其它可运行程序
    |       |—— YouAppName.sh #程序的启动脚本。
    |       |—— 项目封装的so或者第三方的so文件和可执行文件放在同一层级(只是建议)
    │       |── lib #目录 Qt相关的的so文件
    |       |—— plugins #目录 Qt的插件       
    │       ├── YouAppName.desktop  
    │       ├── YouAppName.png
    │       ├── ...等等文件
    │     
    └── DEBIAN  #目录 名字确定
        ├── control   #控制文件 名字不可改,必须有这个文件
        ├── postinst  #脚本文件 名字不可改,运行sudo dpkg -i xx.deb命令时,会运行这个脚本. 非必须文件
        ├── postrm    #脚本文件 名字不可改,运行sudo dpkg -r app 命令时,会运行这个脚本 .非必须文件

封装为debian系的deb安装包命令

sudo dpkg -b YouAppName/ YouAppName_V1.0_amd64.deb

安装,卸载debian包

dpkg命令
dpkg的基本使用

// 注: 需要写软件的名字,tab并不能补全
sudo dpkg -i xxx.deb  安装deb包 
sudo dpkg -r xxx  卸载
sudo dpkg -P xxx 卸载(并且删除配置文件)(推荐使用这个,卸载的干净)

注意事项

给desktop文件添加执行权限(非必须,但是建议)

chmod 755 YouAppName.desktop

指定desktop文件

不过xxx.desktop 的写法要一个限制:包含“Exec”那一行,“=”和要执行的程序之间要留一个空格。也就是Exec=XXX是无法通过“sh xxx.desktop”执行,正确的是Exec= XXX。