About Blog Dev | Alfa Romeo SZ Conkeror wishlist

Доступ к репозиторию hg через ssh

Довольно долго для расшаривания репозиториев меркуриала мне хватало обычного доступа по HTTP: легко настроить (дал права пользователю веб-сервера — www-data, и всё), просмотреть, работает всё чётко и без запинки. Но в конце-концов достало меня раз за разом набирать пароль для заливания своих изменений в репозиторий, а так как единственным альтернативным вариантом при доступе через HTTP является запись пароля открытым текстом в hgrc локального репозитория, я решил поиграться с доступом по ssh.

Вообще доступ по ssh — тоже достаточно простая задача, если бы мне не хотелось оставить возможным для записи доступ по HTTP: получается, что мне нужно получить систему, при которой и я, и веб-сервер будем создавать файлы, в которые способен записывать каждый из нас.

Экшен!

Первым делом, конечно, пошёл в дело chmod:

find /path/to/repo -type d -exec chmod g+s {} \;

Теперь у всех новых файликов, создаваемых в репозитории1, группой-владельцем оказывается группа www-data, куда вхожу и я, и которой принадлежит репозиторий. Остаётся одна загвоздка — было бы хорошо, чтоб на эти новые файлы (на старых, естественно, такие права уже стоят) стояли права записи для группы.

Это достигается установлением umask 002 (777 — 002 = 775, что нам и нужно), который приносит маленькую проблему — кому хочется такое иметь по умолчанию для своего пользователя? Поэтому рисуется (за реализацию спасибо уходит Мартину в Уругвай — не знаю уж, как поставить на него ссылку и где он нашёл его — или сам придумал?) совсем маленький, но очень удаленький плагин для меркуриала:

import os
os.umask(0002)

И подключается, как обычно, в ~/.hgrc (того пользователя, под которым будет проходить соединение с сервером!):

[extensions]
sharedmask = ~/sharedmask.py

И всё, после этого можно пушить без опасений, что потом www-клиенты не смогут этого сделать. Естественно, чтоб пароль не просило, надо настроить логин по ключу — но это описано миллионы раз в интернетах, так что там и спросить можно. ;)

Шаг за шагом

Для тех, кому хочется поподробнее, ниже следует просто список команд (естественно, /path/to/repo и прочие штуки должны заменяться на адекватный аналог у вас ;). Считается, что это Дебиан (или его грязные копии ;)) — т.е. пользователем и группой HTTP-сервера является www-data, и ваш пользователь уже находится в этой группе.

$ chown -R www-data:www-data /path/to/repo
$ chmod -R u=rwX,g=rwX,o=rX /path/to/repo
$ find /path/to/repo -type d -exec chmod g+s {} \;
$ cat > ~/sharedmask.py << EOF
import os
os.umask(0002)
EOF
$ Вот здесь подключение sharedmask.py в ~/.hgrc
$ ln -s /path/to/repo ~/repo

Последняя строка чисто для сокращения пути, если репозиторий лежит не в домашней директории, как это сделано у меня. И, естественно, здесь не затронут вопрос подключения репозитория в веб-интерфейс.

P.S.Писалось всё по памяти, без экспериментов в реальном времени — надеюсь, что ошибок не допустил, вроде всё просто довольно. ;-)

1

Речь, естественно, не про рабочую копию — её у репозитория нету

Add post to: Delicious Reddit Slashdot Digg Technorati Google
Comment

Comments

alexott-ru 21.05.2008 14:49

а у меня что-то под mac os x не выходит раздача репозитория через web — картинки не показываются, файлы в changeset’ах тоже, ну и клоне на него не могу сделать — выдает 500 конфигурация стандартная — из вики, ничего понять не могу

reply
Александр Соловьёв 21.05.2008 15:34

Хмм… Это через апач? А просто hg serve работает же?

reply

Comment form for «Доступ к репозиторию hg через ssh»

Required. 30 chars of fewer.

Required.