![如何在 Arch Linux 上负责任地自动运行更新?](https://linux22.com/image/38695/%E5%A6%82%E4%BD%95%E5%9C%A8%20Arch%20Linux%20%E4%B8%8A%E8%B4%9F%E8%B4%A3%E4%BB%BB%E5%9C%B0%E8%87%AA%E5%8A%A8%E8%BF%90%E8%A1%8C%E6%9B%B4%E6%96%B0%EF%BC%9F.png)
我是 Arch Linux 的新手,仍在适应它的一些范例。我从另一个发行版中继承了很多习惯,该发行版更加结构化并且在某些方面是可预测的。
我想对一些系统做的一件事是启用 cron 作业来自动更新所有系统软件包。这似乎很容易,但我还希望系统提供一些有意义的反馈,告诉我事情进展如何,但不要太冗长,以至于我最终会忽略它,直到我发现系统出现问题。
- 完整输出为
pacman
是不必要的。我不在乎下载花了多长时间,也不在乎它是在更新 53 的 46 上。 - 大多数情况下,我并不关心成功。
- 我确实关心错误。如果更新运行失败,我想了解它,并且应该修补任何特定的错误消息。
我确实关心安装过程中发出的“通知”。例如今天的 systemd 更新说:
:: coredumps are no longer sent to the journal by default. To re-enable: echo >/etc/sysctl.d/50-coredump.conf \ "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"
或者文件系统产生了这个:
warning: /etc/group installed as /etc/group.pacnew warning: /etc/passwd installed as /etc/passwd.pacnew warning: /etc/shadow installed as /etc/shadow.pacnew
最后一个类别实际上促使我提出这个问题,因为看起来这些在整个软件包集中非常不一致。其中一些似乎是由 生成的
post_upgrade()
,其他是由 生成的install()
,等等。有时它们被写入 stdout,有时写入 stderr。消息的格式差异很大:有时整个块以某种方式以缩进为前缀,其他时候只有一个裸露的回显字符串。
我想了解可能需要我对系统进行干预但又不被打扰的事情。是否有一种工具可以智能地管理这些数据并简化系统管理?有什么方法可以将软件包生成的输出与安装它们的 pacman 进程分开?或者我自己编写某种解析器来过滤掉安装日志中的良性内容?
1 在您跳过这有多么愚蠢之前,请注意,我很聪明,不会在生产服务器上执行此操作,并且如果没有基于快照的完整系统备份,可以在发生灾难时轻松恢复。
答案1
我想向您和任何其他可能遇到此问题的人澄清。你想做的是不是可能的。 Arch 毫不掩饰它期望的事实你管理您的系统。该责任的一部分是在更新周期中存在。
现在,有脚步您可以负责任地实现更新过程的自动化,但它永远不会达到自动化的-Syu
。您只需要在那里进行升级即可。
例如,您可以做的是设置一个cron
作业来下载任何需要安装的软件包(但不安装它们)。以下是pacman
文档的摘录:
SYNC OPTIONS ... -w --downloadonly Retrieve all packages from the server, but do not install/upgrade anything.
然后,您可以设置一个cron
作业来运行sudo pacman -Syuw
。我不太熟悉cron
它的调度能力。但是,如果它只能在满足特定条件(例如,命令返回特定值)后才能运行作业,那么根据需要触发新包的下载将是相当简单的。
checkupdates | wc -l
例如,我会想象对 进行检查。如果它返回任何大于零的数字,您就可以触发下载。然而,这并不能取代运行-Syu
您在场并准备好处理升级时运行 an 。
对于问题的最后一部分,即在哪里获取升级期间发生的情况的输出,您正在寻找/var/log/pacman.log
.它包括您可能感兴趣的所有错误信息。
有一个工具这是为了让pacman
不熟悉的用户更加友好。如果我没记错的话,如果有需要手动干预的更新,它还会提供有关新闻项目的通知。
从短期来看,这个工具可能会让您的生活变得更简单,但它永远无法取代明智而勤奋地遵循邮件列表。
答案2
有一个旧脚本做得非常好;它被称为安全包装。
编辑:这个脚本仍然可以在 github 上找到: https://github.com/bencahill/binfiles/blob/master/safepac
它有什么作用以及如何工作?
我通常更新 Arch 的方式是看新闻然后做
pacman -Syu
,或者只是做pacman -Syu
,如果出了什么问题,再看新闻。现在这个脚本什么也不做:它从 RSS 源获取最新的新闻条目,执行一些sed
魔法,并比较所有具有可用新闻更新的包的名称。它匹配新闻中的“package-name”和“package-name-”,如果包名称出现在新闻中的某个位置,它将忽略该包,只更新所有其他包。这样,任何可能出错的事情都将被推迟,直到有时间手动检查问题为止,而非关键更新将自动完成!通常,一旦您处理了可能不顺利的更新,您将不希望
safepac
仍然忽略某个软件包,因为它仍然在新闻中。这就是忽略列表的用途。因此,每次手动更新时,您都可以使用 将相应的新闻条目添加到忽略列表中,其中safepac -Ia xxx
xxx
是新闻条目的编号。您还可以使用该开关指定要在其解析中包含的最新新闻的数量-n
。该脚本还足够智能,可以跳过不存在的条目。如果您遇到名称非常短的软件包出现问题,这些软件包可能会任意出现在新闻中(例如“yes”),您可以将它们添加到白名单中,这样safepac -Wa
即使它们出现在新闻中,它们也将始终被安装。
请注意,您需要一个有效的邮件设置,因为此脚本还会向您发送摘要邮件(带有完整日志?)以及更新的重要部分:
解析
pacman
输出以查找这些单词并将其添加到摘要中:
“note”“pacnew”“error”“important”“warning”“exists”。
该脚本很旧,但想法很好,并且可能仍然可以在较小的更新(如果有)下使用。
答案3
我用我自己的直到yaourt
由 cron运行。