我为在 Qt 中创建的应用程序创建了一个 deb 包。我已包含该应用程序所依赖的所有库,这些库将安装在应用程序本身旁边的文件夹中:
/usr/share/MyCompany/MyProduct/executable
/usr/share/MyCompany/MyProduct/Frameworks
然后导出LD_LIBRARY_PATH
指向Frameworks
目录。
一切都很完美...直到我必须添加 QT Assistant,因为它需要额外的库。
检查了 Qt Assistant 的依赖项后,我在同一目录中添加了所有必需的库,包括libQtHelp.so.4
和。libQtWebKit.so.4
我的 deb 非常简单,我创建所需的结构,然后设置“安装”将我的文件复制到目标目录。
blah_1/* /usr/share/MyCompany/MyProduct/
为了创建包,我创建了 tar,然后
dh_make --copyright gpl -f ../blah-1.0.tar.gz
dpkg-buildpackage -rfakeroot [email protected]
在干净的(无 Qt)系统上运行安装程序时,我收到依赖性错误:
me:~$ sudo dpkg -i /path/blah_1.0-1_i386.deb
Selecting previously unselected package blah.
(Reading database ... 141841 files and directories currently installed.)
Unpacking blah (from .../blah_1.0-1_i386.deb) ...
dpkg: dependency problems prevent configuration of blah:
blah depends on libqt4-help (>= 4:4.8.0); however:
Package libqt4-help is not installed.
blah depends on libqtwebkit4 (>= 2.2~2011week36); however:
Package libqtwebkit4 is not installed.
dpkg: error processing blah (--install):
dependency problems - leaving unconfigured
Processing triggers for shared-mime-info ...
Processing triggers for desktop-file-utils ...
Processing triggers for bamfdaemon ...
Rebuilding /usr/share/applications/bamf.index...
Processing triggers for gnome-menus ...
Errors were encountered while processing:
blah
不幸的是,我正在安装的系统没有(并且不会有)互联网访问。如何在同一个 deb 安装程序中提供所需的软件包?
或者,由于我提供了所需的库,如何禁用依赖项检查?
(如果相关的话,Ubuntu 12.04)
更新:我跑了
sudo dpkg -i --ignore-depends=libqt4-help,libqtwebkit4 /path/blah_1.0-1_i386.deb
该程序安装正确并且运行完美。
在包中,/DEBIAN/control
我看到列出了不需要的依赖项。
调用 dh_make 之后,控制文件中不再存在依赖项。
dpkg-buildpackage 必须在检查后放置依赖项(可能适用于助手)。
我可以以某种方式删除它们吗? 我可以在某处放置一个标志以不包括依赖项吗?
或者...仍然...我可以在打包文件中添加 deb 包吗?是否有一个命令可以作为包安装的一部分进行预安装?
如果没有解决方案....我想我可以提供一个脚本来运行上述 dpkg 命令,并使用 ignore-depends,但是这样就无法从软件中心安装该软件包...
答案1
-Dfield=value
Override or add an output control file field.
--source-option=opt
Pass option opt to dpkg-source.
因此也许你可以Depends
这样覆盖该字段:
dpkg-buildpackage --source-option='-DDepends=...' ...