Окт
01
2009

Установка и настройка svn сервера под linux

Сегодня настроил svn сервер на своём компе, т.е. под Linux Debian Lenny 5 64bit. И ниже расскажу весь процесс попорядку.

Подразумевается, что у вас уже установлен и настроен веб-сервер apache. Один из примеров установки и настройки можно посмотреть тут.

Нам потребуется установить svn сервер.

sudo apt-get install subversion libapache2-svn

Поясню:

  • subversion – svn сервер
  • libapache2-svn – библиотека, которая добавляет модуль апача для его интеграции с svn

И на всякий случай уточню, что sudo означает, что команда запускается с права root’а. Вы можете в консоли предвариетльно просто написать su, ввести пароль и потом выполнять эту и последующие аналогичные команды без приставки sudo.

Теперь добавляем нового пользователя и группу SVN

sudo groupadd svn

sudo useradd -m -d /srv/svn/ -g svn svn

Тут первой строкой мы создали группу svn. А второй строкой мы создали пользователя svn и сразу добавили его в группу svn. Поясню про флаги команды useradd:

  • -m -d /srv/svn – автоматическое создание домашнего каталога (флаг -m) и установка этого каталога как базового (-d) . В эту папку мы позже положим конфиги svn и репозитории так же будем тут размещать.
  • -g svn- добавить нового пользователя в группу svn
  • svn – имя пользователя

su – svn

mkdir /srv/svn/repositories/

mkdir /srv/svn/repositories/firstproject/

svnadmin create /srv/svn/repositories/firstproject/

Первой строкой мы перелогинились под пользователя svn. Затем создаём папку  repositories. В этой папке будут храниться наши репозитории. Далее создали папку для нашего первого проекта. И наконец командой svnadmin create /srv/svn/repositories/firstproject/ мы создаём новый пустой репозиторий для нашего проекта по указанному пути.

Теперь создаём конфиги для нашего SVN сервера.

su – svn

mkdir /srv/svn/conf/
cd /srv/svn/conf/
touch apache.conf

touch users-access-file

При помощи команды touch мы просто создаём новый пустой файл.

Теперь содержимое этих файлов:

/srv/svn/conf/apache.conf

<Location /svn/>

Allow from all

DAV svn

SVNParentPath /srv/svn/repositories/

# our access control policy

AuthzSVNAccessFile /srv/svn/conf/users-access-file

#try anonymous access first, resort to real

#authentication if necessary.

Satisfy Any

Require valid-user

# how to authenticate a user

AuthType Basic

AuthName «Subversion repository on yas-desktop»

AuthUserFile /srv/svn/conf/passwd

</Location>

Вкратце по директивам.

  • SVNParentPath /srv/svn/repositories/ – указываем путь к репозиториям
  • AuthzSVNAccessFile /srv/svn/conf/users-access-file – путь к файлу, в котором указывается какого пользователя к какому проекту и с какими правами пускать (ниже будет чуть подробнее)
  • AuthUserFile /srv/svn/conf/passwd – в этом  файле хранятся зашифрованные пароли пользователей. Этот файл мы чуть ниже создадим при помощи утилитки htpasswd.

/srv/svn/conf/users-access-file

[/]

* =

[firstproject:/]

yas = rw

Первыми двумя строками мы запрещаем доступ анонимам к репозиториям. Т.е. мы как быговорим: «всем (*) доступ к корню репозиториев ([/]) пустой (т.к. после знака равно мы ничего не указали. А если бы там было r, то это означает чтение; w – запись)».

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

Идём дальше. Чтобы пользователь yas получил туда доступ, ему будети предложено авторизоваться. Для этого надо установить для него пароль. А для этого мы создадим файл /srv/svn/passwd (мы указывали этот файл в apache.conf для авторизации) при помощи утилиты htpasswd

Создаём /srv/svn/conf/passwd

su svn

htpasswd -c -m /srv/svn/conf/passwd yas

по флагам:

  • -m – метод криптования будт использован MD5
  • -c – означает, что файл надо создать. Используйте этот флагш только для того, чтобы создать этот файл впервые. Далее для добавления пользхователей используйте команду

htpasswd -m /srv/svn/conf/passwd newusername

  • /srv/svn/conf/passwd – путь к файлу, куда сохранять пароль
  • yas – имя пользователя

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

Теперь нам надо, чтобы апач загрузил к себе наш конфиг apache.conf .   Для этого в конфиг apache (как правило этого /etc/apache2/httpd.conf) добавляем строчку

Include /srv/svn/conf/apache.conf

