Trac + Subversion @ Ubuntu: Revisited

Пн, 17 Мар 2008 at 0312.04 (os, ubuntu, девелопмент)

This acrticle at wikidot.com

Ubuntu Trac Subversion

Задача

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

Дано
  • Ubuntu 7.04 Feisty Fawn Herd
  • Trac 0.11b2
  • Subversion 1.4.3
  • Два пользователя: user1 и user2
  • Два проекта: Some Project и Another Project
  • Требуется доступ в Trac и репозиторий по адресам <host>/localProjects и <host>/svn соотвественно
Решение. Пункт 1. Установка базовых дистрибутивов, доступных в пакетах.

Для начала можно установить дистрибутивы, доступные в репозиториях Ubuntu в поддерживаемых версиях – на данный момент это Apache 2.2.3, Python 2.5.1 (необходим для работы trac), Subversion 1.4.3 и g++ 4.1.2 (необходим для сборки sqlite). Установим, предварительно обновив данные о пакетах:

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. Установка sqlite.

Теперь необходимо собрать sqlite (легковесная база данных, в котрой будут хранится внутренние данные trac) — версия, находящая в репозитории (3.3.13) на данный момент меньше требуемой (3.3.4). Создадим каталог для временного хранения дистрибутивов и перейдём в него:

mkdir ~/distr
cd ~/distr

Скачаем последнюю версию sqlite и установим:

wget http://www.sqlite.org/sqlite-3.5.6.tar.gz
tar xvfz ./sqlite-3.5.6.tar.gz
mv ./sqlite-3.5.6 ./sqlite # чтобы следовать букве README-руководства
mkdir ./bld # временный каталог для скомилированных файлов
cd ./bld
../sqlite/configure
make
sudo make install
cd ..
rm -r ./bld
Решение. Пункт 3. Установка trac-related пакетов через easy_install.

Для Python существует утилита, облегчающая установку python-пакетов, называемых также яйцами (они имеют расширение *.egg). Установим её:

wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ./ez_setup.py

И засчёт неё установим последние версии Pygments (0.9) (инструмент для подсветки программного кода на Python), Genshi (0.4.4) (механизм шаблонов от создателей trac) и собственно самого trac (0.11b2):

sudo easy_install Pygments
sudo easy_install Genshi
sudo easy_install Trac
Решение. Пункт 4. Создание репозиториев.

Создадим репозитории для наших проектов и сделаем первые коммиты, содержащие отправные точки для их структур. Все репозитории будут находиться в каталоге /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
Решение. Пункт 5. Связывание 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

Ниже приведено точное содержимое конфигурационного файла. При обращении на путь <host>/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
</Location>

Создадим соответствующих пользователей в файлах авторизации. Используйте пароли попроще для проверки и не забудьте их потом поменять:

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
Решение. Пункт 6. Создание окружений 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
Решение. Пункт 7. Связывание 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, см. описания, если необходимы другие способы настройки). Обработчиком обращений по адресу <host>/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
</Location>

<LocationMatch /localProjects/[^/]+/login>
   AuthType Basic
   AuthName "Local Projects"
   AuthUserFile /etc/apache2/dav_svn.passwd
   Require valid-user
</LocationMatch>

Теперь заменим сайт по умолчанию для apache на сайт trac:

sudo a2dissite default
sudo a2ensite trac

Дадим пользователям права администратов в окружениях trac, в соотвествии с правами на репозиторий, теперь у них, у каждого в своём проекте, будет веб-интерфейс для полной настройки trac.

sudo trac-admin someProject permission add user1 TRAC_ADMIN
sudo trac-admin anotherProject permission add user2 TRAC_ADMIN
Решение. Заключение.

Осталось перезагрузить сервер, (принудительная перезагрузка настроек: force-reload) и проверить адреса <host>/localProjects и <host>/svn/someProject и <host>/svn/anotherProject, попробовав авторизироваться разными пользователями.

sudo /etc/init.d/apache2 restart

Если при установке появились какие-либо проблемы и ничего не помогает, попробуйте ознакомиться с предыдущей статьёй (но она несколько более сумбурна и менее структурирована) или опишите проблему(-мы) в комментариях — постараюсь реагировать быстро.

Примечание A. О добавлении проектов.

Добавление проектов в будущем требует лишь нескольких шагов — создание базовой структуры первым коммитом в какой-либо подкаталог /var/svn, опциональное добавление новых пользователей в htpasswd-файл, настройка прав доступа в authz-файле, создание окружения trac в соответствующем подкталоге /var/trac через trac initenv, опциональная выдача trac-прав новым пользователям и проверка, что apache имеет доступ к созданным каталогам.

