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:
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://
Dostęp szyfrowany przez http jest taki sam jak dostęp nieszyfrowany, z tym że do apache'a trzeba dodać certyfikat SSL.
7 comments:
Świetny tekst, prosto lekko łatwo i przyjemnie.
Super artykul. Bardzo mi pomogl. SVNa uzywalem w pracy ale nigdy nie konfigurowalem u siebie. Tekst zaoszczedzil mi duzo czasu.
Jeszcze uzupełnienie.
Poza subversion należy doinstalować pakiety svn-java i svn-javahl. Inaczej nie będzie banglać pod Eclipse.
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.
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
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.
Błąd: htpasswd /etc/apache2/dav_svn.paswd franek
zgubiło się jedno s w nazwie pliku ;)
Post a Comment