Heavymind
Gdyby ludzie rozmawiali tylko o tym, co rozumieją, zapadłaby nad światem wielka cisza.

02/04/2011

Instalacja servera svn na ubuntu 10.04 /32bit

Opublikowane jako: Apache, Subversion — Tags: , , — Kubek Bartosz @ 15:51

Możliwe są 3 rodzaje instalacji serwera svn:

  • SVN+SSH
  • SVN+Apache
  • SVNServe

Ja wybrałem “SVN+Apache”.
Generalnie, instrukcje te powinny działać dla przedziału wersji ubuntu 7.x do 10.x, jednak zaznaczam że testowane było na 10.04 32bit.

Apache2 musi już działać (i być dostępne z zewnątrz (z internetu) jeśli do SVN też chcesz mieć dostęp), a program `svnadmin` powinien być zainstalowany. Wywołując ‘svnadmin help‘ sprawdzam czy działa. Jak nie, to należy doinstalować pakiet `subversion`.

Czas rozpocząć.
Tworzę katalog na repozytoria svn:
sudo mkdir -pv /var/svnRepositories
oraz nadaję my prawa 777:
sudo chmod 777 /var/svnRepositories

Na później, tworzę standardową strukturę katalogów dla projektu, gdzie “myProject” to nazwa projektu:

mkdir -pv /tmp/layout/myProject/branches/work #( tutaj trzyma się wersję rozwojową )
mkdir -pv /tmp/layout/myProject/tags #( tutaj tworzy się tagi wersji stabilnych )

Przelogowuję się na użytkownika www-data (czyli apache2), tak by przez niego stworzone pliki i katalogi miały właściciela apache2, które to apache2 później będzie pisało i czytało z repozytorium podczas korzystania z SVN):
sudo su www-data

Tworzę jedno główne repozytorium svn:

cd /var/svnRepositories
svnadmin create --fs-type fsfs /var/svnRepositories/svn

Tworzę plik z uprawnieniami dostępu do wyżej stworzonego repozytorium:

cd /var/svnRepositories
touch svn/conf/svn-auth-file
htpasswd -cmd svn/conf/svn-auth-file bkubek

…gdzie “bkubek” to nazwa usera. Po tym trzeba wpisac hasło by je stworzyć dla tego usera.

Importuję standardowy zestaw katalogów dla projektu (stworzony w punkcie 4 )
svn import /tmp/layout http://127.0.0.1/svn -m"initial structure"
jeśli CLI zapyta o:
    Hasło ‘www-data’:
to klikam “enter” by zapytał o innego usera svn, dla którego znam hasło. Dokładnie to podam mu usera “bkubek” z punktu 7. Czyli :
    Obszar uwierzytelniania: Subversion repository
    Użytkownik: bkubek
    Hasło ‘bkubek’: #… podaję wcześniej stworzone hasło
gdy CLI zapyta mnie:
    Zapisać hasło bez szyfrowania (tak/nie)?
…odpowiadam “tak”

Wychodzę z usera www-data poleceniem:
exit

Repozytorium stworzone. Teraz trzeba SVN sprzęgnąć z Apache.
Apache2 raczej posiada już MOD “dav”. Aby to sprawdzić, sprawdzam czy w katalogu:
    /etc/apache2/mods-available
…istnieją pliki:
    dav.load
    dav_fs.conf
    dav_fs.load
    dav_lock.load
Powinny. Trzeba zrobić im linki symboliczne do lokalizacji:
    /etc/apache2/mods-enabled

Apache2 raczej nie posiada domyślnie MODa “dav” do svn. Czyli w katalogu
    /etc/apache2/mods-available
…raczej nie istnieją pliki:
    dav_svn.conf
    dav_svn.load
…dlatego instaluję pakiet:
sudo aptitude install libapache2-svn

Po tym sprawdzić mi należy czy te dwa pliki :
    dav_svn.conf
    dav_svn.load
…mają automatycznie już symlinki w:
    /etc/apache2/mods-available
…i jeśli nie, to trzeba je stworzyć, z orginałów w:
    /etc/apache2/mods-available

Teraz konkret sprawa: dopisanie do konfiguracji apache informacji o tym gdzie leży svn repozytorium:
sudo mcedit /etc/apache2/apache2.conf

…i dopisuję na końcu pliku :

<Location /svn>
    DAV svn
    SVNPath /var/svnRepositories/svn/
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /var/svnRepositories/svn/conf/svn-auth-file
    Require valid-user
</Location>

Teraz restart apache2:
sudo /etc/init.d/apache2 restart

…i wypadało by usunąć katalog:
    /tmp/layout

Koniec. Serwer SVN działa :) Powinien ;)

Stawianie lokalnej kopii svn (checkout)

Ot taki bonus. Powiedzmy że chcemy nowy projekt postawić w :
    /var/www/myProject/
więc jedziemy:

sudo mkdir -pv /var/www/myProject
sudo chmod 777 /var/www/myProject
cd /var/www/myProject

teraz wystarczy przez svn wskazać że tutaj jest nasz projekt i “z-checkout-ować” repo svn tutaj:
svn co http://127.0.0.1/svn/myProject/branches/work .

teraz można dodać i wysłać przykładowy plik do servera svn:

touch example.txt
svn add example.txt
svn ci -m"example file"

fine.



Komentarze: 2 »

  1. Ogólnie bardzo fajny post :)

    Mam jedną uwagę:
    Stawiasz repo w svnRepositories/svn to ’svn’ jest już repozytorium i zalecał bym stosowanie repozytorium dla projektu a nie repozytorium ze wszystkimi projektami…
    Wydaje mi się że troszkę z tym pomieszałeś, choćby folder o nazwie svnRepositories wskazuje na to że będzie zawierał wiele repozytoriów :)
    Dlaczego o tym wspominam: SVN podbija rewizję przy każdej operacji na repozytorium, jeśli trzymasz w nim kilka projektów to staje się to uciążliwe (często trzeba zrobić update bo ktoś coś wgrał do innego projektu).

    Dodatkowo (popraw mnie jeśli się mylę) nie możesz przypisać uprawnień do podfolderu, tylko do repozytorium.

    Pozdrawiam,
    Krzychu

    Komentarz od krzychukula — 02/04/2011 @ 18:30

  2. @krzychukula:
    Potwierdzam wszystko o czym piszesz. Jednak osoby jak my kilka lat siedzące z svn wiedzą o zarówno teoretycznych jak i praktycznych niuansach pracy z svn. A ten artykuł jest dla newbies, którzy nie mając ani teorii ani praktyki, chcą jak najszybciej rozpocząć przygodę z svn, po najmniejszej linii oporu. Stąd jedno repo, stąd prawa 777, w końcu i przede wszystkim stąd formuła nadająca się do copy&paste.

    Komentarz od Kubek Bartosz — 02/04/2011 @ 18:57

Kanał RSS dla tego wpisu. TrackBack URL

Dodaj komentarz

Oparte na WordPress