![ansible角色:为什么我必须在etckeeper中设置user.email?](https://linux22.com/image/112751/ansible%E8%A7%92%E8%89%B2%EF%BC%9A%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E5%BF%85%E9%A1%BB%E5%9C%A8etckeeper%E4%B8%AD%E8%AE%BE%E7%BD%AEuser.email%EF%BC%9F.png)
答案1
更新:应该在下一个版本(1.18.8)中修复。
在遇到这个问题几次之后,我觉得我需要查看源代码。
- git 的提交绝对需要一个“电子邮件地址”。如果没有,它将拒绝做出承诺。
- 如果系统主机名可以解析为完全限定域名,git 将“自动检测”电子邮件。 (您必须至少拥有一个
.
才有资格:)。或者,如果/etc/mailname
存在,它会优先使用它,而不检查.
s。 - etckeeper 尝试将由用户名和系统主机名构成的电子邮件地址传递给 git。 git 将接受此类明确指定的电子邮件,即使主机部分不是 FQDN。如果
sudo
使用,etckeeper 将使用环境中的 SUDO_USER。如果su
使用的话,环境中没有任何东西,因此etckeeper从该用户的所有者那里读取用户终端。
因此,当我没有设置且我的主机名未解析为 FQDN时,git commit
失败了。etckeeper vcs commit
user.email
etckeeper commit
在某些情况下不起作用git commit
。我相信我之前测试时(除其他外)对这两者感到困惑。
如果你etckeeper
从运行sudo
,它就不会失败。如果你从 运行它su
,它不会失败。如果您以 root 身份登录并运行它,它也不会失败;它将找到 root 拥有的 tty,并传递 的电子邮件root@HOSTNAME
。
etckeeper commit
将会失败当且仅当
user.email
未设置于git
, AND- 系统主机名无法解析为 FQDN,并且
- /etc/mailname 不存在(它是由 Debian exim 软件包创建的?)并且
- etckeeper 不是从 sudo 运行并且
- etckeeper 不是从 tty 运行的
最后,测试表明在 ansible 下运行的命令永远不会从 tty 运行。 (即使使用ssh
连接和sudo
密码,ansible 被描述为需要使用伪tty)。