The following packages have unmet dependencies & 慎用apt autoremove/remove/purge/dist-upgrade

背景

执行安装软件包命令sudo apt-get install packagename时,提示:The following packages have unmet dependencies

解决方案

无效的解决方案

报错The following packages have unmet dependencies,看起来是依赖项的问题。

ubuntu - How do I resolve `The following packages have unmet dependencies` - Stack Overflow中第一高赞说安装aptitude即可,它管理所有依赖。但是安装这个依赖依然会提示缺少依赖项

对我来说这个方法无效,当然不妨尝试是否可以解决,有人使用该命令可以解决问题。

有效的解决方案

ubuntu - How do I resolve `The following packages have unmet dependencies` - Stack Overflow第二高赞的回答

先执行

sudo apt-get update //同步本地包管理系统的索引文件,与软件源(repository)中的最新版本信息保持一致。不会安装或更改任何软件,只是更新软件包的可用信息
sudo apt-get clean //用于释放磁盘空间,特别是在系统磁盘空间不足时非常有用
sudo apt-get autoremove //这个命令要慎用,它可能会删除一些必要的包,详见文章末尾关于这个命令的坑

如果不行再执行

sudo apt --fix-broken install    //修复系统中已安装的软件包依赖关系的错误,尝试下载并安装缺失的依赖软件包,并解决其他软件包冲突问题。

sudo apt-get upgrade //这个命令要慎用,它会更新所有软件到最新版本
sudo dpkg --configure -a  //重新配置未成功安装的软件包。
sudo apt-get install -f    //修复已安装的软件包依赖关系错误。当某些软件包在安装或卸载过程中出现问题时,可能会导致软件包依赖关系错误,此时可以执行该命令以修复依赖关系错误。需要注意的是,该命令并不会安装新的软件包,它只会修复已安装的软件包依赖关系错误。如果需要安装新的软件包,应该使用 sudo apt-get install 命令。

我的步骤

sudo apt-get update

 之前已经update了,就三行信息

这里如果报错镜像的,可以考虑更换成其他镜像

清华镜像:ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

阿里镜像 :ubuntu镜像-ubuntu下载地址-ubuntu安装教程-阿里巴巴开源镜像站 (aliyun.com)

安装的时候注意根据服务器版本选择对应镜像,比如16.04版本镜像地址后面为xenial,18.04镜像后面地址为bionic

sudo apt-get clean
sudo apt-get autoremove

可以看到autoremove还是会提示缺少依赖

接着执行

sudo apt --fix-broken install

当执行 sudo apt --fix-broken install 命令时,apt 将会扫描系统中所有已安装的软件包,并尝试修复其中存在的依赖关系错误。如果它发现某个软件包依赖的其他软件包没有安装,则会尝试下载并安装这些软件包。如果它发现系统中存在软件包冲突,则会尝试解决这些冲突。

执行了好几次,都直接Abort了

 我尝试了四五次,终于成功了

再次执行安装脚本,成功!

慎用sudo apt autoremove/remove/purge/dist-upgrade

某一天我正开心的执行上述命令来解决依赖问题,执行的命令如下:

 1993  sudo apt-get clean
 1994  sudo apt-get autoremove
 1995  sudo apt --fix-broken install 
 1996  sudo dpkg --configure -a 
 1997  sudo apt-get install -f
 1998  sudo apt update

接着下午就有人反馈服务器的samba软件不见了,排查了半天发现原因是服务器中的samba包已经被移除了,遂查看日志

zgrep -i 'remove' /var/log/dpkg*

可以看到系统自动执行了删除软件包,而再这几个命令最上面显示`startup packages remove`,这个命令通常是由 `apt autoremove` 等这些删除软件包的命令再执行时留下的记录,因此可以判断是由于之前执行了sudo apt-get autoremove导致samba包被删除了

如何安全使用 

加上 --dry-run 参数

使用以下命令先进行模拟,查看实际会删除什么,不会真正删除:

sudo apt-get autoremove --dry-run

--dry-run:这是一个选项,表示执行命令时不进行实际的更改。dry-run模式会模拟命令的执行,显示将要执行的操作,但不真正移除任何软件包。这对于用户在执行实际移除操作前检查哪些软件包会被移除非常有用 

或者

sudo apt-get -s autoremove

-s:这是一个选项,表示apt-get命令将模拟(simulate)执行。与--dry-run类似,这会显示将要执行的操作,但不实际执行。

避免误删核心包

