LINUX-BG   Адрес : http://www.linux-bg.org
Инсталация и настройка на Trac и SVN
От: Владимир Витков
Публикувана на: 10-03-2008
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=390138959
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! >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 1 wallclock secs ( 0.16 usr + 0.03 sys = 0.19 CPU)