Instalacja servera svn na ubuntu 10.04 /32bit
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.
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
@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