我有一个依靠 puppet vcsrepo 根据标签更新本地 mercurial 存储库中的代码的服务器。
当我使用 vcsrepo“revision”参数更改所需标签时,vcsrepo 应该对 repo 执行 hg pull 和 hg update。
一切运行良好。
但是,我创建了该服务器的克隆来测试其他东西,现在当我运行 puppet 更新时出现错误:
Not trusting file /var/hg/repo/.hg/hgrc from untrusted user *user*, group *group*
发生这种情况的原因是 puppet 以 root 身份运行,而 hgrc 文件归用户
vcsrepo 中的用户参数应该处理这个问题:
vcsrepo { '/var/hg/repo':
ensure => present,
provider => hg,
source => 'ssh://****',
user => 'user',
owner => 'user',
group => 'group',
revision => '1.12'
}
IE
hg 命令应该运行为用户这样就满足了 mercurial 中的信任要求。
但它不起作用。克隆服务器只是对原始服务器逐个进行复制。
答案1
我明白了。
Puppet 以 root 身份运行。这意味着对于使用 mercurial 的 vcsrepo,root 用户需要信任正在更新的 repo 中拥有 .hgrc 文件的用户。
为了建立这种信任,您添加
[trusted]
user = 'user'
到 /root/.hgrc
当执行 mercurial 时,它会在 $HOME/.hgrc 中寻找信任关系。
在我现有的服务器上,puppet 代理是通过 cron 执行的,因此 cron 会将 $HOME 视为 /root/.hgrc
在克隆的服务器上,我以交互方式运行 puppet update,并使用以下命令打开 root shell:
sudo bash
但是,这会保留我的 $HOME 变量,其值与我的初始用户的值相同,因此 mercurial 无法在 /root/.hgrc 中找到所需的受信任信息
当我使用以下命令建立 root shell 时
sudo -i
已设置正确的 $HOME 变量并且 puppet 更新有效。
vcsrepo 中的 'user' 参数指的是用于向 mercurial 远程服务器进行身份验证的用户,而不是在本地服务器上运行该进程的用户。