Chr*_*ann 3 upgrade debian apt-get
当我运行时apt-get dist-upgrade,它想要删除我已经安装的一些我非常想保留安装的软件包,例如netflix-desktop. 要解决这个问题,我当然可以简单地upgrade,但随后它会跳过安装相当多的软件包,因为它不想安装额外的软件包。
我不介意它按照需要安装额外的软件包,但我希望它不要删除重要的软件包。是否有设置禁止dist-upgrade删除任何包?
这是 Debian 包管理器的一个尴尬问题。任何升级过高度定制的 Ubuntu 安装的人都非常清楚,缺少的功能是必需的。厌倦了这个问题,我想出了一个解决方法,并在 Linux Mint 18 到 19 升级期间成功测试了它。
首先升级所有可以升级的软件包:
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
或者,如果您已经apt-fast安装,最好使用它:
sudo apt-fast upgrade
Run Code Online (Sandbox Code Playgroud)
这将让您一次性完成一半的升级:
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]
Run Code Online (Sandbox Code Playgroud)
为了了解接下来会发生什么,此命令将请求升级单个软件包,但前提是可以通过升级已安装的软件包和安装新软件包来解决该问题。不会删除任何包。如果需要删除软件包,该命令将中止并出现错误:
apt-get upgrade --no-remove PACKAGE_NAME
Run Code Online (Sandbox Code Playgroud)
此命令将列出所有可升级包的名称:
apt list --upgradable | tail +2 | cut -d/ -f1
Run Code Online (Sandbox Code Playgroud)
因此,要批量升级/安装所有可能的内容,您可以使用以下命令:
apt list --upgradable | tail +2 | cut -d/ -f1 | sudo xargs -n1 apt-get upgrade --no-remove -y
Run Code Online (Sandbox Code Playgroud)
这将推进安装,直到出现如下情况:
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)
Run Code Online (Sandbox Code Playgroud)
而不是等待输入,dpkg就会死掉。我还没有尝试解决这个问题,所以dpkg实际上是在问这个问题而不是死掉。(我不知道需要什么才能dpkg检测到交互式控制台。也许可以通过删除“-y”参数,但这很麻烦。)
相反,我手动中断了该过程并使用以下命令修复了损坏的包:
sudo dpkg --configure -a
Run Code Online (Sandbox Code Playgroud)
然后重新运行之前的命令以继续安装。我不得不重复这个苦差事几次。
此后,您可以自动删除未使用的软件包,手动修复一些保留的升级,然后从顶部重新启动此过程。
解决方法并不完美,但比没有解决方案要好得多。希望对大家的系统升级有所帮助!
| 归档时间: |
|
| 查看次数: |
7286 次 |
| 最近记录: |