Coding with Titans

so breaking things happens constantly, but never on purpose

Instalacja serwera SVN

Zachęcony ostatnio rozmową z kolegą z pracy, który w ramach zarządzania swoim domowym projektem zrobił z nim wreszcie porządek na dysku i przeniósł do systemu kontroli wersji, postanowiłem uczynić to samo. Oczywiście tylko w stosunku do projektów, których na razie nie mam zamiaru publikować i które aktualnie już nie znajdują się na codeplex.com czy code.google.com.

Nie będę w tym momencie wychwalał korzyści płynących z utrzymywania repozytorium i możliwości podglądnięcia dowolnych historycznych zmian, etykietowania, czy nawet tworzenia wersji eksperymentalnych naszego projektu w stosunku do stosowanej obecnie (i powszechnie?) techniki pakownia całego katalogu z odpowiednią datą w tytule… Nie opowiem również, jak wzrasta samozadowolenie z własnej pracy, a tym bardziej o jej komforcie. Zachęcam natomiast do zaznajomienia się z 12-o punkowy Testem Joela opublikowanym w 2000 roku przez Joela Spolsky’ego, który poucza, na co jeszcze w swoim życiu programistycznym zwrócić uwagę.

Jednak muszę tutaj przyznać, że nie jestem i nie byłem zbytnio zafascynowany myślą instalacji IISa albo Tomcata, czy innego serwera WWW, tylko po to, aby na domowym komputerze mieć system kontroli wersji. Dlatego też opisana poniżej procedura opiera się na następujących założeniach:

  • minimalne zużycie pamięci i procesora
  • możliwość włączenia/wyłączenia tej zabawki w dowolnym momencie
  • brak dodatkowych kosztów, jeśli wymagane dodatkowe oprogramowanie (darmowe lub open-source)
  • możliwość współpracy i dostępu dla kilku osób w sieci lokalnej

Przed przystąpieniem do właściwego konfigurowania swojego środowiska wymagana jest instalacja dwóch programów:

  • SlikSvn – darmowa kompilacja serwera Subversion, która zawiera minimalny zbiór narzędzi i bibliotek, bez integracji z serwerem Tomcat oraz innych niepotrzebnym gadżetów; niestety jest to tylko zbiór plików i to dalsza procedura ma właśnie na celu zrobienie z nich użytku
  • TortoiseSvn – darmowy klient SVN, który umożliwi nam między innymi pobieranie i wkładanie plików do repozytorium z poziomu Explorera Windows; polski słownik i interfejs są również dostępne, co ładnie sprawdza błędy pisowni podczas dołączania komentarzy i opisów plików

Właściwa procedura wygląda tak:

  1. Tworzymy nowego użytkownika SvnService, w kontekście którego wykonywane będą wszystkie operacje na repozytorium. Pom oże to bardzo w samym zarządzani u dostępem do katalogów oraz innymi uprawnieniami w przyszłości.

    SvnService user

    (Zarządzanie komputerem / Użytkownicy i grupy lokalne)

  2. Ponieważ nie chcemy, aby ktoś na naszym komputerze zalogował się jako ten użytkownik oraz aby nie był on widoczny na stronie startowej Windowsa, usuwamy go z grupy użytkowników (lokalnych).

    SvnService User NoLocal

  3. Dodajemy jednak u prawnienia do logowania w trybie usługi, gdyż SVN będzie uruchamiany właśnie przez tego użytkownika jako lokalna usługa systemowa zaraz po włączeniu komputera.

    SvnService logon as service

    (Zasady zabezpieczeń lokalnych / Zasady lokalne / Przypisywanie praw użytkownika / Logowanie w trybie usługi)

  4. [Opcjonalnie] Otwieramy port TCP/IP 3690 (domyślny dla tej usługi ) w używanym firewallu w systemie, aby umożliwić dostęp innym użytkownikom z sieci lokalnej dostęp do przyszłego repozytorium.

    SvnService port

  5. Dodajemy nową usługę do systemu, która będzie odpowiedzialna za zarządzanie serwerem Subversion, uruchamiana oczywiście z poświadczeniami utworzonego wcześniej użytkownika. Tworzymy równocześnie repozytorium w z góry predefiniowanym miejscu. Wszystko to załatwia prosty skrypt napisany w starym dobrym shellu Windowsa:

