有没有办法备份在 yum 更新时会更改的软件包?例如,当我执行 yum update lighttpd 时,如果 yum update 不成功或者会导致意外错误或错误,是否有办法备份和恢复 lighttpd?
3 回答
如果您在 4.6.0 之前使用 RPM(在较新的版本中已将其删除),您可以使用rpm --rollback
类似这个旧教程或更完整的文章中的机制以及一些功能说明。--rollback 功能是一种自动解决方案,由于它不可靠而被删除。
您可以使用手动解决方案,在 yum 更新之前保留所有软件包的列表,并可能使用 --oldpackage 重新安装所需的旧 rpm,例如rpm -Uvh --oldpackage foo-1-1.i386.rpm
:
要获取所有已安装软件包的列表,按安装时间排序:
rpm -q -a --queryformat '%{INSTALLTIME} %{NAME}-%{VERSION}-%{RELEASE}\n' | sort -n
(来源)
如果您使用 Fedora,这里有一份使用安装程序升级系统的官方指南,其中包含如何创建系统当前安装的软件包列表以及如何在升级后恢复大部分旧软件的示例。
如果您想要一种通用的方法来获取已安装软件的列表(不仅基于 rpm),您也可以按照这篇文章进行操作。
如果您使用的是回购。保留所有旧版本,您只需执行“yum downgrade lighttpd”(以及较新的 yum 的“yum history undo”)。如果不是,那么您可以保留旧 rpm 的本地副本并使用“yum downgrade lighttpd*.rpm”(虽然这更棘手)。这可能无法解决某些问题,但这些问题应该非常罕见,降级不太可能改变其他任何东西作为副作用。
最近创建了一个插件“yum-plugin-fs-snapshot”,它会在升级之前自动拍摄 FS 快照(btrfs 或 LVM)……因此。然后,您可以回滚到快照。这是一个很大的变化,所以我不推荐它。
我使用etckeeper来跟踪/etc
. etckeeper 置于/etc
版本控制之下(它支持多种版本控制系统,包括 Git、Mercurial 和 Bazaar)并与许多 Linux 发行版(APT、YUM、Pacman)的包管理系统集成。
如果在升级过程中发生了不好的事情,我可以回滚任何东西。