FastNetMon

вторник, 30 марта 2010 г.

Установка Subversion сервера на CentOS 5

Создаем репозиторий

Ставим пакеты:
yum install -y subversion


У Subversion сервера есть два типа хранилища fsfs (рекомендуется) и bdb. Если желаете их сравнить, вот ссылочка: http://svnbook.red-bean.com/en/1.1/ch05.html#svn-ch-5-sect-1.3 (по мне - почти однозначно побеждает fsfs).

Создаем папку для репозиториев:

mkdir /var/spool/svn


Создаем репозиторий:

svnadmin create /var/spool/svn/myrepo


Переходим в папку репозитория:

cd /var/spool/svn/myrepo


Созданный репозиторий имеет вот такую структуру:
conf dav db format hooks locks README.txt


Теперь нам необходимо предоставить доступ к репозиторию по сети.

Вариантов подключения к SVN репозиторию существует великое множество (аналогичный список можете просмотреть по команде svn --version):

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme


Мне более всего нравится вариант WebDAV / https (безопасность и удобная работа с сервером), его мы и будем использовать.

Ставим Apache Dav и поддержку SSL (ога, безопасность рулит всегда):
yum install -y httpd mod_dav_svn mod_ssl


Аактивируем запуск Апача при загрузке системы и запускаем его:
chkconfig httpd on
/etc/init.d/httpd start


Убеждаемся, что все необходимые модули успешно подключились к Апачу:

apachectl -M 2>&1 | grep dav
dav_module (shared)
dav_fs_module (shared)
dav_svn_module (shared)


а также проверяем, подключился ли SSL:

apachectl -M 2>&1 | grep ssl
ssl_module (shared)


Так как все операции с репозиторием теперь будут производиться от имени Apache, то необходимо его сделать владельцем файлов нашего репозитория:
chown -R apache.apache /var/spool/svn/myrepo/


Теперь необходимо показать Апачу, где находится наш репозиторий:
vi /etc/httpd/conf.d/subversion.conf


Добавляем там внизу следующее:
<Location /myrepo>
DAV svn
SVNPath /var/spool/svn/myrepo

# Require SSL connection for password protection.
SSLRequireSSL

AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /var/spool/svn/myrepo/conf/htpasswd
Require valid-user
</Location>


Создаем файл паролей с одним пользователем:

htpasswd -c /var/spool/svn/myrepo/conf/htpasswd nrg
New password:
Re-type new password:
Adding password for user nrg


Для добавления последующих пользователей используйте вот такую команду (просто ключ -c опускается):

htpasswd /var/spool/svn/myrepo/conf/htpasswd nrg2


Применяем настройки:

/etc/init.d/httpd restart


Пробуем открыть репозиторий по незащищенному соединению: http://domain.ru/myrepo и в ответ должны получить "You don't have permission to access" - это правильное поведение (в логах оно сопровождается следующими записями: "access to /var/www/html/myrepo failed, reason: SSL connection required"). После этого пробуем подключиться по httpS: https://domain.ru/myrepo и в ответ мы должны получить радостное "Revision 0: /", это повествует о том, что все рабоатет отлично и мы получили доступ к нашему репозиторию посредством WEB_DAV и SSL.

Теперь пробуем подключиться из SVN клиента:
svn co https://domain.ru/myrepo
Error validating server certificate for 'https://domain.ru:443':
....
(R)eject, accept (t)emporarily or accept (p)ermanently? p
Authentication realm: Authorization Realm
Password for 'nrg':
Checked out revision 0.

Сразу следом стоит создать папку trunk:
svn mkdir trunk
svn ci -m 'create trunk'

Вот и все — у Вас есть собственный, супер защищенный, доступный из любой точки мира SVN репозиторий!

Основано на: http://wiki.centos.org/HowTos/Subversion

4 комментария :

  1. Что если сервер работает на nginx? Что надо дописать для доступа по svn://

    ОтветитьУдалить
  2. Вопрос очень сложный, у Nginx обрезанная поддержка webdav, имхо, не будет работать subversion.

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. для доступа по svn:// не надо ничего писать так как это другой протокол (и настраивается для этого иная служба) работает он на другом порту (3690 если не ошибаюсь)

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.