@echo off

set svnpath=C:\Program Files\SlikSvn\bin
set svnrepository=E:\Repositories\Local Projects
set svnaccount=machine\SvnService
set svnpassword=P@$$w0rd

sc create svn binpath= "\"%svnpath%\svnserve.exe\" --listen-host 0.0.0.0 --service -r \"%svnrepository%\"" displayname= "Subversion Server" depend= Tcpip start= auto obj= %svnaccount% password= %svnpassword%

net start svn

"%svnpath%\svnadmin.exe" create "%svnrepository%"
[Wymagane!] Zmieniamy parametry odnośnie użytkownika, hasła oraz lokalizacji według własnych wymagań.

Omówienie parametrów **svnserve.exe**:

* \-\-service – od pewnego czasu SVN nie potrzebuje już żadnego zewnętrznego oprogramowania i sam potrafi włączyć się w trybie usługi, nie wymagając interakcji z aktualną sesją użytkownika
* \-\-listen-host - wymyszenie nasłuchiwania na wszystkich interfejsach IPv4 (szczególnie ważne, gdy spotkamy problemy z połączeniem na Windows Vista)
* -r – definicja lokalizacji repozytorium, nawet jeśli nie jest ono jeszcze stworzone
* inne parametry – jak chociażby port, tryb pracy bazy danych z kodem można ustawić według własnych potrzeb, tu pozostawiamy ich domyślne wartości

Omówienie parametrów **sc.exe**:

* create – utworzenie usługi w systemie (delete – usunięcie, ale wymagane jest wcześniejsze jej zatrzymanie poprzez "*net stop svn*")
* svn – nazwa usługi
* binpath – lokalizacja uruchamianego pliku wraz z listą parametrów
* displayname – nazwa wyświetlana wewnątrz narzędzi systemowych zarządzających usługami
* depend – lista innych usług, od których zależy nasz serwer SVN
* start – sposób uruchamiania usługi (auto = razem ze startem systemu)
* obj – użytkownik, który uruchamia usługę
* password – jego hasło

[_Uwaga!_] To nie jest błąd, że wszystkie te parametry mają spację pomiędzy znakiem równości a wartościami. To jest właśnie składnia wywołania i przekazywania parametrów menadżera usług.
  1. Należy jeszcze tylko zlokalizować katalog z repozytorium i zmienić uprawnienia użytkowników:

    • usunąć prawa dostępu dla wszystkich użytkowników
    • nadać pełnię praw dla użytkownika SvnService
    • prawa te powinny być dziedziczne dla wszystkich elementów tego katalogu i potomnych
  2. Edytujemy plik z katalogu repozytorium /conf/svnserve.conf, w którym definiujemy, że:

    • anonimowi użytkownicy nie mają dostępu
    • zalogowani użytkownicy mogą zmieniać wszystkie pliki
    • listę użytkowników znajdziemy w pliku passwd w tym samym katalogu
anon-access = none
auth-access = write
password-db = passwd
  1. Edytujemy plik passwd z tego samego katalogu definiując użytkowników i ich hasła, np.
[users]
harry = harryssecret
sally = sallyssecret
  1. Testujemy dostęp do repozytorium, włączając przeglądanie plików w TortoiseSVN ze ścieżką:

    Tortoise Browse

    Tortoise URL

    svn://localhost/ lub svn://nazwa-maszyny/

    Wpisujemy nasze poświadczenia zdefiniowane w pliku passwd i gotowe!

  2. Od tej porTortoiseSVN - server preview y możemy już cieszyć się opcją importowania danych do repozytorium, tworzenia nowych katalogów, przeglądania wersji i wszystkimi innymi dobrodziejstwami.

    Tortoise Server

Dodatkowo – jeśli ktoś dobrnął aż tutaj i chciałby dalej pogłębiać swoją wiedzę na temat systemu Subversion, zachęcam do zapoznania się z darmową wersją książki o tym systemie kontroli wersji dostępną on-line w systemie O’Reilly Media tutaj lub off-line w katalogu, do którego zainstalowany został SlikSvn.