Сегодня настроил 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.conftouch 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/ Ну и по сети соответственно ваши репозитории тоже могут быть доступны теперь.
См также:
процесс создания нового репозитория у меня сейчас такой:
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/
Link | Февраль 24th, 2010 at 21:49
в общим для синхронизации проекта надо не забыть поиграться с chmod в репозитории.
Link | Апрель 30th, 2011 at 06:05
Отличная статейка, все сразу получилось )
Link | Декабрь 19th, 2011 at 06:31
Добавьте строчку тут:
su – svn
mkdir /srv/svn/conf/
-> cd conf/
touch apache.conf
touch users-access-file
Link | Январь 17th, 2012 at 16:29
2desoul: точно, спасибо! )
Link | Январь 17th, 2012 at 16:35
Парни, подскажите, а что из этого меняется, если сервер работает под nginx?
Link | Февраль 22nd, 2012 at 21:26
Ребят, у меня стоит 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
Link | Март 19th, 2012 at 17:31
что делать, подскажите, если знаете )
Link | Март 19th, 2012 at 17:31
а нет ) я невнимателен просто ) там же Syntax error on line 13.. но что ему не нравится там я не пойму, я даже не менял ничего )
Link | Март 19th, 2012 at 17:34
так тебе ведь там сообщается, что ошибка в «/srv/svn/conf/apache.conf», а не в «httpd.conf». Его и стоит смотреть ;)
Link | Март 19th, 2012 at 17:35
могу предположить, что ты скопипастил отсюда неправильные кавычки (они автоматом в статье заменились на типографические). Тогда тебе просто надо заменить кавычки [«»] на обычные [""]
Link | Март 19th, 2012 at 17:38
в общем непонятно в чем была проблема, но ошибка больше не появлялась.. но появилась другая. делаю первый коммит на сервер через тортойс свн и вижу вот что:
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. логинится без ошибок, но соммит сделать не дает.
Link | Март 19th, 2012 at 17:55
похоже, что тут речь о правах на файлы. хз что за файлик такой и какие на него должны быть права.
но гугл что-то явно знает. одна из возможных причин, которые я на скорую руку нагуглил это то, что svndaemon запущен от текущего пользователя, а не от рута. людям помогал перезапуск демона свн от рута. пробуй, а если не поможет, то гугли по названию этого файла. в гугле хватает результатов по этому запросу
Link | Март 19th, 2012 at 18:02
Спасибо большое за помощь, я посмотрю ) если узнаю причину отпишу сюда как лечить )
Link | Март 19th, 2012 at 18:11
В общем нужно изменить владельца папки репозитория на пользователя, из под которого работает apache. в моем случае так, потому что я подключаюсь по http
Link | Март 24th, 2012 at 17:33
или просто прописать репозиторию и всем папкам и файлам которые внутри него права 777
Link | Март 24th, 2012 at 18:25
лучше первый вариант ;)
Link | Март 25th, 2012 at 00:32
Хорошая полная статья, нечего дополнить, я сам писал на эту тему – http://devdream.net/?p=286. Почитайте, тут формализован конфиг authz
Link | Апрель 4th, 2012 at 22:52