Emanuel Salagean

a dreamer’s blog

Blog Poze Despre mine

Mutare subversion repository de pe Windows pe Linux & hooks  

Trebuie să recunosc, ca și dacă sunt plătit bine, încerc să refuz să folosesc soluții Microsoft, servere Windows. De aceea am purces la a transfera datele și serviciile de pe un Windows 2003 server, care era folosit ca și development and testing server de o echipa de programagori, pe un CentOS 5. Bazele de date mysql și configurarile de apache au fost simplu de mutat.
M-am gândit să detaliez mutarea repository-urilor de subversion, care am crezut că îmi vor da bătaie de cap, poate va fi de folos cuiva.Pașii sunt simpli:

1. Exportarea repository-ului din Windows. Presupunând ca avem repository-urile în D:\svn, comanda pentru export va fi: svnadmin dump d:\svn\nume_repository > nume_repository.dump 

2. Copierea fișierului de dump pe serverul de linux, prin orice metoda preferata: ftp, smb, etc.

3. Pe linux, vă asigurați ca este instalat pachetul de subversion (eu am folosit yum install subversion). Am ales pentru moment să folosesc svnserve ca și standalone daemon process. Pentru a porni serverul de svn comanda este: svnserve -d -r /home/svn. Unde /home/svn este locația pentru repository-urile din linux.

4. Crearea repository-ului pe linux cu comanda: snvadmin create /home/svn/nume_repository

5.  Încărcarea repository-ului pe linux din fișierul exportat și copiat de pe windows, folosind comanda: svnadmin load /home/svn/nume_repository <> nume_repository.dump

Hooks

Pe Windows, o versiune a proiectului din svn, era actualizată la fiecare commit care se făcea, prin utilizarea hooks. Acest lucru era foarte util pentru a putea avea o versiune actualizată spre a fi servită de apache, pentru testing.
În linux, am rezolvat acest lucru in felul urmator:

1. În directorul /home/svn/nume_repository/hooks am creat un fișier update-dev.c cu urmatorul continut:

#include
int main(int argc, const char *argv[])
{
system(”/usr/bin/svn update /var/www/nume_repository”);
}

unde, /var/www/nume_repository e directorul unde se face inițial un svn checkout, și care este servit de apache.

2. Se compileaza fișierul:
#gcc update-dev.c -o update-dev
#chown root:root update-dev
#chmod +s update-dev - adaugam bitul pentru setuid la drepturile executabilul update-dev, pentru a putea fi executat cu drepturi de root.

3. Se creează fișierul post-commit în directorul: /home/svn/nume_repository/hooks în care adaugam urmatoarea linie:
/home/svn/nume_repository/hooks/update-dev

Filosofia e simpla. Atunci când un utilizator va da commit la proiect, fișierul post-commit va executa micul programel update-dev, care la rândul lui va face un svn update în directorul din webserver, servit de apache, și astfel se vor putea testa modificarile.

The article has

no responses yet

Written by Emanuel Salagean

March 18th, 2008 at 5:37 pm

Posted in Work

Leave a Reply