mercurial-server说:没有部分:'paths'必须作为'hg'用户运行

时间:2013-09-19 17:53:12

标签: mercurial mercurial-server

我尝试通过这个(官方)教程调整hg:http://dev.lshift.net/paul/mercurial-server/docbook.html

当我尝试:

sudo -u hg /usr/share/mercurial-server/refresh-auth

它说:

No section: 'paths'
Must be run as the 'hg' user

所以这是一个问题

UPD:

解决方法,以及安装mercurial-server的真实教程:

远程服务器上的

0) save your repos to homedir
1) <username>@<remote_server>:$ sudo apt-get purge mercurial mercurial-server
2) <username>@<remote_server>:$ sudo userdel -r hg
3) <username>@<remote_server>:$ sudo rm -r /var/lib/mercurial-server
4) <username>@<remote_server>:$ sudo rm -r /etc/mercurial-server
5) <username>@<remote_server>:$ sudo rm -r /usr/share/mercurial-server
6) <username>@<remote_server>:$ sudo apt-get install mercurial mercurial-server
7) <username>@<remote_server>:$ exit

on localhost:

8) ssh -A <remote_hg_server_domain>
远程服务器上的

9) <username>@<remote_server>:$ ssh-add -L > id_rsa.pub
10) <username>@<remote_server>:$ sudo mkdir -p /etc/mercurial-server/keys/root/<username>
11) <username>@<remote_server>:$ sudo cp my-key /etc/mercurial-server/keys/root/<username>/localhost (if you work from local terminal)
12) <username>@<remote_server>:$ sudo -u hg /usr/share/mercurial-server/refresh-auth - OOPS

我们得到了

Traceback (most recent call last):
  File "/usr/share/mercurial-server/refresh-auth", line 22, in <module>
    refreshauth.refreshAuth()
  File "/usr/share/mercurial-server/mercurialserver/refreshauth.py", line 49, in refreshAuth
    kf = open(ffn)
IOError: [Errno 13] Permission denied: '/etc/mercurial-server/keys/root/<username>/localhost'

解决:

13) <username>@<remote_server>:$ sudo chmod 644 /etc/mercurial-server/keys/root/<username>/localhost
14) <username>@<remote_server>:$ sudo -u hg /usr/share/mercurial-server/refresh-auth
15) <username>@<remote_server>:$ sudo chmod 600 /etc/mercurial-server/keys/root/<username>/localhost

效果很好

3 个答案:

答案 0 :(得分:1)

最初的问题意味着您的mercurial-server安装进入了混乱的状态。创建“hg”用户后,安装脚本会在其主目录中放置一个名为“.mercurial-server”的配置文件。这个文件以某种方式被删除了你的系统 - 也许你手动创建了“hg”用户?这就是为什么删除并重新安装所有修复的东西,因为它运行安装脚本并创建了这个文件。

第二个问题只是“hg”用户无法读取您创建的“localhost”文件。 777给予所有人写入权限 - 永远不要这样做!文件644和目录755就足够了。看起来你的“umask”设置为一个异常限制的掩码。

答案 1 :(得分:0)

Gentoo用户可能会收到同样的错误。我找到了以下有用的建议here

检查/home /home/hg,如果它不存在,您可以创建它(在root下):

mkdir /home/hg
chown -R hg:users /home/hg
chmod -R 700 /home/hg

以hg用户身份登录

sudo -s -u hg

确保您在hg的主目录中:

cd

并运行初始化脚本:

/usr/share/mercurial-server/init/hginit /usr/share/mercurial-server/

这将在/home/hg下创建必要的文件和目录,refresh-auth命令现在可以正常工作。

答案 2 :(得分:-1)

来自sudo man page

-u user     The -u (user) option causes sudo to run the specified
            command as a user other than root.

因此,如果您运行sudo -u hg,则表示“以名为hg的用户运行以下命令”。是的,that's how mercurial-server works

  

...开发人员在使用SSH ...

连接到存储库主机时以“hg”用户身份登录

不幸的是,“一步一步”说明并没有告诉您创建名为hg的用户,但这就是您需要做的事情。我不知道用户需要具有哪些权限。

或者,您可以尝试运行sudo /usr/share/mercurial-server/refresh-auth,并查看是否可以访问正确的用户it's supposed to。但是这可能会在以后破坏,因为mercurial-server的其他部分将依赖于用户hg