Reborn

And from the ashes the Phoenix rose reborn
  • Начало
  • About

Trac + SVN The setup

Владимир | 12/06/2009

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/project11
Променете правата на така създадените директории съответно на потребителя като който вървят Trac системата и svn сървъра
1chown -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

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

Следва да пуснем 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 *

    Вече анонимните потребители нямат никакви права.

  • добавяне на нов административен потребител с пълни права. Това се прави за да имаме по лесен контрол.
    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

Коментари
Няма коментари »
Категории
Статии
Tags
256 mb ram, Code, ntp, projects, Python, SVN, Trac
RSS коментари RSS коментари
Trackback Trackback

Разни Лични

  • БирБлог
  • На море
  • Шумилницата

Blogroll

  • Summerborn

Етикети

bash Code debian dhcp dhcpd dns dnsmasq encryption firewall fun gnupg installation iproute iptables jabber linux lqlqlq management memdisk mrtg n900 netboot new nokia Norton ntp pcsuite php ping port reborn router routing rsync secure shaper simple soho squid ssh tftp web webserver Конкурс сигурност
rss RSS коментари valid xhtml 1.1 get firefox