Pull to refresh

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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.