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íc 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
|
Seskupovat lze pouze repozitáře nebo uživatele, nikoliv skupiny! |
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.
Publikování git repozitáře přes www rozhraní
Aby byl repozitář vypublikován přes www rozhraní, musí být splněny následující podmínky:
- K repozitáři (nebo skupině repozitářů) musí mít právo čtení (R) uživatel gitweb
- Repozitář musí mít nastaven komentář (bez toho nedojde k jeho začlenění do souboru projects.list)
Právo pro uživatele gitweb lze nastavit i hromadně přes skupinu, ovšem komentář musí mít každý repozitář svůj vlastní |
Instalace a základní konfigurace
Následující postup instalace a konfigurace gitolite je založen na distribučním balíku pro Debian ( aktuálně verze 1.5.3 ). V zásadě by však měl být použitelný na jakékoliv jiné linuxové distribuci.
Na počátku byla instalace potřebných balíků přes balíčkovací systém APT...
stroj:~# apt-get install gitolite libapache2-mod-perl2 gitweb
Vytvoření instance gitolite
Defakto každý uživatel s účtem na serveru a povoleným ssh přístupem si může založit vlastní instanci gitolite, ve které si pak bude moct tvořit a administrovat své vlastní git repozitáře.
První den tedy Bůh stvořil uživatele. Dejme tomu, že mu dal jméno gitadmin. A protože věděl že pátý den přijde na řadu gitweb, přidal rovnou do jeho skupiny uživatele www-data, pod kterým obvykle běží webový server Apache2
stroj:~# adduser gitadmin
stroj:~# adduser www-data gitadmin
Druhý den si Bůh mohl dáchnout, protože jeho služeb zatím nebylo zapotřebí.
Uživatel gitadmin si do svého účtu na stroj nakopíroval svůj veřejný ssh klíč (po vygenerování přes ssh-keygen
bývá obvykle uložený v souboru ~/.ssh/id_rsa.pub
), který použil pro vytvoření vlastní instance gitolite.
Soubor s klíčem uložil do souboru ~/gitadmin.pub
. V podstatě je však úplně jedno kam a pod jakým názvem se tento klíč nakopíruje. Podstatné je, aby jeho název odpovídal budoucímu "username" kterým bude administrátor gitolite identifikován pravidlech konfiguračního souboru gitolite.conf
.
Třetí den Bůh stále odpočíval, protože dobře věděl, že uživatele gitadmin čeká hromada práce se správným nastavením gitolite a souborů nezbytných pro budoucí publikování adresářů přes www rozhraní
Založení instance gitolite
Pro založení vlastní instance gitolite, spustil uživatel gitadmin ve svém domovském adresáři skript gl-setup
. Jako parametr mu předal svůj veřejný klíč, který nakopíroval během předchozího dne.
gitadmin@stroj:~$ gl-setup ./gitadmin.pub
|
Skript gl-setup
pak založil nezbytné soubory a adresáře:
- adresář
~/repositories
pro repozitáře... - v něm základní administrátorský repozitář
~/repositories/gitolite-admin.git
- demonstrační repozitář
~/repositories/testing.git
- soubor
~/projects.list
pro jména repozitářů co jednou budou předhozeny plénu přes web - skrytý adresář
~/.gitolite
což není nic jiného než lehce přiohnutý, dobře známý adresář.git
- a konfigurační soubor
~/.gitolite.rc
pro jména repozitářů co jednou budou předhozeny plénu přes web. Prozatím prázdný.
Základní konfigurační nastavení
Jelikož skript gl-setup
není vševědoucí jako Bůh, musel čtvrtý den uživatel gitadmin připravit půdu pro okamžik, kdy bude vzkříšen gitweb
Ve svém domovském adresáři...
- Založil adresář
~/perl
a do něj symlinkem prolinkoval soubor/usr/lib/cgi-bin/gitweb.cgi
pod jménemgit
- Zkopíroval k sobě konfigurační soubor
/etc/gitweb.conf
- Souboru
~/projects.list
změnil práva na 660 (aby z něj mohl číst také uživatel www-data) - A v konfiguraci provedl následující úpravy...
V souboru /etc/gitweb.conf
nahradil obsah proměnných..
$projectroot
- absolutní cestou ke svým repozitářům (/home/gitadmin/repositories
).$projects_list
- absolutní cestou k souboru/home/gitadmin/projects.list
V souboru ~/.gitolite.rc
...
- zakomentoval řádek na kterém se proměnné
$REPO_UMASK
přiřazuje hodnota 0077 - a odkomentoval řádek následující na kterém se proměnné
$REPO_UMASK
přiřazuje hodnota 0027
Zbytek nastavení ponechal v rukou božích..
Konfigurace webového rozhraní
Gitolite je pouze administrační systém, proto je pro publikaci vybraných repozitářů přes www rozhraní je třeba využít služeb webového serveru Apache2. 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, jak již bylo uvedeno výše |
Pátý den se Bůh protáhnul, a protože byl gitadmin konečně se svou prací hotov, jal se křísit gitweb
gitweb přes libapache2-mod-perl2
Ve výchozím nastavení se spouští gitweb jako CGI skript. To by sebou mohlo nést určitá rizika a také to může více zatěžovat server. Proto je lepší změnit výchozí konfiguraci Apache2 tak aby se skript spouštěl přes perlovský modul perl a modul cgid pro jistotu z konfigurace vyhodit.
Před úpravami..
- Konfigurační soubor
/etc/gitweb.conf
- Konfigurační soubor
/etc/apache2/conf.d/gitweb
:
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
Options FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
</Directory>
|
- Styly a ikony v adresáři
/usr/share/gitweb
- Skript v adresáři
/usr/lib/cgi-bin/gitweb.cgi
Co stvořil Bůh...
- Konfigurační soubor
/etc/gitweb.conf
nechal kde byl, protože je v konfiguraci stejně přenastavena cesta ke konfiguráku uživatele gitadmin. - Ovšem obsah konfiguračního soubor
/etc/apache2/conf.d/gitweb
změnil zásadně:
ScriptAlias /pub /home/gitadmin/perl
<Location /pub>
SetEnv GITWEB_CONFIG /home/gitadmin/gitweb.conf
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlSendHeader On
Order allow,deny
Allow from all
</Location>
|
- Také vytvořil adresář
/var/www/gitweb
a do něj z adresáře prosymlinkoval/usr/share/gitweb
styl a ikony - Přes
a2dismod
deaktivoval modul cgid a zároveň zkontrolovat zda je zaveden modul perl. ( Pokud by nebyl, tak by jej pomocía2enmod
zavedl ) - Vše završil restart Apache2
Cílová adresa webového rozhraní pro veřejně publikované repozitáře je nyní
http://stroj/pub/git
Tímto Bůh zakončil svůj pracovní týden a vykopnul uživatele gitadmin z ráje, ať se nadále moří s administrací repozitářů bez jeho pomoci a sám si tak vydobývá v potu tváře na svůj chléb vezdejší. Protože už zítra si bude válet šunky v lese u potoka a místo hučení notebooku poslouchat jen cvrlikání ptáků..
Postinstalační postup na klientské straně
Ze rozběhaného serveru si pak administrátor (gitadmin) naklonuje svou 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, přidá přes add administrátor nové klíče, 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 gitadmin@git:gitolite-admin
...
user@stroj:~$ cd gitolite-admin
user@stroj:~$ git add .
user@stroj:~$ git commit -a
user@stroj:~$ git push
|
Založení dalších instancí gitolite
Postup je v zásadě stejný. Pouze se zopakuje pro jiného uživatele. Konfiguraci pro Apache2 lze přidat do stejného souboru, ale koncepčně lepší je pro každou instanci vytvořit samostatný konfigurační soubor.
Vytvoření samostatných instancí má smysl tehdy, pokud se uživatelé nechtějí spokojit pouze s delegováním práv, ale chtějí si také sami zakládat nové repozitáře a přidávat nové uživatele.
Přístup přes git server
Git démon není na našem serveru nainstalován.