Постоянно пользуюсь топиком aivus, но к сожалению его как правило не хватает.
Настройку буду проводить для mercurial-server 1.3, fedora 16. Если при попытке воспользоваться постом у вас будут ошибки, в комментариях пишите систему и суть ошибки, будем решать.
Подготовка
Самостоятельно установите и настройте
- wget
- nano
- python
- mercuial
Установка
Делать все будем под рутом, очень осторожно.
Получим исходники:
wget http://dev.lshift.net/paul/mercurial-server/mercurial-server_1.3.tar.gz tar -xf mercurial-server_1.3.tar.gz cd mercurial-server-1.3
Установим mercurial-server
python setup.py build python setup.py install
Я предпочитаю перенести все скрипты в одно место.
cp scripts*/* /var/lib/mercurial-server/
Настройка sshd
Нам нужно активировать авторизацию по публичному ключу
nano /etc/ssh/sshd_config
Раскомментируйте или добавьте строки
RSAAuthentication yes PubkeyAuthentication yes
Также сделаем единый центр хранения ключей
AuthorizedKeysFile /etc/ssh/keys/%u.pub
mkdir /etc/ssh/keys
Трансляция ключей в sshd
Все ключи пользователей mercurial-server хранятся по адресу
/etc/mercurial-server/keys/ во время запуска refresh-auth(нужно запускать при каждом добавлении пользователя), все ключи записываются в /var/lib/mercurial-server/.ssh/authorized_keys
Что бы sshd стал принимать эти ключи сделаем следующее
touch /var/lib/mercurial-server/.ssh/authorized_keys chmod 644 /var/lib/mercurial-server/.ssh/authorized_keys ln /var/lib/mercurial-server/.ssh/authorized_keys /etc/ssh/keys/hg.pub
Завершающий штрих
Это не нужно делать если вы собираетесь управлять ключами только через hgadmin!
touch /usr/bin/hg-update-users chmod 744 /usr/bin/hg-update-users nano /usr/bin/hg-update-users
chown hg -R /etc/mercurial-server/keys/ chmod 444 -R /etc/mercurial-server/keys/ sudo -u hg /var/lib/mercurial-server/refresh-auth
Проверка
Создадим ключ администратора mercurial-server(на клиенте)
ssh-keygen scp ~/.ssh/id_rsa.pub root@<b>ваш_сервер</b>:/etc/mercurial-server/keys/root/ ssh root@<b>ваш_сервер</b> 'hg-update-users'
Если вы пропустили завершающий штрих, зайдите через ssh и выполните все команды вручную.
Теперь проверим доступ:
$ ssh hg@<b>ваш_сервер</b> PTY allocation request failed on channel 0 <u>mercurial-server: direct logins on the hg account prohibited</u> Connection to <b>ваш_сервер</b> closed.
Если вы получили именно эти строки, значит sshd принимает ваши ключи, теперь попробуйте:
ssh hg@<b>ваш_сервер</b> 'hg -R hgadmin serve --stdio'
Если в течение 30 секунд вы не получили никаких ошибок, значит соединение настроено, и вы можете использовать ваш сервер.
Устранение ошибок
Для меня самой распростаренной ошибкой(из трех установок: ubuntu 10.04 server, linux mint 12, fedora 16) было следующее:
$ssh hg@<b>ваш_сервер</b> 'hg -R hgadmin serve --stdio' Traceback (most recent call last): File "/var/lib/mercurial-server/hg-ssh", line 86, in <module> dispatch.dispatch(['-R', repo, 'serve', '--stdio']) File "/usr/lib64/python2.7/site-packages/mercurial/dispatch.py", line 31, in dispatch if req.ferr: AttributeError: 'list' object has no attribute 'ferr'
Решение этой проблемы можно найти stackoverflow.com/questions/6730735/troubles-with-mercurial-1-9-and-ssh
Особо ленивые могут воспользоваться патчем (patch hg-ssh patch_file):
--- hg-ssh_old 2012-12-27 00:49:04.764989364 +0300 +++ hg-ssh 2012-12-27 00:50:16.173113572 +0300 @@ -83,7 +83,7 @@ repo = getrepo("read", cmd[6:-14]) if not os.path.isdir(repo + "/.hg"): fail("no such repository %s" % repo) - dispatch.dispatch(['-R', repo, 'serve', '--stdio']) + dispatch.dispatch(dispatch.request(['-R', repo, 'serve', '--stdio'])) elif cmd.startswith('hg init '): repo = getrepo("init", cmd[8:]) if os.path.exists(repo): @@ -91,7 +91,7 @@ d = os.path.dirname(repo) if d != "" and not os.path.isdir(d): os.makedirs(d) - dispatch.dispatch(['init', repo]) + dispatch.dispatch(dispatch.request(['init', repo])) else: fail("illegal command %r" % cmd)
ссылка на оригинал статьи http://habrahabr.ru/post/164095/
Добавить комментарий