Несколько вступительных сток:
Данная тема поднималась тут не раз, но рассматривался вариант создания и настройки только одного репозитория. В моём случае нужно было создать три локальных репозитория на одной машине.
Как ОС была выбрана Ubuntu Server x64 с отключеными иксами…
Итак, приступим:
Задача
Установить на только что инсталлированный Ubuntu последнюю версию Trac, создать репозитории для нескольких проектов и настроить окружение соответственно. Структура проектов должна быть полностью корректной, установка максимально быстрой при минимальном количестве пакетов. Авторизация в репозитории и окружения Trac может быть общей, но позволяющей индивидуальную настройку для каждого проекта. Также, установка должна быть максимально независима от версий.
Дано
Ubuntu 10.10 Server x64
Два пользователя: user1 и user2
Два проекта: Some Project и Another Project
Требуется доступ в Trac и репозиторий по адресам /localProjects и /svn соотвественно
Решение
Пункт 1. Установка базовых дистрибутивов, доступных в пакетах.
Для начала можно установить дистрибутивы, доступные в репозиториях Ubuntu. Установим, предварительно обновив данные о пакетах:
sudo apt-get update sudo apt-get install python sudo apt-get install apache2 sudo apt-get install subversion sudo apt-get install g++ |
Пункт 2. Установка trac-related пакетов через easy_install.
Для Python существует утилита, облегчающая установку python-пакетов, называемых также яйцами (они имеют расширение *.egg). Установим её:
wget peak.telecommunity.com/dist/ez_setup.py sudo python ./ez_setup.py |
И посредством неё установим последние версии Pygments (инструмент для подсветки программного кода на Python), Genshi (механизм шаблонов от создателей trac) и собственно самого trac:
sudo easy_install Pygments sudo easy_install Genshi sudo easy_install Trac |
Пункт 3. Создание репозиториев.
Создадим репозитории для наших проектов и сделаем первые коммиты, содержащие отправные точки для их структур. Все репозитории будут находиться в каталоге /var/svn, полностью доступном для сервера, каждый в своём подкаталоге — такой метод удобен при наличии нескольких проектов и это будет заметно в следующем пункте, на этапе настройки авторизации.
sudo mkdir /var/svn sudo mkdir /var/svn/someProject sudo mkdir /var/svn/anotherProject cd /tmp sudo rm -rfR * # удалить все обычные файлы sudo rm -rfR .* # удалить все скрытые/системные файлы mkdir /tmp/someProject mkdir /tmp/someProject/trunk mkdir /tmp/someProject/tags mkdir /tmp/someProject/branches mkdir /tmp/anotherProject mkdir /tmp/anotherProject/trunk mkdir /tmp/anotherProject/tags mkdir /tmp/anotherProject/branches sudo svnadmin create /var/svn/someProject sudo svn import ./someProject file:///var/svn/someProject \ -m "Initial import" sudo svnadmin create /var/svn/anotherProject sudo svn import ./anotherProject file:///var/svn/anotherProject \ -m "Initinal import" sudo chown -R www-data:www-data /var/svn |
Пункт 4. Связывание apache и subversion.
Необходимо настроить доступ извне для созданных репозиториев. Для этого нужно установить модуль dav_svn для apache2 и заодно, раз мы работаем с subversion, установим связку subversion c Python, для корректной работы trac с репозиториями:
sudo apt-get install libapache2-svn sudo apt-get install python-subversion |
Теперь нужно настроить установленный модуль (при установки он автоматически включается для apache, если нет — используйте a2enmod dav_svn по завершению настройки):
sudo vi /etc/apache2/mods-available/dav_svn.conf |
Ниже приведено точное содержимое конфигурационного файла. При обращении на путь /svn/… модуль авторизации apache будет обращаться к файлу /etc/apache2/dav_svn.passwd за списком пользователей, а затем давать права на доступ к соответствующему проекту из файла /etc/apache2/dav_svn.authz. Обратите также внимание на использование SVNParentPath вместо SVNPath — таким образом subversion-модуль поймёт, что мы используем мультипроектную структуру и будет обрабатывать путь не как один общий репозиторий, а как несколько внутренних:
<Location /svn> DAV svn SVNParentPath /var/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd AuthzSVNAccessFile /etc/apache2/dav_svn.authz Require valid-user |
Создадим соответствующих пользователей в файлах авторизации. Используйте пароли попроще для проверки и не забудьте их потом поменять:
sudo htpasswd -c /etc/apache2/dav_svn.passwd user1 sudo htpasswd /etc/apache2/dav_svn.passwd user2 |
Создадим файл аутентификации:
sudo vi /etc/apache2/dav_svn.authz |
В открытым файле опишем права доступа (на чтение — “r” и на запись — “w“) пользователей в соответствующие репозитории:
[/] user1=r user2=r [/someProject] user1=rw user2=r [/anotherProject] user1=r user2=rw |
Пункт 5. Создание окружений trac.
Создадим каталог, в котором будут находиться окружения для соответствующих проектов.
sudo mkdir /var/trac cd /var/trac |
Теперь создадим для каждого из них, по очереди, окружение:
sudo trac-admin someProject initenv sudo trac-admin anotherProject initenv |
Имена проектов остаются на ваше усмотрение, тип репозиториев — по умолчанию svn (просто нажать Enter), путь к базе общий, по умолчанию (sqlite:db/trac.db, аналогично), пути к репозиториям: /var/svn/someProject и /var/svn/anotherProject соответственно.
Дадим права apache пользоваться этим каталогом.
sudo chown -R www-data:www-data /var/trac |
Пункт 6. Связывание apache и trac.
Есть несколько вариантов такого связывания, мы остановимся на быстром, но надёжном способе — через mod_python (описания способов на сайте trac). Для этого модуль нужно установить (также, если он не включился после установки, по завершению настройки используйте a2enmod mod_python):
sudo apt-get install libapache2-mod-python |
Настроим доступ к окружениям trac:
sudo vim /etc/apache2/sites-available/trac |
Эта настройка специфична для использования mod_python (руководство на сайте trac, см. описания, если необходимы другие способы настройки). Обработчиком обращений по адресу /localProjects выступит модуль, он будет рассматривать каталог /var/trac/ как корень нескольких проектов и содаст страницу с их списком (редактируемый шаблон можно найти внутри исходников trac), аналогично принципам SVNParentPath, URI передаётся в код trac. Запросы на вход будут обрабатываться по пользователям из того же passwd файла, из которого берёт их список subversion, а их права на действия в окружениях trac раздаются через trac-admin или в GUI-версии TracAdmin, доступной для аминистраторов окружений (будьте внимательны, пользователи создаваемые через интерфейс также добавляются в этот файл и доступны к использованию для настройки авторизации в subversion через authz-файл (по умолчанию у них нет никаких прав)).
<Location /localProjects> SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /var/trac PythonOption TracUriRoot /localProjects <LocationMatch /localProjects/[^/]+/login> AuthType Basic AuthName “Local Projects” AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user |
SVN, trac, ubuntu
http://habrahabr.ru/sandbox/22614/