Несколько вступительных сток:
Данная тема поднималась тут не раз, но рассматривался вариант создания и настройки только одного репозитория. В моём случае нужно было создать три локальных репозитория на одной машине.
Как ОС была выбрана Ubuntu Server x64 с отключеными иксами…
Итак, приступим:
Установить на только что инсталлированный Ubuntu последнюю версию Trac, создать репозитории для нескольких проектов и настроить окружение соответственно. Структура проектов должна быть полностью корректной, установка максимально быстрой при минимальном количестве пакетов. Авторизация в репозитории и окружения Trac может быть общей, но позволяющей индивидуальную настройку для каждого проекта. Также, установка должна быть максимально независима от версий.
Данная тема поднималась тут не раз, но рассматривался вариант создания и настройки только одного репозитория. В моём случае нужно было создать три локальных репозитория на одной машине.
Как ОС была выбрана 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 http://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