Комментарии (27)

  1. JackyFox сказал,

    Для меня пока все вышеизложенные манипуляции не постижимы и могут быть выполнены только в режиме «copy-paste», следовательно, респект автору.

    Ну и когда же все это будет работать и доступно? :)

  2. Trac + Subversion + Ubuntu - интересная забава на день « шаманские бредни сказал,

    [...] Upd.: Более структурированное и последовательное (правда менее повествовательное) руководство для Ubuntu Feisty находится здесь [...]

  3. alexey сказал,

    А почему не sudo apt-get install trac?

    И зачем ставить sqlite из исходников, если можно из репозитариев?

  4. shaman.sir сказал,

    на тот момент в репозитариях не было последней версии trac’а и соответствующей необходимой версии sqlite — в статье об этом сказано.

    да и некоторые вещи иногда полезнее делать тщательно контролируя процесс ;).

  5. alex сказал,

    не работает эта статья

  6. shaman.sir сказал,

    смешное замечание – она проверена несколько раз. потрудитесь пояснить, где именно, если можно.

  7. MaroonOrg сказал,

    После выполнения всех вышеперечисленных действий (http://localhost/localProjects):

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.
    —-
    Система: kubuntu

    Что делать? о_О

  8. shaman.sir сказал,

    вышлите логи и изменённые файлы конфигурации, будем разбираться

    /etc/apache2/sites-available/trac
    /etc/apache2/dav_svn.authz

    проверьте права на файлах и версию апача.

  9. MaroonOrg сказал,

    Выслал на почту

  10. MaroonOrg сказал,

    Разобрался, все работает.
    Путем соединения данной статьи и оф. руководства (http://trac.edgewall.org/wiki/0.11/TracOnUbuntu) был получен желаемый результат и даже немного больше =)

  11. shaman.sir сказал,

    Замечательно :).

  12. MaroonOrg сказал,

    Написал статью о том, как ставил систему используя оф. руководство и данную статью. Автор, если считаешь что ссылку надо удалить – удаляй, но руководство может помочь. Оставил ссылку на данную статью

    http://maroonorg.wikidot.com/trac

  13. shaman.sir сказал,

    Да нет, почему – ссылке здесь место. Если необходимая пользователю конфигурация ближе к вашей – он обратится к вашей статье.

  14. Установка и настройка Subversion | obout.ru сказал,

    [...] Trac + Subversion @ Ubuntu: Revisited [...]

  15. Антон сказал,

    Огромное спасибо, вот такие и должны быть посты в блогах. Большое спасибо :)

  16. virens сказал,

    Большое спасибо за статью, очень хорошо описана установка trac – сейчас всё поставил и связал это дело с subversion. Класс!

  17. r3code сказал,

    Не могу туту большой пост отправить, потому отписал у себя в жж замечания по поводу твоей статьи. http://r3code.livejournal.com/77730.html?view=128418#t128418

    Посмотри я настраивал тоже самое под Windows, может тоже замечания будут или ошибку заметишь. Читаем тут Apache, Svn, Trac, Windows http://r3code.livejournal.com/77730.html

  18. shaman.sir сказал,

    Спасибо за отзывы комментаторам. r3code, спасибо за замечания – дельные, исправлю. По поводу поста: замечательный – подробный и с картинками :) – под винду всё это большой труд налаживать – я как-то раз делал, и решил что больше ни за что не буду :) – к чему придраться пока не обнаружил :) .

    Отлично, что разных /хороших/ статей на эту тему становится больше.

  19. riden сказал,

    Спасибо за статью, особенно за пункт 3!

  20. r3code сказал,

    Кстати если интернет нормальный и не тупит, то Trac и под Windows нормально ставиться через easy_install ;)

  21. shaman.sir сказал,

    Вместо sudo vi лучше использовать sudoedit.

  22. кaппИ сказал,

    Большое спасибо за информацию, почитал с интересом

  23. a2 сказал,

    Привет!
    Спасибо за нормальное руководство по установке!!!
    Я тут две недели с бубном прыгал вокруг англоязычных руководств по apache, trac и т.д. и т.п. Парням с edgewall.org руки бы поотрывать за такое руководство.

    Сделал все как здесь описано. Заработало.

    Кстати, можно статью себе на сайт закопипастить? Ссылки на страницу автора и т.д. и т.п. сохраню. Просто дусаю собрать все мануалы по установке того сего, чтобы после переустановки linux-а не приходилось опять весь инет перелопачивать….

  24. Roma сказал,

    а зачем в пункте 4 чистить каталог tmp?

  25. shaman.sir сказал,

    Да, a2, выложить конечно можете.

    Roma, на всякий случай, чтобы не закоммитить/зачекаутить/скопировать ничего ненужного. И не путаться в структуре, чтобы не мешали на глазах лишние каталоги. А так необязательно, конечно.

    Можно было создать специальный каталог и т.п., но возможно это была бы уже паранойя.

  26. Иван Иванов сказал,

    Вот это да… Мне кажется, об этом пишут уже на каждом заборе :)

  27. стоимость подготовительных курсов сказал,

    Идеально пишете. Вот решил рискнуть и поделится с вами также тем что интересует лично меня, а именно бесплатное обучение в чехии. Думаю посетителям вашего блога эта ссылка будет полезна…

Прокомментировать