无法在 LMDE 上安装 Skype,如何解决这些依赖关系?

无法在 LMDE 上安装 Skype,如何解决这些依赖关系?

我已经下载了最新 Skype 的“multiarch”.deb 文件,但无法将其安装在最新版本的 LMDE(linux mint debian 版本 Xfce x86_64)上。例如

  1. 步骤1 :

    sudo dpkg -i skype-debian_4.1.0.20-1_i386.deb 
    

    输出:

    dpkg: dependency problems prevent configuration of skype:
    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.1.0~2011week13).
    
  2. 第二步(尝试修复损坏的):

    sudo apt-get install -f
    
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Correcting dependencies... Done
    The following extra packages will be installed:
      libapache2-mod-php5filter
    Suggested packages:
      php-pear
    The following packages will be REMOVED:
      libapache2-mod-php5 php5-cli skype:i386
    The following NEW packages will be installed:
      libapache2-mod-php5filter
    0 upgraded, 1 newly installed, 3 to remove and 3 not upgraded.
    1 not fully installed or removed.
    Need to get 0 B/2,663 kB of archives.
    After this operation, 44.9 MB disk space will be freed.
    

这里我主要关心的是它删除我的 LAMP 相关文件的方式,例如:

The following packages will be REMOVED:
libapache2-mod-php5 php5-cli skype:i386

我需要一种在不影响其他已安装应用程序的情况下安装 Skype 的方法。

只是sudo apt-get install -f删除而不修复依赖项。

如果有人编写逐步安装 Skype 的命令并同时保持 LAMP 完好无损,并解释为什么 apache 和 Skype 发生冲突,我将不胜感激。

答案1

1. 为什么 apt-get -f install 没有解决我的问题?

从某种意义上说,sudo dpkg -i skype-debian_4.1.0.20-1_i386.deb正在将处于损坏状态的软件包安装到您的系统中,并且尝试sudo apt-get install -f通过安装任何缺少的依赖库来尝试解决您现在损坏的设置。

这种方法的主要缺点是,如果这个损坏的包需要apt无法解析的依赖项,那么这个包就会成为问题并被删除。

此外,您可能想要或需要其他应用程序的软件包可能会受到损害并被删除,以便解决与损坏的软件包所需的库的潜在冲突。

以这种方式进行软件包安装是有问题的。对一个人有效的方法可能对另一个人无效,因为:

  1. 您的 PPA 存储库中的 .debs 已被升级到较新的版本,不再能解决此已损坏的安装应用程序的问题。
  2. 您的系统上的 PPA 设置与其他人略有不同。
  3. 32 位与 64 位架构的差异和/或不同架构(例如 ARM 与 i686)。

如果您确实想以这种方式进行安装,那么我建议您使用以下方法之一。

方法#1 - 手动执行

手动删除被认为是解决损坏的系统所必需的软件包apt,但记下它们的名称,以便稍后将它们放回去。

一旦这些软件包被删除,我就会尝试再次运行,sudo apt-get install -f直到它看起来像是真正安装了缺少的 .deb 软件包skype

方法 #2 - 撤消处于“保留”状态的包

可能存在基本上处于楔入状态的软件包安装。这在apt术语中称为“保留”状态。您可以使用以下命令检测这是否是您的情况:

sudo dpkg --get-selections | grep hold

如果任何软件包显示为“保留”状态,您可以使用以下命令将它们更改为“已安装”:

sudo echo "package_name install"|dpkg --set-selections

然后再次尝试运行install -f

sudo apt-get install -f

在 askubuntu 上的以下问答中找到了上述技术:

方法#3 - 使用 aptitude

如果遇到具有“hold”状态的包,处理它们的另一种方法是尝试让aptitude解决它们,而不是使用apt-get install -f.据报道,与 . 相比,Aptitude 在解决打包/依赖性问题方面更加持久apt-get

对于显示“保留”状态的包裹:

sudo aptitude install <package name>

在askubuntu上发现了上述技术,如下Q&A:

2. 使用动态 tarball 的另一种方法

我想我不会尝试安装 .deb 版本,而是skype选择动态版本(Skype 网站下拉列表中的最后一个版本)。该版本可以放在您的主目录中,甚至可以放在/opt/skype.动态版本包含所有skype软件。

您仍然需要为所需的库安装软件包,但这应该允许您保持 Apache/PHP 设置不变。

Dynamic Skype 压缩包的内容

$ tar jxvf skype-4.1.0.20.tar.bz2 
skype-4.1.0.20/
skype-4.1.0.20/third-party_attributions.txt
skype-4.1.0.20/LICENSE
skype-4.1.0.20/lang/
skype-4.1.0.20/lang/skype_es.ts
skype-4.1.0.20/lang/skype_es.qm
skype-4.1.0.20/lang/skype_pl.qm
skype-4.1.0.20/lang/skype_it.ts
skype-4.1.0.20/lang/skype_zh_t.qm
...
...

解压后 cd 到 skype 目录:

cd skype-4.1.0.20

然后从那里运行 Skype:

./skype

如果缺少依赖项,您要么在skype启动时遇到错误,要么可以使用以下命令了解skype可执行文件可能需要哪些库ldd

