Fejlesztőként szükséges egy verziókövető rendszer, sok lehetőség közül és a Subversion-t használom, ennek telepítéséhez két programot kell feltennünk:
# yum install subversion.x86_64 mod_dav_svn.x86_64
Ezen után szerkesztenünk kell a subversion.conf állományt az Apache Httpd könyvtárában:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<VirtualHost *:80>
ServerAdmin auth.gabor@javaforum.hu
ServerName svn.javaforum.hu
DocumentRoot /var/www/svn/
<IfModule dav_svn_module>
<Location "/svn">
DAV svn
SVNParentPath /var/www/svn/
SVNListParentPath on
DefaultType text/plain
Satisfy Any
Require valid-user
<IfModule authz_svn_module>
AuthzSVNAccessFile /var/www/svn/access.conf
</IfModule>
AuthType Basic
AuthName "Java Forum 2.0 Subversion Repository"
AuthUserFile /var/www/svn/passwd
</Location>
</IfModule>
</VirtualHost>
Majd hozzunk létre egy próba repository-t, megfelelő a subversion.conf állományban fellelhető példa is (fent már töröltük):
# htpasswd -c -b /var/www/svn/passwd testuser testpassword
Adding password for user testuser
# cat /var/www/svn/passwd
testuser:73UHFz6bswdRY
A második állomány a hozzáféréseket szabályozza:
[stuff:/]
* = r
testuser = rw
És a Subversion szerverünk üzemképes, látogassunk el a megadott oldalra, jelen esetben ez a http://svn.javaforum.hu/svn/stuff/ lesz, ezt tudjuk böngészni, illetve végre tudunk hajtani rajta pár szokásos parancsot (kliens gépről):
> svn co http://svn.javaforum.hu/svn/stuff/
Checked out revision 0.
> cd stuff/
stuff> ls -l
összesen 0
stuff> echo "a" > testfile
stuff> svn stat
? testfile
stuff> svn add testfile
A testfile
stuff> svn stat
A testfile
stuff> svn ci --username testuser -m "Added testfile" .
Authentication realm: <http://svn.javaforum.hu:80> Java Forum 2.0 Subversion Repository
Password for 'testuser':
Adding testfile
Transmitting file data .
Committed revision 1.
Nos, ez működik. A továbbiakban létrehozhatunk újabb és újabb repókat vagy az svnadmin `dump` és `load` parancsával exportálhatunk és importálhatunk egy-egy repót egy meglévő szerverről.
Van web alapú adminisztrációs eszköz?
Van néhány, én a svn-access-manager nevű programot preferálom, amelyből le tudunk tölteni egy rpm csomagot, majd fel tudjuk telepíteni, illetve telepítsünk egy php-pgsql csomagot is, mert szükség lesz rá:
# rpm -Uvh /tmp/svn-access-manager-0.5.5.2-1.noarch.rpm
Preparing... ########################################### [100%]
1:svn-access-manager ########################################### [100%]
# yum install php-pgsql.x86_64
Beállítás
Telepítés után be is kell állítanunk ezt az eszközt, amelyhez szükséges lesz egy üres PostgreSQL adatbázis, egy megfelelő felhasználóval, ezért hozzuk létre ezeket:
$ createuser svnadmin -P
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
$ createdb -O svnadmin -E UTF-8 svnadmin
Majd a webes telepítési beállítás lépésein haladjunk át (amely folyamat közben találkozhatunk SELinux megszorításokkal): http://193.178.119.31/svn-access-manager/install/install.php
Mentés
Mindig minden adatról készítsünk rendszeres mentést, ez alól a Subversion se legyen kivétel, s a többi szolgáltatáshoz hasonlóan próbáljuk meg automatizálni a mentést.
Első lépésképp listázzuk ki a repókat:
# ls /var/www/svn/ | egrep -v "access.conf|passwd"
android
javaforum20
javaforum2.0
stuff
# mkdir /home/backup/svn/
# vi /home/backup/svn/svn_backup.sh
# chmod +x /home/backup/svn/svn_backup.sh
Ezek után már könnyű dolgunk van a script megírását illetően:
#!/bin/bash
cd /var/www/svn/
for i in `ls | egrep -v "access.conf|passwd"`
do
svnadmin dump $i | bzip2 -c >/home/backup/svn/$i.dump.bz2
done
Futtassuk le kézzel (kicsit szószátyár, de elviselhető):
# /home/backup/svn/svn_backup.sh
* Dumped revision 0.
[...]
* Dumped revision 1042.
# ls -l /home/backup/svn/
-rw-r--r--. 1 root root 11989111 jún 29 16.13 android.dump.bz2
-rw-r--r--. 1 root root 37485835 jún 29 16.18 javaforum2.0.dump.bz2
-rw-r--r--. 1 root root 75403425 jún 29 16.15 javaforum20.dump.bz2
-rw-r--r--. 1 root root 395 jún 29 16.18 stuff.dump.bz2
-rwxr-xr-x. 1 root root 145 jún 29 16.12 svn_backup.sh
Ellenőrizzük, hogy megfelelő-e a mentés tartalma, majd állítsunk be egyscript-et a `crontab -e` használatával:
MAILTO=root
23 4 * * * /home/backup/svn/svn_backup.sh
S másnap ellenőrizzük, hogy megfelelően működik-e. 🙂