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

Нам потребуется установить 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/ Ну и по сети соответственно ваши репозитории тоже могут быть доступны теперь.