Gitolite + Cgit


27 stycznia 2013


Jak uruchomić własny serwer z systemem kontroli wersji Git oraz webowy interfejs Cgit? Opis instalacji oraz konfiguracji obu narzędzi w systemie Fedora 18 (Spherical Cow).

 

Jak już pisałem, na tym blogu, zmieniłem system operacyjny a razem z nim postanowiłem zmienić system kontroli wersji. Już wcześniej korzystałem z systemu Git oraz Gitosis + Viewgit ale ze względu na to, że Gitosis nie jest już dalej rozwijanym narzędziem wybrałem Gotolite. Gitolite wspomaga zarządzanie systemem Git. W łatwy sposób umożliwia tworzenie repozytoriów oraz zarządzanie systemem (tworzenie użytkowników, kontrola dostępu do repozytoriów itd). W dalszej części wpisu opisuję przebieg instalacji, konfiguracji Gitolite oraz webowego interfejsu Cgit w systemie Fedora 18.

1. Instalacja oraz konfiguracja Gitolite

- instalacja gitolite oraz cgit

$ su -
$ Hasł‚o: 
$ yum install git gitolite cgit

- uruchomienie apache i ssh

$ service httpd start
$ service sshd start

- po uruchomieniu pod adresem: http://127.0.0.1/cgit mamy już dostępny Cgit, którego później skonfigurujemy
- po instalacji gitolite został‚ stworzony użytkownik gitolite, któremu zmieniamy hasł‚o

$ passwd gitolite
$ Nowe hasł‚o : 
$ Proszę™ ponownie podać‡ nowe hasł‚o : 

- generujemy klucz dla użytkownika, który będzie miał dostęp do repozytoriów i będzie mógł zarządzać systemem Git:

$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/greg/.ssh/id_rsa): 
Created directory '/home/greg/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/greg/.ssh/id_rsa.
Your public key has been saved in /home/greg/.ssh/id_rsa.pub.
The key fingerprint is:
45:63:33:b5:3a:2a:6c:18:3f:16:6e:bc:d3:07:27:fe greg@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|          *..    |
|         o + .   |
|          . .    |
+-----------------+

- kopiujemy klucz publiczny do katalogu tmp (nazwa pliku musi posiadać format: uzytkownik.pub)…

$ cp ~/.ssh/id_rsa.pub /tmp/greg.pub

- logujemy się™ na konto gitolite i importujemy klucz tworząc jednocześnie repozytorium za pomocą, którego będziemy zarządzać Gitolite

$ su - gitolite
Hasł‚o: 
-sh-4.2$ 
-sh-4.2$ gl-setup /tmp/greg.pub

- w edytorze vi otworzy się™ plik z konfiguracją… .gitolite.rc - zmieniamy wartość zmiennej $REPO_UMASK = 0077; na $REPO_UMASK = 0022; zapisujemy zmiany i wychodzimy 

- w katalogu /var/lib/gitolite został‚ utworzony plik: projects.list oraz katalog repositories zawierają…cy repozytoria 

- wylogowujemy się™ z konta roota i klonujemy repozytorium gitolite-admin.git

$ git clone gitolite@localhost:gitolite-admin

- tworzymy nowe repozytorium dokonując edycji pliku 

$ cd gitolite-admin 
$ vi conf/gitolite.conf

repo    gitolite-admin
        RW+     =   greg

repo    testing
        RW+     =   @all

repo    testowe
        RW+     =   greg

- wysyłamy zmiany na serwer

$ git add .
$ git commit -m "dodanie repozytorium"
$ git push

Repozytorium zostanie automatycznie utworzone, pobieramy je i tworzymy przykładowy plik:

$ git clone gitolite@localhost:testowe
$ cd testowe
$ echo "to jest plik" > plik.txt
$ git add .
$ git commit -m "dodanie pliku"
$ git push

Operacja nie zakończy się sukcesem ponieważ nie nie został skonfigurowany domyślny "brunch". Wykonujemy polecenie i ponownie "komitujemy":

$ git config --global push.default simple
$ git push

