前幾天 Ubuntu 14.04終於發佈了,然後就開始了預謀已久的系統升級了。
以前都是安裝 32 位的Ubuntu,這次想開始全新的 64 位時代了,所以安裝了 64 位的 Ubuntu14.04。不過安裝完系統後,安裝一些軟件時發現庫或者軟件包依賴的問題。於是就各種搜索找解決辦法,最終算是把問題都解決了,所以寫篇文章總結一下在64 位系統下安裝 32 位軟件以及解決 deb 包依賴的一些方法。
首先,要在 64 位系統下安裝 32位軟件需要有一些基本庫(32位)的支持,例如:libc6:i386 等。默認情況下,64 位的 Ubuntu使用軟件中心或者新立得等工具安裝的都是 64 位的庫或者軟件,所以要想安裝 32 位的庫或者軟件需要進行一些必要的設置來使系統支持i386 架構的軟件:
1 打開終端,使用 dpkg命令(dpkg --help 查看幫助)進行架構的添加:
dpkg --add-architecture i386 // 添加對 i386架構的支持
dpkg --remove-architecture i386 // 移除對 i386架構的支持
2 安裝基礎的 32位庫:
在終端中輸入命令(使用軟件包管理工具也可以):
sudo apt-getinstall gcc-multilib
3 下載 BeyondCompare(deb包),安裝時會報缺少庫 ia32-libs 的錯誤,所以需要先完成 ia32-libs的安裝,
雖然我下載的就是 amd64 版本的軟件,但還是會依賴 ia32-libs,可能是 64位不完全,呵呵;
4安裝 ia32-libs(下載地址: http://pkgs.org/):
sudo dpkg-i ia32-libs_20140131_amd64.deb
執行上面的命令後發現還是軟件包依賴關係不滿足,缺少以下軟件包(我的電腦是這幾個):
lib32z1
lib32ncurses5
lib32asound2
lib32v4l-0
ps:上面命令執行完後雖然安裝是失敗的,但是會造成其他軟件包安裝時出問題,最好清理掉:
sudo dpkg-r ia32-libs
其中前兩個可以直接在新立得軟件包管理器中找到,而另外兩個卻沒有!
繼續從 http://pkgs.org/ 搜索下載(amd64的)。
在這裏不得不說一下,這個網站真是不錯,有超多的軟件包,rpm和deb的都有!
好不容易下載完了,在安裝的時候還是遇到了老問題:軟件包依賴關係!
lib32asound2 依賴的軟件包是 libasound2 (=1.0.25-3ubuntu3.1);
lib32v4l-0依賴的軟件包是 libv4l-0 (=0.8.8-3);
就是說前面 32位的軟件包又依賴後面 64 位的軟件包,通過新立得搜索發現這兩個 64位的軟件包都已經安裝了,只是版本太高了!而兩個 32位的軟件包都是依賴特定的版本(=)。
執行命令:sudo apt-getinstall lib32bz2-1.0 lib32ncurses5 lib32z1lib32tinfo5
這時候我首先想通過強制安裝試一下,就是先忽略依賴關係:
我用的是忽略依賴版本,其他選項使用命令查看:dpkg--force-help
sudo dpkg -i--force-depends-version lib32asound2_1.0.25-3ubuntu3.1_amd64.deb
這樣確實是可以安裝上的,但是使用新立得管理時提示有破損的軟件包,這樣可能導致其他軟件包安裝出問題,看來這樣強制安裝的方法是不可取的,只能尋找其他辦法了!
既然已經安裝了高版本,並且在高版本的依賴關係裏寫明瞭替代之前的版本,那麼庫內部的實現應該是兼容的。所以考慮嘗試修改deb軟件包。
開始想直接通過歸檔管理器提取deb包中 DEBIAN 下的 control 文件,通過 vi 或者 gedit修改後,再替換掉原來的。但是無法通過歸檔管理器向deb包中添加文件,看來需要使用deb打包工具了。
搜索一番後發現如果只是進行簡單修改再重新打包,那麼使用 dpkg-deb命令就可以了。
其他關於deb打包的知識:http://www.startos.com/ubuntu/tips/2010122417734.html
修改下載的deb包,將deb包中DEBIAN 下的 control 文件中關於依賴的字段中的 = 改爲 >=:
dpkg-deb --help // 查看命令幫助
1 解壓縮 deb包中的文件:
dpkg-deb-x lib32asound2_1.0.25-3ubuntu3.1_amd64.debdeb;
2 解壓縮 deb包中的控制信息:
cddeb
dpkg-deb -e../lib32asound2_1.0.25-3ubuntu3.1_amd64.deb
此時在 deb目錄下應該有兩個目錄:DEBIAN 和 usr
3 修改DEBIAN/control 文件:
原來:Depends:libasound2 (= 1.0.25-3ubuntu3.1), libc6-i386 (>=2.7)
改爲:Depends:libasound2 (>= 1.0.25-3ubuntu3.1), libc6-i386 (>=2.7)
這樣其實就可以了,當然高興的話把軟件包的版本也改一下,呵呵:
原來:Version:1.0.25-3ubuntu3.1
改爲:Version:1.0.25-3ubuntu3.2(自定義)
4重新打包:
切換到 deb目錄的上一級目錄下,執行命令(後面軟件包名自定義):
dpkg-deb -bdeb lib32asound2_1.0.25-3ubuntu3.2_amd64.deb
出現一個小的警告後,新的 deb包就打好了!
現在再進行新 deb包的安裝就沒有問題了:
sudo dpkg-i lib32asound2_1.0.25-3ubuntu3.2_amd64.deb
另外一個軟件包 lib32v4l-0 也是一樣的步驟,將相應的 = 改爲 >=重新打包安裝就可以了!
最後再次運行上面的命令完成ia32-libs 的安裝:
sudo dpkg-i ia32-libs_20140131_amd64.deb
5 終於進入正題了:安裝Beyond Compare (程序員必備)
ia32-libs安裝好後,一條命令就搞定了:
sudo dpkg-i ia32-libs_20140131_amd64.deb
安裝好後啓動bcompare,然後完成註冊就行了!
--------------------------------------------------------------------------------------------------------------------------
附件:Beyond Compare 和ia32-libs(內含註冊碼,ia32-libs 目錄下 original中的是未修改的)
bcompare:http://pan.baidu.com/s/1c0kXh0c
ia32-libs:http://pan.baidu.com/s/1jGDRk0I