$ ldd skype
    linux-gate.so.1 =>  (0xf7751000)
    libasound.so.2 => /lib/libasound.so.2 (0xf7621000)
    libXv.so.1 => /usr/lib/libXv.so.1 (0xf761c000)
    libXss.so.1 => /usr/lib/libXss.so.1 (0xf7619000)
    librt.so.1 => /lib/librt.so.1 (0x461b9000)
    libdl.so.2 => /lib/libdl.so.2 (0x46076000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x464c0000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x46c1c000)
    libQtDBus.so.4 => /usr/lib/libQtDBus.so.4 (0xf75a1000)
    libQtWebKit.so.4 => /usr/lib/libQtWebKit.so.4 (0xf622d000)
    libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0xf61ec000)
    libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0xf5753000)
    libQtNetwork.so.4 => /usr/lib/libQtNetwork.so.4 (0xf562c000)
    libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xf5396000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x46059000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x4a9d8000)
    libm.so.6 => /lib/libm.so.6 (0x4607d000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x4623a000)
    libc.so.6 => /lib/libc.so.6 (0x45ecd000)
    /lib/ld-linux.so.2 (0x45eac000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x465f9000)
    libdbus-1.so.3 => /lib/libdbus-1.so.3 (0x4a98b000)
    libXrender.so.1 => /usr/lib/libXrender.so.1 (0x4645c000)
    libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0xf5301000)
    libphonon.so.4 => /usr/lib/libphonon.so.4 (0xf528e000)
    libpulse-mainloop-glib.so.0 => /usr/lib/libpulse-mainloop-glib.so.0 (0xf5289000)
    libpulse.so.0 => /usr/lib/libpulse.so.0 (0xf5242000)
    libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x460a9000)
    libXi.so.6 => /usr/lib/libXi.so.6 (0x46bfd000)
    libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x46bf3000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x466dc000)
    libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x46c34000)
    libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x466d7000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x42809000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x42840000)
    libgthread-2.0.so.0 => /lib/libgthread-2.0.so.0 (0x461e1000)
    libpng12.so.0 => /usr/lib/libpng12.so.0 (0x46467000)
    libz.so.1 => /lib/libz.so.1 (0x461c4000)
    libgobject-2.0.so.0 => /lib/libgobject-2.0.so.0 (0x461e8000)
    libSM.so.6 => /usr/lib/libSM.so.6 (0x46e21000)
    libICE.so.6 => /usr/lib/libICE.so.6 (0x46e91000)
    libssl.so.10 => /usr/lib/libssl.so.10 (0x4e0d3000)
    libcrypto.so.10 => /lib/libcrypto.so.10 (0x466e3000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x463e9000)
    libqzeitgeist.so.0 => /usr/lib/libqzeitgeist.so.0 (0xf521d000)
    libQtTest.so.4 => /usr/lib/libQtTest.so.4 (0xf51f9000)
    libpulsecommon-0.9.21.so => /usr/lib/libpulsecommon-0.9.21.so (0xf51a6000)
    libXtst.so.6 => /usr/lib/libXtst.so.6 (0xf51a0000)
    libwrap.so.0 => /lib/libwrap.so.0 (0xf5197000)
    libsndfile.so.1 => /usr/lib/libsndfile.so.1 (0xf5125000)
    libasyncns.so.0 => /usr/lib/libasyncns.so.0 (0xf511f000)
    libexpat.so.1 => /lib/libexpat.so.1 (0x46619000)
    libuuid.so.1 => /lib/libuuid.so.1 (0x46e2b000)
    libgssapi_krb5.so.2 => /lib/libgssapi_krb5.so.2 (0x4e08d000)
    libkrb5.so.3 => /lib/libkrb5.so.3 (0x4e12d000)
    libcom_err.so.2 => /lib/libcom_err.so.2 (0x4748f000)
    libk5crypto.so.3 => /lib/libk5crypto.so.3 (0x4dfd7000)
    libresolv.so.2 => /lib/libresolv.so.2 (0x4627a000)
    libnsl.so.1 => /lib/libnsl.so.1 (0xf5102000)
    libFLAC.so.8 => /usr/lib/libFLAC.so.8 (0xf50c5000)
    libvorbisenc.so.2 => /usr/lib/libvorbisenc.so.2 (0xf4f4f000)
    libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0xf4f25000)
    libogg.so.0 => /usr/lib/libogg.so.0 (0xf4f1f000)
    libkrb5support.so.0 => /lib/libkrb5support.so.0 (0x4e0c7000)
    libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x47495000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x46259000)

上面的列表可能有点令人畏惧,但您基本上需要以迭代方式完成它,以确认每个库都已安装。如果没有,则使用apt-cache search <.so file name>找出哪个包提供了该库。

对于来自非开源类型项目(例如 Skype)的二进制包,我通常发现这种方法更容易处理。

如果您确实遇到skype需要特定版本的库的问题,您可以自己编译它们并将它们skype放在/opt/libs.您需要设置一个环境变量LD_LIBRARY_PATH=/opt/libs/lib...,以便动态库加载器知道从该位置加载它们skype,而不是正常位置。

Skype 的静态构建

Skype 曾经提供静态构建,由于包含了所有内容,因此使用起来非常简单,但根据这个帖子:Skype 4.1 的静态二进制文件?,看来他们已决定放弃此产品。

该线程中还有一条评论称 Debian 7.0 多架构存在问题。

支持最后一句话:Debian 7.0(多体系结构)不适用于 amd64。

参考

相关内容