解决依赖问题的利器——apt-file

    学校的有线网络客户端是DrCom,Windows下停掉热点分享服务和代理后跑的很顺利。可是切到我常用的Ubuntu下时客户端却跑不起来。从终端用命令运行客户端时发现有依赖文件缺失,借着这个契机,我认识了Ubuntu(Debian)下解决依赖问题的利器——apt-file。

    事情的始末是这样的,当时报的文件缺失是libXi.so.6,发现文件缺失后我先在整个计算机范围内查找了这个文件,在/usr/lib/x86_64-linux-gnu目录下发现了一个,当时很不解,明明不缺依赖文件啊。
    后来我百度了一下大家遇到同类情况的解决方案,发现原来缺的是32位的libXi.so.6,刚才的目录下显然是64位的gnu文件。然后我发现大家开始用各种方式安装32位的兼容库,如ia32-libs,这个库还被Ubuntu抛弃好几年了,得换以前的源装之类的。也有人建议利用增加32位的架构来支持依赖32位库的软件。且不论有多么拐弯抹角有多麻烦,前面这些解决方案在我的Ubuntu Kylin 14.04 LTS下都没有见效。
    这时灰头土脸漫不经心在网上闲逛的我看见了一篇惊艳的博文。让我激动的是博主发现依赖缺失->利用apt-file找到依赖文件->逐个补全依赖文件->解决问题这一直截了当的过程的畅快感。感谢博主,感谢博主感谢的博主。
    在利用apt-file解决问题前我们需要做一点知识储备。
    首先我们需要了解,Linux下有一个检查可执行文档依赖项的命令:ldd
    然后我们需要了解,Ubuntu下用apt-get来install文件时可以通过类似sudo apt-get install libxi:i386的格式来指定文件使用的架构,i386就是指32位架构。
    我们还可以借助Ubuntu的sudo -i命令让终端留在root权限下,免得我们在逐个安装依赖文件时总要在命令前加”sudo“。
    最后是apt-file的安装和使用:

  • Ubuntu(Debian)系统中默认没有apt-file工具,安装和许多其他工具一样,sudo apt-get install apt-file就好。
  • 安装成功后还不能直接使用,apt-file update命令会更新软件缓存库,有了库才能搜索文件。第一次使用或apt-get update后都需运行一次该命令。
  • apt-file search file_name可以查找(含有目标字符串的)目标文件存在于哪些软件包中。直接search可能返回太多内容,可以利用Linux的grep命令获得返回内容中字符串完整匹配的部分,如apt-file search filename | grep -w filename,或者获得特定路径下的文件,如apt-file search filename | grep /bin/
  • apt-file list package_name可以罗列目标软件包包含的文件。

    于是可以动手解决问题了:

sudo -i
apt-get install apt-file
apt-file update
ldd DrClientLinux

    缺的也不多,找到那几个“not found”的依赖文件,然后继续。

apt-file search libxi|grep libxi.so.6
apt-file search libxi|grep libxi
apt-get install libxi6:i386
./DrClientLinux

    跟之前报告说缺的依赖文件有了不同,继续。

apt-file search libxrender|grep libxrender
apt-get install libxrender1:i386
./DrClientLinux

    缺的依赖文件又不同了。发现这些依赖文件所属包的命名规律了,直接装,不用找了。

apt-get install libxrandr2:i386
./DrClientLinux
apt-get install libxcursor1:i386
./DrClientLinux
apt-get install libxinerama1:i386
./DrClientLinux

    妥了,可喜可贺!

Fork me on GitHub