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:
- 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:12345adduser --system --shell /bin/sh \--gecos 'git version control' \--group --disabled-password \--home /home/git gitW odpowiedzi powinniśmy otrzymać coś takiego:
12345Adding system user `git'...Adding new group `git' (211).Adding new user `git' (211) with group `git'.Creating home directory `/home/git'.Oczywiście numery uid użytkownika i grupy mogą się różnić od powyższych.
-
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:12scp id_rsa.pub MY_SERVER:/tmp/username.pub - Logujemy się na serwerze jako root
-
Pobieramy źródła gitolite w jakieś fajne miejsce:
123git clone git://github.com/sitaramc/gitolite gitolite-sourcecd gitolite-source</code> - 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żytkownikagit
aby mógł bez problemów korzystać ze skryptów.Najpierw tworzymy wymagane foldery:
12mkdir -p /usr/local/share/gitolite/conf /usr/local/share/gitolite/hooksNastę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ć:
12src/gl-system-install /usr/local/bin /usr/local/share/gitolite/conf /usr/local/share/gitolite/hooksResztę 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ć:12chmod 666 /tmp/username.pub - Przelogowanie na gita a raczej wykonanie operacji jako git:
12su - git
- Sprawdzamy czy zmienna $PATH jest dobrze ustawiona i mamy dostęp do zmiennych gitolite:
12which gl-setup
Jeżeli otrzymamy odpowiedź:
12/usr/local/bin/gl-setupto wszystko jest w porządku w innym przypadku musimy ustawić zmienną $PATH aby widziała /usr/local/bin.
-
Instalujemy gitolite:
12gl-setup /tmp/username.pub - Teraz po stronie klienta możemy pobrać repozytorium, w którym konfigurujemy uprawnienia:
12git clone git@SERVER:gitolite-admin
Jeżeli otrzymamy coś takiego :
123456Initialized empty Git repository in /home/davem/gitolite-admin/.git/remote: Counting objects: 6, done.remote: Compressing objects: 100% (4/4), done.remote: Total 6 (delta 0), reused 0 (delta 0)Receiving objects: 100% (6/6), done.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 folderkeydir
(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:
edytujemygitolite.conf
i dodajemy:123repo nowy_projektR = @allNastępnie zatwierdzamy zmiany:
123git commit -m "dodano nowy projekt"git pushTeraz 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 folderukeydir
, potem w konfiguracji zmieniamy zapis na :1234repo nowy_projektR = @allRW+ = stefekNazwa 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.