如何在 Arch Linux 上负责任地自动运行更新?

如何在 Arch Linux 上负责任地自动运行更新?

我是 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 xxxxxx是新闻条目的编号。您还可以使用该开关指定要在其解析中包含的最新新闻的数量-n。该脚本还足够智能,可以跳过不存在的条目。如果您遇到名称非常短的软件包出现问题,这些软件包可能会任意出现在新闻中(例如“yes”),您可以将它们添加到白名单中,这样safepac -Wa即使它们出现在新闻中,它们也将始终被安装。

请注意,您需要一个有效的邮件设置,因为此脚本还会向您发送摘要邮件(带有完整日志?)以及更新的重要部分:

解析pacman输出以查找这些单词并将其添加到摘要中:
“note”“pacnew”“error”“important”“warning”“exists”。

该脚本很旧,但想法很好,并且可能仍然可以在较小的更新(如果有)下使用。

答案3

我用我自己的直到yaourt由 cron运行。

相关内容