我有一个服务器,依靠puppet vcsrepo来更新本地mercurial仓库中的代码基于标签。
当我更改所需的标签时,使用vcsrepo“revision”参数,vcsrepo应该在repo上执行hg pull和hg update。
这一切工作正常。
不过,我已经创build了这个服务器的一个克隆来testing其他的东西,现在当我运行木偶更新时,我得到一个错误:
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' }
即
hg命令应该以用户身份运行,以便满足mercurial中的Trust要求。
但它不工作。 克隆服务器有点复制原来的位。
我明白了这一点。
木偶作为根运行。 这意味着对于使用mercurial的vcsrepo,root用户需要信任正在更新的repo中拥有.hgrc文件的用户。
为了build立这种信任,你添加
[trusted] user = 'user'
到/root/.hgrc
当执行mercurial时,它的外观在$ HOME / .hgrc中用于信任关系。
在我现有的服务器上,puppet代理正在用cron执行,所以cron会把$ HOME看作/root/.hgrc
在克隆的服务器上,我以交互方式运行puppet更新,已经打开了一个root shell
sudo bash
但是,这保留了我的$ HOMEvariables与我的初始用户具有相同的值,所以mercurial在/root/.hgrc中找不到所需的受信任信息
当我build立一个根shell
sudo -i
正确的$ HOMEvariables被设置并且木偶更新工作。
vcsrepo中的'user'参数是指用于validationmercurial远程服务器的用户,而不是在本地服务器上运行进程的用户。