Debian_QT软件开发_deb打包发布

本文是依赖《Debian_QT软件开发_QT程序打包》一文。

1 搭建打包环境

1.1 安装打包工具

sudo apt update
sudo apt-get install dh-make build-essential devscripts debhelper
  • 1.
  • 2.

2 构建软件包

2.1 创建软件包目录

2.1.1 使用以下脚本build_dir.sh创建打包目录

注意:构建软件包目录,需要符合<包名>-<版本>格式!!!例如:笔者创建的文件夹ipcapture-1.0.0,此处必须要按照所说的格式去创建,否则构建软件包会失败。

build_dir.sh ipcapture-1.0.0
  • 1.
#!/bin/bash

step=0
PACK_DIR_NAME=

read_user_input() {
    local result=
    while true
    do
        read -p "$1" result && {
        if [ ! $result ]; then
            echo "输入不能为空!!!请重新输入!!!"
        
        else
            break
        fi
    }
    done
    echo "$result"
}

step_printf() {
    echo "[$step] $1"
    let "step++"
}

if [ $# -eq 0 ]; then

    PACK_DIR_NAME=$(read_user_input "请创建打包目录:")
else
    PACK_DIR_NAME=$1
fi

step_printf "构建软件包目录结构"

mkdir -p $PACK_DIR_NAME/opt/
mkdir -p $PACK_DIR_NAME/usr/share/applications
mkdir -p $PACK_DIR_NAME/usr/share/icons/hicolor/scalable/apps
mkdir -p $PACK_DIR_NAME/usr/share/icons/hicolor/256x256/apps
mkdir -p $PACK_DIR_NAME/usr/share/icons/hicolor/128x128/apps
mkdir -p $PACK_DIR_NAME/usr/share/icons/hicolor/64x64/apps
mkdir -p $PACK_DIR_NAME/usr/share/icons/hicolor/32x32/apps
mkdir -p $PACK_DIR_NAME/usr/share/icons/hicolor/16x16/apps

step_printf "软件包目录构建结束"

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
2.1.2 补充软件包内容

安装包安装时,会根据软件包目录结构进行安装的。以下将会讲解完善哪些内容。

  1. 完善软件包目录opt/

将待打包的文件夹拷贝到软件包目录下opt/中,软件包发布后,安装成功会在系统/opt目录下创建该目录的。

cp /home/s/pack/ipcapture ./ipcapture-1.0.0/opt/ -r
  • 1.
  1. 添加 .desktop 桌面配置文件

.desktop文件拷贝到软件包目录下usr/share/applications,安装包安装时,会自动拷贝.desktop文件到系统目录下/usr/share/applications

cp ./ipcapture-1.0.0/opt/ipcapture/ipcapture.desktop ./ipcapture-1.0.0/usr/share/applications
  • 1.
  1. 将软件图标复制到软件包usr/share/icons/hicolor/scalable/apps
cp ./ipcapture-1.0.0/opt/ipcapture/ipcapture.svg ./ipcapture-1.0.0/usr/share/icons/hicolor/scalable/apps
  • 1.
2.1.3 软件包目录下构建debian目录
  1. 进入软件包目录,使用dh_make构建debian目录
cd ipcapture
export DEBFULLNAME="sanqian"
export DEBEMAIL="493965614@qq.com"
dh_make --createorig -s
  • 1.
  • 2.
  • 3.
  • 4.
  1. 删除用不到的文件
rm -rf debian/*.ex debian/*.EX
  • 1.
  1. 修改debian/control文件
Source: ipcapture
Section: utils
Priority: optional
Maintainer: sanqian <493965614@qq.com>
Build-Depends: debhelper-compat (= 12)
Standards-Version: 4.4.1
#Homepage: <insert the upstream URL, if relevant>
#Vcs-Browser: https://salsa.debian.org/debian/ipcapture
#Vcs-Git: https://salsa.debian.org/debian/ipcapture.git

Package: ipcapture
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: <insert up to 60 chars description>
 <insert long description, indented with spaces>

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  1. 创建/debian/install文件

在debian目录中创建installinstall文件会被dh_install安装,可以指定各个文件的安装路径。

opt/ipcapture/ /opt/
usr/share /usr/
  • 1.
  • 2.
  1. 创建 /debian/postinst 脚本
#!/bin/bash

# 创建链接文件到/usr/bin,桌面快捷名才会显示对应的语言
if [ ! -f "/usr/bin/ipcapture" ]; then
    ln -s  /opt/ipcapture/ipcapture.bash /usr/bin/ipcapture
fi

# MIME_TYPE关联桌面属性文件,可被xdg-open方式调用
xdg-mime default ipcapture.desktop x-scheme-handler/ipcapture

exit 0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  1. 创建 /debian/postrm 脚本
#!/bin/bash
 
# 删除链接文件
if [ -f "/usr/bin/ipcapture" ]; then
    rm /usr/bin/ipcapture
fi
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  1. 修改/debian/rules文件
    以下有 #新增 表明的,都是新增的,其它的使用默认。
#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
export DH_VERBOSE = 1 #新增


# see FEATURE AREAS in dpkg-buildflags(1)
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# see ENVIRONMENT in dpkg-buildflags(1)
# package maintainers to append CFLAGS
# export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic
# package maintainers to append LDFLAGS
# export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed


%:
	dh $@

override_dh_auto_build: #新增
override_dh_shlibdeps: #新增
override_dh_strip: #新增


# dh_make generated override targets
# This is example for Cmake (See https://bugs.debian.org/641051 )
#override_dh_auto_configure:
#	dh_auto_configure -- #	-DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)


  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

2.2 使用 debuild 构建软件包

在软件包目录下执行:sudo debuild -u -us -uc -b

  1. -i:忽略 Git 中 .gitignore 文件中列出的文件的变更。这个选项确保在构建软件包时,排除了在 .gitignore 中指定的那些不需要包含在内的文件,例如生成的文件或者开发环境特定的文件。

  2. -us:不对源代码包进行签名。通常情况下,创建 Debian 软件包时可以使用 GPG 密钥对源代码包进行签名,以确保其真实性和完整性。使用 -us 选项跳过了这个签名步骤。

  3. -uc:不对 .changes 文件进行签名。.changes 文件在打包过程中生成,包含有关软件包的版本、发布信息以及包含的文件等元数据。通常情况下,也可以使用 GPG 密钥对 .changes 文件进行签名以验证其真实性。使用 -uc 跳过了对 .changes 文件进行签名的步骤。

  4. -b:仅构建二进制软件包。使用 -b 选项告诉 debuild 只生成二进制软件包,而不重新构建源代码包本身。这意味着假设源代码包已经正确配置和构建完成,现在只需生成最终的二进制软件包(.deb 文件)。

s@s-pc:~/IPAudioCapture/script/ipcapture-1.0.0$ sudo debuild -i -us -uc -b
 dpkg-buildpackage -us -uc -ui -i -b
dpkg-buildpackage: info: 源码包 ipcapture
dpkg-buildpackage: info: 源码版本 1.0.0-1
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: 源码修改者 sanqian <493965614@qq.com>
 dpkg-source -i --before-build .
dpkg-buildpackage: info: 主机架构 amd64
 debian/rules clean
dh clean
   dh_clean
 debian/rules build
dh build
   dh_update_autotools_config
   dh_autoreconf
   create-stamp debian/debhelper-build-stamp
 debian/rules binary
dh binary
   dh_testroot
   dh_prep
   dh_install
   dh_installdocs
   dh_installchangelogs
   dh_icons
   dh_perl
   dh_link
   dh_strip_nondeterminism
   dh_compress
   dh_fixperms
   dh_missing
   dh_dwz
dwz: debian/ipcapture/opt/ipcapture/IPAudioCapture: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libFLAC.so.8: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5Core.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5DBus.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5Gui.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5Network.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5Qml.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5Quick.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5Svg.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5VirtualKeyboard.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5WebSockets.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5Widgets.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libQt5XcbQpa.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libXau.so.6: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libXdmcp.so.6: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libXext.so.6: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libXrender.so.1: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libasyncns.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libavcodec.so.60: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libavformat.so.60: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libavutil.so.58: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libbsd.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libdbus-1.so.3: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libfdk-aac.so.1: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libgcrypt.so.20: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libglib-2.0.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libglog.so.2: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libgthread-2.0.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libicudata.so.56: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libicui18n.so.56: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libicuuc.so.56: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libjsoncpp.so.25: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/liblz4.so.1: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/liblzma.so.5: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libnsl.so.1: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libnuma.so.1: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libogg.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libpcre.so.3: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libpng16.so.16: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libportaudio.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libpulse.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libpulsecommon-13.99.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libsndfile.so.1: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libswresample.so.4: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libsystemd.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libvorbis.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libvorbisenc.so.2: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libwrap.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libx264.so.155: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libx265.so.179: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libxcb-glx.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libxcb-xfixes.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libxcb-xkb.so.1: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libxkbcommon-x11.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/lib/libxkbcommon.so.0: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/bearer/libqconnmanbearer.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/bearer/libqgenericbearer.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/bearer/libqnmbearer.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/iconengines/libqsvgicon.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqgif.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqicns.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqico.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqjpeg.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqsvg.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqtga.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqtiff.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqwbmp.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/imageformats/libqwebp.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/platforms/libqxcb.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/xcbglintegrations/libqxcb-egl-integration.so: .debug_info section not present
dwz: debian/ipcapture/opt/ipcapture/plugins/xcbglintegrations/libqxcb-glx-integration.so: .debug_info section not present
dwz: Too few files for multifile optimization
dh_dwz: warning: No dwz multifile created, but not explicitly requested either so ignoring it.
dh_dwz: warning: Common issues include no debug information at all (missing -g) and
dh_dwz: warning: compressed debug information (#931891).
   dh_makeshlibs
   dh_installdeb
   dh_gencontrol
dpkg-gencontrol: 警告: Depends field of package ipcapture: substitution variable ${shlibs:Depends} used, but is not defined
   dh_md5sums
   dh_builddeb
dpkg-deb: 正在 '../ipcapture_1.0.0-1_amd64.deb' 中构建软件包 'ipcapture'。
 dpkg-genbuildinfo --build=binary
 dpkg-genchanges --build=binary >../ipcapture_1.0.0-1_amd64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
 dpkg-source -i --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
2.2.1 安装验证

在软件包目录上层即可找到构建好deb安装包,执行以下操作安装验证:

sudo dpkg -i ipcapture_1.0.0-1_amd64.deb
  • 1.