Теперь делаем reload для apache:

sudo /etc/init.d/apache2 reload

На этом всё. Если всё сделано правильно, то ваши репозитории будут доступны по адресу http://localhost/svn/имя_репозитория/   Например  http://localhost/svn/firstproject/ Ну и по сети соответственно ваши репозитории тоже могут быть доступны теперь.

См также:

HOWTO: Hosting a Subversion Repository

httpd, the Apache HTTP server

posted in svn by yas375

Follow comments via the RSS Feed | Оставить комментарий | Trackback URL

21 Comments to "Установка и настройка svn сервера под linux"

  1. yas wrote:

    процесс создания нового репозитория у меня сейчас такой:

    su
    su svn
    svnadmin create /srv/svn/repositories/example.com/
    exit
    chown -R www-data:www-data /srv/svn/repositories/example.com/
    exit
    svn mkdir http://localhost/svn/example.com/trunk/

  2. Serge wrote:

    в общим для синхронизации проекта надо не забыть поиграться с chmod в репозитории.

  3. cmygeHm wrote:

    Отличная статейка, все сразу получилось )

  4. desoul wrote:

    Добавьте строчку тут:
    su – svn
    mkdir /srv/svn/conf/
    -> cd conf/
    touch apache.conf
    touch users-access-file

  5. yas wrote:

    2desoul: точно, спасибо! )

  6. Buzzman wrote:

    Парни, подскажите, а что из этого меняется, если сервер работает под nginx?

  7. darkthor wrote:

    Ребят, у меня стоит debian и все то же самое вроде должно работать. но при перезагрузки апач ругается.

    root@eq:~# /etc/init.d/apache2 reload
    Syntax error on line 13 of /srv/svn/conf/apache.conf:
    AuthName takes one argument, The authentication realm (e.g. «Members Only»)
    Action ‘configtest’ failed.
    The Apache error log may have more information.
    failed!

    как я понял это изза файла httpd.conf. вот что в нем:
    ServerName localhost
    Include /srv/svn/conf/apache.conf

  8. darkthor wrote:

    что делать, подскажите, если знаете )

  9. darkthor wrote:

    а нет ) я невнимателен просто ) там же Syntax error on line 13.. но что ему не нравится там я не пойму, я даже не менял ничего )

  10. yas wrote:

    так тебе ведь там сообщается, что ошибка в «/srv/svn/conf/apache.conf», а не в «httpd.conf». Его и стоит смотреть ;)

  11. yas wrote:

    могу предположить, что ты скопипастил отсюда неправильные кавычки (они автоматом в статье заменились на типографические). Тогда тебе просто надо заменить кавычки [«»] на обычные [""]

  12. darkthor wrote:

    в общем непонятно в чем была проблема, но ошибка больше не появлялась.. но появилась другая. делаю первый коммит на сервер через тортойс свн и вижу вот что:
    Command: Commit
    Error: Commit failed (details follow):
    Error: Can’t open file ‘/srv/svn/repositories/eqphp/db/txn-current-lock’: Permission denied
    Finished!

    почему нет прав? я прописал права в users-access-file. логинится без ошибок, но соммит сделать не дает.

  13. yas wrote:

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

  14. darkthor wrote:

    Спасибо большое за помощь, я посмотрю ) если узнаю причину отпишу сюда как лечить )

  15. darkthor wrote:

    В общем нужно изменить владельца папки репозитория на пользователя, из под которого работает apache. в моем случае так, потому что я подключаюсь по http

  16. darkthor wrote:

    или просто прописать репозиторию и всем папкам и файлам которые внутри него права 777

  17. yas wrote:

    лучше первый вариант ;)

  18. djvibegga wrote:

    Хорошая полная статья, нечего дополнить, я сам писал на эту тему – http://devdream.net/?p=286. Почитайте, тут формализован конфиг authz

  19. Temofey1989 wrote:

    Здравия всем!

    Никто не сталкивался с подобной штукой:

    This XML file does not appear to have any style information associated with it. The document tree is shown below.

    Could not open the requested SVN filesystem

    Что это означает?

    Благодарю за обратную связь!

  20. Yak wrote:

    Спасибо, статья очень помогла!

  21. Kirill wrote:

    Доброго времени суток. Сделал всё по вашей инструкции, ошибок никаких не выскакивало. но когда я попытался использовать созданный по вашему репозиторий, то у клиента выскочила ошибка 405: «PROPFIND request on ‘/svn/firstproject’ failed»
    Подскажите, пожалуйста, как это побороть.

Leave Your Comment