CentOS Gitolite 설치하여 운영하기

Jeongkuk Seo
sjk5766
Published in
10 min readJan 11, 2019

github에 repository를 만들어 소스를 관리할 수 있지만, 회사 내부에서 git 서버를 만들고 소스를 관리하고 싶을때가 있습니다. 이 때 많이 사용되는 gitolite을 설치해서 사용해보겠습니다.

이 포스트에서 gitolite를 이용해 구성할 환경은 아래와 같습니다.

왼쪽의 경우 하나의 OS에서 gitolite를 설치하고 운영합니다. 제 경우 git에 대해 공부하기 위해서 이런 환경을 구성하였습니다.

오른쪽의 경우 실제로 회사 내부에서 gitolite를 운영하는 모습입니다. gitolite를 설치한 OS C가 있고 각 개발자들은 Window/Linux 등 다양한 곳에서 OS C에 접근하여 git을 운영합니다.

OS안의 박스들은 계정을 의미합니다.

  • gitolite-creator : gitolite를 설치한 계정
  • git-manager : 설치 한 gitolite를 관리/운영하는 계정
  • sjk5766 : 개인 계정으로 repository를 clone 받아 소스를 관리한다.

이 정도만 보고 gitolite 설치부터 진행하겠습니다.

Gitolite 설치

우선 git은 설치되어 있다고 가정합니다. 혹시 git이 설치되어 있지 않다면 아래 명령어로 git을 설치합니다.

yum install -y git-core

이제 계정을 생성합니다.

[root@localhost home]# useradd gitolite-creator
[root@localhost home]# useradd git-manager
[root@localhost home]# useradd sjk5766
[root@localhost home]# passwd gitolite-creator
[root@localhost home]# passwd git-manager
[root@localhost home]# passwd sjk5766

gitolite를 설치하는 과정에서 gitolite를 운영할 계정의 공개키가 필요합니다. 저는 git-manager 계정으로 gitolite를 운영할 것이므로 git-manager 계정으로 로그인하여 key를 생성하고 gitolite-creator에게 전달하겠습니다.

[root@localhost home]# su git-manager
[git-manager@localhost home]# cd ~
[git-manager@localhost ~]$ mkdir .ssh
[git-manager@localhost ~]$ cd .ssh/
[git-manager@localhost .ssh]$ ssh-keygen // (*)
[git-manager@localhost .ssh]$ scp ~/.ssh/id_rsa.pub gitolite-creator@localhost: // (**)
[git-manager@localhost .ssh]$ su gitolite-creator
Password:
[gitolite-creator@localhost .ssh]$ cd ~
[gitolite-creator@localhost ~]$ mv id_rsa.pub gitolite-creator.pub

주석 (*) 부분에서 질문이 나올텐데 그냥 엔터 입력하시면 됩니다. 주석(**) 부분은 생성한 공개키를 gitolite를 설치할 계정으로 전달한 겁니다. 위에서 마지막에 gitolite를 설치할 gitolite-creator로 접속했습니다. 이제 gitolite를 설치할 차례입니다.

git clone git://github.com/sitaramc/gitolite               
mkdir bin
gitolite/install -to /home/gitolite-creator/bin
/home/gitolite-creator/bin/gitolite setup -pk gitolite-creator.pub

gitolite를 설치하는 글들을 보면 글 마다 설치방법이 조금 다릅니다. gitolite 버전마다 설치과정이 조금씩 달라서 그런데 제 경우는 위와 같이 해야 정상적으로 설치가 되었습니다. 정상적으로 설치되었다면 gitolite를 설치한 계정에서 repositories 디렉토리 안에 두 개의 repository 정보를 확인할 수 있습니다.

Gitolite 운영계정에서 repo와 접근계정 확인

gitolite는 정상적으로 설치되었고 운영을 위해 git-manager 계정으로 접속하여 gitolite-admin repo를 clone 받아 보겠습니다.

[gitolite-creator@localhost repositories]$ su git-manager
Password:
[git-manager@localhost repositories]$ cd ~
[git-manager@localhost ~]$ git clone gitolite-creator@localhost:gitolite-admin
Initialized empty Git repository in /home/git-manager/gitolite-admin/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 778 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)

