关于解决Ubuntu下apt-get的Unmet dependencies依赖错误

产生原因

准确的产生原因已经不太清楚了,可能是因为我在运行apt-get --reinstall install的时候中断了,导致依赖版本不正确的问题。

问题描述

运行apt-get install upgrade remove或 reinstall时均会出现问题,提示如下:

The following packages have unmet dependencies:
 libpam-systemd : Depends: systemd (= 229-4ubuntu21.2) but 229-4ubuntu21 is to be installed
 systemd : Depends: libsystemd0 (= 229-4ubuntu21) but 229-4ubuntu21.2 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

提示的意思是libpam-systemd依赖systemd (= 229-4ubuntu21.2)版本,但即将安装的是229-4ubuntu21版本。
systemd依赖的是libsystemd0 (= 229-4ubuntu21)而即将安装的是229-4ubuntu21.2

解决办法

1.查看libsystemd0版本

运行:
dpkg -l libsystemd0>dpkg.result
并查看dpkg.result的内容,发现libsystemd0目前的版本已经是229-4ubuntu21.2,于是把它卸载,且安装依赖的版本229-4ubuntu21

2.删除libsystemd0

sudo dpkg -P libsystemd0

3.下载并安装依赖的libsystemd0 版本

由于apt-get已无法使用,需要自行下载deb包,并使用dpkg来安装。在Launchpad中可搜索到历史的ubuntu包,而在Packages ubuntu中无法搜到,请使用Launchpad。
在Launchpad搜索到libsystemd0229-4ubuntu21版本的二进制安装文件后,复制下载链接,并在终端运行
wget http://launchpadlibrarian.net/343223052/libsystemd0_229-4ubuntu21_amd64.deb

来下载包的安装文件,其中wget后面跟的是下载链接。
下载好后安装该包
sudo dpkg -i libsystemd0_229-4ubuntu21_amd64.deb

其中-i后面的是该软件安装包的名字。

4.解决systemd安装不成功的问题

可先直接跳到第五步来安装systemd,如发现有这里提到的错误,再回来这里处理。在安装systemd时,发现提示错误:subprocess paste was killed by signal (Broken pipe)

dpkg: error processing archive /var/cache/apt/archives/systemd_229-4ubuntu21.2_amd64.deb (--unpack):
 trying to overwrite '/lib/systemd/systemd', which is also in package systemd-sysv 229-4ubuntu21
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)

这是由于systemd-sysv程序的影响,导致无法安装成功,此时需要把systemd-sysv删掉后,再来安装systemd,由于有其他软件依赖systemd-sysv,导致无法删除,可使用忽略依赖的选项--force-all来删除。运行:
sudo dpkg --force-all -P systemd-sysv

5.下载并安装依赖的systemd 版本

Lauchpad上搜索对应的systemd软件包版本,并下载安装。
wget http://launchpadlibrarian.net/360034029/systemd_229-4ubuntu21.2_amd64.deb

sudo dpkg -i systemd_229-4ubuntu21.2_amd64.deb

最后安装systemd
sudo dpkg --force-all -i systemd_229-4ubuntu21.2_amd64.deb
接着可顺利使用apt-get -f install来修复依赖关系。最后运行update和upgrade命令即可。

sudo apt-get -f install
sudo apt-get update
sudo apt-get upgrade

sudo apt-get -f install运行完过后,可通过sudo apt-get install systemd-sysv来安装重新systemd-sysv,我这里是在sudo apt-get upgrade之后发现systemd-sysv已经安装上了。建议通过dpkg -l systemd-sysv来查看systemd-sysv是否安装,以避免系统出问题。
在upgrade的过程中,mysql会让我们选择配置,直接选择“ok”,使用默认配置即可。而我使用的AWS系统的升级,也会让我选择是使用软件包的配置还是使用机子本地(原来)的配置,我是选择使用软件包的配置的。

感悟

在解决这个问题的过程中,在很多论坛,问了很多人,都说在运行apt-get update后一定要运行apt-get upgrade,不然就会出现我这种错误,但是根据我的分析,既然apt-get update只是更新软件库数据,并不执行安装软件的操作,那应该不会出现我这种“依赖错误”的问题。我的问题应该是在安装软件的时候,突然中止,导致版本依赖错误,或者使用忽略依赖的方法来强制安装软件包而导致的。
并没有人能给出解决方法,还是建议我重装。但是通过摸索后发现,解决办法并不复杂,比重装方便多了。希望大家遇到问题不要冲动,能找到解决问题的方法。

经过这次的努力,学到了以下指示:

  1. dpkg可用于安装软件包,且可通过--force-all选项来忽略依赖,从而强制删除某个软件,但建议除非像本文中一样,你了解系统需要什么版本的软件包,不然不要用这个选项。
  2. Linux中的程序是运行在内存中的,就算是系统程序,也可以在它运行时将其卸载并重装,但在重启前,务必要把系统程序恢复正常,不然会出现系统无法运行的情况。
  3. 在用apt-get时出现错误,要往前寻找,寻找到出现错误的原因,不能光看最后的Errors were encountered while processing:,没有用。
  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
当您在Linux系统中安装软件包时,可能会遇到“以下软件包存在未满足的依赖关系”的错误消息。这通常是由于软件包之间的依赖关系无法满足而导致的。以下是一些解决这个问题的常见方法: 1. 更新软件包列表:在终端中运行以下命令: ``` $ sudo apt-get update ``` 这将更新软件包列表,以确保您的系统可以找到最新的软件包。 2. 安装缺失的依赖项:在终端中运行以下命令: ``` $ sudo apt-get install -f ``` 这将自动安装缺失的依赖项。 3. 安装特定版本的软件包:有时,特定版本的软件包可以满足依赖关系。您可以使用以下命令安装特定版本的软件包: ``` $ sudo apt-get install <package-name>=<package-version> ``` 例如,要安装Python的2.7.17版本,您可以使用以下命令: ``` $ sudo apt-get install python2.7=2.7.17-1~18.04ubuntu1 ``` 4. 删除冲突的软件包:有时,其他软件包可能与您要安装的软件包发生冲突。您可以尝试使用以下命令删除冲突的软件包: ``` $ sudo apt-get remove <package-name> ``` 例如,要删除与Python 2.7.17发生冲突的Python 3.6软件包,您可以使用以下命令: ``` $ sudo apt-get remove python3.6 ``` 5. 清理未使用的软件包:在终端中运行以下命令: ``` $ sudo apt-get autoclean $ sudo apt-get autoremove ``` 这将清除系统中未使用的软件包和依赖项。 希望这些方法可以帮助您解决“以下软件包存在未满足的依赖关系”的错误消息。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值