最近我碰巧将我的 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 是软件版本等?
请通俗易懂地解释一下,以便我明白。
实际上
gdebi
只是一个前端,dpkg
具有附加功能,它可以检查存储库中的依赖包并可以一次安装它们,同时dpkg -i
需要手动进行两次操作(后来是apt-get -f install
)。问题一:
作为
dpkg
前端,它可以使用dpkg
. 由于每个.deb
包文件都包含(前提是它们没有损坏)关于该 deb 文件的元数据(如包名、维护者、依赖项等),它可以很容易地检查这个文件的依赖性。例如,您可以使用检查 .deb 文件的元数据
dpkg --info package-name.deb
然后它使用这些信息构建依赖关系图并将本地可用的 .deb 文件标记为已下载
.deb
并从 Internet下载其他文件。请注意,那些需要的额外包必须在系统中配置的至少一个存储库中可用(具有正确的版本)。
然后它继续像正常的 apt 安装一样。不同之处在于它不会重新下载主 .deb 文件
问题2:
PPA 的存在是有原因的。主要原因是他们提供最新版本的软件包。这些更高版本的包通常也依赖于更高版本的子包,这些子包通常也由 PPA 提供,而不是来自标准的 Ubuntu 存储库。
示例场景:
假设,一个名为mother-package 的包
2.0
在标准 Ubuntu 存储库中具有最高版本,并且这个mother-package依赖于一个名为child-package的版本 2 的包。另外假设,一些 PPA 提供了需要的版本的mother-package,它们都可以通过该 PPA 存储库获得。3.0
child-package
3.0
问题是,如果您现在从存储库页面下载mother-package-3.0.deb并尝试使用安装它
gdebi
,您将(或gdebi
)失败。因为,查看mother-package-3.0.deb文件,
gdebi
知道这个mother-package需要version或更高版本的child-package3.0
,但它只知道 version 的位置2.0
。它不知道从哪里获取子包的版本3.0
。这是意料之中的,因为您没有告诉系统您从哪里获得这个最新的母包。换句话说,您没有配置存储库列表以包含该 PPA。所以,这个问题的明显答案是It depends。如果可以在已经配置的仓库中找到必要的依赖项,则安装成功。但如果没有,那么它将无法安装这个更高版本的包。这就是您仍然需要 PPA 的原因,这是无需手动完成所有这些操作的最简单方法。
第二个问题的第二部分对我来说没有意义。
我在少数应用程序中遇到了同样的问题,Skype 就是其中之一,它们依赖于需要手动安装的外部包或库文件。
要解决我使用的问题:
然后在提示输入外部库后,就像你在输出中一样,我输入:
这将自行下载所需的软件包并安装 Skype。
在每个 .deb 包中都有一个依赖项列表(带有兼容的版本号)。
我不是 Python 读者,但源代码似乎调用
apt
来获取该列表。显然必须递归下降才能找到依赖项的依赖项,但apt
显然也可以这样做。一旦所有的依赖项都被计算出来并以正确的顺序放置(一些依赖项需要在安装其他依赖项之前安装),
apt
只需要求安装依赖项。然后安装作为参数提供给 Gdebi 的包。由于两个原因,依赖项和目标包分两次安装。首先,安装本地 .deb 的 apt 调用的格式不同于从存储库安装依赖项的 apt 调用。其次,分离调用确保所有依赖项都在目标包之前安装。