Установка и настройка Subversion 1.6 на CentOS 5

Subversion или другими словами – система контроля (управления) версиями. Думаю, что многим разработчикам это знакомо. Практически любая разработка программного обеспечения или даже сайта не обходится без этой системы. Вы ещё не используете системы контроля версиями? То пора эта начать, даже если вы единственный разработчик.

Я не буду рассказывать все преимущества таких систем как Subversion, но лишь скажу, что это позволит вам всегда видеть и контролировать процесс разработки и в нужный момент вернуться к какому-либо участку кода.

Многим Subversion не нравится за счет ее централизованной структуры и, порой, возникающими странным ситуациям. Но могу вас заверить, что многие проблемы появляются либо из-за самих разработчиков, либо из-за использования различных версий этого программного обеспечения. Поэтому в этой статье я хотел бы рассказать, как установить и настроить последнюю версию сервера Subversion.

Subversion очень хорошо привязывается к веб-серверу Apache и работает через протокол HTTP. Это позволяет без особых затруднений внедрить контроль версий в существующий сервер.

Установка Subversion

Первое, что мы сделаем – это  проверим, какая актуальная версия приложения есть в репозитории.

yum list available | grep subversion
subversion.i386                             1.6.11-7.el5_6.3             updates
subversion.x86_64                           1.6.11-7.el5_6.3             updates
subversion-devel.i386                       1.6.11-7.el5_6.3             updates
subversion-devel.x86_64                     1.6.11-7.el5_6.3             updates
subversion-javahl.x86_64                    1.6.11-7.el5_6.3             updates
subversion-perl.x86_64                      1.6.11-7.el5_6.3             updates
subversion-ruby.x86_64                      1.6.11-7.el5_6.3             updates

Если у вас в репозитории версия 1.6, то следующий шаг можно пропустить. Если же, например, версия 1.5 или 1.4, то проделаем некоторые дополнительные шаги.

Добавим репозиторий RPMforge for CentOS 5. Скачиваем rpm пакет для вашей версии системы. i386 для 32 битных систем или x86_64 для 64 битных систем. Скачать можно через обычный wget.

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

Добавим ключ DAG’s GPG

rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

И установим пакет

rpm -i rpmforge-release-0.5.2-2.el5.rf.*.rpm

Дальше откроем файл «/etc/yum.repos.d/rpmforge.repo» и сменим везде в нем параметр «enabled=1» на «enabled=0». Это необходимо, что бы пакеты по умолчанию не ставились из этого репозитория.
Теперь ещё раз поищем пакет Subversion в новом репозитории.

yum --enablerepo=rpmforge list available | grep subversion

Если и в этом репозитории не нашлось нужного пакета, то попробуйте использовать репозиторий rpmforge-extras. В нем обязательна должна быть последняя версия.

yum --enablerepo=rpmforge-extras list available | grep subversion
subversion.i386                            1.6.11-7.el5_6.3             updates
subversion.x86_64                          1.6.15-0.1.el5.rfx           rpmforge-extras
subversion-devel.i386                      1.6.11-7.el5_6.3             updates
subversion-devel.x86_64                    1.6.15-0.1.el5.rfx           rpmforge-extras
subversion-javahl.x86_64                   1.6.15-0.1.el5.rfx           rpmforge-extras
subversion-perl.x86_64                     1.6.15-0.1.el5.rfx           rpmforge-extras
subversion-ruby.x86_64                     1.6.15-0.1.el5.rfx           rpmforge-extras

Теперь перейдем непосредственно к установке клиента и необходимых дополнений для Apache.

yum --enablerepo=rpmforge-extras install subversion

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

svn --version
svn, version 1.6.15 (r1038135)

Настройка Apache для работы с репозиториями Subversion

Установим необходимый модуль для работы с Subversion. Он называется mod_dav_svn. Его также можно взять из репозитория rpmforge или rpmforge-extras. Все зависит от того, какую версия Subversion вы поставили.

yum --enablerepo=rpmforge-extras install mod_dav_svn

