Насктройка сервера SVN используя Apache2
Содержание
- 1 Введение
- 2 Установка програмного обеспечения и настройка
- 3 Заключение
- 4 Актуальность
Введение
Система Subversion была разработана как непосредственная открытая замена для CVS, выстроенная «с нуля», чтобы решить многие проблемы своей предшественницы. Версия 1.01 была выпущена в марте 2004-го года. Во главе списка ее отличительных особенностей – контроль версий каталогов, который не может обеспечить CVS. Это ключевой момент, поскольку Subversion позволяет вам манипулировать каталогами таким же образом, как и файлами – переносить, переименовывать, копировать и удалять. Основанная на файлах структура CVS – причина ее еще одной большой проблемы. При фиксации изменений существует вероятность потерять соединение на полпути. В случае с CVS, результатом этого станет ситуация, когда половина файлов от разработчика будет обновлена, в то время как другая половина – нет, что не оставит администратору никакой возможности разобраться, какие файлы изменялись, а какие остались старыми. Решение, которое предлагает Subversion, заключается в том, что все изменения в репозитарии выполняются «атомарно». Это означает, что все изменения вносятся как единая транзакция, исключающая «полуобновление» файлов и двойную фиксацию. Это, наряду с другими существенными добавлениями («дешевые» ветвления и тэггинг, отличная поддержка двоичных форматов), сделает обновление, вернее переход на Subversion почти обязательным для пользователей CVS уже в ближайшем будущем, если уже не сделала.
Subversion доступна для загрузки с сайта http://Subversion.tigris.org под лицензией CollabNet/Tigris.org, которая аналогична лицензии Apache; Как только вы установите эту программу, вам, скорее всего, захочется задействовать ее для использования в своем собственном проекте.
Самый простой способ запустить и настроить Subversion на отдельном ПК - это использование file:// - протокол доступа к файловой системе вашего ПК. Однако скорее всего вы хотите настроить SVN так,чтобы можно было обращаться к репозиториям по протоколу svnserve или по протоколу http:// используя вебсервер Apache и специальный модуль web-dav, позволяющий установить взаимодействие SVN и Apache.
Установка програмного обеспечения и настройка
Установка програмного обеспечения
Для настройки совместной работы Apache и Subversion вам понадобится следующий набор пакетов: apache2, apache2-doc, apache2-prefork, libapr1, libapr-util1, subversion, subversion-server .
Обновите /etc/sysconfig/apache2 для добавления dav и dav_svn модулей в $APACHE_MODULES, для этого в консоли из под супер пользователя выполните друг за другом две команды:
(su) a2enmod dav (su) a2enmod dav_svn
выполнив эти команды модули будут загружаться в дальнейшем вместе при старте вебсервера.
Настройка установленного ПО, конфигурирование
Подробнее о конфигурировании читайте в документации вашей SUSE: /usr/share/doc/packages/subversion/README.SuSE В этом файле, довольно подробно, но на английском, поясняется как создавать множество отдельных хранилищ (репозиториев) для каждого отдельного проекта или каталога файлов. Но в таком случае каждый такой репозиторий требует отдельной секции настроек в конфигурационном файле: /etc/apache2/conf.d/subversion.conf, как вы наверное уже догадываетесь, это основной файл конфигурирования репозиториев, если мы связываем их с Апачем, чем собственно мы тут и занимаемся. Отредактировать его вручную, в том случае если у вас много репозиториев и ими пользуется большое количество пользователей, представляется не очень удобным процессом. Это похоже на конфигурирование виртуальных хостов для сайтов. В общем получается что то типа виртуальных хостов для репозиториев. ====Внимание!==== Подход к конфигурированию связки в этой статье не описывает конфигурирование "виртуальных" репозиториев. Вместо этого мы конфигурируем один основной репозиторий, в котором в последующем и будут развиваться все проекты, разработку которых вы ведете или планируете вести!(однако такой подход может представлять собой в будущем некоторые проблемы безопасности, связанные с тем как и кому вы предоставляете права на работу с вашим репозиторием. ведь права создаются для пользователя и этот пользователь имеет в итоге права на все репозитории в головном репозитории, надеюсь, я понятно выразился, т.е. в этом варианте настройка прав доступа не достаточно гибка как того может захотется)
Настройка родительского хранилища (репозитория)
С помощь текстового редактора, kerite в данном случае, выполните от root команду, чтобы отредактировать файл: /etc/apache2/conf.d/subversion.conf:
(su) kwrite /etc/apache2/conf.d/subversion.conf
это откроет текстовый редактор с правами на изменения в указанном файле, приведите его к виду как показано ниже:
# Пример конфигурации для subversion репозитория # смотрите /usr/share/doc/packages/subversion для прочтения полной документации <IfModule mod_dav_svn.c> # Установить единый каталог репозиториев 'repos' # При этой конфигурации доступ на чтение репозиториев есть у всех, но при этом есть ограничения на запись в репозиторий, только пользователи которым это разрешено смогут записывать в репозиторий (commit) <Location /repos> DAV svn SVNParentPath /srv/svn/repos # Разрешить index страницу 'repos', которая будет содержать список всех существующих репозиториев SVNListParentPath On # Ограничение записи в список действительных (валидных) пользователей. <LimitExcept GET PROPFIND OPTIONS REPORT> # Требовать SSL соединение для защиты паролем. # SSLRequireSSL AuthType Basic # Message to give to the committer AuthName "Write access requires a password/для доступа на редактирование (commit) репозитория требуется пароль" # Файл с хэшами паролей и именами пользователей имеющих права на запись (commit) в репозиторий: AuthUserFile /srv/svn/user_access/svn_passwdfile Require valid-user #требование проверять валидность пользователя </LimitExcept> </Location> # Создать жесткие условия для одного каталога в 'repos' директории: # 'Secret_repo' имеет ограниченный доступ на запись, а также ограниченный доступ для чтения. <Location /repos/secret_repo> Require valid-user </Location> </IfModule>
Без директивы SVNListParentPath вы не сможите зайти на главную страницу репозиториев (index), вместо этого вы получите примерно такой ответ:
Access forbidden! You don't have permission to access the requested directory. There is either no index document or the directory is read-protected. If you think this is a server error, please contact the webmaster. Error 403
что означает, как вы наверняка догадываетесь примерно следующее:
Доступ запрещен! У вас нет разрешения на доступ к запрашиваемому каталогу. Существующий или нет индекс документа или каталог защищены от чтения. Если вы считаете, что это ошибка сервера, пожалуйста, обращайтесь к веб-мастеру. Ошибка 403.
Итак, создаем родительский каталог для хранилища:
(su) mkdir -p /srv/svn/repos
Настройка пользовательского доступа к родительскому хранилищу.
Следует заметить, что мы используем только один пользовательский пароль занесенный в файл паролей. Однако, это может быть скорректировано написанием дополнительных параметров к отдельным каталогам в секции Secret_repo файла конфигурации, который приведен выше. И.. поехали... Создать файл паролей:
(su) mkdir /srv/svn/user_access (su) touch /srv/svn/user_access/svn_passwdfile
Изменяем группы так, чтобы Апач смог получить доступ к нему (файлу паролей):
(su) chown root:www /srv/svn/user_access/svn_passwdfile
Установка прав чтения-записи на файл:
(su) chmod 640 /srv/svn/user_access/svn_passwdfile
Добавляем в файл паролей пользователя с именем "username":
(su) htpasswd2 /srv/svn/user_access/svn_passwdfile username
В консоли вас попросят ввести пароль для этого пользователя, введите его дважды. Теперь перезапустите Apache:
(su) rcapache2 restart
После того как Апач удачно перезагрузится, вы будите иметь доступ к вашему родительскому репозиторию по адресу: http://localhost/repos , но конешно в нем пока ни чего нет, кроме примерно этого: Collection of Repositories Powered by Subversion version 1.5.2 (r32768).., что и понятно, ведь мы еще ни чего не положили в репозиторий. Сейчас мы этим и займемся...
Создание репозитория для вашего проекта, например "proekt1"
Создадим директорию для нашего SVN репозитория под проект, например "proekt1" и изменим права:
(su) svnadmin create /srv/svn/repos/proekt1
Следующий шаг зависит от того какой версии у вас Subversion. Если у вас версия Subversion >= 1,5, то выполните такие команды:
chown -R wwwrun:www /srv/svn/repos/proekt1/{db,locks} chown wwwrun:www /srv/svn/repos/proekt1/
Если же у вас более старая версия, т.е. Subversion < 1,5, то выполните эту команду:
chown -R wwwrun:www /srv/svn/kdrepos/meddaliadur/{dav,db,locks}
Теперь мы с вами создали репозиторий для первого проекта: http://localhost/repos/proekt1 и название у этого репозитория соответственное: "proekt1" Но в нашем только что созданном репозитории по прежнему ничего нет, как его заполнить написано чуть ниже.
Первичный импорт в репозиторий proekt1
Импорт нового проекта: Создадим каталог: /srv/svn/repos/proekt1/files и положим туда какой нибудь простой текстовый файлик... Теперь импортируем этот каталог с файлом в репозиторий выполнив команду:
svn import /srv/svn/repos/proekt1/files http://localhost/repos/proekt1 -m "initial import"
Если вы попытаетесь импортировать в репозиторий каталог которого не существует, то вы получите сообщение примерно такого вида:
svn: PROPFIND request failed on '/repos/proekt1' svn: Could not open the requested SVN filesystem
Поэтому, пожалуйста, будьте внимательны в этот момент. Теперь если вы посмотрите в родительский репозиторий по адресу: http://localhost/repos то вы там должны увидеть ссылку на только что импортированный репозиторий проекта "proekt1" щелкнув по ссылке на этот проект, вы перейдете в репозиторий, который только что импортировали и увидите в нем тот самый файлик, который положили в директорию files. Это означает, что на данном этапе все в порядке.
Проверка рабочей копии репозитория "proekt1"
И так, вы должны помнить что технология которая описывается тут основывается по принципу "клиент-сервер" Серверную часть мы уже настроили выше. Теперь надо настроить клиентскую часть, т.е. сделать у клиента каталог для рабочей копии в которой он будет делать изменения проекта, и потом эти изменения он будет заливать на сервер в репозиторий проекта. Начнем... Переходим в локальный каталог, в котором вы будите работать над локальной копией репозитория, ее еще называют рабочей копией. Возможно это будет каталог /public_html в случае если вы занимаетесь веб разработками, а может быть и любой другой удобный для вас. для этого выполняем команду:
cd /home/USER_NAME/public_html svn checkout http://localhost/repos/proekt1
Выполнив последнюю команду вы говорите серверу: залей мне из репозитория на сервере рабочую копию для редактирования в эту директорию... и сервер должен послушно залить копию к вам в каталог. Таким образом у вас появилась актуальная копия репозитория proekt1 и будет она находится в ~/public_html/proekt1. Теперь переходим в каталог с новой рбочей копией и выполняем ряд команд:
cd /home/USER_NAME/public_html/proekt1
svn list --verbose # Обзор какие файлы были проверены
svn info # Получить краткую информацию об этой рабочей копии
cat > info.txt # Попробуйте добавить новый файл info.txt к рабочей копии
Это новый файл - newfile # Нажмите Enter, а затем Ctrl-D, чтобы написать этот текст в файле info.txt
cat info.txt # рассмотреть новый файл, или проще говоря, прочитать его из рабочей копии.
svn add info.txt # Сообщить Subversion что новый файл был создан.
Вы должны будите получить ответ такого вида:
A info.txt svn commit info.txt # Добавлен (Commit) новый файл в репозиторий proekt1 на сервере.
В этот момент svn попросит прокомментировать изменения (см. ниже) и попросит ввести пароль, в итоге вы должны будите увидеть в консоли вот это:
Adding info.txt Transmitting file data . Committed revision 2.
По умолчанию для комментирования изменения репозитоия SVN пользуется консольным редактором VI однако, если вы не знаете как им пользоваться или вам удобнее пользоваться другой программой - редактором, то вы вполне можите изменить это откорректировав соответствующим образом файл конфигурации: /home/USER_NAME/.subversion/config раскомментировав строчку
#editor-cmd = vi (что то тут)
и приведя ее к виду:
editor-cmd = kwrite
если вы предпочитает использовать графическую программу редактирования текстов Kwrite. В последующем в итоге для коментирования будет открываться ваш любимый редактор и вы сможите привычным для вас образом вписать в файл ваш комментарий.
А пока у нас стоит VI и если вы не знаете как им пользоваться то просто наберите:
:wq!
и выбирите вариант, я выбираю вариант
a
Это позволяет отказаться от редактирования в VI. теперь вводим команды:
svn commit info.txt -m "My first commit мой первый коммит (изминение репозитоия)"
Это теперь зальет вашу рабочую версию файла на сервер SVN и теперь этот фай станет доступным для других разработчиков проекта proekt1. Вот собственно и все. почти. Если вы хотите продолжить работу над проектом proekt1 и не уверены в актуаьности вашей рабочей копии, то обновите ее загрузив к себе на рабочее место актуальную версию проекта с репозитория, предварительно не забудьте в консоли перейти в какталог в котором находится рабочая копия проекта! Выполняется это простой командой:
svn update
Вот теперь все. Если у вас все получилось, значит все настроено правильно и работает, однако если что то не получается это еще не значит, что установили и настроили не правильно, вполне может быть, что вы ошибаетесь с набором команд, как собственно было у меня, по началу.
Заключение
В этой статье описано как настроить сервер SVN и связать его с вебсервером Apache. Рассказано о том как создать репозиторий и как залить в него свой проект, так же описано как изменять фйлы проекта, все это описано с применением как инструмента консоли и редактора, либо консольного VI либо вашего лбимого.ю например Kwrite. Существует множество клиентов для доступа к SVN позволяющих выполнять все выше указанные и другие команды в более привычном, графическом режиме, без привличения консоли, однако описание таких клиентов и их работы это уже другая тема.
Актуальность
Статья написана и проверена на основе OpenSUSE11.1 с графической оболочкой KDE4.2 и Subversion 1.5.2
--Stasroot1 08:53, 7 мая 2009 (UTC)