Posiadacze routerów Linksysa z serii WRT54GL (i innych) z pewnością myśleli kiedyś nad instalacją alternatywnego oprogramowania. DD-WRT/OpenWRT wraz z modyfikacją polegającą na dodaniu wsparcia dla kart SD to dobry początek, jeżeli myśli się o małym, cichym serwerze działającym w trybie 24/7.

Dzisiaj pokażę Wam, jak postawić na wspomnianym routerze (i nie tylko) serwer SVN ze wsparciem dla SASL. Do edycji plików polecam edytor Vi.
Po pierwsze: potrzebny nam jest dostęp do pakietów z OptWare. Opis instalacji wsparcia dla OptWare można znaleźć na Wiki projektu DD-WRT. Korzystając z poniższych komend na routerze należy zainstalować pakiety svn oraz cyrus-sasl wraz z zależnościami:
ipkg install svn
ipkg install cyrus-sasl
Po drugie: należy zatroszczyć się o to, aby serwer SVN był włączany przy każdym starcie routera. W skryptach startowych (DD-WRT: interfejs webowy, Administration -> Commands -> Startup) należy dodać poniższą linijkę:
/opt/bin/svnserve --daemon --root=/katalog_glowny_repo_SVN
Po trzecie: po utworzeniu własnego repozytorium (komenda svnadmin create nazwa_repo w katalogu głównym repozytoriów) warto zainteresować się plikami znajdującymi się w katalogu głównym repozytorium. Mowa o pliku /scieżka_do_repo/conf/svnserve.conf w którym to powinny znaleźć się następujące linie:
[general]
anon-access = read
auth-access = write
authz-db = authz
realm = Identyfikator_repo_bez_spacji
[sasl]
use-sasl = true
min-encryption = 0
max-encryption = 256
Zmienna realm jest tutaj niezwykle istotna. Dla każdej takiej zmiennej osobno będziemy dodawać użytkowników, dlatego też, jeżeli dwa repozytoria będą posiadać taką samą zmienną realm to będą też dzielić użytkowników mogących z nich korzystać. Zmienne min-encryption oraz max-encryption mówią o tym, jakie długości kluczy będą możliwe do wykorzystania podczas szyfrowania przesyłanych danych (0 - oznacza brak szyfrowania, 1 - jedynie podpis cyfrowy przesyłanych danych). Uwaga! Aby anonimowy użytkownik mógł pobierać dane z repozytorium bez podawania hasła zmienna min-encryption musi wynosić 0, a w poniżej opisanym pliku musi się znaleźć opcja ANONYMOUS. Warto też zatroszczyć się o istnienie pliku authz w katalogu z svnserve.conf z regułami dostępu do repozytorium (szerszy opis w samym pliku, który powstanie po utworzeniu nowego repozytorium).
Po czwarte: należy utworzyć plik /opt/lib/sasl2/svn.conf o następującej zawartości:
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: ANONYMOUS DIGEST-MD5
Możliwe do wykorzystania mechanizmy (mech_list) są opisane w dokumentach zawartych katalogu /doc/ w paczce z Cyrus SASL. Skupmy się na umieszczonych powyżej - DIGEST-MD5 umożliwia autoryzowanie oraz szyfrowanie połączeń z użytkownikami zawartymi w pliku /opt/etc/sasl2 (powstanie po pierwszym utworzeniu użytkownika), który to musi posiadać uprawnienia umożliwiające odczytanie go przez program svnserve. ANONYMOUS umożliwia natomiast pobranie danych bez posiadania konta na serwerze SVN (konieczna jest modyfikacja w pliku svnserve.conf - patrz wyżej). Uwaga! Przy metodzie DIGEST-MD5 hasła w pliku sasl2 są przechowywane w formie czystego tekstu.
Jak dodać użytkownika? To proste - wystarczy wydać polecenie:
saslpasswd2 -c -u zmienna_realm nazwa_użytkownika
Pamiętajcie o tym, aby zmienna realm odpowiadała tej ustawionej w pliku konfiguracyjnym repozytorium. Po wydaniu polecenia zostaniecie poproszeni o dwukrotne powtórzenie hasła użytkownika i... to wszystko ;-) Serwer działa!
Wszystkich użytkowników w systemie można wylistować komendą sasldblistusers2, a usuwać komendą saslpasswd2 -d -u zmienna_realm nazwa_użytkownika.
Po piąte: Ubuntu 8.04 nie posiada we własnym repozytorium klienta w wersji wyższej, niż 1.4.x. Zaś klient w wersji 1.5.x jest wymagany w celu pełnej współpracy z serwerem SVN w ww. konfiguracji. Aby uzyskać dostęp do nowszego klienta należy dodać listy repozytoriów odpowiednie (zawierające nową wersję klienta) repozytorium. Należy to zrobić poprzez dodanie do pliku /etc/apt/sources.list następujących linii:
deb http://ppa.launchpad.net/clazzes.org/ubuntu hardy main
deb-src http://ppa.launchpad.net/clazzes.org/ubuntu hardy main
Teraz wystarczy zaktualizować listę pakietów (sudo aptitude update) oraz uaktualnić pakiet subversion.
Powyższa konfiguracja nie wymaga, aby każda osoba chcąca pobrać dane z serwera SVN posiadała własnego użytkownika oraz hasło. Może je pobrać anonimowo nie korzystając z szyfrowania. Tak, jak to robię poniżej:
svn checkout svn://svn.serwer.net/repozytorium
A tak wygląda zgłaszanie nowego kodu dla użytkownika, który spełnia odpowiednie reguły.
svn commit --username nazwa_użytkownika -m "Drobna zmiana"