当我运行 时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 版本。