Доступ к репозиторию 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.Писалось всё по памяти, без экспериментов в реальном времени — надеюсь, что ошибок не допустил, вроде всё просто довольно. ;-)
Речь, естественно, не про рабочую копию — её у репозитория нету
Comments
а у меня что-то под mac os x не выходит раздача репозитория через web — картинки не показываются, файлы в changeset’ах тоже, ну и клоне на него не могу сделать — выдает 500 конфигурация стандартная — из вики, ничего понять не могу
Хмм… Это через апач? А просто hg serve работает же?
Comment form for «Доступ к репозиторию hg через ssh»