Wednesday, September 3, 2008

Instalacja subversion pod ubuntu (lub innym linuxem)

Zainstalowanie subversion pod ubuntu jest stosunkowo proste. Przede wszystkim trzeba ściągnąć pakiet svn

sudo apt-get install subversion

Subversion zainstalowane, teraz trzeba utworzyć repozytorium. Zanim to jednak zrobimy, warto utworzyć użytkownika specjalnie dla subversion.

sudo adduser svn

Teraz możemy już utworzyć repozytorium. Najlepiej od razu jako użytkownik svn.

sudo -u svn mkdir /home/svn/repository
sudo -u svn svnadmin create /home/svn/repository

Ok, mamy repozytorium. Dostać się do niego można na kilka sposobów, używając różnych protokołów.

file://

Dostęp
bezpośrednio przez system plików. Aby go uzyskać wystarczy komenda

svn info file:///home/svn/repository

svn to wywołanie klienta subversion, info mówi że chcemy tylko ściągnąć informacje o danym repozytorium, a to co później to protokół i adres repozytorium.

Kontrola dostępu na poziomie dostępu do plików. Tzn. jeśli user który odpala tę komendę ma dostęp do odczytu plików w repozytorium, to może je odczytać, jeśli ma uprawnienia także do zapisu, to może zapisać.

svn://

To jest specjalny protokół subversion. Nieszyfrowany. Aby połączyć się z serwerem należy go najpierw uruchomić:

sudo -u svn svnserve -d -r /home/svn/repository

sudo -u svn jest po to, żeby serwer uruchomić jako użytkownik svn. Musi on być uruchomiony przez użytkownika, który ma dostęp do plików zarówno do odczytu jak i zapisu.
-d oznacza że uruchamiamy serwer w trybie deamon
-r to położenie naszego repozytorium w systemie plików

I teraz już możemy się odwołać do repozytorium przez klienta svn:

svn info svn://localhost

Co bardziej dociekliwi zauważą, że tutaj nie trzeba podawać ścieżki do repozytorium. Wystarczy, że podaliśmy ją serwerowi, a on już na odpowiednim porcie "podaje" co trzeba.

Tutaj dostęp kontrolujemy za pomocą mechanizmów Subversion. W katalogu /home/svn/repository/conf znajduje się plik svnserve.conf
Możemy odkomentować linijki

# anon-access = read
# auth-access = write


Są to domyślne ustawienia oznaczające odczyt dla każdego, zapis tylko dla zautoryzowanych użytkowników. Możliwe wartości to read, write i none. Żeby użytkownicy mogli się logować, musimy jeszcze odkomentować linijkę

# password-db = passwd

Jest to wskazanie na plik, w którym trzymane są nazwy i hasła użytkowników. Jeśli ścieżka nie jest podana, odnosi się do katalogu conf. Nazwy i hasła w tym pliku trzymane są w czystym tekście, w postaci niezaszyfrowanej, więc ważne jest odpowiednie ustawienie dostępu do tego pliku.

svn+ssh://

Tak jak wyżej, z tą różnicą, że połączenie jest szyfrowane i nie potrzebujemy startować serwera. Poza tym nie jest używany plik passwd. Są jednak używane ustawienia anon-access i auth-access. W tym przypadku zautoryzowany użytkownik to taki, któremu udało się zautoryzować przez ssh.

http://

Aby udostępnić repozytorium Subversion przez HTTP potrzebny jest serwer Apache. Instalujemy więc apache'a:

sudo apt-get install apache2 libapache2-svn

Teraz należy odpowiednio zmodyfikować plik /etc/apache2/mods-enabled/dav_svn.conf Modyfikacje polegają głównie na odkomentowaniu poszczególnych linii:

<Location /svn>
DAV svn
#Tutaj ścieżka do naszego repozytorium
SVNPath /home/svn/repository

#Konfiguracja sposobu autoryzacji
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd

#Dzięki tym trzem liniom każdy ma dostęp do odczytu, ale tylko
#zautoryzowani użytkownicy do zapisu
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>

</Location>

Serwer skonfigurowany, dostęp jako tako też, teraz należałoby ustawić plik
/etc/apache2/dav_svn.passwd. Plik ten podaliśmy powyżej jako plik z hasłami. Aby dodać do niego użytkownika, należy wykonać komendę

htpasswd /etc/apache2/dav_svn.paswd franek

System zapyta jeszcze o hasło dla franka, i użytkownik franek zostanie dodany do pliku. Od tej chwili będzie mógł autoryzować swój dostęp do naszego repozytorium subversion.

Serwer apache uruchamiany jest z prawami użytkownika www-data. Nie ma on dostępu do naszego repozytorium, więc musimy mu taki dostęp nadać. Możemy to zrobić na dwa sposoby:
1. Dodać użytkownika www-data do grupy svn i dać poszczególnym plikom i katalogom w repozytorium możliwość zapisu dla grupy
2. Zmienić właściciela repozytorium na www-data.

Użyjemy tutaj drugiego sposobu ze względu na jego prostotę ;)

sudo chown -R www-data:www-data /home/svn

Teraz tylko zrestartować apache'a

sudo /etc/init.d/apache2 restart

I możemy korzystać z repozytorium pod adresem http:///svn

https://

Dostęp szyfrowany przez http jest taki sam jak dostęp nieszyfrowany, z tym że do apache'a trzeba dodać certyfikat SSL.

7 comments:

Anonymous said...

Świetny tekst, prosto lekko łatwo i przyjemnie.

Anonymous said...

Super artykul. Bardzo mi pomogl. SVNa uzywalem w pracy ale nigdy nie konfigurowalem u siebie. Tekst zaoszczedzil mi duzo czasu.

Koziołek said...

Jeszcze uzupełnienie.
Poza subversion należy doinstalować pakiety svn-java i svn-javahl. Inaczej nie będzie banglać pod Eclipse.

Anonymous said...

Dla mnie (zielono-żółty) w linux to poprostu kwintesencja tego co trzeba było napisać w manualach (a nie jakieś kompilowanie ze źródeł itp banaluki). Autor świetnie ujął to zagadnienie, pifko dla niego.

Gremek said...

Ja bym tu tylko dodał jeszcze, że
sudo -u svn svnadmin create /home/svn/repository
trzeba uruchomić jako zwykły user, bo jak zrobi to ktoś zalogowany jako root to wywali błąd

Anonymous said...

htpasswd AuthUserFile /etc/apache2/dav_svn.passwd tester

nie działa dodanie hasła

Usage:
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password

htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file.
-n Don't update file; display results on stdout.
-m Force MD5 encryption of the password (default).
-d Force CRYPT encryption of the password.
-p Do not encrypt the password (plaintext).
-s Force SHA encryption of the password.
-b Use the password from the command line rather than prompting for it.
-D Delete the specified user.
On other systems than Windows, NetWare and TPF the '-p' flag will probably not work.
The SHA algorithm does not use a salt and is less secure than the MD5 algorithm.

Anonymous said...

Błąd: htpasswd /etc/apache2/dav_svn.paswd franek

zgubiło się jedno s w nazwie pliku ;)