Trac + SVN The setup
read in
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>
Рестартираме сървъра и проверяваме. Трябва да се вижда нещо подобно на следната картинка
Ако ли пък не … почвайте да гледате в логовете какво пише.
Следва да пуснем 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









Hello
5. May 2007 at 22:25You are The Best!!!
Bye
Евалата, много ценно и добре написано.
19. June 2007 at 16:31