解决apt

您所在的位置:网站首页 linux更新包管理器显示暂时不能解析文件怎么回事 解决apt

解决apt

2024-02-13 03:14| 来源: 网络整理| 查看: 265

前几天在删除一个软件的的时候使用 apt-get autoremove,结果把所有依赖的软件都卸载了,而且导致很多库文件出了问题,不能再安装任何软件。 后来在网上查了一下, autoremove – 卸载所有自动安装且不再使用的软件包 例如:C 依赖于 B, D 依赖于B, 且D没有被其他手动安装的包依赖,apt-get autoremove C 将删除B, C, D。其实很多时候我们并不想删除B,D。所以一定慎用autoremove. 经过这次删除后,导致后面任何软件都无法安装了。然后仔细研究了一下ubuntu的安装软件原理。这里讲一下如何在出现上面情况的时候恢复。

当误删后再安装软件,可能会出现下面情况

me@-ThinkPad-T470p:/etc/apt$ sudo apt-get install libproj-dev Reading package lists... Done Building dependency tree Reading state information... Done You might want to run 'apt-get -f install' to correct these: The following packages have unmet dependencies: curl : Depends: libcurl3-gnutls (= 7.47.0-1ubuntu2.18) but 7.47.0-1ubuntu2.16 is to be installed krb5-multidev : Depends: libkrb5-3 (= 1.13.2+dfsg-5ubuntu2.2) but 1.13.2+dfsg-5ubuntu2.1 is to be installed Depends: libk5crypto3 (= 1.13.2+dfsg-5ubuntu2.2) but 1.13.2+dfsg-5ubuntu2.1 is to be installed libgssapi-krb5-2 : Depends: libkrb5-3 (= 1.13.2+dfsg-5ubuntu2.2) but 1.13.2+dfsg-5ubuntu2.1 is to be installed E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

如果依赖的库不是比较关键的话,根据提示最简单的情况是,使用命令 -f 强制更新一下安装包

sudo apt-get -f install

如果能仍然不能恢复,出现像下面我遇到的情况,就比较麻烦了。 当执行apt-get -f install 时候仍然有错误,

me@-ThinkPad-T470p:/etc/apt$ sudo apt-get -f install Reading package lists... Done Building dependency tree Reading state information... Done Correcting dependencies... Done The following packages were automatically installed and are no longer required: gir1.2-nautilus-3.0 python-dulwich python-fastimport python-nautilus python-svn Use 'sudo apt autoremove' to remove them. The following additional packages will be installed: libcurl3-gnutls libk5crypto3 libkrb5-3 libkrb5support0 Suggested packages: krb5-doc krb5-user The following packages will be upgraded: libcurl3-gnutls libk5crypto3 libkrb5-3 libkrb5support0 4 upgraded, 0 newly installed, 0 to remove and 197 not upgraded. 101 not fully installed or removed. Need to get 0 B/569 kB of archives. After this operation, 0 B of additional disk space will be used. Do you want to continue? [Y/n] y (Reading database ... 390968 files and directories currently installed.) Preparing to unpack .../libkrb5-3_1.13.2+dfsg-5ubuntu2.2_amd64.deb ... Unpacking libkrb5-3:amd64 (1.13.2+dfsg-5ubuntu2.2) over (1.13.2+dfsg-5ubuntu2.1) ... dpkg: error processing archive /var/cache/apt/archives/libkrb5-3_1.13.2+dfsg-5ubuntu2.2_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libkrb5.so.3', which is also in package avostools 1.0.1.2 Preparing to unpack .../libkrb5support0_1.13.2+dfsg-5ubuntu2.2_amd64.deb ... Unpacking libkrb5support0:amd64 (1.13.2+dfsg-5ubuntu2.2) over (1.13.2+dfsg-5ubuntu2.1) ... dpkg: error processing archive /var/cache/apt/archives/libkrb5support0_1.13.2+dfsg-5ubuntu2.2_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libkrb5support.so.0', which is also in package avostools 1.0.1.2 Preparing to unpack .../libk5crypto3_1.13.2+dfsg-5ubuntu2.2_amd64.deb ... Unpacking libk5crypto3:amd64 (1.13.2+dfsg-5ubuntu2.2) over (1.13.2+dfsg-5ubuntu2.1) ... dpkg: error processing archive /var/cache/apt/archives/libk5crypto3_1.13.2+dfsg-5ubuntu2.2_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libk5crypto.so.3', which is also in package avostools 1.0.1.2 Preparing to unpack .../libcurl3-gnutls_7.47.0-1ubuntu2.18_amd64.deb ... Unpacking libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.18) over (7.47.0-1ubuntu2.16) ... dpkg: error processing archive /var/cache/apt/archives/libcurl3-gnutls_7.47.0-1ubuntu2.18_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4', which is also in package avostools 1.0.1.2 No apport report written because MaxReports is reached already Processing triggers for libc-bin (2.23-0ubuntu11.2) ... /sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libwind.so.0 is not a symbolic link .... /sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libasn1.so.8 is not a symbolic link Errors were encountered while processing: /var/cache/apt/archives/libkrb5-3_1.13.2+dfsg-5ubuntu2.2_amd64.deb /var/cache/apt/archives/libkrb5support0_1.13.2+dfsg-5ubuntu2.2_amd64.deb /var/cache/apt/archives/libk5crypto3_1.13.2+dfsg-5ubuntu2.2_amd64.deb /var/cache/apt/archives/libcurl3-gnutls_7.47.0-1ubuntu2.18_amd64.deb

