четверг, 29 января 2009 г.

Trac appliance

И все-таки быстрый запуск Trac оказывается не слишком быстрым, а результат - не слишком удобным в сопровождении, особенно когда совместно с Trac предполагается использовать систему управления версиями. Более удобный use case представляется для меня сейчас таким:
  • N проектов - каждый представляет из себя проект Trac и, возможно, настроенный для использования с ним репозитарий Git или Subversion
  • M пользователей - каждый имеет полный доступ к некоторым проектам (т.е. может работать в Trac и коммитить в репозитарий), а к некоторым не имеет вовсе.
Проекты/пользователи должны создаваться/удаляться одной командой, для разрешения/запрета доступа пользователя к проекту также должно быть достаточно одной команды.

Проблема заключается в выборе технологии авторизации и аутентификации, которые позволили бы реализовать описанную схему. Для standalone версий Trac, Git и Subversion ведение единой базы данных пользователей и прав доступа к проектам невозможно, поэтому придется задействовать Apache и его средства управления доступом - соответственно репозитарии Git и Subversion будут доступны по протоколу WebDAV. При этом никто не мешает при необходимости использовать более гибкие настройки прав доступа внутри проектов средствами самих Trac и Subversion.

Готовое решение доступно в виде основного пакета appliance-trac и дополнительных appliance-trac-scm-git и appliance-trac-scm-svn, собираемых из одноименного репозитария. Устанавливаем требуемое штатным для ALT Linux образом:
trac-scm-git
Создаем проект (указываем имя и тип репозитария - если последним параметром будет что-то отличное от git или svn, то репозитарий просто не будет создан):
# appliance-trac-create alpha git
Средствами Apache создаем пользователя:
# htpasswd2 -b /var/www/appliance-trac/passwd user userpwd
Включаем его в соответствующую группу Apache, имя которой соответствует имени проекта:
# vim /var/www/appliance-trac/group
При необходимости пользователя можно сделать администратором Trac:
# trac-admin /var/www/appliance-trac/env/alpha permission add user TRAC_ADMIN
Теперь пользователь user может работать с проектом через web-интерфейс по ссылке http://server//appliance-trac/env/alpha и напрямую с репозитарием:
$ cat > ~/.netrc << EOF
> machine server
> login user
> password userpwd
> EOF
$ git-clone http://server/appliance-trac/scm/git/alpha.git
$ cd alpha/
$ echo "new line" >> README 
$ git commit -a -m 'new commit'
$ git-http-push http://server/appliance-trac/scm/git/alpha.git heads/master
После того, как проект стал ненужным, его можно удалить:
# appliance-trac-drop alpha git

суббота, 10 января 2009 г.

Trac quickstart

Вместе с совсем уж примитивными wiki-движками бывают также полезны интегрированные системы с wiki, багтрекером, web-интерфейсом к какой-нибудь системе управления версиями и прочими вкусностями - и среди них, как одну из самых простых в установке и в эксплуатации, можно выделить Trac.

После установки и запуска штатным для ALT Linux образом:
# apt-get install trac
# service trac start
Trac готов к обслуживанию проектов, размещенных в каталоге /var/lib/trac, однако хотя бы один проект еще нужно создать:
# su - trac -s /bin/sh
$ trac-admin alpha initenv alpha sqlite:db/trac.db "" ""
$ vim alpha/conf/trac.ini # edit [header_logo] and [project] sections
После этого проект будет доступен на чтение всем желающим по ссылке http://localhost:8000/alpha. Для создания и редактирования багов и wiki-страниц необходимо авторизоваться, а для этого сначала создать пользователей следующим образом:
$ trac-passwd -u user -p usrpwd >> /etc/trac/passwd
Для полного управления проектом нужно выдать пользователю user соответствующие права:
$ trac-admin alpha permission add user TRAC_ADMIN
Такая схема разграничения прав доступа удобна для свободных проектов. Для проектов, процесс работы над которыми не должен быть публично доступным, необходима другая схема: как минимум, у пользователя anonymous необходимо изъять все права и явно выдать их группе authenticated. В этом случае все авторизовавшиеся пользователи будут иметь доступ ко все проектам, а это тоже не всегда оправдано. Для того, чтобы можно было ограничить права на уровне отдельных проектов, потребуется также изъять все права у группы authenticated, и передать их отдельной группе, а затем включать требуемых пользователей в эту группу:
$ trac-restrict-env alpha developers
$ trac-admin alpha permission add user developers
Конечно, возможна и более тонкая настройка прав доступа - но об этом подробно написано в документации Trac