Tutorials
Subversion en Trac onder apache op debian
Het opzetten van een development omgeving met SVN, Trac en Apache
Pagina 1
Inleiding
Wanneer je een script aan het schrijven bent met meerdere mensen wordt het managen van de code vaak een lastigere zaak. Met name als je met meerdere mensen aan één script werkt, iedereen die dat wel eens gedaan heeft zal de problemen kennen: wat heeft iemand anders gedaan? Wanneer, en hoe moet ik de rest van de code er op aanpassen?
De magie van Subversion:
Gelukkig bestaat SVN. SVN staat voor Subversion http://subversion.tigris.org/. Subversion is een tool die helpt een project te managen en houd de wijzigingen van de code bij. Dusdanig dat wanneer er iets fout gaat je terug kan gaan naar een revisie die nog wel werkt. (hierover later meer). Subversion is een van de meest gebruike version control software.
Het gemak van trac:
Trac is een stuk software geschreven in python, waarin het managen van een project een stuk eenvoudiger wordt. Het is mogelijk om tickets aan te maken voor bugs, de code online te bekijken/browsen, en een wiki te maken die met dit alles verbonden is. Trac wordt door vele opensource projecten gebruik voor het management van de software. http://trac.edgewall.org
Deze tutorial zal gaan over het opzetten van deze omgeving onder debian/ubuntu linux.
De magie van Subversion:
Gelukkig bestaat SVN. SVN staat voor Subversion http://subversion.tigris.org/. Subversion is een tool die helpt een project te managen en houd de wijzigingen van de code bij. Dusdanig dat wanneer er iets fout gaat je terug kan gaan naar een revisie die nog wel werkt. (hierover later meer). Subversion is een van de meest gebruike version control software.
Het gemak van trac:
Trac is een stuk software geschreven in python, waarin het managen van een project een stuk eenvoudiger wordt. Het is mogelijk om tickets aan te maken voor bugs, de code online te bekijken/browsen, en een wiki te maken die met dit alles verbonden is. Trac wordt door vele opensource projecten gebruik voor het management van de software. http://trac.edgewall.org
Deze tutorial zal gaan over het opzetten van deze omgeving onder debian/ubuntu linux.
Pagina 2
Installatie subversion
Installatie: Subversion met Apache
Eerst: installeren we de benodigde apache packages.
Het aanmaken van een svn repository.
De svn directories moeten eigendom zijn van de apache user:
Alternatief kan je ook de bestanden eigendom laten zijn van user projectname, en eigendom van de group apache:
Configuratie van Apache
En vervolgens maak ik een .htpasswd aan, zodat de svn niet publiekelijk toegankelijk is:
Aanmaken svn project
Je repository is nu te bereiken vanaf: http://dev.yourdomain.ext/svn, maar we zullen eerst nog een project moeten importeren
Subversion structuur en initial import
Voor subversion is het handig om een bepaalde structuur aan te houden. De volgende mappen structuur word voor de meeste projecten aangehouden, en het is handig om je project in eerste instatie zo neer te zetten:
Dit is de meest aan te raden structuur, al zal je met kleine projecten dit niet volledig benutten. Als je deze structuur aanhoud zal je geen problemen in te toekomst krijgen wanneer je meerdere versies van je software gaat ontwikkelen.
/trunk
De trunk gebruik je als werkmap. Dit is de allerlaatste versie van je project. En hier zal je het meeste in werken als ontwikkelaar. Alle veranderingen 'commit' je in feite naar de trunk.
tags
Tags zijn versies (snapshots) van je software die je uitgeeft. Deze kan je bijvoorbeeld stable, en elke versie apart neerzetten.
branches
Branches zijn verschillende 'takken', zo kan je bijvoorbeeld een v2.0 en versie v3.0 naast elkaar blijven ontwikkelen.
Meer informatie over het plannen van je repository
Nu ga ik mijn eerste project in mijn svn zetten.
Ik maak een werkdirectory, waar ik mijn project al heb staan, en zal deze importeren in svn:
Ik maak hier een submap www aan, zodat ook andere mappen mogelijk zijn voor bijvoorbeeld sql dumps in /trunk/sql, of documentatie in /trunk/doc
Initial import
De structuur voor mijn svn project is compleet, en we zijn klaar voor de eerste import:
Dit zal de eerste structuur van je webroot importeren naar svn.
Eerst: installeren we de benodigde apache packages.
apt-get install subversion libapache2-svn
Het aanmaken van een svn repository.
mkdir /home/users/projectname/svn/
De svn directories moeten eigendom zijn van de apache user:
chown www-data:www-data -R /home/users/projectname/svn/
chmod 770 -R /home/users/projectname/svn/
Alternatief kan je ook de bestanden eigendom laten zijn van user projectname, en eigendom van de group apache:
chown projectname:www-data -R /home/users/projectname/svn/
chmod 770 -R /home/users/projectname/svn/
Configuratie van Apache
<VirtualHost ip:80>
DocumentRoot "/home/users/projectname/html"
ServerName www.dev.yourdomain.ext
ServerAlias dev.yourdomain.ext
<Directory "/home/users/projectname/html">
Options FollowSymLinks ExecCGI Includes
AllowOverride all
#IndexIgnore .htaccess
Order allow,deny
Allow from all
</Directory>
<Location /svn>
DAV svn
# any "/svn/foo" URL will map to a repository /home/users/projectname/svn/foo
SVNParentPath /home/users/projectname/svn/
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/users/projectname/dav_svn.passwd
Require valid-user
</Location>
</VirtualHost>
En vervolgens maak ik een .htpasswd aan, zodat de svn niet publiekelijk toegankelijk is:
htpasswd -c /home/users/projectname/dav_svn.passwd jouwgebruikersnaam
Aanmaken svn project
svnadmin create /home/users/projectname/svn/projectname
/etc/init.d/apache2 restart
Je repository is nu te bereiken vanaf: http://dev.yourdomain.ext/svn, maar we zullen eerst nog een project moeten importeren
Subversion structuur en initial import
Voor subversion is het handig om een bepaalde structuur aan te houden. De volgende mappen structuur word voor de meeste projecten aangehouden, en het is handig om je project in eerste instatie zo neer te zetten:
Dit is de meest aan te raden structuur, al zal je met kleine projecten dit niet volledig benutten. Als je deze structuur aanhoud zal je geen problemen in te toekomst krijgen wanneer je meerdere versies van je software gaat ontwikkelen.
/trunk
/tags
/release-myproject_v0.1-beta/
/release-myproject_v0.2/
/release-myproject_v0.3-rc/
/release-myproject_v0.3/
/stable/
/development/
/branches
/myproject_v1
/myproject_v2
/myproject_v3
/trunk
De trunk gebruik je als werkmap. Dit is de allerlaatste versie van je project. En hier zal je het meeste in werken als ontwikkelaar. Alle veranderingen 'commit' je in feite naar de trunk.
tags
Tags zijn versies (snapshots) van je software die je uitgeeft. Deze kan je bijvoorbeeld stable, en elke versie apart neerzetten.
branches
Branches zijn verschillende 'takken', zo kan je bijvoorbeeld een v2.0 en versie v3.0 naast elkaar blijven ontwikkelen.
Meer informatie over het plannen van je repository
Nu ga ik mijn eerste project in mijn svn zetten.
Ik maak een werkdirectory, waar ik mijn project al heb staan, en zal deze importeren in svn:
mkdir -p /home/users/projectname/project-skel/trunk
mkdir -p /home/users/projectname/project-skel/tags
mkdir -p /home/users/projectname/project-skel/branches
Ik maak hier een submap www aan, zodat ook andere mappen mogelijk zijn voor bijvoorbeeld sql dumps in /trunk/sql, of documentatie in /trunk/doc
Initial import
De structuur voor mijn svn project is compleet, en we zijn klaar voor de eerste import:
svn import /home/users/projectname/project-skel/ file:///home/users/projectname/svn/projectname/ -m"initial import"
Dit zal de eerste structuur van je webroot importeren naar svn.
Pagina 3
Optioneel: installatie trac
Onze svn repository is nu in orde, en nu gaan we trac installeren.
Voor een lijst met projecten die trac gebruiken kan je kijken op
http://trac.edgewall.org/wiki/TracUsers
De belangrijkste features van trac zijn:
[li]Browse source - een web interface voor je svn repository[/li]
[li]Tickets - Een todo list voor bugs en features[/li]
[li]Roadmap - Wanneer moeten welke tickets af zijn?[/li]
[li]Timeline - Wie heeft wat toegevoegd of veranderd[/li]
[li]Wiki - Een wiki waarin naar tickets, roadmaps, history en commits kan worden verwezen[/li]
Vereiste:
Python moet geinstalleerd zijn op je server, ook is het aan te raden om mod_python te installeren. Er zijn verschillende manieren om trac te installeren, in deze tutorial gebruik ik de laatste stable versie, aangezien de debian repositories wat verouderd zijn. Ik installeer deze lokaal.
Voor de laatste versie, zie:
http://trac.edgewall.org/wiki/TracDownload
Vervolgens halen we de laatste trac stable van de trac site:
Het trac-project aanmaken voor projectname:
Je zult een interactieve interface krijgen om je trac project op te zetten. Persoonlijk vind ik sqllite een simpele en goede optie voor trac, zodat de gehele directory in een keer te backuppen is. Het is ook mogelijk om een andere sql driver zoals postgresql te gebruiken. Vul bij het svn project
in.
Trac in apache
Voeg het volgende toe aan je virtualhost:
Restart apache:
[/code]/etc/init.d/apache2 restart[/code]
En je trac zal werken op http://dev.yourdomain.ext/trac
Optioneel: Installeren webadmin plugin
Voeg het volgende toe in /home/users/projectname/trac/conf/trac.ini
Admins rechten geven
Trac zal gebruik maken van je /home/users/projectname/dav_svn.passwd
Gebruikers uit de dav_svn.passwd kun je admin maken door:
Voor een lijst met projecten die trac gebruiken kan je kijken op
http://trac.edgewall.org/wiki/TracUsers
De belangrijkste features van trac zijn:
[li]Browse source - een web interface voor je svn repository[/li]
[li]Tickets - Een todo list voor bugs en features[/li]
[li]Roadmap - Wanneer moeten welke tickets af zijn?[/li]
[li]Timeline - Wie heeft wat toegevoegd of veranderd[/li]
[li]Wiki - Een wiki waarin naar tickets, roadmaps, history en commits kan worden verwezen[/li]
Vereiste:
Python moet geinstalleerd zijn op je server, ook is het aan te raden om mod_python te installeren. Er zijn verschillende manieren om trac te installeren, in deze tutorial gebruik ik de laatste stable versie, aangezien de debian repositories wat verouderd zijn. Ik installeer deze lokaal.
apt-get install libapache2-mod-python
a2enmod mod_python
Voor de laatste versie, zie:
http://trac.edgewall.org/wiki/TracDownload
Vervolgens halen we de laatste trac stable van de trac site:
svn co http://svn.edgewall.org/repos/trac/branches/0.10-stable trac-stable
cd trac-stable
python setup.py install
Het trac-project aanmaken voor projectname:
cd /home/users/projectname
trac-admin trac initenv
chown -R projectname:www-data trac/
chmod -R 770 trac/
Je zult een interactieve interface krijgen om je trac project op te zetten. Persoonlijk vind ik sqllite een simpele en goede optie voor trac, zodat de gehele directory in een keer te backuppen is. Het is ook mogelijk om een andere sql driver zoals postgresql te gebruiken. Vul bij het svn project
/home/users/projectname/svn/projectname/
in.
Trac in apache
Voeg het volgende toe aan je virtualhost:
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /home/users/projectname/trac/
PythonOption TracUriRoot /trac
AuthType Basic
AuthName "Trac admin"
AuthUserFile /home/users/projectname/dav_svn.passwd
Require valid-user
</Location>
Restart apache:
[/code]/etc/init.d/apache2 restart[/code]
En je trac zal werken op http://dev.yourdomain.ext/trac
Optioneel: Installeren webadmin plugin
easy_install http://svn.edgewall.com/repos/trac/sandbox/webadmin
Voeg het volgende toe in /home/users/projectname/trac/conf/trac.ini
[components]
webadmin.* = enabled
Admins rechten geven
Trac zal gebruik maken van je /home/users/projectname/dav_svn.passwd
Gebruikers uit de dav_svn.passwd kun je admin maken door:
trac-admin /home/users/projectname/trac permission add bob TRAC_ADMIN
Pagina 4
Subversion workflow
Subversion is super handig, maar je moet het in het begin even doorkrijgen. Voor windows is er een superhandige client beschikbaar: turtoiseSVN.
http://tortoisesvn.tigris.org/
Ook voor het IDE eclipse is er een goede subversion plugin:
http://subclipse.tigris.org/
Checkout
In eerste instantie zul je een checkout doen. Dit betekend dat je je laatste versie van je svn download, en deze onder 'version control' zet. Dit betekend dat svn de veranderingen ten opzichte van je repository bijhoud. Als je turtoisesvn gedownload hebt zul je deze veranderingen grafisch zien, doordat er een rood icoontje in windows verkenner zichtbaar is als er een bestand verander is ten opzichte van je repository.
Dus de eerste checkout zal zijn van je trunk.
(turtoisesvn: rechtermuisknop: checkout)
Ook kan je van bepaalde delen een checkout doen:
Dit zal de code downloaden van svn, en onder version control plaatsen. Dit creeert een locale kopie van je code, waarin je verder kan werken.
Add
Wanneer je nieuwe bestanden toevoegt aan je checkout (je werkmap), moet je deze eerst toevoegen, met het commando add (turtoisesvn: rechtermuisknop: add). De bestanden staan nog niet op de server, maar staan wel onder version control
Update
Bij een update wordt je locale werkmap (checkout) bijgewerkt met de versie op de server. Bestanden waarvan een nieuwere versie op de server staat zullen worden bijgewerkt.
Move
Wanneer je iets verplaatst in je repository, is het aan te raden om het svn move commando te gebruiken, dan blijft de geschiedenis bewaard. Wanneer je het in de verkenner verplaatst zal het bij een commit betekenen dat de oude locatie gedelete wordt, en de nieuwe locatie geadd. Dus svn move is handiger:
Copy
Een copy bij svn betekend dat de bestanden een nieuwe locatie krijgen toegewezen, maar feitelijk behouden ze de oude geschiedenis. Het zelfde geld wat voor move geld: als je ze copied met svn blijft de geschidenis bewaard, anders niet.
Commit
Bij een commit worden alle veranderingen die je gedaan hebt ten opzichte van de broncode op de server bijgewerkt. Alle moves, deletes en updates worden pas verwerkt als je ze commit.
http://tortoisesvn.tigris.org/
Ook voor het IDE eclipse is er een goede subversion plugin:
http://subclipse.tigris.org/
Checkout
In eerste instantie zul je een checkout doen. Dit betekend dat je je laatste versie van je svn download, en deze onder 'version control' zet. Dit betekend dat svn de veranderingen ten opzichte van je repository bijhoud. Als je turtoisesvn gedownload hebt zul je deze veranderingen grafisch zien, doordat er een rood icoontje in windows verkenner zichtbaar is als er een bestand verander is ten opzichte van je repository.
Dus de eerste checkout zal zijn van je trunk.
(turtoisesvn: rechtermuisknop: checkout)
svn checkout http://dev.jouwdomein.ext/svn/projectname/trunk
Ook kan je van bepaalde delen een checkout doen:
svn checkout http://dev.jouwdomein.ext/svn/projectname/trunk/webroot
Dit zal de code downloaden van svn, en onder version control plaatsen. Dit creeert een locale kopie van je code, waarin je verder kan werken.
Add
Wanneer je nieuwe bestanden toevoegt aan je checkout (je werkmap), moet je deze eerst toevoegen, met het commando add (turtoisesvn: rechtermuisknop: add). De bestanden staan nog niet op de server, maar staan wel onder version control
svn add filename
Update
Bij een update wordt je locale werkmap (checkout) bijgewerkt met de versie op de server. Bestanden waarvan een nieuwere versie op de server staat zullen worden bijgewerkt.
svn update
Move
Wanneer je iets verplaatst in je repository, is het aan te raden om het svn move commando te gebruiken, dan blijft de geschiedenis bewaard. Wanneer je het in de verkenner verplaatst zal het bij een commit betekenen dat de oude locatie gedelete wordt, en de nieuwe locatie geadd. Dus svn move is handiger:
svn move old-location new-location
Copy
Een copy bij svn betekend dat de bestanden een nieuwe locatie krijgen toegewezen, maar feitelijk behouden ze de oude geschiedenis. Het zelfde geld wat voor move geld: als je ze copied met svn blijft de geschidenis bewaard, anders niet.
svn copy location new-location
Commit
Bij een commit worden alle veranderingen die je gedaan hebt ten opzichte van de broncode op de server bijgewerkt. Alle moves, deletes en updates worden pas verwerkt als je ze commit.
svn commit -m "Message"
# of
svn commit
Pagina 5
Tips, Links en bronvermelding
Svn links
http://www.debuntu.org/2006/05/20/54-how-to-subversion-svn-with-apache2-and-dav
Svn open source boek: Version Control with Subversion
http://svnbook.red-bean.com/
Bespreking door pgfrank: http://www.phphulp.nl/php/boeken/76/
Trac documentatie en installatie
http://trac.edgewall.org/
http://www.debuntu.org/2006/05/20/54-how-to-subversion-svn-with-apache2-and-dav
Svn open source boek: Version Control with Subversion
http://svnbook.red-bean.com/
Bespreking door pgfrank: http://www.phphulp.nl/php/boeken/76/
Trac documentatie en installatie
http://trac.edgewall.org/
Reacties
0