본문으로 바로가기

[Ubuntu] 우분투 Git + Gitolite + Gitweb

category 리눅스/Ubuntu 2013. 8. 30. 00:00

Gitolite는 Git Repository를 관리하는 툴입니다. 특이하게도 Gitolite 설정이 Git으로 관리되며, 관리자가 Clone한 Gitolite 설정에 SSH Key를 추가하거나, 설정 File을 변경하여 Server에 Push하는 동작을 통해 Git Repository에 해당 변경이 자동으로 적용되게 됩니다.

아래의 예제는 Apache(아파치)와 openssh가 설치되어 있다는 가정하에 진행된다.

Gitolite를 컨트롤하는 것은 클라이언트 컴퓨터로, Git의 리모트 저장소로 운영되는 서버에서 Gitolite를 설치하며 gitolite-admin 저장소를 clone 하여 클라이언트 컴퓨터에서 수정하고 이를 서버에 push하여 반영하는 방법으로 진행된다.

Git 최신버전 설치

우분투 12.04.02에서 git 설치시 1.7.9 버전이 설치된다. 최신버전을 사용하기위해서는 PPA를 사용해야 한다.

PPA를 사용할 때 쓰는 add-apt-repository 명령어가 작동하지 않으면 python-software-properties를 설치하고, 그래도 문제가 생기는 경우에는 software-properties-common을 설치하면 된다.

sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git-core
git version

Gitolite 설치하기

계정 생성 및 로그인

패스워드를 사용하지 않고 로그인쉘은 bash를 사용하는 git 계정을 추가한다. 생성된 git 계정은 repository, project.list를 관리하는 사용자 계정으로 대개의 경우 git을 사용한다.

sudo adduser \

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

git 계정으로 로그인한다.

sudo su -l git

Gitolite 설치파일 클론하고 설치준비

Gitolite는 저장소를 통한 관리를 하기 때문에 이 Gitolite 저장소를 내려받아 이를 설치할 수 있다. 이때 git 유저로 로그인 한 상태에서 진행함을 명심해야 한다(우분투에서 gitolite 패키지도 제공하지만 버전이 낮은 관계로 직접 clone 한다).

git clone git://github.com/sitaramc/gitolite 

위의 결과로 /home/git/gitolite 디렉토리가 생성된다.

명령어가 실행될 위치를 생성한다.

mkdir $HOME/bin 

Gitolite의 바이너리파일을 설치한다.

gitolite/install -ln 

위의 결과로 /home/git/bin/gitolite 파일이 생성되며, 그것은 /home/git/gitolite/src/gitolite 의 심볼릭링크이다.

SSH-key 등록

클라이언트 컴퓨터(작업컴퓨터)에서 SSH-Key를 생성하고 id_rsa.pub(공개키)를 서버로 전송한다.

SSH-key 생성 방법 보기

scp를 이용하든 ftp를 이용하든 어찌됫든 간에 전송, 윈도우라면 msysgit 으로 scp를 이용해 전송한다.

scp ~/.ssh/id_rsa.pub unclepapa@192.168.0.20:id_rsa.pub

다시 서버 관리자로 로그인하고 전송된 파일을 이동시키고, 소유권을 변경한다. 이동 시킬때 파일명을 변경하는데 이때 파일명이 후에 관리자로 등록된다.

sudo mv id_rsa.pub /home/git/Git-Admin.pub     
sudo chown git:git /home/git/Git-Admin.pub

다시 git 계정으로 로그인

sudo su -l git

관리자 등록

Git-Admin.pub 키를 이용해 관리자를 등록한다. 이 공개키를 사용하는 사람만이 Gitolite 설정을 할 수 있게 되며 .ssh 디렉토리와 그 하부에 authorized_keys가 자동으로 생성되어 SSH를 통한 접속이 가능하게 된다.

bin/gitolite setup -pk Git-Admin.pub

몇가지 중요한 파일들과 디렉토리들이 생성된다.

