Установка и настройка сервера SVN (Subversion) на Linux Ubuntu
В интернете можно найти много информации о настройке системы управления версиями Subversion (также ее можно называть SVN). В данной инструкции мы попробуем объединить всю информацию, необходимую для начала работы:
- Установка.
- Первичная настройка.
- Доступ по http.
- Примеры работы с SVN на клиенте.
Разобьем ознакомление с программным продуктом по шагам:
Предварительная настройка
Установка subversion server
Установка и настройка веб-сервера
Подключение клиентом
Локально с сервера
С удаленного узла
Подготовка системы
Перед тем, как начать установку и настройку, выполним предварительные действия.
1. Обновление пакетов
Для корректной работы с пакетами в Ubuntu, необходимо, как минимум, обновить кэш:
apt update
Также можно выполнить обновление установленных пакетов:
apt upgrade
2. Правильное время
Для корректных временных меток в нашем репозитории нужно позаботиться о правильном времени.
Настраиваем временную зону:
timedatectl set-timezone Europe/Moscow
* тут мы указали зону по московскому времени.
Список всех зон можно посмотреть командой:
timedatectl list-timezones
Устанавливаем утилиту для синхронизации времени и разрешаем запуск демона:
apt install chrony
systemctl enable chrony
3. Настройка брандмауэра
Если в нашей системе используется брандмауэр, нам необходимо открыть порты 80 и 443 — на них по умолчанию работает веб.
Как правило, в Ubuntu для этого используется iptables:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
Для сохранения правил используем iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
Установка SVN и создание репозитория
Начнем с Subversion. Установим следующие пакеты:
apt install subversion subversion-tools
* где:
- subversion — собственно, сама система контроля версий.
- subversion-tools — набор утилит для работы с SVN.
Теперь можно создать репозиторий, например, в каталоге /var/lib/svn:
mkdir /var/lib/svn
svnadmin create /var/lib/svn/repo1
* где repo1 — имя созданного репозитория.
В данном каталоге должны появиться следующие файлы и папки:
ls /var/lib/svn/repo1
conf db format hooks locks README.txt
Двигаемся дальше.
Веб-сервер
Для работы с репозиторием SVN используется протокол http. Поднимем веб-сервер Apache.
Установим следующие пакеты:
apt install apache2 apache2-utils libapache2-mod-svn
* где:
- apache2 — веб-сервер.
- apache2-utils — набор утилит для работы с apache. В частности, мы будем использовать htpasswd для создания пользователя для авторизации через веб.
- libapache2-mod-svn — модули mod_dav_svn и mod_authz_svn для Apache. Они позволяют реализовать на сервере WebDAV, с помощью которого можно взаимодействовать с репозиториями.
Разрешаем и активируем модули dav и dav_svn:
a2enmod dav dav_svn
Открываем на редактирование файл:
vi /etc/apache2/mods-enabled/dav_svn.conf
Добавляем строки:
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
* где:
- /var/lib/svn — базовый путь, который мы определили для репозитория.
- /etc/apache2/dav_svn.passwd — файл, в котором будут храниться данные с логинами и паролями для доступа к репозиторию по http.
Проверяем конфигурацию:
apachectl -t
Мы должны увидеть:
...
Syntax OK
Перезапускаем сервис командой:
systemctl restart apache2
Создаем первую учетную запись для авторизации по http:
htpasswd -cm /etc/apache2/dav_svn.passwd admin
* в данном примере мы создадим учетную запись admin.
Последующие записи мы создаем без параметра -c:
htpasswd -m /etc/apache2/dav_svn.passwd user2
После вводим дважды пароль:
New password:
Re-type new password:
Adding password for user admin
Выставляем владельца для каталога репозитория:
chown -R www-data:www-data /var/lib/svn
Проверка работы репозитория
Попробуем подключиться к репозиторию с помощью локального клиента и клиента, который установлен на удаленном компьютере.
Локально
Сначала подключимся к репозиторию локально с того же сервера.
Перейдем во временный каталог:
cd /tmp
Подключимся к нашему репозиторию и создадим копию в каталоге local:
svn checkout file:///var/lib/svn/repo1
Перейдем в появившейся каталог:
cd repo1
* созданный каталог будет с таким же именем, как и название репозитория.
Увидеть информацию о репозитории можно командой:
svn info
Попробуем добавить файл в репозиторий:
echo test > test.txt
svn add test.txt
svn commit -m 'Added test file'
* первой командой создаем файл, второй добавляем его в репозиторий, третьей — коммитим и пушим.
С удаленной машины
Для работы с репозиторием по сети, необходимо установить клиента. Рассмотрим это на примере другого компьютера с Ubuntu.
Выполним установку subversion:
apt install subversion
Теперь можно подключиться к нашему репозиторию командой:
svn checkout --username admin http://192.168.100.15/svn/repo1/
* где 192.168.100.15 — IP-адрес моего сервера в локальной сети; admin — имя учетной записи, под которой мы будем авторизовываться на веб.
Перейдем в появившейся каталог:
cd repo1
Мы должны увидеть ранее созданный файл test.txt:
ls -l
Попробуем создать еще один файл и запушим его в репозиторий:
echo test2 > test2.txt
svn add --force .
svn commit -m 'Added second commit'
* обратите внимание, что в данном примере мы используем ключ --force для добавления всех файлов.