小张同学要在Ubuntu系统下安装Docker,安装第一步:准备相关包:apt-get install packages...就报错啦,详细报错信息如下:
检查红框框里error部分,发现是dpkg报错:curl依赖的一些package配置有问题
小张同学很好奇:为什么执行apt-get却是dpkg报错了呢?
apt-get与dpkg都是Ubuntu系统中安装软件包的工具。其中,dpkg用于离线安装,不解决包的依赖关系。apt-get是建立在dpkg上的软件管理工具,可以解决安装模块的依赖问题。
关于dpkg详细的解释:dpkg (Debian package),是为Debian操作系统(Ubuntu是基于Debian的unstable版本)开发的套件管理系统,用来安装、删除、构建和管理系统的软件包。但是dpkg用来离线安装已下载在本地的deb包,如果有deb包依赖其它包,不能自动安装。
小张同学针对报错信息搜索到了解决方案:
那么为什么不直接用apt-get -f install修复? /var/lib/dpkg/info/ 文件夹下的文件移来移去做什么?
/var/lib/dpkg/info/ 文件夹下存放所有安装包的配置文件列表,需要修复软件包的已有配置文件在info下会阻碍 apt-get -f install 修复,因此需要先清除出错的原配置文件。
清空info文件夹后,apt-get -f install 修复全部配置文件列表吗?
不是的,apt-get -f install 仅修复损坏的软件包。觉得很神奇,info文件夹下该有的文件都没有了,系统怎么知道修复那个软件呢?婉婉小姐姐告诉我
/var/lib/dpkg/ 下有一个status文件,记录了package的状态,所以系统晓得哪个软件需要修复,不是根据info下的文件决定修复哪个软件的。
用上边apt-get -f install 的方法解决后,发现似乎还有一种方法可以解决,(码住下次试一下这个解决方案):
收获三颗小豌豆:
dpkg安装本地软件包,不解决依赖关系。apt-get方法基于dpkg,在线安装,解决安装包的依赖关系。
info文件夹下文件要被移来移去是为了清除出错的原配置文件。
系统通过status文件判断哪些文件需要修复。
感谢婉婉小姐姐用花生和糖左口袋移右口袋的例子形象生动地为我解释info文件夹下文件为什么要移来移去