Własne repozytorium Gita na Linuksie
W tej notce postaram się opisać w jaki sposób, krok po kroku, postawić główne repozytorium Gita na własnym serwerze z zainstalowanym systemem linux (na przykładzie Slackware, z którego korzystam, ale myślę, że nie będzie problemów na innych dystrybucjach). Repozytorium nie będzie wykorzystywać interfejsu webowego i nie będzie uwzględniać podziału na konta, ale będzie wystarczającą alternatywą dla publicznego repozytorium w serwisie GitHub. Jednak zaczynając od początku wypadałoby powiedzieć kilka słów o tym czym jest Git.
Git jest jednym z kilku systemów kontroli wersji (SVN, Mercurial), czyli narzędzi służących do śledzenia zmian w kodzie źródłowym. Jego głównym zadaniem jest łączenie i modyfikacja zmian, a w razie błędu, umożliwienie przywrócenia poprzedniej, działającej wersji. Jedną z bardzo ważnych cech Gita jest to, że wszystkie zmiany są przechowywane lokalnie, dzięki czemu nie wymaga on do działania połączenia z głównym repozytorium. W porównaniu do Subversion, z którego do tej pory korzystałem, jest również szybszy i nie występują w nim problemy z łączeniem równoległych wersji (branchy).
Wracając jednak do tematu, na początek wypadałoby się upewnić czy na komputerze, na którym chcemy zainstalować Gita jest jedna z jego nowszych wersji. Ma to związek z przeniesieniem wewnętrznych plików wykonywalnych z katalogu /usr/bin/ do /usr/libexec/git-core/.
Instalacja Gita
Tak więc na początek pobieramy paczkę z git-core z tej strony, za pomocą polecenia:
wget http://kernel.org/pub/software/scm/git/git-1.7.4.1.tar.bz2 |
i ją rozpakowujemy:
tar –xvf git-1.7.4.1.tar.bz2 |
następnie przechodzimy do tego katalogu i (po przeczytaniu README oraz INSTALL), wykonujemy następujące polecenia:
./configure && make && make prefix=/usr install install-doc install-html install-info |
Tutaj można napotkać problem przy instalowaniu dokumentacji, jak to miało miejsce u mnie. Rozwiązanie tego problemu znajduje się na tej stronie.
W tym momencie Git powinien być już zainstalowany, w przypadku gdy mieliśmy na dysku starą wersję, która pliki wykonywalne przechowuje w katalogu /usr/bin/, należy je ręcznie skasować, żeby nie sprawiały problemu. Jeśli jest to możliwe, można je rozpoznać po datach modyfikacji, po czym na koniec powinny zostać tam następujące pliki:
git git-cvsserver git-receive-pack git-shell git-upload-archive git-upload-pack gitk |
Konto shellowe Git
Kolejnym krokiem jest utworzenie odpowiedniego konta shellowego, dzięki któremu będzie można połączyć się z repozytorium za pomocą protokołu ssh. Konto należy utworzyć z uid i gid równymi 9418 oraz git-shell jako programem startowym:
groupadd git –g 9418 useradd git –u 9418 –g git –c git –d /home/git –s /usr/libexec/git-core/git-shell passwd –d git |
Istotna jest ostatnia komenda, ponieważ bez niej nie uda się nam połączyć z repozytorium. Następnie tworzymy repozytorium i nadajemy prawa:
chown git:git /home/git/ chmod 700 /home/git/ mkdir /home/git/base/ chown git:git /home/git/base/ chmod 775 /home/git/base/ |
Kolejnym krokiem jest utworzenie właściwego repozytorium, robi się to za pomocą poleceń:
mkdir /home/git/base/repo.git cd /home/git/base/repo.git git init –-bare -–shared sudo chmod -R g+ws * sudo chgrp -R git * |
Repozytorium jest już gotowe, niestety jeszcze nie można się z nim połączyć, ponieważ konto git nie posiada hasła. W celu umożliwienia łączenia się do repozytorium należy skorzystać mechanizmu autoryzacji sesji ssh za pomocą klucza prywatnego.
Autoryzacja za pomocą klucza prywatnego
W tym celu należy na każdej maszynie, z której będziemy się łączyć, utworzyć dwa klucze rsa, jeden publiczny drugi prywatny. Nie będę tego opisywał w tej notce, ponieważ jest to fajnie wyjaśnione na stronie GitHuba, w wersji dla systemu windows i linux. Opiszę natomiast w jaki sposób dodać te klucze do konta git na serwerze, umożliwiając tym autoryzację.
Na początek należy utworzyć w katalogu /home/git/ katalog .ssh, w nim plik authorized_keys i nadać im odpowiednie prawa:
mkdir /home/git/.ssh chmod 700 /home/git/.ssh/ touch /home/git/.ssh/authorized_keys chmod 600 /home/git/.ssh/authorized_keys cat id_rsa.pub >> /home/git/.ssh/authorized_keys chown –R git:git /home/git/.ssh/ |
Gdzie id_rsa.pub to klucz publiczny skopiowany z komputera klienckiego.
I to by było na tyle, w tym momencie można już wysyłać dane do repozytorium, którego adres jest następujący:
git@adres_serwera:base/repo.git |
Źródła:
[1] http://forums.freebsd.org/showthread.php?t=10810
[2] http://stackoverflow.com/questions/897477/installing-git-on-os-x
[3] https://wincent.com/wiki/Updating_to_Git_1.6.0.1
[4] http://mapopa.blogspot.com/2009/10/git-insufficient-permission-for-adding.html