FastNetMon

Tuesday, 30 March 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 comments :

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

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

    ReplyDelete
  3. This comment has been removed by the author.

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

    ReplyDelete

Note: only a member of this blog may post a comment.