gdebi vs dpkg:gdebi 如何自动获取缺失的依赖项?我可以将 gdebi 用于所有其他 .deb 软件包的安装吗?

gdebi vs dpkg:gdebi 如何自动获取缺失的依赖项?我可以将 gdebi 用于所有其他 .deb 软件包的安装吗?

最近我碰巧将我的 Ubuntu 重新安装到 Lubuntu 15.04。所以我在搜索 Skype 安装,然后得到了这个很好的教程

这真的很酷。它从以下网址下载了 skype deb 的官方软件包这里

由于我尚未gdebi安装,因此我使用sudo su -c apt-get install gdebi

然后skype-ubuntu-precise_4.3.0.37-1_i386.deb使用gdebi命令安装sudo su -c gdebi skype-ubuntu*4*.deb

哇,gdebi 为我做了一切,多么轻松的事情,不用使用传统的 Apt PPA 手动链接添加,这可能会破坏我的系统更新/软件安装。

但如果我尝试使用安装它dpkg -i

dpkg -i skype-ubuntu-precise_4.3.0.37-1_i386.deb
Selecting previously unselected package skype.
(Reading database ... 86449 files and directories currently installed.)
Preparing to unpack skype-ubuntu-precise_4.3.0.37-1_i386.deb ...
Unpacking skype (4.3.0.37-1) ...
dpkg: dependency problems prevent configuration of skype:
 skype depends on libc6 (>= 2.3.6-6~).
 skype depends on libc6 (>= 2.7).
 skype depends on libgcc1 (>= 1:4.1.1).
 skype depends on libqt4-dbus (>= 4:4.5.3).
 skype depends on libqt4-network (>= 4:4.8.0).
 skype depends on libqt4-xml (>= 4:4.5.3).
 skype depends on libqtcore4 (>= 4:4.7.0~beta1).
 skype depends on libqtgui4 (>= 4:4.8.0).
 skype depends on libqtwebkit4 (>= 2.2~2011week36).
 skype depends on libstdc++6 (>= 4.2.1).
 skype depends on libx11-6.
 skype depends on libxext6.
 skype depends on libxss1.
 skype depends on libxv1.
 skype depends on libssl1.0.0.
 skype depends on libpulse0.
 skype depends on libasound2-plugins.

dpkg: error processing package skype (--install):
 dependency problems - leaving unconfigured
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for mime-support (3.55ubuntu1.1) ...
Processing triggers for desktop-file-utils (0.22-1ubuntu2) ...
Processing triggers for dbus (1.8.8-1ubuntu2.1) ...
Errors were encountered while processing:
 skype

依赖关系问题太多了。哦,我刚刚在谷歌上搜索了 GDebi,维基百科上有

GDebi 是一个 APT 工具,可以在命令行和 GUI 中使用。[44]GDebi 可以像 dpkg 命令一样通过命令行安装本地 .deb 文件,但可以访问存储库来解析依赖项

我很奇怪

(1)gdebi 如何在不使用配置文件中手动添加的 Apt PPA 链接的情况下安装带有依赖项的 .deb 包?

(2)我可以使用相同的 gdebi 命令(sudo su -c gdebi my.deb)来安装所有其他 .deb 包而不添加 Apt PPA 吗?或者我是否必须像这样更改格式:sudo su -c my*n*.deb其中 n 是软件版本,等等?

请用通俗易懂的语言解释一下,以便我能够理解。

答案1

实际上gdebi只是一个前端,dpkg具有附加功能,它可以检查存储库中的依赖包,并可以在一个操作中安装它们,而dpkg -i手动需要两个操作(稍后将介绍apt-get -f install)。

问题 1:

1) gdebi 如何做到这一点?安装带有依赖项的 .deb 软件包,而不使用在配置文件中手动添加的 Apt PPA 链接?

作为dpkg前端,它可以使用 的所有功能dpkg。由于每个.deb软件包文件都包含(前提是它们没有损坏)有关该 deb 文件的元数据(如软件包名称、维护者、依赖项等),因此它可以轻松检查此文件的依赖项。

例如,你可以使用以下命令检查 .deb 文件的元数据dpkg --info package-name.deb

然后它使用这些信息构建依赖关系图,并将本地可用的 .deb 文件标记为已下载.deb从互联网下载其他文件。

请注意,这些所需的额外软件包必须至少在系统中配置的一个存储库中可用(具有适当的版本)。

然后它就像正常的 apt 安装一样继续进行。不同之处在于它不会重新下载主 .deb 文件

问题2:

(2)我可以使用相同的 gdebi 命令(sudo su -c gdebi my.deb)来安装所有其他 deb 包而不添加 PPA 吗?或者我是否必须更改格式(sudo su -c myn.deb其中 n 是软件版本等)?

PPA 的存在是有原因的。主要原因是它们提供了最新版本的软件包。而这些更高版本的软件包通常也依赖于更高版本的子软件包,这些子软件包通常也由 PPA 提供,而不是由标准 Ubuntu 存储库提供。

示例场景:

假设,一个名为母包在标准 Ubuntu 存储库中拥有最高版本2.0,并且母包依赖于名为子包版本 2。还假设一些 PPA 提供母包的版本3.0需要 的child-package3.0它们都可以通过该 PPA 存储库获得。

问题是,如果你现在下载母包-3.0.deb从存储库页面并尝试使用 安装它gdebi,您将(或gdebi)失败。

因为,检查母包-3.0.deb文件,gdebi知道这个母包需求子包版本或更高版本,但它只知道版本的3.0位置2.0。它不知道从哪里获取版本3.0子包来自。这是预料之中的,因为你没有告诉系统你从哪里获得这个最新的母包。换句话说,你没有配置存储库列表包括该 PPA。

因此,这个问题的答案显而易见这取决于如果在已配置的存储库中可以找到必要的依赖项,则安装将成功。但如果没有,那么它将无法安装此更高版本的软件包。这就是为什么你仍然需要 PPA,这是最简单的方法,无需手动执行所有这些操作。

第二个问题的第二部分对我来说毫无意义

答案2

我对一些应用程序也遇到了同样的问题,其中之一就是 skype,它们依赖于需要手动安装的外部包或库文件。

为了解决这个问题我使用了:

sudo dpkg -i skype.deb

然后在提示输入类似输出中的外部库后,我输入:

sudo apt-get install -f

这将下载所需的软件包并自行安装 Skype。

答案3

每个 .deb 包中都有一个依赖项列表(带有兼容版本号)。

我不是 Python 读者,但源代码似乎调用了 来apt获取该列表。显然必须递归查找依赖项的依赖项,但apt显然也可以这样做。

一旦所有依赖项都已解决并按正确顺序排列(某些依赖项需要先安装,其他依赖项才能安装),apt只需要求安装依赖项即可。然后安装作为 Gdebi 参数提供的包。

依赖项和目标包分两次安装有两个原因。首先,安装本地 .deb 的 apt 调用格式与从存储库安装依赖项的 apt 调用格式不同。其次,分开调用可确保依赖项在目标包之前全部安装。

相关内容