In Fire We Trust

In the darkest corner light will shine



25 Jan

Print This Post Trac + SVN The setup
read in english 

Disclaimer: Описаните техники в този документ могат да ви помогнат но не е задължително да са напълно вярни и изчерпателни. Не поемам отговорност за каквито и да било реални или нереални, вреди, ползи, пропуски, паднали къщи или каквото и да е произтичащи от ползването или неползването на този документ.

История

  • 25.01.2007 - Първа версия

Тук ще се постарая да опиша по какъв начин съм настроил система състояща се от Trac и SVN която използвам за управление на проекти.

Идеята
Тъй като се занимавам с много и най-вече различни проекти, стана ясно че имам мужда от система за управление на проекти. И докато това ми се търкаляше в главата реших че ще е добре ако може да се използва за множество проекти с множество хора. Почна се търсенето, като минах през dotProject, TikiWiki, Mantis и някои други. Но просто някак си не ми допадаха. В крайна сметка се спрях на Trac и SVN.

Мотивацията
Избрах комбинацията Trac + SVN по следните причини

  • Свикнал съм със SVN пък макар и от конзола
  • Trac се разработва относително активно
  • Вече имах инсталиран Python заради част от системата ми
  • В самия Trac има вградено wiki което ще се ползва за описанието на проектите и документацията
  • Има билетчета за проблеми
  • Куп други дреболии

След всичко казано Trac се оказа едно добро решение.

Желязото
Машината на която работи всичко това е следната

Debian Unstable
600 Mhz CPU
256 MB Ram
20G HDD

Върху нея работят доста услуги: mysql, apache, exim, routing/shaping/nat, dns, dhcp, ntp, ftp, shell, samba (в режим на Master Browser) и други.

Като цяло доста слабичка машинка по днешни стандарти, но полезна и гледана с любоФ

Необходим Софтуер
За да може системата да работи като хората ни трябва следният софтуер

  • Trac
  • subversion
  • libneon
  • Python
  • pysqlite
  • python-subversion-bindings
  • mod_python
  • clearsilver
  • xinetd
  • други дреболии

Като цяло най-лесно е ако си имате дебиан. Ако е такъв случая процедурата е пределно проста

apt-get install trac libapache2-mod-python xinetd

И започва веселбата :)

Допълнително към Python сме инсталирали python-setuptools, tracwebadmin, tracaccountmanager.

Разположение на файловете
Тъй като ще има няколко проекта, ще отделим специално място за цялата система. Препоръчително е да е на отделен дял.
При мен се спрях на директорията /home/projects която има следната структура

/home/projects/
/home/projects/trac
/home/projects/trac/project1
/home/projects/trac/project2
... ... ...
/home/projects/svn
/home/projects/svn/project1
/home/projects/svn/project2
... ... ...

Възможно е Trac и SVN инстанциите да се намират в директориите на проектите но така се усложнява млко конфигурацията

Същинското изпълнение
Създайте си директорната структура която ще ви е удобна:

mkdir -p /home/projects/{trac,svn}

Създайте си съответните проекти (това става с trac-admin)

trac-admin /home/projects/trac/project1 initenv

Ще ви бъдат зададени няколко въпроса и по точно: Име на проекта, База данни (sqlite е добър избор), тип на хранилището за код, къде се намира самото хранилище.
Ограничение е че хранилището на код трябва задължително да е на същата машина (не се поддържат отдалечени), но това може лесно да се заобиколи с помощта на nfs

Създайте съответните хранилища за код (svnadmin)

svnadmin create /home/projects/svn/project1

Променете правата на така създадените директории съответно на потребителя като който вървят Trac системата и svn сървъра

chown -R www-data:www-data /home/projects/trac/project1
chown -R svnserv:svnserv /home/projects/svn/project1

Използваме www-data тъй като под този потребител работи Apache сървъра. Потребителя svnserv сме създали предварително като за домашна директория сме му задали /home/projects/svn

След като имаме вече създадени проектите време е да можем да ги покажем в браузър (иначе са безполезни).
Trac може да работи като самостоятелен демон (tracd), като CGI процес (trac.cgi, trac.fcgi) или в контекста на Apache (което сме и избрали) с помощта на mod_python.

В конфигурацията на Apache добавяме

LoadModule python_module modules/mod_python.so
# или го разрешаваме с помощта на дистрибуцията си
 
<location /projects>
    # с какво ще обработваме съдържанието
    SetHandler mod_python
    # точно с какво (trac)
    PythonHandler trac.web.modpython_frontend
    # коя информация точно ще сервираме
    PythonOption TracEnvParentDir /home/projects/trac
    # от какво ще генерираме индекса (не е задължителен)
    PythonOption TracEnvIndexTemplate /home/projects/trac/listing.cs
    # debug mode ON
    PythonDebug on
</location>

Рестартираме сървъра и проверяваме. Трябва да се вижда нещо подобно на следната картинка
trac-1.png

Ако ли пък не … почвайте да гледате в логовете какво пише.

