Debian_QT软件开发_deb打包发布
本文是依赖《Debian_QT软件开发_QT程序打包》
一文。
1 搭建打包环境
1.1 安装打包工具
sudo apt update
sudo apt-get install dh-make build-essential devscripts debhelper
2 构建软件包
2.1 创建软件包目录
2.1.1 使用以下脚本build_dir.sh
创建打包目录
注意:构建软件包目录,需要符合<包名>-<版本>
格式!!!例如:笔者创建的文件夹ipcapture-1.0.0
,此处必须要按照所说的格式去创建,否则构建软件包会失败。
build_dir.sh ipcapture-1.0.0
#!/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 "软件包目录构建结束"
2.1.2 补充软件包内容
安装包安装时,会根据软件包目录结构进行安装的。以下将会讲解完善哪些内容。
- 完善软件包目录
opt/
将待打包的文件夹拷贝到软件包目录下opt/
中,软件包发布后,安装成功会在系统/opt
目录下创建该目录的。
cp /home/s/pack/ipcapture ./ipcapture-1.0.0/opt/ -r
- 添加
.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
- 将软件图标复制到软件包
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
2.1.3 软件包目录下构建debian
目录
- 进入软件包目录,使用
dh_make
构建debian
目录
cd ipcapture
export DEBFULLNAME="sanqian"
export DEBEMAIL="493965614@qq.com"
dh_make --createorig -s
- 删除用不到的文件
rm -rf debian/*.ex debian/*.EX
- 修改
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>
- 创建
/debian/install
文件
在debian目录中创建install
,install
文件会被dh_install
安装,可以指定各个文件的安装路径。
opt/ipcapture/ /opt/
usr/share /usr/
- 创建
/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
- 创建
/debian/postrm
脚本
#!/bin/bash
# 删除链接文件
if [ -f "/usr/bin/ipcapture" ]; then
rm /usr/bin/ipcapture
fi
- 修改
/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)
2.2 使用 debuild
构建软件包
在软件包目录下执行:sudo debuild -u -us -uc -b
。
-
-i
:忽略 Git 中.gitignore
文件中列出的文件的变更。这个选项确保在构建软件包时,排除了在.gitignore
中指定的那些不需要包含在内的文件,例如生成的文件或者开发环境特定的文件。 -
-us
:不对源代码包进行签名。通常情况下,创建 Debian 软件包时可以使用 GPG 密钥对源代码包进行签名,以确保其真实性和完整性。使用-us
选项跳过了这个签名步骤。 -
-uc
:不对.changes
文件进行签名。.changes
文件在打包过程中生成,包含有关软件包的版本、发布信息以及包含的文件等元数据。通常情况下,也可以使用 GPG 密钥对.changes
文件进行签名以验证其真实性。使用-uc
跳过了对.changes
文件进行签名的步骤。 -
-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)
2.2.1 安装验证
在软件包目录上层即可找到构建好deb
安装包,执行以下操作安装验证:
sudo dpkg -i ipcapture_1.0.0-1_amd64.deb