Vlastny GIT server: 1. cast

Od kupy virtualneho servera zazivam po nociach (a v skorych rannych hodinach) neuveritelne mnozstvo zabavy. Jednou takou uzitocnou zabavkou, pri ktorej sa clovek comusi priuci a aj realne vyuzije, je rozbehanie vlastneho GIT serveru. Budeme chciet jednoducho vytvarat nove repozitare a nastavovat pravomoci pouzivatelom (do akych repozitarov mozu citat/zapisovat). Tiez sa budeme chciet pochvalit svojimi projektami, preto rozbehame webove rozhranie.

Tento navod je urceny pre Linuxy, BSD a asi aj OS X. Zjednodusene, pre krasny UNIXovy svet. Na server sa budeme pripajat cez SSH a pochopitelne treba mat nainstalovany GIT.

Git user

Zacnime vytvorenim git usera na serveri. Na tohoto usera sa budeme neskor pripajat cez SSH, v jeho domovskom adresari budu ulozene repozitare a ine pomocne veci, o ktorych budem pisat.

useradd -m -U git

Z ne-serverovej masiny (odkial sa pripajame na server cez SSH) treba skopirovat ssh pubkey do domoskeho adresara git usera. Odkazem na navod, kedze toto je rutinna zalezitost. Osobne sa na server pripajam bez hesla, na autentifikaciu pouzivam svoj verejny kluc (je to pohodlnejsie, bezpecnejsie a vhodne pre skriptovanie, kedze sa skript nemusi pytat na heslo). Cielom je, aby som svoj verejny kluc (napr ~/.ssh/id_rsa.pub) dostal na server (/home/git/admin.pub).

Gitolite

Gitolite sluzi na spravu pouzivatelov, ktori sa mozu pracovat s repozitarmi, a na spravu repozitarov (vytvaranie napriklad). Vdaka nemu kvoli nastavovaniu repozitarov sa nepotrebujem rucne pripajat cez SSH na git usera, vytvarat repozitare cez “git init –bare” a podobne veci. O vsetko sa postara gitolite a este mi usetri pracu.

Dalsie veci bude vykonavat git user:

su - git
git clone git://github.com/sitaramc/gitolite.git
mkdir -p $HOME/bin #pripravim si adresar, kde sa ulozi binarka gitolite
gitolite/install -to $HOME/bin #skopirujem subory z naklonovaneho repozitara do adresara bin
bin/gitolite setup -pk admin.pub #nastavim gitolite a poviem, ze sa gitolite-adminom bude clovek, ktoreho verejny kluc je ulozeny v subore admin.pub

Teraz by v /home/git mali existovat nove adresare: bin, gitolite, repositories. V adresari repositories sa vytvoril dolezity repozitar gitolite-admin.git (a asi aj testing.git, ale ten je nepodstatny).  Subor admin.pub uz nie je potrebny, skopiroval sa do .gitolite/keydir/admin.pub a nachadza sa tiez v .ssh/authorized_keys.

V tomto stadiu je gitolite nainstalovany a je pripraveny na pouzivanie. Na ne-serverovej masine napisme toto a stlacme enter :)

git clone git@moj_server:gitolite-admin

V naklonovanom repozitari su dva adresare, jeden na nastavenie pristupov k repozitarom a druhy na ukladanie ssh klucov pouzivatelov, ktori chcu mat pristup k repozitarom. Spravme si teda repozitar playwithme (subor conf/gitolite.conf):

repo playwithme
  RW+ = admin

A potom:

git commit -a
git push origin master

Na serveri sa vdaka hookom vytvori novy repozitar. Ak by sme chceli pridat dalsieho pouzivatela (povedzme nebuchadnezzar), tak ho pripiseme do gitolite.conf (riadok sa zmeni na “RW+ = admin nebuchadnezzar”, ak mu chceme zabezpecit plny pristup) a jeho pubkey ulozime do adresara keydir pod menom nebuchadnezzar.pub. Commit & push. Gitolite nastavi repozitar a aktualizuje ~/.ssh/authorized_keys. Teraz by mal pouzivatel nebuchadnezzar vediet klonovat, pullovat, pushovat a co ja viem co este repozitar playwithme (ale nema pristup ku gitolite-admin, co je dobre a je to tak spravne, lebo gitolite.conf je tak nastaveny).

Read-only pristup pre vsetkych

Na tuto ulohu sluzi git-daemon. Gitolite take nieco nevie zabezpecit, lebo na git pouzivatela sa pripajame cez SHH a v ~/.ssh/authorized_keys neexistuje nieco ako “public access for all”. Git-daemon je sucastou balika git a jeho nastavenie je velmi jednoduche. V zavislosti od distribucie najprv treba upravit jeho konfiguracny subor (v Arch Linuxe je to /etc/conf.d/git-daemon.conf). Daemon pri spustani pouziva parameter “–base-path=<path>”. V nasom pripade zmenime <path> na “/home/git/repositories/”. Spustime daemona. To vsak nie je vsetko :) Aby git-daemon mohol citat repozitar, musi byt v repozitari existovat subor “git-daemon-export-ok”. Do repozitarov nechceme rucne zasahovat, preto na ne-serverovej masine upravime “conf/gitolite.conf” a pridame do kazdeho repozitara, ktory ma byt public, novy riadok “R = daemon”. Commit & push. Gitolite vytvoril v pozadovanych repozitaroch prazdne subory “git-daemon-export-ok” a tym padom si ich git-daemon dovoli citat.

Skusme naklonovat nejaky repozitar:

git clone git://moj-server/moj-public-repo.git

Co bude v dalsej casti?

Nastavime webove rozhranie (nie, nepouzijeme odstrasujuci git-web).

Mozne chyby

Neviem naklonovat repozitar gitolite-admin.git

Nuz, treba sa najprv skusit pripojit cez ssh na git usera. Ak toto funguje, tak je nieco zle s gitolite. Ak toto nefunguje, je zle nastaveny SSH server.

Klonovanie repozitara zamrzlo

Mozno je len zle nastaveny firewall. Git pouziva port 9418.

About these ads

Myšlienka k článku “Vlastny GIT server: 1. cast

  1. Pingback: Vlastny GIT server: 2. cast « Cinan's Free (as in "free speech") Blog

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Log Out / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Log Out / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Log Out / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Log Out / Zmeniť )

Connecting to %s

Sleduj

Prijímaj upozornenia na nové články na tvoj email.

Join 57 other followers