以前都是安装 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 --remove-architecture i386 // 移除对 i386 架构的支持
dpkg --add-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的都有!
好不容易下载完了,在安装的时候还是遇到了老问题:软件包依赖关系!
lib32asound2 依赖的软件包是 libasound2 (= 1.0.25-3ubuntu3.1);
lib32v4l-0 依赖的软件包是 libv4l-0 (= 0.8.8-3);
就是说前面 32 位的软件包又依赖后面 64 位的软件包,通过新立得搜索发现这两个 64 位的软件包都已经安装了,只是版本太高了!而两个 32 位的软件包都是依赖特定的版本(=)。
执行命令:sudo apt-get install lib32bz2-1.0 lib32ncurses5 lib32z1 lib32tinfo5
这时候我首先想通过强制安装试一下,就是先忽略依赖关系:
我用的是忽略依赖版本,其他选项使用命令查看: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包,将deb包中 DEBIAN 下的 control 文件中关于依赖的字段中的 = 改为 >=:
dpkg-deb --help // 查看命令帮助
1.解压缩 deb 包中的文件:
dpkg-deb -x lib32asound2_1.0.25-3ubuntu3.1_amd64.deb deb;
2.解压缩 deb 包中的控制信息:
cd deb
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 -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/1c0kXh0c
ia32-libs:http://pan.baidu.com/s/1jGDRk0I
已在Ubuntu 15.04下解决了Beyond Compare低效率的BUG:http://www.linuxdiyf.com/linux/12532.html
在Linux中安装Beyond Compare破解版:http://www.linuxdiyf.com/linux/7888.html
Linux下的Beyond Compare:http://www.linuxdiyf.com/linux/4434.html
Ubuntu 12.04下使用和破解Beyond Compare 3.3.2:http://www.linuxdiyf.com/linux/3842.html
Ubuntu 14.04 64位无法安装ia32-libs解决:http://www.linuxdiyf.com/linux/14007.html