我怎样才能在不删除软件包的情况下 apt-get dist-upgrade?

我怎样才能在不删除软件包的情况下 apt-get dist-upgrade?

当我运行 时apt-get dist-upgrade,它会删除一些我非常想保留的软件包,例如netflix-desktop。为了解决这个问题,我当然可以简单地upgrade,但它会跳过安装相当多的软件包,因为它不想安装额外的包。

我不介意它随意安装额外的软件包,但我希望它不要删除重要的软件包。有没有禁止dist-upgrade删除任何软件包的设置?

答案1

这是 Debian 软件包管理器的一个令人尴尬的问题。任何升级过大量定制的 Ubuntu 安装的人都很清楚,这个缺失的功能是必需的。厌倦了这个问题,我想出了一个解决方法,并在 Linux Mint 18 到 19 升级期间成功测试了它。

首先升级所有可以升级的软件包:

sudo apt-get upgrade

或者如果你已经apt-fast安装了,最好使用它:

sudo apt-fast upgrade

这将帮助您一次性完成一半的升级:

1772 upgraded, 0 newly installed, 0 to remove and 1111 not upgraded.
Need to get 835 MB of archives.
After this operation, 271 MB of additional disk space will be used.
Do you want to continue? [Y/n]

要了解接下来会发生什么,此命令将请求升级单个软件包,但前提是可以通过升级已安装的软件包和安装新软件包来专门解决。不会删除任何软件包。如果需要删除软件包,命令将中止并显示错误:

apt-get upgrade --no-remove PACKAGE_NAME

此命令将列出所有可升级包的名称:

apt list --upgradable | tail +2 | cut -d/ -f1

因此,要批量升级/安装所有可能的版本,您可以使用以下命令:

apt list --upgradable | tail +2 | cut -d/ -f1 | sudo xargs -n1 apt-get upgrade --no-remove -y

这将推进安装,直到出现如下情况:

Setting up procps (2:3.3.12-3ubuntu1.2) ...

Configuration file '/etc/sysctl.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** sysctl.conf (Y/I/N/O/D/Z) [default=N] ? dpkg: error processing package procps (--configure):
 end of file on stdin at conffile prompt
Errors were encountered while processing:
 procps
E: Sub-process /usr/bin/dpkg returned an error code (1)

而不是等待输入,dpkg就会死机。我还没有尝试修复这个问题,所以dpkg实际上是在问问题而不是死机。(要检测交互式控制台需要什么dpkg,我不知道。也许通过删除“-y”参数,但这很麻烦。)

相反,我手动中断了该过程并使用此命令修复了损坏的包:

sudo dpkg --configure -a

然后重新运行上一个命令以继续安装。我不得不重复这项工作几次。

此后,您可以自动删除未使用的软件包,手动修复一些暂停的升级,并从顶部重新启动此过程。

这个解决方法并不完美,但比没有解决方案要好得多。希望它能帮助人们进行系统升级!

答案2

它这样做的原因是 Debian 维护的软件包版本在更高版本中不起作用。例如,在我的工作中,Moodle 1.9 安装在 Debian Squeeze (6.x) 上。要执行apt-get dist-upgrade,它必须删除该软件包,因为最新的 PHP 中存在一个问题,会破坏 Moodle 中的某些功能。

所以,不要担心,请相信系统。无论软件包是什么,您都可以稍后重新安装,然后使用 来backports访问它们。

答案3

该问题可能是由于混合存储库引起的;例如,如果您已经升级/etc/apt/sources.list但没有/etc/apt/sources.list.d/*。Apt dist-upgrade 想要删除与较新的 Debian 版本不兼容的软件包。

解决方案当然是确保所有存储库都适合您要升级到的 Debian 版本。

相关内容