像我遇到的这个现象,有两个问题,一个是依赖的库又与其他安装的软件的库版本不一样,导致安装不成功,另一个是当时在卸载时候导致一些动态库连接出了问题。 首先解决连接库的问题/sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libwind.so.0 is not a symbolic link, 以libwind.so为例。 ls看一下会发现同名但是版本不同的两个库文件,而且大小一致,如果使用diff libwind.so.0 libwind.so.0.0.0看一下的话,会发现两个文件一致没有区别 ,这样的话就可以做强制连接库执行ln -sf 将libwind.so.0强制做成链接文件,就能解决提示的错误。这一步只能一个个手动重新建立链接,避免系统里有多个版本,弄错了链接。

me@-ThinkPad-T470p:/usr/lib/x86_64-linux-gnu$ ls -lh | grep libwind -rw-r--r-- 1 idriver idriver 163K 8月 20 08:21 libwind.so.0 -rw-r--r-- 1 root root 163K 7月 14 2017 libwind.so.0.0.0 me@-ThinkPad-T470p:/usr/lib/x86_64-linux-gnu$ sudo ln -sf libwind.so.0.0.0 libwind.so.0

当解决完链接问题后,就可以再执行

sudo apt-get -f install

到这里如果成功,文件解决,如果像我遇到的情况还有另一个问题需要解决,安装的软件冲突问题。

Errors were encountered while processing: /var/cache/apt/archives/libkrb5-3_1.13.2+dfsg-5ubuntu2.2_amd64.deb /var/cache/apt/archives/libkrb5support0_1.13.2+dfsg-5ubuntu2.2_amd64.deb /var/cache/apt/archives/libk5crypto3_1.13.2+dfsg-5ubuntu2.2_amd64.deb /var/cache/apt/archives/libcurl3-gnutls_7.47.0-1ubuntu2.18_amd64.deb E: Sub-process /usr/bin/dpkg returned an error code (1)

这介个通过手动安装一下,

me@-ThinkPad-T470p:/usr/lib/x86_64-linux-gnu$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/libkrb5-3_1.13.2+dfsg-5ubuntu2.2_amd64.deb (Reading database ... 390968 files and directories currently installed.) Preparing to unpack .../libkrb5-3_1.13.2+dfsg-5ubuntu2.2_amd64.deb ... Unpacking libkrb5-3:amd64 (1.13.2+dfsg-5ubuntu2.2) over (1.13.2+dfsg-5ubuntu2.1) ... dpkg: warning: overriding problem because --force enabled: dpkg: warning: trying to overwrite '/usr/lib/x86_64-linux-gnu/libkrb5.so.3', which is also in package avostools 1.0.1.2 dpkg: dependency problems prevent configuration of libkrb5-3:amd64: libkrb5-3:amd64 depends on libkrb5support0 (= 1.13.2+dfsg-5ubuntu2.2); however: Version of libkrb5support0:amd64 on system is 1.13.2+dfsg-5ubuntu2.1. dpkg: error processing package libkrb5-3:amd64 (--install): dependency problems - leaving unconfigured Processing triggers for libc-bin (2.23-0ubuntu11.2) ... Errors were encountered while processing: libkrb5-3:amd64

