ansible角色:为什么我必须在etckeeper中设置user.email?

ansible角色:为什么我必须在etckeeper中设置user.email?

我写自动化安装的可靠角色etckeeper

我发现如果我没有配置 user.email,git 会抱怨。在某些情况下,git 提交会失败。这包括在安装软件包时自动提交到 etckeeper,可能会导致安装失败。所以我必须为此添加一个任务,比如其他人都这样做:)

令人沮丧的是,在某些情况下,它似乎工作正常。而且手动使用etckeeper时似乎也没有问题。 user.email中从未提及教程

真的有必要设置user.emailAnsible 角色吗?如果是的话……一定有一些故意造成这种情况的原因。一些解释,我可以将其放入角色的评论中,或者可以证明对 etckeeper 或 git 进行补丁的合理性?

答案1

更新:应该在下一个版本(1.18.8)中修复。

https://etckeeper.branchable.com/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances/


在遇到这个问题几次之后,我觉得我需要查看源代码。

  1. git 的提交绝对需要一个“电子邮件地址”。如果没有,它将拒绝做出承诺。
  2. 如果系统主机名可以解析为完全限定域名,git 将“自动检测”电子邮件。 (您必须至少拥有一个.才有资格:)。或者,如果/etc/mailname存在,它会优先使用它,而不检查.s。
  3. etckeeper 尝试将由用户名和系统主机名构成的电子邮件地址传递给 git。 git 将接受此类明确指定的电子邮件,即使主机部分不是 FQDN。如果sudo使用,etckeeper 将使用环境中的 SUDO_USER。如果su使用的话,环境中没有任何东西,因此etckeeper从该用户的所有者那里读取用户终端

因此,当我没有设置且我的主机名未解析为 FQDN时,git commit失败了。etckeeper vcs commituser.email

etckeeper commit在某些情况下不起作用git commit。我相信我之前测试时(除其他外)对这两者感到困惑。

如果你etckeeper从运行sudo,它就不会失败。如果你从 运行它su,它不会失败。如果您以 root 身份登录并运行它,它也不会失败;它将找到 root 拥有的 tty,并传递 的电子邮件root@HOSTNAME

etckeeper commit将会失败当且仅当

  1. user.email未设置于git, AND
  2. 系统主机名无法解析为 FQDN,并且
  3. /etc/mailname 不存在(它是由 Debian exim 软件包创建的?)并且
  4. etckeeper 不是从 sudo 运行并且
  5. etckeeper 不是从 tty 运行的

最后,测试表明在 ansible 下运行的命令永远不会从 tty 运行。 (即使使用ssh连接和sudo密码,ansible 被描述为需要使用伪tty)。

相关内容