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


15

我是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进程分开吗?还是我自己编写一种解析器,以从安装日志中过滤掉良性内容?

¹在您跳到多么愚蠢的状态之前,请注意,我足够聪明,不会在生产服务器上执行此操作,并且也不会没有基于快照的完整系统备份,如果发生灾难,恢复将很容易。


我要做的第一件事是yaourt从您的问题和概念模型中都删除该标签:尝试使用官方回购协议将非常困难,将来自AUR的随机软件包添加到组合中将使其变得不透明...
jasonwryan

哦,这不是一个愚蠢的主意。但这非常不利于Arch的工作方式。每天使用checkupdates-Syu唱歌一次是很琐碎的任务。我看不出您的提案需要做的所有工作有任何实际好处。
jasonwryan 2014年

@jasonwryan我打算在此基础上进行扩展,但实际上我确实有一些AUR软件包,我希望将它们放在同一工作流程中。我目前广泛使用yaourt,非常想念没有包管理操作的空运行支持的事实!:/
Caleb 2014年

2
Arch的DNA使您的手变得肮脏:这不是它打算运行的方式;您可能会到达那里,但是这将是Pyrrhic的胜利,并且,如果在此处记录,则将带领很多新手进入悬崖边缘,而他们完全没有做好准备……
jasonwryan

2
去年我花了一段时间尝试得出的结论是,在不定期终止系统的情况下进行升级的唯一方法是构建新映像(这似乎是基本测试点,并且在Arch中更可靠),然后通过配置移植服务管理工具。也许更新已经稳定下来,但是在6个月内有3-4个更新将使系统无需人工干预。
马特

Answers:


11

对于您和可能在此线程上发生的任何其他人,我都想清楚。你想要做的是不是可能。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并准备好进行升级时运行。

对于问题的最后一部分,您正在寻找哪里可以获取升级过程中发生的情况的输出/var/log/pacman.log。它包含您可能感兴趣的所有错误信息。


一种工具可以使pacman不熟悉的用户更加友好。如果我没有记错的话,如果应该进行更新以要求人工干预,它还会提供有关新闻项目的通知。

该工具可能会使您的生活在短期内变得简单一些,但它永远不会替代明智而勤奋地遵循邮件列表。


2
实际上,有关需要人工干预的官方软件包的通知,我建议您遵循arch-dev-publicarch-general
HalosGhost

另外,@ jasonwryan是完全正确的。这样做pacman是可能的。这样做yaourt是不可行的。
HalosGhost 2014年

yaourt实际上,它的工作要比[b]略好pacman,但是,正如我认为您的意思那样,从长远来看,它的默认配置几乎比aur helper 稍差一点。但是,它是非常可配置的,可以非常有效地维护源树。两者yaourt和反正pacman只包装alpm
mikeserv

或者,我想说yaourt包装pacman和一些附加alpm功能以及pacman包装是更真实的alpm。无论如何,yaourtextends pacman
mikeserv

如前所述这里-Syuw是潜在的相当危险的。如果不应用更新,则它可以产生部分更新,并且以后会安装软件-S
Sparhawk

1

有一个旧脚本可以很好地完成工作;它称为safepac

编辑:此脚本仍可在github上的此处:https : //github.com/bencahill/binfiles/blob/master/safepac

它是做什么的,它是如何工作的?

我通常更新Arch的方式是先阅读新闻,然后再做pacman -Syu,或者只是做pacman -Syu,如果出现任何问题,请阅读新闻。现在,此脚本不执行其他任何操作:它从RSS提要中获取最新新闻条目,进行一些sed魔术操作,并比较具有可用于新闻的更新的所有程序包的名称。它在新闻中匹配“ package-name”和“ package-name-”,并且如果软件包名称出现在新闻中的某个位置,它将忽略该软件包并仅更新所有其他软件包。这样,任何可能出错的问题都将被推迟到有时间手动检查此问题的同时,非关键的更新将自动完成!

通常,一旦您完成了可能不顺利的更新,就不会希望safepac仍然忽略某个程序包,因为它仍然是新闻。这就是忽略列表的作用。因此,每次手动更新时,您都可以使用来将相应的新闻条目添加到忽略列表,其中是新闻条目的编号。您还可以指定要用交换机解析的最新新闻的数量。该脚本也足够聪明,可以跳过不存在的条目。如果遇到名称可能非常短而可能在新闻中任意出现的软件包的问题(例如“是”),则可以将它们添加到白名单中,以便即使它们出现在新闻中也将始终安装它们。safepac -Ia xxxxxx-nsafepac -Wa

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

解析pacman输出以查找这些词并将其添加到摘要中:
“注释”“ pacnew”“错误”“重要”“警告”“存在”。

该脚本很旧,但是构想很好,并且可能仍可以进行较小的更新(如果有)。


一个可能的问题是新闻中没有告知重大(或重大)更新,但您必须自己进行跟踪。
举个例子

不过,您仍然可以使用checkupdates(pacman-utils)并获取软件包列表,然后将其远程白名单,如果您有一个池,这很好,但是也许最好设置一个本地存储库
Lesto 18'29

-2

我自己动手yaourtcron。


1
Yaourt 实际上已经死了:这是一个非常糟糕的主意。
jasonwryan

yaourt自己使用了很多年。它是一个很好的工具,但是它为“包装”而构建的东西已经改变了形状,并且它现在做的一些事情都非常错误。在这一点上,问题非常严重,以至于该工具的作者都说,即使他们自己不再使用它。如果您需要AUR助手,建议您尝试一种主动维护的助手。我转身对yay自己很高兴。
卡列布

该实用程序也适用yay于我。
vadzim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.