gitolite
Gitolite je administrační systém pro správu git repozitářů založený na gitu
Administrace
Administrace systému gitolite se provádí prostřednictvím git repozitáře s názvem gitolite-admin Ten obsahuje dva podadresáře:
- keydir - adresář pro veřejné ssh klíče uživatelů
- conf - adresář pro konfigurační soubory
Hlavním konfiguračním souborem je soubor gitolite-admin/conf/gitolite.conf
- zakládání nových repozitářů
- přidávání uživatelů
- správa přístupu do repozitářů
Práva k dílčí administraci repozitářů (resp. skupinám repozitářů) lze delegovat pověřeným uživatelům
Správce
Uživatelé
Uživatelé se do systému přidávají tak, že se do adresáře keydir nakopíruje veřejný ssh klíč uživatele, uložený do souboru s příponou ".pub"
Název souboru podléhá následující konvenci:
uzivatel.pub uzivatel@domain.cz.pub uzivatel@domain.cz@desktop.pub
Jak si můžete povšimnout, uživatel může být identifikován nejenom přes pouhé uživatelské, ale mailovou adresou. Je to proto, aby se usnadnila orientace v uživatelských jménech. Třetí varianta je určena pro případ, že jeden uživatel hodlá používat více veřejných klíčů. Např. pokud přistupuje z různých lokací pro každou z nich má vygenerovaný jiný veřejný klíč.
Gitolite používá několik systémově definovaných uživatelů:
|
Repozitáře
Přidání a správa uživatelských přístupů do repozitářů se provádí tak, že se do konfiguračního souboru napíše napíše na řádek začínající kódem "repo" název adresáře a pod něj se přidá odsazený seznam s nastavením přístupových práv uživatelům
@skupina_uzivatelu = user1 user2 user3
repo nejaky_repozitar
RW+ = delegovany_spravce
RW = skupina_uzivatelu
R = @all
|
Práva
- R
- Uživatel může repozitář pouze stáhnout
- RW
- Uživatel může repozitář stáhnout a může pushovat (uploadovat) nové verze
- RW+
- Jako RW, ale navív může uživatel provádět tzv. non-fast forward push, tj. může modifikovat již exisující commity
Tato práva se dají aplikovat ne jen na celý repozitář, ale i na jeho jednotlivé větve a soubory/podadresáře.
Skupiny
Uživatele i repozitáře lze v konfiguraci seskupovat do skupin. Se skupinami se pak pracuje obdobným způsobem, jako by šlo o jeden repozitář, resp. jednoho uživatele.
Definice skupiny se provádí přidáním zavináče před jméno skupiny a přiřazením názvů repozitářů či jmen uživatelů, které má zastupovat
@skupina_uzivatelu = user1 user2 user3
|
Delegovaná správa repozitářů
Delegování administrace - předání administrace k vybranému repozitáři či skupině repozitářů, se provádí tak že se všem uživatelům, na která mají být práva delegována nastaví k adresáři gitolite-admin
právo RW.
A následně se jim "přidělí" práva k souborům do nichž budou zapisovat nastavení práv k repozitářům delegované skupiny. Tyto soubory, ani podadresář se netvoří automaticky, ale musí si je delegovaní uživatelé zakládat sami, po naklonování repozitáře gitolite-admin.
Instalace a základní konfigurace
Instalace gitolite byla provedena z distribučních balíků přes balíčkovací systém APT
git:~# apt-get install gitolite
Po instalaci byl na stroji git založen uživatel git, který zatím v systému neexistoval
git:~# adduser git
Na stroj git byl nakopírován veřejný ssh klíč pro přístup administrátora (standardně je uložený v souboru ~/.ssh/id_rsa.pub
), který bude provádět základní administraci gitolite. Tento soubor (s klíčem) se na server uložil do dočasného souboru /tmp/admin.pub
. V podstatě je však úplně jedno kam se tento klíč nakopíruje. Podstatné je, aby jeho název odpovídal identifikátoru hlavního administrátora gitolite. Tento klíč se pak použije při založení výchozího repozitáře.
Založení výchozího repositáře na serveru
Exituje více možností pro založení výchozího repozitáře. Lze tak učinit jak přes účet roota, tak skrze výše uvedený nově vytvořenýuživatelský účet. Níže uvedený postup popisuje založení účtu přes roota:
Přepneme se na uživatele git...
git@git:~# su - git
Příkazem cd skočíme do domovského adresáře, a tam pak spuštěním skriptu gl-setup provedeme výchozí instalaci, během níž gitolite založí potřebmé adresáře - mj. adresář pro repozitáře...
git@git:/$ cd
git@git:~$ gl-setup /tmp/admin.pub
Tím konfigurace na straně serveru prozatím končí...
Pokud má klíč administrátora jméno admin, tak bude pod tímto uživatelským jménem zastupován i v konfiguračním souboru. Pozdější změna je možná tak, že se přidá klíč pod novým názvem - viz výše uvedený odstavec Uživatelé. |
Postinstalační postup na klientské straně
Ze serveru pak administrátor naklonuje administrační repozitory gitolite-admin
na klientskou stanici, kde v souboru conf/gitolite.conf
provede potřebné úpravy a přidá veřejné ssh klíče dalších uživatelů. (Viz Administrace)
Po provedení všech potřebných úprav, administrátor uloží změny do lokální repozitory příkazem commit a příkazem push odešle změny na server.
Tam gitolite provede automaticky odpovídající změny - vytvoří repozitáře, uloží klíče, upraví příslušné soubory, atd.
user@stroj:~$ git clone git@git:gitolite-admin
...
user@stroj:~$ cd gitolite-admin
user@stroj:~$ git add .
user@stroj:~$ git commit -a
user@stroj:~$ git push
|
Konfigurace webového rozhraní
Gitolite je pouze administrační systém a pro publikaci vybraných repozitářů přes www rozhraní je třeba využít služeb webového serveru apache. Ten pro generování stránek publikovaných repozitářů volá perlovský skript gitweb. Jelikož webový server Apache tvoří řada instalačních balíků s nejrůznějšími moduly, je nejjednodušší způsob instalace přes distribuční balíkovací systém:
git:~# apt-get install libapache2-mod-perl2 gitweb
gitweb přes libapache2-mod-perl2
Ve výchozím nastavení se spouští gitweb jako CGI skript. To sebou může nést určitá rizika. Aby byl spouštěn přes perlovský modul, je třeba změnit konfiguraci Apache.
Před..
- Konfigurační soubor
/etc/gitweb.conf
- Konfigurační soubor
/etc/apache2/conf.d/gitweb
- Styly a ikony v adresáři
/usr/share/gitweb
- Skript v adresáři
/usr/lib/cgi-bin/gitweb.cgi
Po...
- Konfigurační soubor
/etc/gitweb.conf
zůstává tam kde byl - Konfigurační soubor
/etc/apache2/conf.d/gitweb
změněn - Vytvořen adresář
/var/www/gitweb
a do něj nalinkován styl a ikony - Vytvořen adresář
/var/www/perl
a do něj nalinkován skript/usr/lib/cgi-bin/gitweb.cgi
pod názvem gitweb.pl - vypnout přes
a2dismod
modul cgid zároveň zkontrolovat zda je zaveden modul perl. Pokud není, je třeba aby byl pomocía2enmod
zaveden - Proveden restart apache2
A něco navíc... V konfiguraci byla nastavena proměnná pro vložení popisu
Přístup přes git server
Git démon není na našem serveru nainstalován.