Следва да пуснем svn сървър. Това се прави с помощта на svnserve. В случая съм избрал да го стартирам през xinetd понеже няма да е толкова натоварен. За по голяма сигурност ще работи като отделен потребител (svnserv)

Конфигурацията на xinetd е следната

service subversion
{
        # слушаме само на IPv4 адрес
        flags = IPv4
        # услугата НЕ е спряна
        disable = no
        # потребител и група
        user = svnserv
        group = svnserv
        # максимален брой инстанции
        instances = 5
        # be nice :)
        nice = 15
        # кой точно е сървърът
        server = /usr/bin/svnserve
        # аргументи за стартирането му
        server_args = --inetd --root /home/projects/svn
        # обичайните работи (логване, типаж ...)
        log_on_success = PID HOST DURATION
        log_on_failure = HOST ATTEMPT
        wait = no
        socket_type = stream
}

Тествайте със svn клиент дали работи.

Подсигуряване и подобряване на Услугите
След като имаме работещи услуги време е да помислим за тяхното подсигуряване. А именно ето какво ще направим:

За Trac системите

  • Премахване на анонимният достъп (изцяло). За тази цел ще ни се наложи да използваме trac-admin. Възможно е да се реализира през web интерфейс но все пак трябва да се знае как се прави на ръка.
    # влизаме в интерактивен режим
    trac-admin /projects/trac/project1
    # привилегиите се управляват посредством командата permission
    Trac [/home/projects/trac/project1]> permission help
    permission list [user]
            -- List permission rules
     
    permission add <user> <action> [action] [...]
            -- Add a new permission rule
     
    permission remove <user> <action> [action] [...]
            -- Remove permission rule
    # това е просто за запознаване
    # следва същинското премахване
    Trac [/home/projects/trac/project1]> permission remove anonymous *</action></user></action></user>

    Вече анонимните потребители нямат никакви права.
  • добавяне на нов административен потребител с пълни права. Това се прави за да имаме по лесен контрол.
    Trac [/home/projects/trac/project1]> permission add user1 TRAC_ADMIN, MILESTONE_DELETE ....
    # всички възможни привилегии 

    Така добавеният потребител user1 ефективно получава пълен и абсолютен контрол.
  • активиране на администраторският панел - тази процедура се извършва чрез редакция на кконфигурационният файл conf/trac.ini в директорията на нашият проект. За да активираме администраторският интерфейс е необходимо да разрешим използването на компонентите които са ни нужни а именно да добавим
    [components]
    webadmin.* = enabled
  • включване на подобрен процес на влизане в системата - по начало процеса на влизане в Trac не е особенно красив нито пък удобен, затова и ще бъде подменен от разширението TracAccountManager. То има зависимост от TracWebAdmin който вече е активиран. За да можем да ползваме подобреният процес трябва първо да изключим вграденият във trac и да активираме новият. Това става отново с редакция на trac.ini
    [components]
    acct_mgr.admin.accountmanageradminpage = enabled
    acct_mgr.api.accountmanager = enabled
    acct_mgr.htfile.abstractpasswordfilestore = enabled
    acct_mgr.htfile.htdigeststore = disabled
    acct_mgr.htfile.htpasswdstore = enabled
    acct_mgr.http.httpauthstore = disabled
    acct_mgr.web_ui.accountmodule = enabled
    acct_mgr.web_ui.loginmodule = enabled
    trac.web.auth.loginmodule = disabled
     
    [account-manager]
    password_file = /home/projects/trac/users
    password_store = HtPasswdStore 

    Какво точно прави всяка опция е добре обяснено в документацията (линковете са в края)
    Сега е необходимо да рестартираме web сървъра за да влезнат в сила нашите промени.

За svn сървъра:

Забраняване на всякакъв достъп за неауторизирани потребители

Това се изпълнява като се редактират конфигурациите на svn сървъра. Те се намират в директорията в която е нашето хранилище на код. Модифицираме ги по следният начин:

conf/svnserve.conf

### This file controls the configuration of the svnserve daemon
### Visit http://subversion.tigris.org/ for more information.
 
[general]
# никакъв достъп за анонимните
anon-access = none
password-db = passwd
authz-db = authz
realm = Project 1 

conf/authz

### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
 
[groups]
 
# за кой път иде реч (правата се унаследяват)
[/]
# правата на потребител (четене и писане)
user1 = rw
# правата на всички останали (пълна нула)
* =

conf/passwd

### This file is an example password file for svnserve.
 
[users]
user1 = password 

Заключение
След като сме си свършили всичката работа следва да рестартираме за един последен път apache и xinetd и да започнем да си ползваме системата. За подробности за работата с нея … във връзките

Връзки
Trac
mod_python
Apache
Subversion
TracWebAdmin
TracAccountManager

2 Responses to “Trac + SVN The setup”

  1. 1
    Terabanitoss Says:

    Hello
    You are The Best!!!
    Bye

  2. 2
    Stanislav Bozhkov Says:

    Евалата, много ценно и добре написано.

Вашият коментар

XHTML: Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <code lang="language"> [lang_en][/lang_en] [lang_bg][/lang_bg] <ul> <ol>


In Fire We Trust

Say NO to trud