Ostatnio bawiłem się w instalację Gitolite na serwerze w celu utworzenia centralnego repozytorium kodu dla moich projektów. Projekt ten jest godnym następcą Gitosis, który nie jest już od pewnego czasu wspierany.

Co nam daje Gitolite?

System pozwala na korzystanie z repozytorium git przez wielu użytkowników gdzie administrator może określić kto, co i gdzie może zrobić.

Wymagania:
Przede wszystkim potrzebujemy serwera z dowolnym systemem unixowym. Potrzebujemy także konto roota na tym serwerze aby móc bez problemów wszystko zrobić (co prawda istnieje możliwość zainstalowania Gitolite’a bez uprawnień root’a ale w tym celu proszę zerknąć do dokumentacji). Oczywiści potrzebujemy Gita, zarówno po stronie klienta jak i serwera w wersji minimum 1.6.2.
Nie zaszkodzi posiadać trochę umiejętności posługiwania się powłoką systemową ;)

Zaczynamy:

  1. Gitolite robi wszystkie operacje na repozytorium jako jeden użytkownik, więc najlepiej do tego celu stworzyć nowego. Ja swojego nazwałem git
    Tworzymy nowego użytkownika na serwerze jako root:

    W odpowiedzi powinniśmy otrzymać coś takiego:

    Oczywiście numery uid użytkownika i grupy mogą się różnić od powyższych.

  2. Gitolite uprawnienia bada na podstawie kluczy publicznych. Podczas instalacji potrzebujemy tylko klucz dla administratora systemu, dla pozostałych użytkowników będziemy mogli uzupełnić klucze w późniejszym czasie. Szukamy swojego klucza folderze .ssh katalogu domowego (standardowo id_rsa.pub) i kopiujemy go na serwer:

  3. Logujemy się na serwerze jako root

  4. Pobieramy źródła gitolite w jakieś fajne miejsce:

  5. Instalujemy gitolite. Domyślnie instaluje się go w /usr/local/shared/gitolite ale możemy to zrobić w dowolnym folderze. Ważne jest jednak aby ustawić zmienną środowiskową $PATH dla użytkownika git aby mógł bez problemów korzystać ze skryptów.

    Najpierw tworzymy wymagane foldery:

    Następnie instalujemy. Dwa ostatnie argumenty to foldery, które utworzyliśmy w poprzednim kroku. Jeżeli utworzyliśmy je w innym miejscu musimy to odpowiednio zmodyfikować:

    Resztę operacji zrobimy jako użytkownik git jednak zanim się przelogujemy to musimy zrobić jedną rzecz: zmienić uprawnienia do naszego klucza publicznego, którego wgraliśmy na serwer. Ponieważ domyślnie użytkownik git nie będzie mógł go odczytać:

  6. Przelogowanie na gita a raczej wykonanie operacji jako git:

  7. Sprawdzamy czy zmienna $PATH jest dobrze ustawiona i mamy dostęp do zmiennych gitolite:

    Jeżeli otrzymamy odpowiedź:

    to wszystko jest w porządku w innym przypadku musimy ustawić zmienną $PATH aby widziała /usr/local/bin.

  8. Instalujemy gitolite:

  9. Teraz po stronie klienta możemy pobrać repozytorium, w którym konfigurujemy uprawnienia:

    Jeżeli otrzymamy coś takiego :

    To wszystko jest w porządku i możemy działać ze zdalnym repozytorium.

    Gdy sprawdzimy zawartość pobranego projektu zauważymy dwie rzeczy: plik konfiguracyjny gitolite.conf oraz folder keydir(Widać tutaj mocne odwzorowanie Gitosisa, którego Gitolite nazywany jest następcą).
    Nadawanie uprawnień do poszczególnym projektów polega na edycji tego pliku i ewentualnym wgraniu kluczy publicznych do folderu.

    Na przykład chcemy stworzyć repozytorium testowe dostępne do odczytu dla wszystkich:
    edytujemy gitolite.conf i dodajemy:

    Następnie zatwierdzamy zmiany:

    Teraz każdy może sklonować sobie zawartość repozytorium. Chcielibyśmy jednak dodać użytkownika stefek, który może zatwierdzać zmiany w repozytorium.
    Najpierw musimy jego klucz publiczny wgrać do folderu keydir, potem w konfiguracji zmieniamy zapis na :

    Nazwa użytkownika której używamy w pliku konfiguracyjnym musi być taka jak nazwa klucza publicznego bez rozszerzenia .pub. @all jest synonimem, którego gitolite odczytuje jako „wszyscy posiadający klucze publiczne w folderze keydir”.

    W przyszłości postaram się trochę więcej rozpisać o konfiguracji gitolite do zarządzania uprawnieniami.

.