Настройка репозитория Subversion в Apache с автоматически обновляемой рабочей копией
Кратко
Краткое руководство по сборке Subversion из исходников, созданию репозитория FSFS и его публикации через Apache. Включает создание пользователя Apache, настройку httpd.conf, аутентификацию, создание рабочей копии и полезные чек-листы для эксплуатации и безопасности.
Важно: этот материал не описывает установку самого Apache — предполагается, что веб‑сервер уже установлен и функционирует.
Обзор
Что такое Subversion?
Subversion — свободная система управления версиями (VCS). Она хранит файлы и каталоги централизованно в репозитории и фиксирует историю изменений. Благодаря этому можно восстанавливать прошлые версии или анализировать эволюцию данных. Многие сравнивают систему контроля версий с «машиной времени» для файлов.
Основные свойства Subversion:
- Репозиторий может обслуживаться по сети, что позволяет совместную работу с разных машин.
- Subversion — общая система для управления любыми файлами (не только исходным кодом).
- Типы репозиториев: bdb (Berkeley DB) и fsfs; в этом руководстве используется FSFS.
Способы доступа к репозиторию:
- svn+ssh
- SVN через Apache (mod_dav_svn)
- svnserve
В этом руководстве описан метод через Apache (mod_dav_svn). Apache должен работать под нормальным пользователем (не nobody).
Содержание руководства
- Компиляция Subversion и зависимостей из исходников
- Создание пользователя для Apache и изменение httpd.conf
- Создание репозитория
- Настройка httpd.conf для обслуживания репозитория
- Настройка аутентификации
- Добавление пользователей SVN
- Установка начальной структуры репозитория
- Настройка рабочей копии
- Настройка hook‑скриптов
1. Компиляция Subversion и зависимостей из исходников
Получите исходники Subversion и зависимостей с http://subversion.tigris.org/.
Необходимые компоненты (кроме Apache):
- APR
- APR‑UTIL
- NEON
После установки Apache соберите APR и APR‑UTIL, а затем NEON и сам Subversion.
Распакуйте tar‑архивы:
tar -jxvf subversion-x.x.x.tar.bz2tar -jxvf subversion-deps-x.x.x.tar.bz2cd subversion-x.x.xСборка APR:
cd apr./configure --prefix=/usr/local/aprmakemake installcd ..Сборка APR‑UTIL:
cd apr-util./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr/makemake installcd ..Сборка NEON:
cd neon./configure --prefix=/usr/local/neonmakemake installcd ..Сборка Subversion с поддержкой установленных компонентов (обратите внимание на путь apxs — он зависит от расположения вашей установки Apache):
./configure --prefix=/usr/local/subversion --with-apxs={Location where you installed apache}/bin/apxs --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-neon=/usr/local/neon/ --with-sslmakemake installВажно: на некоторых дистрибутивах могут потребоваться дополнительные флаги или пакеты (например, dev‑пакеты OpenSSL, zlib). Если конфигурация не выполняется — проверьте вывод ./configure и установите недостающие зависимости.
2. Создание пользователя для Apache и изменение httpd.conf
Создайте группу и пользователя для запуска Apache (имя — пример):
groupadd apacheuseradd -g apache -d /usr/local/apache2 apacheУстановите права владельца на файлы Apache:
chown -Rv apache.apache /usr/local/apache2Измените конфигурацию, чтобы Apache запускался от пользователя apache. Откройте конфигурационный файл (пример: /usr/local/apache2/conf/httpd.conf) и замените строки:
User nobody
Group #-1на
User apache
Group apacheВажно: имя и путь зависят от вашей установки. Проверьте документацию дистрибутива.
3. Создание репозитория
Выберите расположение репозитория, например /usr/local/subversion/repository, и создайте его:
svnadmin create --fs-type fsfs /usr/local/subversion/repositoryПроверьте права доступа: Apache (пользователь apache) должен иметь чтение и запись в каталоге репозитория.
chown -R apache:apache /usr/local/subversion/repositoryСовет: храните репозитории на диске с достаточной ёмкостью и резервируйте место под логи и бэкапы.
4. Настройка httpd.conf для обслуживания репозитория
Добавьте в конфигурацию Apache модуль DAV и модуль Subversion (путь к модулю зависит от установки apxs):
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.soПример конфигурации виртуального хоста для одного репозитория:
DAV svn
SVNParentPath /usr/local/subversion/repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /usr/local/subversion/passwd
Require valid-user
Если вы хотите привязать отдельный репозиторий, используйте SVNPath вместо SVNParentPath.
После изменения конфигурации перезапустите Apache.
apachectl restart5. Настройка аутентификации
Apache может использовать простой файл паролей (htpasswd) или внешние механизмы (LDAP, PAM и т. п.). Пример с htpasswd:
htpasswd -cm /usr/local/subversion/passwd aliceФлаг -c создаёт файл; последующие добавления выполняйте без -c.
Настройка авторизации по путям (authz): создайте файл /usr/local/subversion/authz и пропишите правила доступа:
[groups]
developers = alice,bob
[/]
* = r
@developers = rwПодключите этот файл в конфигурации Apache, добавив опцию AuthzSVNAccessFile:
AuthzSVNAccessFile /usr/local/subversion/authz6. Добавление пользователей SVN
Добавляйте пользователей через htpasswd:
htpasswd /usr/local/subversion/passwd bobИ обновляйте файл authz для назначения прав.
7. Установка начальной структуры репозитория
Рекомендуемая начальная структура для проектов:
- trunk — основная ветка разработки
- branches — ветки
- tags — метки релизов
Создайте структуру локально и импортируйте в репозиторий:
mkdir -p project/trunk project/branches project/tags
svn import project file:///usr/local/subversion/repository/project -m "Initial import"Или с веб‑доступом:
svn import project http://yourserver/svn/project -m "Initial import"8. Настройка рабочей копии
Чтобы получить рабочую копию:
svn checkout http://yourserver/svn/project/trunk project-working-copyАвтоматическое обновление рабочей копии при коммитах со стороны сервера — нетривиальная задача. Subversion не поддерживает «push» обновлений в клиентские WC по умолчанию. Возможные подходы:
- Использовать hook‑скрипты на сервере для обновления общих рабочих копий на серверных машинах (svn update в директорях, где это безопасно).
- Настроить CI/CD систему, которая проверяет изменения и деплоит/обновляет целевые рабочие копии.
Пример server‑side hook для автоматического обновления рабочей копии в каталоге /var/www/mysite (выполняется от имени пользователя с правами на этот каталог):
В репозитории в hooks/post‑commit:
#!/bin/sh
REPOS="$1"
REV="$2"
/usr/bin/svn update /var/www/mysite >> /var/log/svn_post_commit.log 2>&1Сделайте скрипт исполняемым:
chmod +x hooks/post-commitВажно: выполняйте автоматические обновления только для рабочих копий, не используемых несколькими пользователями одновременно, и учитывайте безопасность (права и контекст выполнения скрипта).
9. Настройка hook‑скриптов
Hook‑скрипты (hooks) позволяют запускать действия при событиях репозитория (pre‑commit, post‑commit и т. д.). Они находятся в каталоге hooks каждого репозитория. Примеры использования:
- pre-commit: проверка сообщений коммита, запрет на коммит в trunk без ревью
- post-commit: уведомления по электронной почте, триггер CI, деплой
Шаблоны скриптов имеются в hooks как файлы с суффиксом .tmpl. Скопируйте и адаптируйте их.
Быстрая методология развертывания (мини‑методология)
- Подготовка окружения: установите Apache, необходимые dev‑пакеты, обеспечьте права.
- Сборка зависимостей: APR → APR‑UTIL → NEON.
- Сборка Subversion с указанием путей к библиотекам и apxs.
- Создание репозитория FSFS и настройка прав владения.
- Конфигурация Apache: подключите модули, настройте Location и аутентификацию.
- Импорт начальной структуры и проверка доступа из клиента.
- Настройка hook‑скриптов и механизмов автоматического обновления/деплоя.
- Документирование и бэкап репозитория.
Чек‑листы по ролям
Администратор сервера:
- Установить и обновлять Apache и Subversion
- Обеспечить резервное копирование репозитория
- Настроить права и SELinux/AppArmor правила
DevOps / Инженер релизов:
- Настроить hook‑скрипты для деплоя
- Настроить CI для сборки и тестирования
- Контролировать производительность и доступность
Разработчик:
- Пользоваться рабочими копиями и практиками ветвления
- Писать понятные сообщения коммитов
- Следовать правилам доступа и кодстайла
Фрагменты команд и шпаргалка
Создать репозиторий FSFS:
svnadmin create --fs-type fsfs /usr/local/subversion/repositoryДобавить пользователя:
htpasswd /usr/local/subversion/passwd usernameИмпорт структуры:
svn import project http://server/svn/project -m "Initial import"Получить рабочую копию:
svn checkout http://server/svn/project/trunkОбновить рабочую копию:
svn updateПроверить статус:
svn statusСоветы по безопасности
- Запускайте Apache под отдельным пользователем с минимальными правами.
- Не храните репозитории на диске без резервного копирования.
- Ограничьте права в authz: давайте минимум необходимых привилегий.
- Используйте HTTPS (SSL/TLS) для защиты паролей и трафика SVN.
- Проверяйте hook‑скрипты на возможность выполнения произвольного кода и запускайте их с ограниченными правами.
Совместимость и миграция
- FSFS предпочтительнее для современных развёртываний; Berkeley DB (bdb) сложнее в обслуживании.
- Перед миграцией проверьте версии Subversion на всех клиентах и серверах.
- При обновлении сервера сделайте бэкап репозитория (svnadmin dump) и тестовую загрузку (svnadmin load) на тестовом сервере.
Критерии приёмки
- Репозиторий доступен по HTTP(S) и возвращает 200 на запросы к пути /svn
- Пользователь с правами может выполнить checkout, commit и update
- Hook‑скрипты выполняются и логируют действия без ошибок
- Права файлов в каталоге репозитория корректны (Apache имеет rw)
- Регулярные бэкапы настраиваются и проверяются восстановлением
1‑строчный глоссарий
- Subversion (SVN): централизованная VCS для учёта версий файлов.
- FSFS: файловая реализация хранения репозитория, стабильна и проста в бэкапах.
- apxs: инструмент для сборки модулей Apache из исходников.
- hook: скрипт, запускаемый при событии репозитория (pre/post commit).
Критические ошибки и когда этот подход не подходит
- Не используйте авто‑обновление рабочей копии на многопользовательских рабочих станциях — это может разрушить локальные изменения.
- Если требуется транзакционная согласованность с бинарными большими файлами, рассмотрите специализированные решения (LFS‑подходы для git или другие артефакт‑репозитории).
- Для распределённой разработки с частыми оффлайн‑коммитами лучше подходят распределённые VCS (Git, Mercurial).
Заключение
Это руководство даёт практический план по сборке Subversion из исходников и публикации репозитория через Apache с базовой аутентификацией и примерами hook‑скриптов для автоматизации. Следуйте чек‑листам, настраивайте бэкапы и безопасность, и выбирайте автоматические обновления рабочей копии лишь в контролируемых сценариях (серверные директории, CI/CD).
Краткий список задач на старт:
- Собрать Subversion и зависимости
- Создать репозиторий FSFS
- Настроить Apache (mod_dav_svn)
- Настроить htpasswd + authz
- Импортировать структуру trunk/branches/tags
- Настроить и протестировать hook‑скрипты
Похожие материалы
Настройка TCP/IP в Windows
Код-пароль Kindle: установка, изменение и сброс
Установить Dolby Atmos в Windows 11
Windows Media Encoder на Windows 10 — установка и альтернативы
Отключить сохранение паролей в Google Chrome