Как стать автором
Обновить

SVN + trac: несколько проектов на одном сервере

Несколько вступительных сток:
Данная тема поднималась тут не раз, но рассматривался вариант создания и настройки только одного репозитория. В моём случае нужно было создать три локальных репозитория на одной машине.
Как ОС была выбрана Ubuntu Server x64 с отключеными иксами…
Итак, приступим:

Задача


Установить на только что инсталлированный Ubuntu последнюю версию Trac, создать репозитории для нескольких проектов и настроить окружение соответственно. Структура проектов должна быть полностью корректной, установка максимально быстрой при минимальном количестве пакетов. Авторизация в репозитории и окружения Trac может быть общей, но позволяющей индивидуальную настройку для каждого проекта. Также, установка должна быть максимально независима от версий.

Дано



  1. Ubuntu 10.10 Server x64
  2. Два пользователя: user1 и user2
  3. Два проекта: Some Project и Another Project
  4. Требуется доступ в 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

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.