정상적으로 clone을 받았습니다. 혹시 다음과 같은 에러가 발생하시나요?

gitolite-creator@localhost’s password:
fatal: ‘gitolite-admin’ does not appear to be a git repository
fatal: The remote end hung up unexpectedly

ssh 키 경로를 잘못 인지하는 경우인데 git-manager 계정에서 다음과 같이 .ssh/config 파일을 만들어 작업을 하시고 clone 받으시면 됩니다.

cat ~/.ssh/config           // 아래의내용을 저장한다.
Host gitbox
User gitolite-creator // gitolite 설치 계정
Hostname localhost // 설치된 ip를 적어줍니다.
Port 22
IdentityFile ~/.ssh/gitolite-creator // 비밀키
chmod 644 ~/.ssh/config
git clone gitbox:gitolite-admin

clone 받은 디렉토리 구조를 살펴보겠습니다.

clone 받은 gitolite-admin 디렉토리 안에 conf와 keydir 디렉토리가 있습니다. conf 디렉토리는 각 repository에 대한 접근 할수 있는 계정과 권한을 관리하고 keydir 디렉토리는 각 계정의 공개키를 저장하고 있습니다. conf 디렉토리에 접근하여 gitolite.conf 파일을 보겠습니다.

[git-manager@localhost conf]$ cat gitolite.conf
repo gitolite-admin // (*)
RW+ = gitolite-creator
repo testing // (**)
RW+ = @all

주석 (*)은 gitolite-admin 이라는 repository에 대한 선언입니다. 바로 아래에 나오는 RW+는 gitolite-admin 이라는 repository에 대한 계정의 접근 권한을 의미합니다. 즉 gitolite-creator 계정이 gitolite-admin 이라는 repository에 대해 RW+ 권한을 가지고 있다.

주석 (**)은 testing repository에 대해 모든 사용자가 RW+ 권한을 가지고 있다는 뜻입니다. 이제, 계정을 추가해서 권한을 부여하는 작업을 해보겠습니다.

Git Repo에 접근할 사용자 계정 추가하기

sjk5766 계정으로 이동해 key를 생성하고 git-manager에게 전달합니다.

su sjk5766
ssh-keygen
scp ~/.ssh/id_rsa.pub git-manager@localhost:/home/git-manager/gitolite-admin/keydir/sjk5766.pub

이제 git-manager로 접속하면 정상적으로 sjk5766 계정에 대한 공개키를 받았습니다. 이제 git에 commit하고 push 하겠습니다.

su git-manager
/home/git-manager/gitolite-admin/keydir
git add sjk5766.pub
git commit -a -m "user sjk5766 add"
git push origin master

sjk5766 계정으로 접속해 testing repository를 clone 받습니다.

su sjk5766
[sjk5766@localhost ~]$ git clone gitolite-creator@localhost:testing
Initialized empty Git repository in /home/sjk5766/testing/.git/
warning: You appear to have cloned an empty repository.
[sjk5766@localhost ~]$ ll
total 4
drwxr-xr-x. 3 sjk5766 sjk5766 4096 Jan 11 01:56 testing

Git Repo를 추가하고 사용자 권한 주기

Git이 Repo 생성하기 위해 conf 디렉토리에 있는 gitolite.conf를 수정합니다.

new-project 라는 이름의 repository를 생성하고 sjk5766 계정에게 RW 권한을 부여하였습니다. 저장 후 git에 push 합니다.

git commit -a -m "create repo"
git push origin master

sjk5766으로 접속해 해당 프로젝트를 clone 합니다.

실제 회사에서 사용하려면

여기까지 정리해보면 동일한 OS에서 gitolite을 이용해 git을 관리하는 법을 알아봤습니다. 그리고 여기까지 이해를 하셨다면 쉽게 회사에서 gitolite를 적용할 수 있습니다.

서버에 gitolite를 정상적으로 설치합니다. 각 개발자들은 자신의 공개키를 git 관리자에게 전달하고, git 관리자는 운영 계정 (위에서 git-manager) 에서 keydir에 key를 저장하고 개발자가 접근할 repo에 대한 권한을 추가하고 push 합니다. 그 후 개발자는 정상적으로 repo를 clone 받아 git을 사용할 수 있습니다.

--

--