Have You Tried IT ?

Information Technology from scratch

Instalacja git na serwerze

Dodano przez Kategoria: Linux

Doszło do takiej sytuacji, że mam czasem dość siedzenia przy desktopie i chciałbym od czasu do czasu popracować, załóżmy na wersalce 😉 używając laptopa. Mogę oczywiście zrobić sobie zasób sieciowy i w nim pracować, ale co jeśli będę chciał zabrać laptopa z Internetem na łąkę albo popracować na wersalce u znajomych albo u dziewczyny (żartuje, nie mam ani dziewczyny, ani znajomych… no ale jestem prawie pewien, że ktoś inny może mieć 😉 ) Padło na wykorzystanie jakiegoś systemu kontroli wersji, a konkretniej Gita.
Git ma bardzo dobrą książkę (nawet prawie cała po polsku) do poczytania on-line, tak więc polecam najpierw ją poczytać, a wówczas nie będzie potrzeby wracania tutaj.

Instalacja na Debianie:

sudo apt-get install git-core gitosis

gitosis – pozwala na zarządzanie repozytoriami przez SSH

Utworzenie konta systemowego, które będę wykorzystywał do połączenia

adduser\
 --system\
 --shell /bin/sh\
 --gecos 'git version control'\
 --group\
 --disabled-password\
 --home /home/git\
 git

Systemowy użytkownik o nawie git i katalogu domowym /home/git (tak gdzie będą przechowywane repozytoria). Użytkownik ma wyłączoną opcję logowania się hasłem, trzeba będzie użyć klucza publicznego.

Klucz publiczny należy sobie wygenerować na komputerze, z którego będę się łączył.
na linuxie: ssh-keygen -t rsa lub na windowsie: program PuTTYgen.

Wygenerowany klucz publiczny kopiuje sobie do katalogu /tmp a później dodaje go do autoryzowanych:

sudo su
cd ~git
sudo -H -u git gitosis-init < /tmp/id_rsa.pub

Trzeba jeszcze ustawić uprawnienia dla pliku

chmod 0755 /home/git/repositories/gitosis-admin.git/hooks/post-update

Warto również od razu ustawić swoje parametry identyfikacyjne, jakimi będą oznaczane wszystkie moje działania

git config --global user.name "Moja Nazwa"
git config --global user.email mojnick@mojemail.com

 

Config gita jest również repozytorium, dlatego można je sobie sklonować na lokalny komputer i od razu sprawdzić czy działa autoryzacja kluczem:

git clone ssh://git@moj-serwer.net:5022/gitosis-admin.git

Repozytorium gitosis-admin powinno zostać ściągnięte na lokalny komputer. Powinien tam się znaleźć plik gitosis.conf oraz katalog keydir.

Żeby utworzyć nowe repozytorium należy edytować plik  gitosis.conf i dodać wpis o nowym repozytorium (zaczyna się od linii [group galezieikonary])

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = tobedeja@serwer1

[group galezieikonary]
writable = galezieikonary
members = tobedeja@serwer1 bobrMateo@puszcza-piska

Trzeba jeszcze umieścić klucz publiczny nowego użytkownika (nazwa pliku tak sama jak pełna nazwa użytkownika +.pub) w katalogu keydir, a następnie dodać pliku to repozytorium, zatwierdzić i wysłać na serwer

git add gitosis.conf
git add "keydir/bobrMateo@puszcza-piska.pub"
git commit -m 'Dodano nowe repozytorium galezieikonary i bobra'
git push

Przy dodawaniu klucza niezbędne jest ujęcie całości w cudzysłowie ze względu na znak małpy @. Można też bez cudzysłowów ale przed małpą trzeba postawić backslash\@

Aby zaistniała możliwość logowania się przez SSH przy użyciu klucza publicznego, użytkownik na serwerze musi posiadać klucz publiczny tego, kto chce się zalogować dopisany w pliku ~/.ssh/authorized_keys

Powyższa metoda dodawania użytkowników i ich kluczy publicznych powinna automatycznie aktualizować plik authorized_keys. Gitosis powinien automatycznie zarządzać plikiem authorized_keys.
W razie jakby coś nie działało, można to wykonać „ręcznie”, jak poniżej:

su git
cd ~/.ssh
cat /tmp/id_user.pub >> authorized_keys

 

W moim przypadku jednak coś poszło jednak niezgodnie z planem i niestety gitosis nie zarządza kluczami.
Póki co nie udało mi się zlokalizować przyczyny :/
Dlatego lepszym pomysłem będzie użycie Gitolite zamaist gitosis, chociażby z tego względu, że projekt gitosis wygląda na porzucony, od kilku lat nic się tam nie dzieje, a Gitolite ma więcej możliwości zarządzania dostępem.

 

Na serwerze należy utworzyć katalog i zainicjować centralne repozytorium:

cd /home/git/repositories
mkdir galezieikonary.git
cd galezieikonary.git
git init --bare

Inicjalizacja repozytorium z parametrem bare oznacza, że jest to repozytorium centralne, z którego użytkownicy mogą pobierać i wysyłać, ale nie można na nim pracować bezpośrednio. Według ogólnie przyjętych zasad nazwa takiego repozytorium powinna kończyć się słowem .git

Na lokalnej maszynie należy utworzyć robocze repozytorium i połączyć je z centralnym:

mkdir galezieikonary
cd galezieikonary
git init

git remote add gik ssh://git@serwer1.las.org/galezieikonary.git

Jakby wyskoczyło nagle, że repozytorium nie zostało odnalezione, to proszę spróbować wpisać pełną ścieżkę po nazwie serwera
ssh://git@serwer1.las.org/home/git/repositories/galezieikonary.git
Na razie nie mam pojęcia od czego to zależy, na jednym komputerze to samo repozytorium działa z pełną ścieżką na innym ze skróconą.

Zdefiniowałem sobie nazwę (gik) dla zdalnego serwera, na którym znajduje się centralne repozytorium.
Teraz można już zacząć pracować nad projektem i później przesłać pliki.

echo '<h1>Hello, wood!</h1>' > index.html
git add index.html
git commit -am "Dodano pierwszy plik!"

git push gik +master:refs/heads/master

 

Aby wysłać na serwer każdą kolejną zmianę wystarczy wpisać:

git push gik

domyślnie będzie aktualizowana gałąź master.

 

Update:

Można również wymusić logowanie użytkownika git tylko przy użyciu klucza publicznego.
Trzeba dopisać na końcu pliku /etc/ssh/sshd_config

Match User git
PasswordAuthentication no

 

3 komentarze

  1. Pingback: Git: Migracja gitosis do gitolite

Dodaj komentarz do nolife

XHTML: Dozwolone znaczniki: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">