ls -la

  total 48
  drwxr-xr-x 7 git  git  4096 Aug 29 02:03 .
  drwxr-xr-x 4 root root 4096 Aug 29 01:05 ..
  -rw------- 1 git  git   233 Aug 29 01:48 .bash_history
  drwxrwxr-x 2 git  git  4096 Aug 29 01:34 bin
  -rw-r--r-- 1 git  git   404 Aug 29 01:50 Git-Admin.pub
  drwxrwxr-x 5 git  git  4096 Aug 29 01:29 gitolite
  drwxrwxr-x 6 git  git  4096 Aug 29 02:03 .gitolite
  -rw-rw-r-- 1 git  git  5826 Aug 29 02:03 .gitolite.rc
  -rw-rw-r-- 1 git  git    12 Aug 29 02:03 projects.list
  drwxrwxr-x 4 git  git  4096 Aug 29 02:03 repositories
  drwx------ 2 git  git  4096 Aug 29 02:03 .ssh

또한 repositories 디렉토리를 들여다보면 Gitolite를 설정하는 저장소와 test 저장소도 볼 수 잇다.

ls -la repositories/

  total 16
  drwxrwxr-x 4 git git 4096 Aug 29 02:03 .
  drwxr-xr-x 7 git git 4096 Aug 29 02:03 ..
  drwxrwxr-x 8 git git 4096 Aug 29 02:03 gitolite-admin.git
  drwxrwxr-x 7 git git 4096 Aug 29 02:03 testing.git

클라이언트에서 Gitolite 설정 저장소 클론하기

클라이언트에 Git을 설치한다. 클라이언트에 Git 설치 : http://webdir.tistory.com/222

본인의 경우 ssh 설정에서 SSH 접속 가능한 인원을 sudo 그룹으로 제한해서 사용하곤 한다. 이처럼 특정인원만 접속할 수 있도록 제한 했을 경우 이 설정을 풀어주어야 한다.

클론하기

git clone git@서버주소:gitolite-admin.git

사용자와 그룹 권한 설정 : conf/gitolite.conf

공개키의 이름(Git-Admin)이 관리자로 등록되어 있다. 사용자를 추가하고 이용권한을 추가할때도 마찬가지로 사용자들의 공개키이름에 근거하여 권한을 추가한다.

repo gitolite-admin

    RW+     =   Git-Admin

repo testing

    RW+     =   @all

사용자키 추가 : keydir/키이름(사용자명.pub)

Git-Admin.pub

Gitweb 설치하기

다시 서버 관리자로 로그인한다.

gitweb 패키지 설치

gitweb을 설치하면 /usr/share/gitweb 에 설치된다.

sudo apt-get install gitweb

gitweb 접근허용

UMASK 값을 0027로 변경하여 그룹이 접근 가능하게 한다.

sudo vi /home/git/.gitolite.rc

  UMASK    =>    0027,

gitweb의 설정중 Gitolite를 설치해 변경된 경로를 변경

sudo vi /usr/share/gitweb/gitweb.cgi

  our $projectroot = "/home/git/repositories/";
  our $projects_list = "/home/git/projects.list";

gitweb 설정파일 안의 경로도 변경한다.

sudo vi /etc/gitweb.conf

  projectroot = "/home/git/repositories/";
  projects_list = "/home/git/projects.list";

아파치 재시작

sudo service apache2 restart

웹접속 테스트

http://서버IP/gitweb

gitweb 의 보안을 위해서는 htpasswd 를 설정하든가 IP 접속제한을 두던가 할 수 있다. /etc/apache2/conf.d/gitweb 의 파일을 입맛에 따라 설정하면 된다.

htpasswd를 이용한 Gitweb 보안

기본적으로 누구나 gitweb 페이지에 접속할 수 있으니 암호를 걸도록 한다.

gitweb 아파치 설정

sudo vi /etc/apache2/conf.d/gitweb

  Alias /gitweb /usr/share/gitweb

  <Directory /usr/share/gitweb>
    Options FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "Git Access"
    Require valid-user
    AuthUserFile /etc/apache2/gitweb-htpasswd
  </Directory>

htpasswd 생성

htpasswd -mc /etc/apache2/gitweb-htpasswd admin

  New password: 
  Re-type new password: 
  Adding password for user admin

아파치 재시작

sudo service apache2 restart