SVN szerver készítése Linux alatt

Röviden szeretném bemutatni, hogyan is lehet Linux alatt SVN szervert készíteni!

Mivel most telepítettem újra a rendszerem, amire egy Redhat Fedora Core 4 került, ezért ezen keresztül mutatom be az installálást. Természetesen más disztribúción is elvégezhető a telepítési folyamat..

Nos, első lépésben telepítsük fel a kedvenc disztibóciónkhoz a kapott subversion csomagot vagy szedjük le a forrást és fordítsuk le!

FC4 alatt ez a csomag a subversion-1.1.4-3 lesz.

A csomagban találunk egy svnserve programot. Ez az SVN szerver.

SVN szerver telepítése

Csináljunk egy állományt az /etc/xinetd.d alatt svn néven. Ez fogja tartalmazni a xinetd-nek az SVN szerver indításához szükséges paramétereket.

Az általam készített állomány így néz ki:

service svn
{
    disable = no
    flags = REUSE
    socket_type = stream
    wait = no
    user = svn
    server = /usr/sbin/svnserve
    server_args = -i -r /home/svn/repositories
}

Az állományban a user résznél én svn felhasználót használok. Természetesen ezt a rendszerünkön létre kell hozni:
/usr/sbin/adduser svn

Nálam a felhasználó gyökérkönyvtára a /home/svn lesz, ezért a konfigurációs állományban a repository helyét a /home/svn/repositories alá adtam meg. Ezt az svnserve programnak a -r kapcsolóval lehet megadni!

Nos, akkor hozzuk létre a repositories könyvtárat az SVN felhasználó nevében:

su svn
mkdir -p /home/svn/repositories
exit

Fontos, hogy a repository könyvtárat és később magát a repository adatokat is az svn felhasználó nevében hozzuk létre, különben később a szerver nem fogja tudni elérni!

Mivel xinetd-t használok, ezért a rendszeren ennek is futnia kell! Indítsuk el a setup programot (terminálnál begépelni setup!), majd ott válasszuk ki a "System services" menüpontot! A vége fele keressük meg a xinetd-t és engedélyezzük a futtatását. (Ha csillag van, akkor fut!) Amennyiben nincs a listában xinetd, úgy telepítsük fel az FC4 lemezről ezt is!

Jó, akkor most indítsuk újra a xinetd-t:
/etc/init.d/xinetd restart

Egy új repository létrehozása

Lépjünk be az SVN felhasználó nevében (su svn), majd hozzuk létre az első repository-nk pl. test néven az svnadmin felhasználásával:
svnadmin create /home/svn/repositories/test

Mi is ez a repository? Ez egy olyan adatbázis lesz, amelyben egy könyvtárszerkezetben lehet mindenféle projektet (vagy csak 1-et) tárolni. Pl. ez lehet csak egy projekt neve, de lehet egy cég vagy csoportnév is. A repository egy olyan egység lesz, amelyben a forráskódokat és adatokat tetszőlegesen másolhatunk, mozgathatunk és mindenféle más műveletet végezhetünk. Repository-k között pl. a másolás vagy mozgatás már nem lehetséges!

Minden repository-hoz felhasználókat rendelhetünk. Nézzünk bele a repository konfigurációs állományába, amelyet a /home/svn/repositories/test/conf/svnserve.conf alatt találunk!

Szeretnék két egyszerű példát bemutatni!

Mindenki számára elérhető repository konfigurálása

Az svnserve.conf beállítása a repository/conf alatt:

[general]
anon-access = write
auth-access = write

Nagyon egyszerű dolgunk van. Kétfajta felhasználót tudunk megkülönböztetni: anonymous = anon-access (nem kell jelszó és név hozzá) és az authentikált = auth-access (név és jelszó kell hozzá)

Mindkét csoportnak háromféle jogosultságot tudunk megadni: none = nincs joga hozzá, read = csak olvasni tud (pl. forráskódokat letölteni), write = olvasni és módosítani is tud benne

A fenti példában azt írtam le, hogy mind az anoním, mind az authentikált felhasználó írásra és olvasásra egyaránt elérheti.

Felhasználók számára írásra engedélyezett repository konfigurálása

Abban az esetben, ha néhány felhasználónak szeretnénk írási jogot adni, úgy állítsuk be az auth-access sort write-ra, míg az anon-access-t none-ra vagy read-re:

[general]
anon-access = read
auth-access = write

Ebben a példában a névvel és jelszóval bejelentkezett felhasználók írni is tudják, az anoním felhasználók viszont csak olvashatják a repository-nkat. Ez a tipikus beállítás az open source programokhoz.

Igen ám, de hol tároljuk el a felhasználóinkat és a hozzá tartozó jelszavakat?

Bővítsük a konfigurációs állományunkat a következő sorral:
password-db = mypasswd

Ez nem ördöngősség. Ezzel azt mondtuk meg, hogy a jelszó állományunk egy mypasswd elnevezésű állomány lesz az svnserve.conf mellett. (Természetesen a név és a path is átírható)

OK, most már csak ezt a jelszó állományt kell leírni, amely így néz ki:

[USERS]
imre = titkos

Vagyis a [USERS] alatt a felhasználókat kell felsorolni a jelszavukkal együtt. A példámban egy imre nevű felhasználónk lesz titkos jelszóval.

Rövid teszt

A részletes kliens használatot ide nem szeretném leírni, de addig is 1-2 apróság!

Megjegyzem, hogy az SVN helpet ad 1-1 parancsról vagy a használható parancsairól is:
svn help
svn help commit

Anyag feltöltése a repository-ba

Hozzunk létre egy könyvtárat, másoljuk bele a forrásainkat, majd lépjünk bele. Utána: svn import . svn://localhost/test. Ezzel az aktuális könyvtár tartalmát felrakjuk a test repository-ba. Amennyiben panaszkodna, hogy nem tudunk szöveget beírni, úgy ezt egy -m "szöveg" kapcsolóval megtehetjük vagy a kedvenc editorunkat is megadhatjuk (pl. mcedit): export SVN_EDITOR=mcedit!

Amennyiben felhasználónév és jelszó is kell, azt adjuk meg, amikor az SVN kliens kéri!

Anyag leszedése könyvtárral együtt

Hozzunk létre egy könyvtárat, majd svn checkout svn://localhost/test.

Anyag leszedése, de csak a könyvtár tartalmával

Hozzunk létre egy könyvtárat, majd svn checkout svn://localhost/test ..

A végén kell a pont!

Megváltozott anyag feltöltése a repository-ba

Az adott könyvtárban állva: svn commit

Repository-ból a változások letöltése

Adott könyvtárban állva: svn update

Különbség a repository és a lokális anyag között

Könyvtárban állva: svn diff
Vagy a státuszhoz: svn st