我正在向 Ubuntu 软件中心提交商业软件,我使用的打包格式是 Debian。我希望有人能告诉我如何创建一个 debian 软件包,以便在提交软件包时尽可能少地处理错误。打包商业 debian 软件包的方法(分步说明)是什么?
如果有帮助的话,软件包包含类似于如下的路径树:
usr/
usr/share
usr/share/APP-NAME
usr/share/APP-NAME/file.sh
usr/share/APP-NAME/icon.png
usr/share/APP-NAME/file.desktop
usr/bin
usr/bin/file.sh
答案1
muru 在您的其他问题中提到的链接是最好的开始:
https://developer.ubuntu.com/en/publish/other-forms-of-submitting-apps/打包商业软件与免费软件几乎相同。只有一些区别,例如您只发布二进制 deb 包(没有源代码,没有公共 ppa)。因此 Debian 包的构建几乎相同(如果您要在本地构建它)
如果您使用
pbuilder
或任何其他构建助手,它将默认运行名为的 QA 工具lintian
。仔细检查日志,您将看到一些来自其中的消息。您可以随时针对最终的二进制 deb 重新运行它,这里有一个在 teamviewer 上运行的示例:
$ lintian Downloads/teamviewer_10.0.41499_amd64.deb W: teamviewer: hardening-no-relro opt/teamviewer/tv_bin/RTlib/libQtCore.so.4 W: teamviewer: hardening-no-relro opt/teamviewer/tv_bin/RTlib/libQtGui.so.4 E: teamviewer: embedded-library opt/teamviewer/tv_bin/RTlib/libQtNetwork.so.4: openssl W: teamviewer: hardening-no-relro opt/teamviewer/tv_bin/RTlib/libQtNetwork.so.4 E: teamviewer: embedded-library opt/teamviewer/tv_bin/RTlib/libQtWebKit.so.4: sqlite W: teamviewer: hardening-no-relro ... use --no-tag-display-limit to see all (or pipe to a file/program) E: teamviewer: embedded-library opt/teamviewer/tv_bin/TVGuiDelegate: libjsoncpp E: teamviewer: embedded-library ... use --no-tag-display-limit to see all (or pipe to a file/program) E: teamviewer: statically-linked-binary opt/teamviewer/tv_bin/wine/bin/wine-preloader E: teamviewer: changelog-file-missing-in-native-package E: teamviewer: no-copyright-file E: teamviewer: description-starts-with-package-name W: teamviewer: extended-description-line-too-long W: teamviewer: extended-description-line-too-long W: teamviewer: unknown-section non-free/internet E: teamviewer: dir-or-file-in-opt opt/teamviewer/ E: teamviewer: dir-or-file-in-opt opt/teamviewer/config/ E: teamviewer: dir-or-file-in-opt opt/teamviewer/doc/ E: teamviewer: dir-or-file-in-opt ... use --no-tag-display-limit to see all (or pipe to a file/program) W: teamviewer: extra-license-file opt/teamviewer/doc/License.txt W: teamviewer: extra-license-file opt/teamviewer/tv_bin/wine/COPYING.LIB W: teamviewer: extra-license-file opt/teamviewer/tv_bin/wine/LICENSE W: teamviewer: extra-license-file ... use --no-tag-display-limit to see all (or pipe to a file/program) W: teamviewer: duplicate-font-file opt/teamviewer/tv_bin/wine/share/wine/fonts/marlett.ttf also in fonts-wine-development W: teamviewer: duplicate-font-file opt/teamviewer/tv_bin/wine/share/wine/fonts/symbol.ttf also in fonts-wine-development W: teamviewer: duplicate-font-file opt/teamviewer/tv_bin/wine/share/wine/fonts/tahoma.ttf also in fonts-wine-development W: teamviewer: duplicate-font-file ... use --no-tag-display-limit to see all (or pipe to a file/program) W: teamviewer: file-in-unusual-dir var/log/teamviewer W: teamviewer: binary-without-manpage usr/bin/teamviewer E: teamviewer: maintainer-script-does-not-check-for-existence-of-updatemenus postrm:22 W: teamviewer: postrm-has-useless-call-to-update-menus W: teamviewer: script-not-executable opt/teamviewer/tv_bin/script/tvw_aux W: teamviewer: script-not-executable opt/teamviewer/tv_bin/script/tvw_config W: teamviewer: script-not-executable opt/teamviewer/tv_bin/script/tvw_daemon W: teamviewer: script-not-executable ... use --no-tag-display-limit to see all (or pipe to a file/program) W: teamviewer: executable-not-elf-or-script opt/teamviewer/tv_bin/RTlib/doc/Qt4/TeamViewerNote.txt W: teamviewer: executable-not-elf-or-script opt/teamviewer/tv_bin/RTlib/doc/Qt4/WEBKIT-LICENSE.LGPL W: teamviewer: maintainer-script-ignores-errors postinst W: teamviewer: maintainer-script-ignores-errors postrm W: teamviewer: maintainer-script-ignores-errors preinst W: teamviewer: maintainer-script-ignores-errors ... use --no-tag-display-limit to see all (or pipe to a file/program) E: teamviewer: shlib-with-non-pic-code opt/teamviewer/tv_bin/RTlib/libQtNetwork.so.4 E: teamviewer: shlib-with-executable-bit opt/teamviewer/tv_bin/wine/lib/libwine.so.1.0 0755