如果某些软件是自己安装的,但系统错误地标记为“孤立”,可以用以下命令手动标记为“已安装”:

sudo apt-mark manual <package-name>

慎用remove/purge/dist-upgrade

除了autoremove,dist-upgrade/purge/remove命令也要慎用

  • apt-get dist-upgrade 可能移除旧包或安装新包以满足依赖,这可能导致系统不兼容或崩溃,尤其在关键系统上使用时。apt-get dist-upgrade 不仅升级包,还可能移除旧包,这与 apt-get upgrade 的保守策略不同,适合大型系统更新但需谨慎操作
  • apt-get autoremove 会清理不再需要的依赖包,但如果用户不熟悉系统,可能误删仍需的软件。
  • apt-get purge 不仅移除包,还删除配置文件,适合彻底清理,但可能影响未来重新安装时的配置恢复。
  • 关于remove命令的细节,详见apt-get autoremove remove 新手收割者-CSDN博客这篇文章

root@ lly-CVN-Z790D5-ARK-FROZEN:~# sudo apt install lightdm -y Reading package lists&hellip;&hellip;Done Building dependency tree... Done Reading state information..、Done lightdm is already the newest version (1.30.0-0ubuntu5). 0 upgraded,0 newly installed,0 to remove and 172 not upgraded. root@ lly-CVN-Z790D5-ARK-FROZEN:~# sudo dpkg-reconfigure lightdm root@ lly-CVN-Z790D5-ARK-FROZEN:~# sudo apt install ubuntu-desktop - -reinstall -y Reading package lists&hellip;&hellip;Done Building dependency tree... Done Reading state information. .. Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: gir1.2-mutter-10: Depends: libmutter-10-0(=42.9-0ubuntu7.1) but 42.9-0ubuntu8 is to be installed gstreamer1.0-pipewire : Depends: pipewire (=0.3.48-1ubuntu1) but 0.3.48-1ubuntu3 is to be installed Depends: libpipewire-0.3-0(=0.3.48-1ubuntu1) but 0.3.48-1ubuntu3 is to be installed nautilus : Depends: libnautilus-extensionia (=1:42.2-0ubuntu2.1) but 1:42.6-0ubuntu1 is to be installed Recommends: gvfs-backends software-properties-gtk: Depends: python3-software-properties (=0.99.22) but 0.99.22.9 is to be installed ubuntu-release-upgrader-gtk: Depends: ubuntu-release-upgrader-core (=1:22.04.10) but 1:22.04.20 is to be installed Depends: python3-distupgrade(=1:22.04.10) but 1:22.04.20 is to be installed update-manager: Depends: update-manager-core (=1:22.04.9) but 1:22.04.21 is to be installed E: Unable to correct problems, you have held broken packages.
04-01
当您在Linux系统中安装软件包时,可能会遇到&ldquo;以下软件包存在未满足的依赖关系&rdquo;的错误消息。这通常是由于软件包之间的依赖关系无法满足而导致的。以下是一些解决这个问题的常见方法: 1. 更新软件包列表:在终端中运行以下命令: ``` $ sudo apt-get update ``` 这将更新软件包列表,以确保您的系统可以找到最新的软件包。 2. 安装缺失的依赖项:在终端中运行以下命令: ``` $ sudo apt-get install -f ``` 这将自动安装缺失的依赖项。 3. 安装特定版本的软件包:有时,特定版本的软件包可以满足依赖关系。您可以使用以下命令安装特定版本的软件包: ``` $ sudo apt-get install &lt;package-name&gt;=&lt;package-version&gt; ``` 例如,要安装Python的2.7.17版本,您可以使用以下命令: ``` $ sudo apt-get install python2.7=2.7.17-1~18.04ubuntu1 ``` 4. 删除冲突的软件包:有时,其他软件包可能与您要安装的软件包发生冲突。您可以尝试使用以下命令删除冲突的软件包: ``` $ sudo apt-get remove &lt;package-name&gt; ``` 例如,要删除与Python 2.7.17发生冲突的Python 3.6软件包,您可以使用以下命令: ``` $ sudo apt-get remove python3.6 ``` 5. 清理未使用的软件包:在终端中运行以下命令: ``` $ sudo apt-get autoclean $ sudo apt-get autoremove ``` 这将清除系统中未使用的软件包和依赖项。 希望这些方法可以帮助您解决&ldquo;以下软件包存在未满足的依赖关系&rdquo;的错误消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值