После этого проверяем файл «/etc/httpd/conf.d/subversion.conf» в нем должны быть прописаны следующие строки

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

Теперь перезапускаем Apache

service httpd restart

Сделаю небольшое отступление. На виртуальной машине, на которой я все тестирую, для написания статей у меня загружены все модули Apache. На продакшен сервере у меня отключено большинство модулей. Поэтому не забывайте, что для Subversion необходимо не только 2 модуля описанные выше, но и некоторые другие, например, как «auth_basic_module», «authn_file_module», «authz_host_module», «dav_module», «dav_fs_module».

На всякий случай ниже приведу мой список обязательно загружаемых модулей.

# Dynamic Shared Object (DSO) Support
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

В своей практике я стараюсь выносить репозитории SVN на отдельный виртуальный хост. Поэтому конфигурация доступа к репозиторию у меня прописывается в настройках вирутального хоста. Мне так удобнее. Вы же можете настроить доступ к репозиторию в файле «/etc/httpd/conf.d/subversion.conf». Там есть готовый пример. Я же выложу мой пример конфигурации.

<VirtualHost *>
 ServerAdmin admin@vexell.ru
 ServerName repos.vexell.ru
 <Location "/">
  DAV svn
  SVNParentPath /var/www/svn/
  AuthType Basic
  AuthzSVNAccessFile /etc/httpd/svn-acl.conf
  AuthName "Authorization"
  AuthUserFile /etc/httpd/svn-users.conf
  Require valid-user
 </Location>
</VirtualHost>

Здесь параметр «AuthUserFile /etc/httpd/svn-users.conf» отвечает за список пользователей, а параметр «AuthzSVNAccessFile /etc/httpd/svn-acl.conf» дает доступ разным пользователям к разным репозиториям, а также права на чтение или запись. Вам необходимо будет создать эти файлы. Параметр «SVNParentPath /var/www/svn/» указывает, где будут находится ваши репозитории.

Создадим два новых пользователя «test1» и «test2».

htpasswd -m /etc/httpd/svn-users.conf test1
New password:
Re-type new password:
Adding password for user test1

htpasswd -m /etc/httpd/svn-users.conf test2
New password:
Re-type new password:
Adding password for user test2

Создание SVN репозитория

Теперь создадим директорию, где будут находится наши репозитории (это мы указали выше в конфигурации).

cd /var/www/
mkdir svn

Дальше создадим 2 репозитория.

cd svn
svnadmin create repo1
svnadmin create repo2

И дадим права на директорию apache, и перезапустим веб-сервер.

chown -R apache:apache repo1/
chown -R apache:apache repo2/
chmod -R 775 repo1
chmod -R 775 repo2
service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

Настройка доступа к репозиториям SVN

Теперь дадим пользователю «test1» доступ только к первому репозиторию на чтение и запись. А пользователю «test2» ко второму репозиторию, а к первому репозиторию только доступ на чтение. Откроем файл «/etc/httpd/svn-acl.conf» и внесем следующие правки.

[repo1:/]
test1 = rw
test2 = r

[repo2:/]
test2 = rw

Структура доступа, как вы поняли, имеет следующий формат

[reponame:repopath]
user = access

Так же вы можете создавать группы пользователей, чтобы не перечислять всех пользователей, кто имеет доступ к репозиторию.

[groups]
staff = joe, george

[framework:/]
john =  r
@staff = rw

Работа с репозиториями

Для тестирования наших репозиториев воспользуемся приложением TortoiseSVN (для Windows). Сделаем SVN Checkout, что бы синхронизировать репозиорий.

Теперь создадим первый наш файл и добавим его в репозиторий.

Первый файл был создан для примера, что все успешно работает. Для реальных проектов советую изучить стуктуру хранилищ для SVN и всегда пользоваться директориями trunk, branches и tags.

Более подробно по работе с SVN репозиториями вы можете почитать  вот в этой книге http://tortoisesvn.net/docs/release/TortoiseSVN_ru/index.html

Дополнительная, справочная информация