4

Distribute Qt APP on PPA of Ubuntu using the .deb package.

[Abstract]: 在Qt on Linux上开发程序完成后需要脱离本机所营造的开发库环境变量运行,则需要对二进制执行文件进行打包发布。在Ubuntu系统中通常使用deb格式文件对二进制安装包进行封装。Ubuntu系统提供了个人软件包(Personal Package Archives, PPA)在线安装deb功能。本文阐述在Linux系统中使用Qt编译生成的二进制文件收集*.so库文件过程、Ubuntu的deb打包过程,完成从Qt编译生成的二进制文件到发布到Ubuntu个人软件包文档全过程。

1. 收集支持库文件

使用Qt Creator开发的项目工程文件在release或debug模式下生成的二进制文件依赖于Qt Creator的环境变量,这是一个Qt运行库完整的环境变量。当二进制文件脱离该环境会提示加载依赖库失败。Linux系统ldd命令(ldd app)可以显示二进制文件依赖库。文献1提供了自动收集库文件的脚本。

对其进行改造命名为qt-lib-collect.sh,输入参数1目标文件,输入参数2库文件存储路径。

#!/bin/sh
# 可执行程序名
appname=$1
# 目标文件夹
dst=./$2
# 利用 ldd 提取依赖库的具体路径
liblist=$(ldd $appname | awk '{ if (match($3,"/")){ printf("%s "), $3 } }')
# 目标文件夹的检测
if [ ! -d $dst ];then
                mkdir $dst
fi
# 拷贝库文件和可执行程序到目标文件夹
cp $liblist $dst
cp $appname $dst

eg: ./qt-lib-collect.sh app out_dir

2. 使用deb打包

文献2提供整理了方法。使用deb打包,需要先创建符合deb格式规则的文件夹。在deb包中包括,DEBIAN目录和目标软件安装路径文件夹,例如,创建mydebpac文件夹,符合deb格式的最小文件夹结构为:

  • 文件夹DEBIAN,规定包含changlog contro copyright postinst postrm prerm文件,这些文件对deb进行描述,需要按照deb定义的字段格式填写。
  • 文件夹/opt:视为用户使用dpkg -i安装该deb时,该包的安装文件会解压到用户的/opt路径下,同理若设定为/usr,则会解压到/usr下。
  • 文件postinst:脚本文件。在文件目录拷贝后执行。相应地,preinst为文件安装前执行脚本。
  • 文件prerm:脚本文件。在文件目录卸载掉前执行。相应地,postrm为文件卸载后的执行脚本。
  • 文件contro:deb文件包描述,其内容有包名称、版本、依赖库、包介绍等。

所有的脚本文件,都需要预先给定执行权限chmod +x ....

2.1 contro文件

Package: tinySerial
Version: v1.1
Section: free
Priority: optional
Depends: libssl.0.0.so, libstdc++2.10-glibc2.2
Suggests: Openssl
Architecture: amd64
Installed-Size: 61952
Maintainer: carlos.wei.hk@gmail.com
Provides: mysoftware
Description: tinySerial is a opensource GUI serial port debug software on Linux.

2.2 postinst文件

在postinst内可以写一些处理快捷方式、配置环境变量的操作。

# !/bin/sh
cp /opt/tinyserial/tinyserial.desktop /usr/share/applications
cp /opt/tinyserial/tinyserial /usr/bin

笔者会做两个处理:

  1. 将*.desktop文件复制到app中心,路径/usr/share/applications
  2. 将二进制可执行文件复制到/usr/bin

2.3 postrm文件

与postinst回滚执行的文件。

# !/bin/sh
rm /usr/share/applications/tinyserial.desktop
rm /usr/bin/tinyserial

2.4 生成deb包

dpkg -b tinyserial tinyserial-v1.1.deb

附录I 常用deb操作命令2

安装deb包:

dpkg -i mydeb.deb

卸载deb包:

dpkg -r mysoftware

查看deb包是否安装:

dpkg -s mysoftware

查看deb包文件内容:

dpkg -c mydeb.deb

查看当前目录某个deb包的信息:

dpkg --info mydeb.deb

dpkg -X mydeb.deb mydeb

解压deb包中DEBIAN目录下的文件(至少包含control文件)

dpkg -e mydeb.deb mydeb


  1. 追火车. 【Qt依赖库】Linux 环境下 Qt 可执行程序依赖库打包脚本.
  2. 新月时刻. dpkg制作deb包.

Carlos
35 声望8 粉丝

嵌入式 \ Linux \ ARM \ Security