我已经下载了最新 Skype 的“multiarch”.deb 文件,但无法将其安装在最新版本的 LMDE(linux mint debian 版本 Xfce x86_64)上。例如
步骤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).
第二步(尝试修复损坏的):
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
无法解析的依赖项,那么这个包就会成为问题并被删除。
此外,您可能想要或需要其他应用程序的软件包可能会受到损害并被删除,以便解决与损坏的软件包所需的库的潜在冲突。
以这种方式进行软件包安装是有问题的。对一个人有效的方法可能对另一个人无效,因为:
- 您的 PPA 存储库中的 .debs 已被升级到较新的版本,不再能解决此已损坏的安装应用程序的问题。
- 您的系统上的 PPA 设置与其他人略有不同。
- 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。