升级发行版时如何处理“过时”的软件包?

升级发行版时如何处理“过时”的软件包?

我想将我的 Debian 机器从 Jessie 升级到 Stretch,但 aptitude 报告我有 19 个过时的软件包。其中一些,比如 BerkeleyDB,是我经常使用的。

A一套升级说明说在升级之前删除所有过时的软件,但我想继续使用某些软件。我会永远使用 Jessie 吗?

答案1

最好删除过时的包,过时的包在最新的存储库中不可用,并且可能会导致安全问题。

列出过时的包:

aptitude search ?obsolete

做一个列表 :

aptitude search ?obsolete  > mylist

mylist通过仅保留包名称来编辑文件。

要删除过时的包:

apt-get --purge remove $(cat mylist)

Debian 手册:4.8.过时的软件包

引入了许多新软件包,stretch 也退役了,并省略了 jessie 中的一些旧软件包。它不为这些过时的软件包提供升级路径。虽然没有什么可以阻止您在需要时继续使用过时的软件包,但 Debian 项目通常会在stretch 发布一年后停止对其的安全支持[5],并且通常不会同时提供其他支持。建议使用可用的替代品(如果有)替换它们。

答案2

如果这些包与拉伸中的新/更新的包不冲突,则没有特殊原因应该删除它们。

如果它们确实发生冲突,包管理器会通知您。

顺便说一句,我的系统上仍然安装了一些软件包,这些软件包已经有一两年没有在 debian 中了。他们仍然工作。我有其他一些我必须为较新的 debian 版本重新编译的东西,还有一些我停止使用的东西,因为它们不值得重新编译(或者更常见的是,黑客攻击,以便它们针对较新的版本进行编译)各种图书馆)。

我仍然安装了旧版本的 libdb:

$ dpkg -l libdb[0-9.]* | grep ii
ii  libdb4.6           4.6.21-21      amd64        Berkeley v4.6 Database Libraries [runtime]
ii  libdb4.6++         4.6.21-18      amd64        Berkeley v4.6 Database Libraries for C++ [runtime]
ii  libdb5.1:amd64     5.1.29-7       amd64        Berkeley v5.1 Database Libraries [runtime]
ii  libdb5.1:i386      5.1.29-7       i386         Berkeley v5.1 Database Libraries [runtime]
ii  libdb5.3:amd64     5.3.28-13.1+b1 amd64        Berkeley v5.3 Database Libraries [runtime]
ii  libdb5.3:i386      5.3.28-13.1+b1 i386         Berkeley v5.3 Database Libraries [runtime]
ii  libdb5.3-dev       5.3.28-13.1+b1 amd64        Berkeley v5.3 Database Libraries [development]
ii  libdb5.3-sql:amd64 5.3.28-13.1+b1 amd64        Berkeley v5.3 Database Libraries [SQL runtime]

自 2014 年左右的“Squeeze”(Debian 6)以来,libdb4.6 就不再出现在 Debian 中。

当我没有安装任何使用旧库的东西时,我偶尔会清除它们......如果/当我记得的话。

答案3

...你永远不会“永远使用它”:) 只是一个如何以及何时解决这个问题的问题...

所以 apt 有 3 个升级标志:

https://www.fosslinux.com/43884/apt-vs-aptitude.htm https://wiki.debian.org/Aptitude

apt upgrade | safe-upgrade 

这将升级你的 Ubuntu 安装中的所有内容

...除非与完整升级包列表有任何冲突

apt full-upgrade

...并删除与完整升级包列表冲突的任何内容

请注意,aptitude 的 TUI 版本(仅aptitude在命令行上运行)有更多选项,并且可能会或可能不会比命令行版本更好地指导您的决策。 LiveCD 的另一个好用途。 TUI 版本还适合将应用程序、驱动程序等分组为易于管理的类别。因此,如果您进行升级并且系统上仍然存在过时的软件包,您将能够在 aptitude 的 TUI 版本中轻松找到它们。

RH 软件包管理在概念上类似,但使用一组不同的过程来实现类似的目标...同样,您的另一个选择是仅查找更新的软件包或不同的方法来实现相同的结果。这样,您就不会在 2025 年陷入运行 U14-32 位的困境。您可以在虚拟机或容器中执行此操作。

无论如何,我会备份安装,运行安全升级,看看它是否仍然有效。如果没有,请将其恢复到虚拟机或查找更新的替代品。或者正如您所说,只需购买一个新盒子并远程连接到旧盒子即可。

就我个人而言,我进行升级是为了覆盖和禁用旧的/不兼容的软件,打破遗留平台并激发前进......如果我需要一些东西来处理它(驱动程序或软件包),那么我不会升级。最好再买一盒然后继续。如果你真的需要它工作,那么你不会想冒险升级你正在工作的一台机器上的操作系统,不是吗?您至少可以将旧安装克隆到新驱动器上并升级新驱动器,对吧?如果在完全升级后不起作用,也许重新安装所需的软件(希望能够与较新的库一起正常工作),那么只需将旧驱动器克隆回新驱动器,然后尝试安全升级。双启动,无论需要什么。

答案4

为了安全起见,可以搜索自动安装的过时的软件包,没有其他软件包依赖于它们,并且不是必需的:

aptitude search '~o ~M !?reverse-depends(~i) !~E'

哪里的图案意思是:

  • 已过时:~o?obsolete
  • 自动安装:~M?automatic
  • 没有其他包依赖于它:!?reverse-depends(~i)
  • 不是必需的:!~E!?essential

因此,安全删除(清除)过时包的单行代码可能是:

aptitude purge $(aptitude search '~o ~M !?reverse-depends(~i) !~E' | cut -d' ' -f 3 | paste -sd' ')

相关内容