2) Tworzenie konta nowego użytkownika

- tworzymy użytkownika 

$ su -
$ adduser uzytkownik
$ passwd uzytkownik
$ exit

- generujemy klucz nowego użytkownika na jego koncie

$ su - uzytkownik
$ sshkey-gen
#cp ~/.ssh/id_rsa.pub /tmp/uzytkownik.pub
$ exit

- kopiujemy klucz do katalogu keydir w repozytorium gitolite-admin

$ cp /tmp/uzytkownik.pub gitolite-admin/keydir/

- nadajemy prawa dostępu do repozytorium

repo    gitolite-admin
        RW+     =   greg

repo    testing
        RW+     =   @all

repo    testowe
        RW+     =   greg uzytkownik

- zapisujemy zmiany i wypychamy na serwer

$ git commit -m "dodanie uzytkownika"
$ git push

Uzytkownik "uzytkownik" posiada już dostęp do repozytorium "testowe" i może wprowadzać zmiany w kodzie. Podczas pierwszego commitu zostanie poproszony o uzupełnienie zmiennych identyfikują…cych jego konto:

$ git config --global user.email "uzyt@test.pl"
$ git config --global user.name "Uzytkownik Testowy"
$ git add .
$ git commit -m "dodanie tekstu"
$ git push

3. Konfiguracja Cgit

- edytujemy plik /etc/cgitrc

$ vi /etc/cgitrc

- możemy zmienić‡ wiele ustawień„ Cgit-a (odsył‚am do dokumentacji) ale obecnie zaprezentują wyłącznie metodę dodawania repozytorium. Na koń„cu edytowanego pliku dodajemy:

repo.url=testowe
repo.path=/var/lib/gitolite/testowe.git
repo.desc=testowe repozytorium
repo.owner=greg@test.pl

- po zapisaniu zmian pod adresem 127.0.0.1/cgit widać‡ już na liś›cie nasze repozytorium ale po wejś›ciu w szczegół‚y otrzymujemy błąd:

Failed to open testowe: Permission denied

- zmieniamy prawa do katalogów i grupę

$ chgrp apache /var/lib/gitolite -R
$ chmod a+rx /var/lib/gitolite -R

- aby aplikacja poprawnie wczytała arkusz stylów CSS oraz obrazki edytujemy plik i wprowadzamy zmiany:

$ vi /etc/httpd/conf.d/cgit.conf

Alias /cgit-data /var/www/html/cgit
ScriptAlias /cgit /var/www/cgi-bin/cgit

- tworzymy w katalogu głównym serwera katalog cgit oraz kopiujemy do niego niezbędne pliki oraz zmieniamy uprawnienia:

$ mkdir cgit    
$ cp /usr/share/cgit/* /var/www/html/cgit/
$ chmod a+rx /var/www/html/cgit -R

4. Podumowanie

Powyższą konfigurację można uzupełnić o dodatkowe elementy:

- aby adres 127.0.0.1/cgit był dostępny wyłącznie po uwierzytelnieniu
- aby w Cgit można było pobierać repozytoria w postaci plików tar, tar.gz itp
- inne

W załącznikach do wpisu umieściłem zrzuty ekranu z widokiem aplikacji Cgit.

Co zawiera blog?

Na blogu umieszczam wpisy dotyczące mojej pracy, zainteresowań. Głowna tematyka to programowanie oraz recenzje płyt oraz książek.

Raport sportowy #7


Zdjęcie: Damien Kühn, Unsplash

Marchewki?


Fotografia © XL Recordings 1999
Jeżeli nie lubisz muzyki house ...

Think Python


Recenzja "Think Python". Darmowe książki, O`Reilly oraz Open Books

Virtualenv - odrębne środowiska pracy


Tworząc aplikacje w języku Python instalujemy różne pakiety. Co zrobić ...

Raport sportowy #6


Zdjęcie: Aziz Acharki, Unsplash

Żywy i martwy kot


Na początku miesiąca swoją premierę miała najnowsza wersja systemu operacyjnego ...