我一次又一次地想知道为什么没有(或者我只是没有找到?)任何工具可以可靠且轻松地回滚更新所做的更改。让我以 Debian 上的 apt 更新为例。有这个新包,还有它的依赖项。每个包都有一个将要创建/修改/删除的文件列表。此外,其他文件可能会被配置脚本修改。
我对这个主题的研究发现 strace 可能是最佳解决方案。使用 strace 可以监视单个进程(假设是 apt-get)的系统调用,并且可以过滤掉与我要查找的内容相关的系统调用。
有了这个列表,就有可能使用单个命令可靠地回滚更新。也许甚至可以向修改后的 strace 可执行文件添加某种钩子,以在修改每个文件之前触发备份。
我的假设正确吗?如果正确,是否存在这样的工具?
答案1
软件包不一定存在于真空中 - 以更新数据库软件包为例,并在启动时将其数据文件转换为新格式。在软件包升级过程中不会捕获此信息。
您会发现最一致的回滚方法是对整个系统进行快照和回滚(捕捉虚拟机或具有快照功能的文件系统),但即使这样也并非万无一失 - 一个系统上的软件包更新可能会影响网络上的其他节点。