Subversion server na CentOS 5.5

Subversion nebo jiné verzovací nástroje (CVS, git,...) zná asi každý, kdo přičuchl k programování a projektu, na kterém spolupracuje více lidí. Kdo nezná, ať googluje (malé seznámení je trochu níže). V tomto článku se pokusím představit, jak rozběhat SVN server dostupný přes http na CentOSu.

English speaking? Try this link: HowTos/Subversion - CentOS Wiki

SVN logo

Co to SVN, sakra, je?

Jak říká wikipedie:

Subversion (zkráceně SVN) je systém pro správu a verzování zdrojových kódů, náhrada za starší CVS. (...) Subversion je tak jako CVS založeno na principu centrálního repozitáře.

Pomocí SVN ale nemusíte spravovat jen zdrojové kódy, můžete jej využít k verzování ... vlastně čehokoliv. Například pro uložení změn důležitých konfigurací, psaní bakalářské/diplomové práce, dokumentace, uložení různých verzí při úpravě obrázků, atd. V současné době se jedná o jeden z nejpoužívanějších systémů (nemusí nutně znamenat, že je nejlepší).

Poznámka: pro tento článek používám jako doménu example.com, pokud používáte metodu copy & paste, pak si ji nezapomeňte změnit

Instalace

InstallK repozitářům SVN lze přistupovat různě: lokálně, přes samotný protokol svn, nebo přes http (a šifrované https). Právě poslední jmenované využiji. Ke zprovoznění SVN bude potřeba web server apache, balík subversion a modul mod_dav_svn.

yum install httpd subversion mod_dav_svn

Poznámka: pokud instalujete na 64bitový systém, stačí instalovat balík subversion.x86_64. Instalace subversion s yum s sebou tahá i verzi i386 a díky ní všemožné závislosti (např. - pro mě nevysvětlitelně - postgres-libs).

Repozitáře budeme ukládat do složky /var/www/svn, tak ji vytvoříme:

mkdir /var/www/svn

Konfigurace

Webserver

Při instalaci balíku mod_dav_svn se vytvoří i základní konfigurace v souboru /etc/httpd/conf.d/subversion.conf, kde mj. se načítá samotný modul.

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

Mimo toto potřebujeme webserveru říct, pod jakou adresou budeme k repozitáři přistupovat. V základním nastavení použijeme direktivu Location (samozřejmě lze použít i pod VirtualHostem).

<Location /svn>
        DAV svn
        SVNPath /var/www/svn/MyFirstRepo
 
        AuthType Basic
        AuthName "Repozitare"
        AuthUserFile /etc/svn/auth-repo.conf
</Location>

Co přesně jsme nyní udělali? Při přístupu na http://example.com/svn bude webserver vědět, že se má postarat o svn:

  • SVNPath - cesta k repozitáři
  • Auth* - k repozitáři mohou přistupovat pouze ověření uživatelé, nechceme přece, aby nám tam lezl kde kdo..

SVNPath vs. SVNParentPath: Chcete-li na serveru obsluhovat pouze jeden repozitář je roumné použít direktivu SVNPath. Pro více repozitářů pak slouží direktiva SVNParentPath, která se stará o jejich zobrazování pomocí http://domena.cz/svn/jmeno_repozitare. Jako parametr SVNParentPath slouží cesta k adresáři nadřazenému repozitářům.

Po změnách musíme novou konfiguraci načíst:

$ service httpd configtest
Syntax OK
$ service httpd reload

Uživatelé

UsersUživatelé jsou (v našem případě) načítani ze souboru /etc/svn/auth-repo.conf, jedná se o klasický htpasswd soubor. Každý uživatel je zapsán na vlastním řádku ve formátu username:encrypted_passwd. Uživatele přidáme pomocí příkazu htpasswd. Při vytváření souboru nezapoměňte na přepínač -c, pro šifrování pomocí MD5 použijte přepínač -m.

$ mkdir /etc/svn
$ htpasswd -cm /etc/svn/auth-repo.conf newuser
New password:
Re-type new password:
Adding password for user newuser
$

První repozitář

O vytvoření repozitáře se postará příkaz svnadmin. Po vytvoření musíme změnit práva tak, aby s repozitářem mohl pracovat webserver:

$ cd /var/www/svn
$ svnadmin create MyFirstRepo
$ chown apache:apache MyFirstRepo/ -R

Závěr I.

Pokud se někde nestala chybka, měl by být repozitář již nyní dostupný přes protokol http. Ověřit si to můžete jednoduše: otevřete si v prohlížeči vaši adresu (např. http://example.com/svn) a chce-li po vás ověření a zobrazí Revision 0: /, vše funguje jak má..

Na svém počítači pak můžete připojení otestovat pomocí svn checkout.

# svn co http://example.com/svn svn
(...)
Authentication realm: <http://example.com:80> Authorization Realm
Username: user
Password for 'user': 
(...)
Checked out revision 0.
#

Nyní máme ve složce svn staženou nultou revizi z vašeho vlastního repozitáře. Gratuluji, máte fungující subversion server!

Více info (nastavení přístupů, rozvržení repozitáře a použité zdroje) najdete na následující stránce.