From: Mike Belopuhov <mkb@cvs.hnet.spb.ru.>
Date: Mon, 2 May 2005 18:21:07 +0000 (UTC)
Subject: Создание CVS сервера на OpenBSD
Оригинал: http://openbsd.hnet.spb.ru/cvs.html
CVS на OpenBSD
Содержание:
* Начало
* Web-интерфейс к CVS репозитарию
* Доступ к CVS репозиторию из chroot'а
* CVS сервер своими руками
Начало
Для начала определимся с переменной окружени $CVSROOT. Это может быть
как /home/cvs, /var/cvs, /cvsroot или что Вам больше нравится. (Хотя,
должен отметить, что в большинстве случаев /cvsroot это плохая идея,
если это только не монтируемая файловая система.)
# export CVSROOT=/home/cvs
# mkdir -p $CVSROOT
Далее необходимо определиться с правами на запись в репозиторий. Я
предлагаю это сделать с помощью дополнительной группы cvs, в которую,
при необходимости, можно будет добавить пользователя. Создадим группу
`cvs' и дадим членство в ней пользователю `some_user':
Сменим группу владельца /home/cvs и дадим права на запись для группы:
# chgrp cvs /home/cvs
# chmod 775 /home/cvs
Теперь проинициализируем наш CVSROOT. Это необходимо для размещения
там служебных данных CVS:
$ cvs init
Далее необходимо импортировать дерево проекта, который Вы хотели бы
хранить в CVS:
$ cd some_project
$ cvs import some_project R1_0 V1_0
$ cd ..
$ cvs checkout some_project
C этого момента можно использовать CVS как обычно.
Web-интерфейс к CVS репозитарию
Установим web-интерфейс к CVS, cvsweb (/usr/ports/devel/cvsweb). Он
используется для реализации возможности просматривать изменения в
дереве проекта удаленно при помощи web-броузера. Необходимо
отредактировать конфигурационный файл cvsweb.conf
(/var/www/conf/cvsweb/cvsweb.conf), указав доступные репозитории:
можете также указать необходимость запуска Apache при загрузке
системы, для этого необходимо отредактировать /etc/rc.conf.local,
добавив строку:
httpd_flags="-u"
К сожалению мы вынуждены понижать безопасность системы, отказываясь от
"chrooted Apache", однако нам больше никак не получить доступ к
интерпретатору perl (на нем написан cvsweb), а так же к нашему CVS
репозиторию.
Теперь, набрав в броузере http://localhost/cgi-bin/cvsweb, Вы увидите
доступные проекты.
Доступ к CVS репозиторию из chroot'а
Для начала нам потребуется поддержка NULLFS в ядре (прим.: начиная с
3.4 поддержка NULLFS есть в GENERIC). Конфиг ядра должен содержать
строчку:
Теперь доступ к CVS у вас есть из /var/www. Права доступа на точку
монтирования выставляются в соответствии с оригиналом (/home/cvs в
нашем случае).
А теперь самое интересное. Доступ к репозиторию мы получили, но cvsweb
ведь написан на perl, а его (perl'а) у нас нету в /var/www. Вот тут
появляется три варианта. Первый -- населить /var/www библиотеками,
устройствами, программами и прочим.
Второй -- переписать (или найти в сети) cvsweb на C и собрать его
статически. И третий -- установить и использовать mod_perl.
Второй вариант мне нравится больше, но он имеет смысл только в том
случае, если у Вас больше нет CGI программ, требующих что-либо вне
chroot'а. В любом случае решайте сами.
CVS сервер своими руками
Делать обмен файлов с сервером мы будем посредством SSH протокола.
Делается это весьма просто. Добавляете нужных пользователей в ранее
созданную группу cvs.
Вниманее! Ранее было написано, что пользовательская учетная запись
коммитера в CVS дерево может не содержать указания на домашнюю
директорию и на командный интерпретатор по умолчанию. Это не правда.
Директория и шелл должны быть. Если с директорией все более-менее
понятно, то shell довать бы не хотелось. И не надо. Используйте CVS
Restricted Shell cvsrsh (http://openbsd.hnet.spb.ru/files/cvsrsh.tgz)
или аналогичные решения.
Такая запись вполне подходит (в данном случае GID(cvs) = 1002):
Следующий шаг это собственно решить на каком порту будет работать SSH
сервер. Часто выбирают порт 2022, но можно пользоваться и стандартным
портом 22. Если Вы хотите оставить SSH порт по умчанию, то вся
настройка закончена, если у Вас, естественно, работает SSH сервер.
Отредактируйте /etc/rc.conf.local, добавив загрузку SSH демона при
загрузке системы:
sshd_flags=""
Проверить работоспособность можно так:
$ CVSROOT=mkb@localhost:/home/cvs cvs co some_project
mkb@localhost's password:
U some_project/some_file
[and so on...]
Если Вы решили делать на 2022 порту, то тоже ничего сложного нет. В
/etc/sshd/config добавим:
ListenAddress 0.0.0.0:2022
Клиенты тоже должны сделать кое-что, а именно записать себе в
~/.ssh/config следующее:
Host your_server
Port 2022
Protocol 2
Compression yes
Только опция ``Port'' здесь является необходимой. Также может
понадобится установить переменную окружения $CVS_RSH: