본문 바로가기

Tools

[gitolite] gitolite 설치 및 설정 그리고 repository 관리

git server 생성 후 git repository 전체를 관리하기 위해 gitolite를 사용하게 되었다.


아래의 순서대로 진행.


개발환경

- 서버 : CentOS

- 클라이언트 : Mac

- Git 설치 및 Setting 완료 가정




0. 계정생성 (계정생성 및 권한설정은 생략)


- 필요계정 (본인의 경우 아래 세개의 계정이 필요했다.)


user : 실제 repo를 pull & push 할 계정 (다수의 사용자)

git_repo : git repo 계정 및 repository 관리용 admin 계정

git_adm : git repo 로 접속하여 파일을 관리할 계정


# 차후 설명하겠지만 git_repo계정 등록 후 해당 계정으로 ssh 통신으로 연결하여 관리하는 것이 안되는 경우(이게 정상이라고 생각됨)가 있어 ssh 계정 연결용 git_adm 계정을 생성하였음.




1. admin 계정(여기서는 git_repo) ssh 공개키 생성 및 서버 전송


- 공개키 생성 (Local 경로 : ~/.ssh)


 $ ssh-keygen


# 생성된 키는 id_rsa (개인키) 와 id_rsa.pub (공개키)


- 공개키 전송 (Server 경로 : server 의 gitolite 설치경로, 여기서는 ssh 연결 후 ~/.ssh)


#서버에 .ssh 폴더가 없다면 생성 (Server 경로 : ~/)


 $ mkdir .ssh 


# 공개키 전송 (gitolite 설치 시 공개키 명이 admin 명으로 설정되기 때문에 공개키 이름은 admin 계정명으로 쓰는게 좋음)


 $ scp ~/.ssh/id_rsa.pub <계정명>@<도메인>:<.ssh의 절대경로>/<계정명.pub>
 <ex>

 $ scp ~/.ssh/id_rsa.pub git_repo@10.0.10.1:/home/git_repo/.ssh/git_repo.pub




2. gitolite clone


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


# 회사 server에서 위의 clone 이 안될 경우 server git에서 http(s) proxy 설정 후 재시도


- git proxy 설정 방법


 $ git config --global http.proxy "0.0.0.0:1234"

 $ git config --global https.proxy "0.0.0.0:1234" 




3. gitolite install (Server 경로 : gitolite를 clone 받은 경로)


$ ./gitolite/install


# intall 후에 .../gitolite/src/gitolite 생성




4. gitolite setup (Server 경로 : gitolite를 clone 받은 경로)


# 전송시킨 admin의 공개키로 설치.


 $ ./gitolite/src/gitolite setup -pk ./.ssh/git_repo.pub





5. gitolite 연결 확인(ssh 연결 종료 후 재연결 시)


 $  ssh git_repo@10.0.10.1


# 제대로 설치 되었다면 아래 그림처럼 표시되며 접속 종료됨.


# 오직 관리자 계정에서만 gitolite-admin이 표시되며, gitolite-admin 프로젝트에서 모든 계정 및 repository를 관리.


# 만약 여기서 ssh 접속 시 위와같은 화면이 나오지 않고 패스워드를 묻거나 패스워드입력 후 ssh 접속이 되면 안된다! (대부분의 블로그에 이부분에 대한 설명이 별로 없는데, 접속이 안되는게 정상인지는 잘 모르겠으나 다음에 진행할 내용들에 연관이 있는 점은 분명함.)


# 만약! 위와같이 표시되지 않는다면 다음과 같은 이유일 것이다. ssh 접속 연결 시 키인증을 하게되며, gitolite가 해당 키인증을 가로채 인증확인을 하게된다. 이 때 중요한 부분이 등록된 키를 매칭시키는 것인데 이 부분에서 인식하지 못해 발생하는 문제라고 보여진다.(5** 참고)


# 해당 문제를 해결하기 위해 우선 설치 시 생성되는 구조부터 살펴볼 필요가 있다.




---------- 5. 번을 정상등록하였다면 5** 과정 생략 ----------




5*. gitolite 구조


- gitolite 설치 시 생성되는 구조


# 구조를 확인하기 위해서, 그리고 git_repo(admin) 계정의 파일관리를 위해서 git_adm 계정을 만들어 두었다.


# ssh에 공개키가 등록되지 않은 계정 (여기서는 git_adm)에서는 git_repo 접속이 가능하다.(위에 말했듯 gitolite에 공개키가 정상적으로 등록되면 ssh 연결 시 가로채기 당하므로 접속불가)


# gitolite 설치 시 생성되는 구조는 아래그림과 같음.


.bash_****** 

 .gitconfig

 .gitolite

           - conf

                     - gitolite.conf

           - hooks

           - keydir

           - logs

 .gitolite.rc 

 .ssh

           - authorized_keys

 gitolite

 projects.list

 repositories

 계정 정보 (gitolite 와 무관)

 git config 관련 정보 (gitolite 와 무관)

 gitolite 설정 관련 폴더 

 gitolite repository 설정관련

 gitolite repository 경로 및 사용자 접근권한 설정 파일 (중요!!!)

 gitolite hook 관련 

 gitolite 공개키 저장 폴더 (중요!!!) - gitolite-admin 에서 추가/삭제 

 gitolite 변경내역 로그

 gitolite rc 파일 

 ssh 연동 관련 폴더

 ssh 연동 키 등록정보 (중요!!!!!)

 처음에 clone 했던 gitolite 설치 폴더

 모든 프로젝트 리스트 - gitolite.conf 변경 시 자동 변경

 모든 repository 저장소 (폴더 내 gitolite-admin 매우 중요!!!)




5**. authorized_keys 확인


- 경로 : ~/.ssh/authorized_keys


# vi or nano 를 사용하여 open


 $ vi ~/.ssh/authorized_keys 


# 아래 그림과 같이 # gitolite start ~ # gitolite end 만 존재해야한다. 만약 해쉬태그 밖에 무언가 키 등록이 되어있다면 삭제해야 정상적으로 인식함



# 위에선 3개의 키가 등록되어 있으며, admin pub key 는 git_repo로 등록된걸 볼 수 있음.




6. gitolite-admin.git clone


- 로컬로 복귀해서 git_repo 공개키와 연동된 계정 (admin 계정) 에서 clone (Local 경로 :gitolite-admin 받을 아무데나)


  $ git clone git_repo@10.0.10.1:gitolite-admin.git


# 여기서 굉장히 중요한 것은 도메인 세미콜론 뒤에 절대경로를 적지 않아야 한다는 점이다!


# 위의 공개키-개인키 인증이 정상적으로 인식됐으면 절대경로가 필요없으며, 절대경로로 clone할 시 향후 git push에서 문제가 발생하므로 상대경로로 사용해야함.





7. 사용자(user) 등록


# gitolite는 상호 인증키(공개키-개인키) 인증 기반이므로 등록하려는 사용자의 id_rsa.pub (공개키) 를 admin이 받아서 등록해주어야한다.


# 위에서 clone한 gitolite-admin을 보면 폴더안에 두 개의 폴더가 존재하는데, 내용은 아래와 같다.


 conf/gitolite.conf

 등록된 모든 repository 및 접근권한 설정파일 (변경 시 server gitolite의 ~/.gitolite/conf/gitolite.conf 에 기록됨)

 keydir

 등록된 모든 공개키

(변경 시 server gitolite의 ~/.ssh/authorized_keys 에 기록됨) 

(변경 시 server gitolite의 ~/.gitolite/keydir/ 에서 key들이 변경됨)


- 사용자(user) rsa_id.pub (공개키) 등록


# 사용자에게 전달받은 rsa_id.pub 을 이름을 변경 user.pub 하여 keydir안에 복사한다.


# user.pub을 추가하면 반드시 순서대로 add -> commit -> push 를 해준다. (Local 경로 : .../gitolite-admin/)


 $ git add ./keydir/user.pub

 $ git commit -a -m "add user 'user'"

 $ git push 


---------- 아래는 skip 가능 ----------


# push 중 아래와 같은 warning이 발생할 경우 vi로 해당 공개키 (user.pub)을 열어 확인해보면 line이 2줄로 되어있는 경우이다.


 remote : WARNING : keydir/user.pub does not contain exactly 1 line; ignoring 



# vi로 열어보면 아랫줄이 개행이되있는 경우가 있는데, 편집모드로 비어있는 개행줄을 삭제 후 저장한 뒤 아래와 같이 다시 시도해야함. 

(user.pub 삭제 -> git commit -> git push -> user.pub 빈 개행줄 삭제 -> 수정한 user.pub을 keydir안에 추가 -> git add -> git commit -> git push)


# 위 같은 경우가 아니면서  push가 제대로 되지 않는다면 gitolite-admin.git을 clone할 때 절대경로를 사용했을 가능성이 있는지 확인한다. (절대경로 사용 X)


---------- 여기까지 skip 가능 ----------


# 사용자 등록이 정상적으로 완료되면 사용자가 어드민 계정에 ssh 연결을 시도할 때 아래와같이 표시되어야 한다.


 user_local$ ssh git_repo@10.0.10.1 


# user와 admin의 차이는 gitolite-admin 이 위 목록에 보이는지 여부이다. 당연히 gitolite-admin 프로젝트에서 모든 프로젝트 경로 및 접근제어와 유저관리를 하므로 admin 계정만 gitolite-admin 이 보이는게 지극히 정상.


# user는 위의 접속 내용으로 자신이 어느 프로젝트에 접근 가능한지, 그 프로젝트 경로가 어떻게 되는지 파악할 수 있다.




8. 프로젝트 신규 추가


# git_repo 계정의 로컬에 clone 받은 gitolite-admin 프로젝트의 conf 로 이동 (Local 경로 : .../gitolite-admin/conf)


# vi 또는 nano를 이용하여 gitolite.conf 를 편집


 $ nano gitolite.conf 


# 아래와 같이 repo New-Project 추가


# RW+ 는 접근권한설정 @all 은 모든사용자 읽고쓰기용 접근 가능 (접근권한 설정에 대한 자세한 내용은 검색 요망)


# 저장 후 편집창을 닫고 git commit, push 해준다.


 $ git commit -a -m "add project 'New-Project'"

 $ git push 


# 정상적으로 push가 완료되면 server의 git_repo계정 repositories 밑에 새로운 프로젝트가 생기며, git 명령어를 사용한 새 저장소 생성과 같은(git init --bare) 방식의 구조로 생성된 것을 확인할 수 있다. (git_adm 계정으로 확인함)


# 그 후 기존 git과 같이 사용하면 된다.

# 기존에 server에서 사용중이던 git 프로젝트가 있다면, 다음 두가지 방법으로 gitolite 계정에 옮길 수 있다.


(1) mv/cp 등의 명령어를 이용해 repositories 폴더 내로 이동/복사 한 후 git_repo 계정의 로컬에서 gitolite.conf에 위와 같은 방식으로 경로와 접근권한을 추가한 후 commit, push 한다.


(2) 위와같이 새로추가하는 방식으로 gitolite.conf 추가 후 server에서 사용중이던 git을 로컬에서 clone 한 뒤 origin 경로를 바꾸어 다시 add, commit, push 한다.


(2)번과 같은 경우는 기존 push Log가 날라가기 때문에 (1)번을 추천.





9. admin계정인 git_repo 에 등록된 PC를 바꾸는 방법.(관리자 PC 교체)


# repositories에 gitolite-admin 프로젝트는 모든 사용자와 프로젝트 경로 및 접근제어를 관리하며, 오직 admin 계정으로 등록된 PC에서만 접근 및 clone이 가능하다.


# 관리자가 변경되거나 관리자PC가 변경되면 필히 관리자 공개키 재등록을 해줘야한다.


# 1.과 같이 새 관리자PC의 공개키/개인키 생성 후 공개키를 서버로 보낸다.


# 4.와 같이 이미 설치된 gitolite에서 다시 새로운 공개키로 setup을 하면 관리자 PC가 변경된 것을 확인할 수 있다.


# 새 관리자 PC에서 공개키로 gitolite setup 후 ssh로 git_repo에 접속하여 아래와 같이 표시되면 적용완료. (단, gitolite-admin 프로젝트가 반드시 보여야함)

'Tools' 카테고리의 다른 글

[git/gitlab] how to clone with gitlab ID/PW in console  (0) 2019.02.18
sitemap  (0) 2019.02.15
[Git] Git 저장소 생성 및 초기 설정  (0) 2017.07.14
[Git] Git ignore list  (0) 2017.07.14
[atom] convert MD(mark down) to pdf  (0) 2017.07.05