Описание настройки системы контроля версий для внутренних проектов

Материал из DvoWiki
Перейти к: навигация, поиск

Введение

В качестве системы контроля версий для внутренних проектов используется subversion. Аутентификация к subvesion происходит через WebDAV + LDAP. Здесь я опишу настроку всего этого хозяйства, а также некоторые основные операции по обслуживанию subversion.

Установка и настройка сервеной части

Для работы нам понадобятся subversion, apache и настроенный LDAP сервер. Предполагается что последний уже работает, установку же первых двух кратко опишу ниже. Сперва установим apache

echo " www-servers/apache ldap ssl" >> /etc/portage/package.use

Затем, установим subversion. Из самых необходимых для работы USE флагов пожалуй стоит отметить только apache2, остальные по желанию.

echo "dev-vcs/subversion apache2 bash-completion ctypes-python vim-syntax java" >> /etc/portage/package.use
emerge -v subversion

Эти команды установят subversion и создадут репозитарий в директории /var/svn/repos После этого необходимо настроить apache таким образом, чтобы он пробрасывал конечному пользователю репозитарии subversion. Для этого правим файл виртуального хоста. В комментариях отмечена важная информация, так что лучше читать внимательнее.

vim /etc/apache2/vhosts.d/97_svn.dvo.ru_vhost.conf
<IfDefine SVN_DVO_RU>
<IfModule ssl_module>

Listen 443

<VirtualHost *:443>
       ServerName svn.dvo.ru #всё будет доступно по адресу https://svn.dvo.ru:443/
       ServerAdmin admin_admin@dvo.ru

       CustomLog "|/usr/sbin/rotatelogs2 /var/log/apache2/svn.dvo.ru-access_log_%Y-%m-%d 604800" combined
       ErrorLog "|/usr/sbin/rotatelogs2 /var/log/apache2/svn.dvo.ru-error_log_%Y-%m-%d 604800"

       <IfModule log_config_module>
               TransferLog /var/log/apache2/ssl_access_log
       </IfModule>

       SSLEngine on
       SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

       SSLCertificateFile /etc/ssl/apache2/svndvoru.crt   #Файл сертификата. Для того чтобы все соединения проходили по защищённому каналу.
       SSLCertificateKeyFile /etc/ssl/apache2/svndvoru.key #Секретный ключ 
       <IfDefine SVN>
       <IfModule !mod_dav_svn.c>
               LoadModule dav_svn_module       modules/mod_dav_svn.so
       </IfModule>
       <IfDefine SVN_AUTHZ>
               <IfModule !mod_authz_svn.c>
                       LoadModule authz_svn_module    modules/mod_authz_svn.so
               </IfModule>
       </IfDefine>


       <ifDefine AUTHNZ_LDAP>
       <Location />
                 DAV svn
                 SVNPath /var/svn/repos  #Путь доя репозитария 
                 AuthType Basic
                 Options Indexes FollowSymLinks
                 #AllowOverride None
                 order allow,deny
                 allow from all
                 AuthName "Authorize Me"
                 AuthzSVNAccessFile /var/svn/conf/svnpolicy  #ВАЖНО!!! Это настройки доступа к различным поддиректориям репозитария
                 AuthBasicAuthoritative off
                 AuthBasicProvider ldap file
                 AuthUserFile  /var/svn/conf/svnusers # Помимо LDAP здесь можно вводить других пользователей например guest
                 AuthLDAPURL   ldap://ldap.dvo.ru/dc=dvo,dc=ru?mail??(objectclass=*)  Путь до LDAP сервера и фильтр для поиска пользователей. Сейчас это EMAIL!!!
                 AuthLDAPBindDN uid=subversion_aux_account,ou=serv_accounts,ou=users,ou=iacp,dc=dvo,dc=ru #Фиктивный пользователь, с помошью которого мы присоединяемся к LDAP
                 AuthLDAPBindPassword some_awfull_secret_password #Пароль для этого пользователя!!!
                 Require valid-user
                 SVNAutoVersioning On
                 RewriteEngine On
                 RewriteCond %{HTTPS} !on
                 RewriteRule ^/(.*) https://%{SERVER_NAME}%{REQUEST_URI} [R]
                 BrowserMatch "SVN" redirect-carefully
       </Location>
       </ifDefine>
       </ifDefine>
</VirtualHost>
</IfModule>
</IfDefine>
</IfDefine>

После этого мы должны немного поменять файл /etc/conf.d/apache2

APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D MANUAL -D SSL -D LANGUAGE -D PHP5 -D DAV -D SVN -D DAV_FS  -D SVN_AUTHZ  -D LDAP -D AUTHNZ_LDAP -D SVN_DVO_RU"

ВАЖНО !!! Как видно из настроек, нужно создать сертификат и ключ для SSL соединения. Без этого ничего работать не будет.

Теперь можно приступить к начальной конфигурации политик доступа к репозитарию. Делается это через файл /var/svn/conf/svnpolicy. Вот пример:

[/:/]  #корневая директория репозитария, дефаултного репозитария
[/]    #корневая папка
* = r  #все зарегистрировавшиеся могут читать 
guest = r  #может чичать пользователь гость, который вводится в файле svnusers
some_cool_user@dvo.ru = rw  #Пользователь который может писать. Нужен для создания подпапок. Его можно добавлять и убирать по необходимости.

Добавление нового проекта

Чтобы особо не мучатся я добавляю папку в репозиатрий. делается это следующим образом.

  1. Правится файл конфигурации /var/svn/conf/svnpolicy, и туда добавляется пользователь который может писать в корень. Смотри пример выше.
  2. Далее выполняется следующая команда.
svn mkdir https://svn.dvo.ru:443/PathToAdd -m "Create new dir"
  1. настраивается политика доступа для новой директории в файле /var/svn/conf/svnpolicy
[/PathToAdd]
some_user1@dvo.ru = rw 
some_user2@dvo.ru = rw
* = 

После этого можно посмотреть в браузере появилась ли данная диретория.