不过使用dpkg安装软件包的时候,又遇到了一个问题,依赖的库版本不同, 使用dpkg -l 可以查看当前已经安装的版本

me@-ThinkPad-T470p:/var/cache/apt/archives$ dpkg -l libkrb5support0 Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-=======================================-========================-========================-==================================================================================== ii libkrb5support0:amd64 1.13.2+dfsg-5ubuntu2.1 amd64 MIT Kerberos runtime libraries - Support library

这个时候会发现已经安装的版本和期望安装的版本不一致,这只能把已经安装的版本卸载掉,再安装期望的版本。首先是卸载,执行下面命令。

me@-ThinkPad-T470p:/var/cache/apt/archives$ sudo dpkg --force-all -P libkrb5support0 dpkg: libkrb5support0:amd64: dependency problems, but removing anyway as you requested: libkrb5-3:amd64 depends on libkrb5support0 (= 1.13.2+dfsg-5ubuntu2.2). libkdb5-8:amd64 depends on libkrb5support0 (>= 1.13~alpha1+dfsg); however: Package libkrb5support0:amd64 is to be removed. libgssapi-krb5-2:amd64 depends on libkrb5support0 (>= 1.13~alpha1+dfsg); however: Package libkrb5support0:amd64 is to be removed. libkadm5clnt-mit9:amd64 depends on libkrb5support0 (>= 1.13~alpha1+dfsg); however: Package libkrb5support0:amd64 is to be removed. libkadm5srv-mit9:amd64 depends on libkrb5support0 (>= 1.13~alpha1+dfsg); however: Package libkrb5support0:amd64 is to be removed. libk5crypto3:amd64 depends on libkrb5support0 (>= 1.13~alpha1+dfsg). (Reading database ... 390967 files and directories currently installed.) Removing libkrb5support0:amd64 (1.13.2+dfsg-5ubuntu2.1) ... Processing triggers for libc-bin (2.23-0ubuntu11.2) ...

以此把错误的几个版本库都卸载掉。 都卸载完后,再尝试安装软件,但是仍然安装失败了, 提示了这样的错误

dpkg: error processing archive /var/cache/apt/archives/libkrb5support0_1.13.2+dfsg-5ubuntu2.2_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libkrb5support.so.0', which is also in package avostools 1.0.1.2

这就很奇怪了,然后用find找了一下avostools这个包,看一下到底是什么程序。这个时候想起来这个软件是以前同事自己写的安装包,在我电脑试的,谁能想到这么坑,然后接下来就是把这个软件删除了,然后再find 发现在/var/lib/dpkg/info/下有这个软件安装信息。

me@-ThinkPad-T470p:/var/cache/apt/archives$ sudo find / -name "*avos*" /var/lib/dpkg/info/avostools.md5sums /var/lib/dpkg/info/avostools.list /var/lib/dpkg/info/avostools.postinst

其实这个就涉及到了unbutu安装程序的原理了,apt-get 最终也是调用的dpkg进行的安装,为什么每次apt-get -f install 能更新软件,就是因为/var/lib/dpkg下面的信息,每次安装软件会在这个目录下的status文件中增加安装的软件信息,然后info目录下创建同名的***.mdtsums,***.list, ***.postinst文件。就是靠这些信息,进行软件安装和更新的。 既然知道了这些,并且知道这个软件没有用户,果断的删掉这些信息。/info下的这三个文件删除掉。status文件里找到同名的几行信息。删除掉即可。 至此,所有有冲突的版本问题都解决了。 然后在执行

sudo apt-get -f install

所有软件能够正常更新了。 然后在安装希望安装的软件就可以了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3