前几天 Ubuntu 14.04 最终公布了,然后就開始了预谋已久的系统升级了。
曾经都是安装 32 位的 Ubuntu,这次想開始全新的 64 位时代了,所以安装了 64 位的 Ubuntu 14.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-get install gcc-multilib
3 下载 Beyond Compare(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的都有!
好不easy下载完了,在安装的时候还是遇到了老问题:软件包依赖关系!
lib32asound2 依赖的软件包是 libasound2 (= 1.0.25-3ubuntu3.1);
lib32v4l-0 依赖的软件包是 libv4l-0 (= 0.8.8-3)。
就是说前面 32 位的软件包又依赖后面 64 位的软件包,通过新立得搜索发现这两个 64 位的软件包都已经安装了,仅仅是版本号太高了!而两个 32 位的软件包都是依赖特定的版本号(=)。
这时候我首先想通过强制安装试一下,就是先忽略依赖关系:
我用的是忽略依赖版本号,其它选项使用命令查看: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.deb deb;
2 解压缩 deb 包中的控制信息:
cd debdpkg-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 -b deb 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/1c0kXh0cia32-libs:http://pan.baidu.com/s/1jGDRk0I