Debian

無法在 LMDE 上安裝 Skype,如何解決這些依賴關係?

  • May 12, 2013

我已經為最新的 Skype 下載了“multiarch”.deb 文件,但無法在最新版本的 LMDE(linux mint debian edition 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).
  1. 第二步(嘗試修復損壞):
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. 為什麼 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 安裝失去的 .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

如果遇到具有“保留”狀態的包,處理它們的另一種方法是嘗試讓aptitude解決它們,而不是apt-get install -f. 據報導,Aptitude 在解決打包/依賴問題方面比apt-get..

對於顯示“保留”狀態的包:

sudo aptitude install <package name>

在以下問答中在 askubuntu 上找到了上述技術:

2.另一種使用動態壓縮包的方法

與其嘗試安裝 .deb 版本,skype我想我會選擇 Dynamic 版本(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 multiarch 存在問題。

支持最後一條聲明:Debian 7.0 (multiarch) 不適用於 amd64。

參考

引用自:https://unix.stackexchange.com/questions/75426