от Владимир Витков(10-03-2008)

рейтинг (32)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

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

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


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

Оригиналът На бълагарски In English

Идеята
Тъй като се занимавам с много и най-вече различни проекти, стана ясно че имам мужда от система за управление на проекти. И докато това ми се търкаляше в главата реших че ще е добре ако може да се използва за множество проекти с множество хора. Почна се търсенето, като минах през 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
 # или го разрешаваме с помощта на дистрибуцията си
 
 
     # с какво ще обработваме съдържанието
     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
 
Рестартираме сървъра и проверяваме. Трябва да се вижда нещо подобно на следната картинка 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   [action] [...]
             -- Add a new permission rule
     
     permission remove   [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


<< NVIDIA инсталация под SuSE10.1 с 3D | iptables с layer7 и pp2p  под slackware 11 new! >>