본문 바로가기

SE Tools/Gitolite

Git 계정 관리 - Gitolite 설치하기


Git의 기본적인 계정(권한) 관리는 SSH를 따라간다고 앞에서 지겹게 언급했다.

SSH가 훌륭한 놈이라는 것은 분명하지만,
계정 관리에 있어서 부족함이 있는 것 또한 분명하다.

Git에 있어서도 다양하고 디테일한 권한 설정 등이 필요한데,
이 부분을 SSH는 충분히 채워주지 못하고 있다.

그래서, Git을 위한 계정(권한) 관리 도구들이 계속 나타나고 있다.

과거에는 Gitosis 라는 것을 주로 사용했으나 기능이나 사용상의 편의성에 있어서 부족함이 보여서
새로운 Gitolite 라는 것이 나타났고, 최근에는 거의 대부분 Gitolite를 사용하고 있다.

사실 일반적인 경우 Gitosis만 가지고도 대부분 처리가 가능하나,
왠지 더 최근의 보다 더 막강한 Gitolite를 적용하곤 하는 것도 없지 않아 있는 것 같다.
물론 나의 경우에도 마찬가지다! 최신병에 걸린 죄로.... Gitolite에 대해서 연구를 해보겠다!!!




Gitolite를 설치하는 방법은 당연하게도 패키지 설치와 소스 설치가 있고...
여기에서는 소스를 가지고 설치하는 과정으로 설명을 할 것이다.


[ 전면수정 ]
   - 내가 바보같아서인지, 이 놈의 Gitolite에 대해서 친절하게 설명해 놓은 자료가 안보인다.
   - 가끔 친절한척 자세히 적어놓은 것들이 있지만, 따라하다보면 대체 뭘하는 것인지 모르겠는 그런 것이 대부분이다.
   - 더더욱 힘들게 하는 것은 Gitolite가 최근 g2 버전에서 g3로 바뀌면서 설치 과정들이 바뀌었다.
   - 그래서 예전 기억을 더듬어 차근차근 포스팅을 해나가다가... 좌절! 결국 대폭 수정 작업!!! 짜증 확!!! ㅠㅠ




1. Gitolite


     - Gitolite 프로젝트의 홈페이지는 아래와 같다.
          ▷ https://github.com/sitaramc/gitolite
     - 설치 과정에 대한 매뉴얼은 아래와 같다.
          ▷ http://sitaramc.github.com/gitolite/install.html
     - 계정 관리 등에 대해서 요약(?)을 한글로 보고 싶다면 아래 주소로 가라.
          ▷ https://github.com/progit/progit/blob/master/ko/04-git-server/01-chapter4.markdown



2. 시스템(계정) 구성

     - Gitolite를 설치하는 환경을 위해 어떻게 구성해야하는지 살펴보자.


     - 꼭 위와 같이 구성해야하는 것은 절대 아니다.
     - 아래 설명하는 내용을 잘 읽어보고 어떻게 구성해야하는지 각자 결정하면 된다.

     - 위의 직사각형은 각 계정을 의미한다.
     - [ git-repo ] 계정은 Git repository를 운영하기 위한 계정이다.
     - [ gitolite ] 계정은 Gitolite를 관리하기 위한 관리자 계정이다.
     - [ user ] 계정은 그냥 여러분이 사용하는 Ubuntu의 기본 계정이다.

     - 위 그림에 대한 설명은 아래 내용들을 하나씩 따라하면 알 수 있을 것이다.



3. 계정 생성

     - SSH 환경에서 여러 개발자들을 지원해주기 위해서는 Linux 계정을 그 숫자만큼 만들어줘야 했다.
     - Gitolite를 적용하게 되면 Linux 계정을 만들어주지 않고도 Git 계정을 만들어 줄 수 있다.
     - 대표 계정 하나로 나머지를 모두 커버하는 것이다.


$ sudo adduser gitolite
$ sudo adduser git-repo

     - [ gitolite, git-repo ]라는 계정을 추가해주자.



4. Public Key 등록

     - 현재 작업중인 계정에서 다른 계정에 접근하기 위해 Public-Key를 등록해주자.


     - 지금 사용중인 user의 계정에서 gitolite, git-repo 계정으로 ssh 접근을 바로(패스워드 없이) 하기 위해서
       user 계정의 공개키를 넣어주는 것이다.


$ ssh-keygen
$ ls -al ~/.ssh/

     - [ ~/.ssh/ ] 계정의 홈디렉토리 밑에 있는 '.ssh/' 디렉토리 밑의 파일들을 우선 확인하고,
     - [ id_rsa ], [ id_rsa.pub ] 파일들이 안보이면 [ ssh-keygen ]으로 생성을 해주면 된다.

 

$ ssh-copy-id -i ~/.ssh/id_rsa.pub gitolite@localhost
$ ssh-copy-id -i ~/.ssh/id_rsa.pub git-repo@localhost


     - 지금 현재 계정의 공개키를 gitolite, git-repo 계정에 넣어주기 위한 명령이다.


     - 잘 되었는지 검증해보기 위해서는 아래와 같이 직접 ssh 접속을 해보면 안다.

     - 암호를 묻는 과정이 사라졌다.
     - gitolite 계정의 [ ~/.ssh/ ] 경로를 살펴보면 [ authorized_keys ] 파일이 보일 것이다!



5. Gitolite 다운로드 받기

     - 위와같이 계정들을 생성하고 준비를 하고...이제 Gitolite를 설치해보자.
     - 그런데, 어디에 Gitolite를 설치해야할까?!

     - 정답은 repository를 저장할 곳이다! 즉, [ git-repo ] 계정에서 설치를 해야하는 것이다.

 


     - [ git-repo ] 계정에서 Gitolite를 다운로드 받고 설치하면 된다.
 



     - 위 사이트에서 경로를 확인하고... 진행을 계속 해보자.



   - [ git-repo ] 계정으로 작업을 하기 위해서 해당 계정으로 접속한다.
   - [ git-repo ]의 홈디렉토리에서 Gitolite를 clone하면 된다.

   - 그런데, 여기에서 중요한 점을 하나 집고 넘어가야 한다.
   - 웹에서 검색이 되는 Gitolite의 설치가이드 대부분과 지금 현재 상황이 맞지 않는다는 점이다.
   - 그 이유는 버전이 틀리다!!! 기존 Gitolite 대부분은 "g2" 버전이고, 지금은 "g3"다.
   - 그래서 설치 스크립트가 틀리다.
   - 2012.04.17에 g3가 릴리스가 되어서인지, 이와 관련한 자료는 거의 없다.



6. install

     - 다운로드 받은 Gitolite를 설치해보자.


$ ./gitolite/install

     - 그냥 'install'만 실행하면 일단 끝이다.

     - 만약 다른 디렉토리에 설치하고 싶으면 [ ./gitolite/install -to /srv/install/gitolite ]와 같이 사용한다.
     - 여기에서 설치하는 것은 실행할 수 있는 binary들이다.

     - 이제 이어서 'setup'을 해야하는데, 관리자 계정의 공개키가 필요하다.
     - 앞에서 만든 계정 중에서 우리는 [ gitolite ]라는 이름으로 관리자 계정을 만들어 놓았다.


$ ssh gitolite@localhost
$ ssh-keygen

     - 여기서 생성한 공개키를 전송해야한다.



     - [ gitolite ]의 공개키를 [ git-repo ] 계정 어딘가로 전송을 하고자 한다.

     - 위의 경우 ~/.ssh/ 밑에 위치했는데, 꼭 그곳이 아니어도 된다.
     - 관리자로 사용할 계정의 공개키가 Gitolite 설치과정에서 필요로 해서 이렇게 하는 것이다.


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

     - install 후에 사용할 수 있게 된 [ ./gitolite/src/gitolite ] 명령어를 이용하여 setup을 하는데,
     - [ gitolite ] 계정의 공개키를 관리자로 등록하는 것이다.

     - Gitolite는 하나의 repository로 관리를 하게 된다. 위 화면에서 보는 바와 같이 [ gitolite-admin.git ]이 그것이다.
     - 해당 repository에 자료를 넣을 수 있는 관리자는 방금 전에 등록한 공개키로 인하여 [ gitolite ] 계정이다.

     - 친절하게도 테스트 해볼 수 있게 [ testing.git ] repository도 제공을 해준다.



7. clone

     - [ gitolite-admin.git ] repository를 clone 받아서 확인을 해보도록 하겠다.


$ ssh gitolite@localhost
$ mkdir repositories

     - Gitolite에 관리자로 등록시킨 [ gitolite ] 계정으로 접속하자.
     - clone 받을 디렉토리도 'repositories'라는 이름으로 만들어두자.

▶ 여기에서 Gitolite를 처음 접하는 분들을 위한 질문~!!!!!!!
     - 위와 같이 만든 [ Gitolite를 적용한 Git ]에 어떻게 접근을 할까?!

▷ 정답은 대표 계정 1개로 접근을 한다!
     - 이 포스팅 내용대로라면 여기에서는 [ git-repo ] 계정


     - [ gitolite ] 계정이 [ git-repo ] 계정에 접근을 하려고 하면,
     - 'gitolite' 계정의 private key에 대응하는 public key를 찾는데,
     - [ Gitolite ]가 이 부분에 개입을 해서 등록된 public key를 기반으로 권한을 확인하고
     - repository에 대한 접근 권한을 조정한다.

     - 이 부분에 대해서 오랫동안 고민해보질 못해서인지 쉽게 설명은 안되는데, 위의 글과 그림을 잘 봐보면....^^

     - 일단, clone을 해보자.


$ cd ~/repositories
$ git clone git-repo@localhost:gitolite-admin.git


     - 지금 현재 사용자 계정은 [ gitolite ]이다.
     - Gitolite에 관리자로 public key를 등록한 계정도 [ gitolite ]이다.
     - 그런데, clone을 할 때 [ git-repo ] 계정으로 접근을 했다. 응?!

     - 위에서 말한바와 같이, Gitolite를 사용할 때에는 무조건 대표 계정을 사용한다.

     - 그러면, 다른 계정에서 똑같이 하면 어떻게 될까?


     - Gitolite에 별도로 계정 등록을 하지 않은 사용자 chani 계정에서 접근을 할 때인데... 당연히 접속 불가~!!!


     - [ chani ] 계정이 'git-repo' 계정으로 접근을 하지만,
     - Gitolite가 등록된 공개키를 확인을 하는데 등록된 것이 없기에 접근을 거부하게 된다.




이번 포스팅을 하면서 너무 오랜 시간이 걸렸고, (헷갈리기도 하고 주말에 열심히 놀기도 하고 사고도 있고.....)
포스팅 내용 자체도 너무 길어지는 관계로 여기까지만해서 설치에 대해서 마무리!!!

계정 관리하는 것이나, admin 환경 설정하는 것이나 그러한 것들은 다음 포스팅으로.......


아자~!!! 오늘 두산 이겼다.... 그런데, 좀 부끄럽게 이겼다.... 프로들이 어이없는 실수들을 서로 남발하는....ㅋㅋㅋ

  • sang0164 2012.05.19 02:18

    감사히 잘보고 인스톨했습니다 ...ㅠㅠ
    몇일간 고생하다가 겨우 설치완료 했네요.. 정말 감사합니다! ^^
    다음 포스팅도 얼른 부탁드리겠습니다 + +

    • BlogIcon whatwant 2012.05.19 02:24 신고

      Gitolite 관련하여 자료가 많이 없어서 저도 고생을 많이 했었어요 ^^
      도움이 되었다니 저도 기분이 좋네요 ^^

    • sang0164 2012.05.19 02:50

      지금까지 각종 문서들 보면서 따라하면 항상 어디선가 문제가 생겼었는데 ...
      써주신대로만 따라하니 깔끔하게 설치가 되었습니다!
      저에겐 정말 큰 도움이 되었어요 감사합니다. ^-^

      아, 그리고 혹시 다른 파티션이나 드라이브에 저장소를 두도록 셋팅이 가능한가요 ??

    • BlogIcon whatwant 2012.05.19 21:19 신고

      repositories를 변경하고 싶으시다는 것이시죠!?

      오늘 포스팅 내용에 포함해볼께요~^^

  • BlogIcon gandax 2012.07.03 17:25

    포스팅 감사히 잘 봤습니다 ^^
    코드리뷰 + 권한 관리를 위하여 Gerrit을 사용하기는 했었는데 Gitolite 는 처음 접해보네요..
    포스팅을 쭉~ 읽어봤는데 제가 기존에 사용하던 방식이랑은 많이 달라서 이해가 잘 되지 않는 부분도 있네요..
    시간을 두고 실습 해보면서 자세히 정독 해야할 것 같습니다.
    포스팅 감사합니다 ^^

    • BlogIcon whatwant 2012.07.05 23:36 신고

      요즘 Gerrit 때문에 속썩이고 있는데,
      Gerrit을 사용하고 계시다니... 존경스럽습니다.

      이 놈의 Gerrit은 정리된 좋은 자료가 정말 없더군요.

      앞으로 좋은 조언 많이 주시고,
      댓글도 많이 달아주세요~!!! 반갑습니다~!!!

    • BlogIcon gandax 2012.07.06 14:40

      무슨 버전을 테스트 중이신가요?
      필요하시다면 주말을 이용하여, Gerrit 설치 와 관련해 포스팅 하도록 하겠습니다.

    • BlogIcon whatwant 2012.07.06 20:13 신고

      헛~!!!

      2.4.1 버전으로 하고 있었는데, 얼마전 또 2.4.2 버전이 나왔더군요 ^^

      Ubuntu 환경에서

      Apache에서 80번이 아닌 다른 포트로해서 구동을 해보려 하고 있습니다.

      그리고 Logout이 잘 동작하게 하고 싶은데, 뭔가 설정을 해도 말을 잘 안듣더군요 ㅠㅠ

  • 희민 2012.09.18 11:33

    정말 큰 도움이 되었습니다. 알기 쉽게 정리가 잘 된 것 같아요. 다만 chani 계정의 공개키를 git-repo 계정에 추가한 부분 때문에 chani 계정에서 clone 에러가 발생하여 조금 어려움을 겪었습니다. 사실 어떻게 보면 ssh-copy-id 부분은 굳이 필요한 부분은 아닌거죠?? 아무튼 좋은 글 감사합니다!!

    • BlogIcon whatwant 2012.09.18 22:59 신고

      도움이 되셨다니 너무 기분이 좋습니다 ^^

      ssh-copy-id 부분은 gitolite하고 밀접한 부분은 아닙니다 ^^
      그냥 SSH public-key를 등록하는데 도움을 줄 뿐입니다!

  • ㅁㄴㅇㄴㅁ 2013.01.11 21:53

    ssh 키를 gitolite 복사하면 패스워드를 요구하는데 어떻게 하는건지 궁금합니다

  • ㅁㄴㅇㄴㅁ 2013.01.12 21:40

    계속 계정 패스워드 요구합니다

    • BlogIcon whatwant 2013.01.13 20:53 신고

      죄송합니다만,
      ㅁㄴㅇㄴㅁ님이 어떻게 진행하신 상황인지
      조금만 더 정확히 설명을 해주시면 그에 맞는 답변을 찾아보도록 하겠습니다.

  • Richard 2013.02.04 15:56

    좋은 자료 잘 보았습니다.
    고맙습니다. ^^

  • BlogIcon Reid 2013.02.27 19:02

    이렇게 쉽게 설명하기도 쉽지 않은데 대단하세요!
    고맙습니다. :-)

    • BlogIcon whatwant 2013.02.27 21:23 신고

      와우~ 이런 칭찬이야 말로 정말 고맙습니다~!!

      Reid님의 칭찬으로 얻은 힘을 가지고 오늘 포스팅 하나 해야겠는데요!!

  • ch 2013.03.05 15:50

    감사합니다.
    도움이 정말 많이 되었습니다.

    조금 어렵기도 하구요. ^^ 제가 이해를 못해서였겠지요..

    • BlogIcon whatwant 2013.03.05 20:05 신고

      제가 지금도 지식이 짧지만,
      위 포스팅을 할 때엔 더더욱 부족한 지식에 작성을 해서
      제대로 설명을 드리지 못한 부분도 많은 것 같습니다.

      나중에 기회가 되면 다시 한 번 업데이트 하도록 하겠습니다.

      다시 한 번 댓글 남겨주셔서 감사드립니다 !!!

  • BlogIcon 심량 2015.07.06 16:27 신고

    안녕하세요! 이해가 될 듯 말 듯한 부분이 있어서 질문을 드립니다.
    위 예제에서 chani 계정으로 접근이 안되잖아요?
    gitolite 계정으로 로그인해서 conf/gitolite.conf에 chani 추가해주고 keydir에 chani.pub 추가한 다음 commit/push 하고 다시 chani 계정에서 위 clone 시도를 다시 하면 그 때는 되는 건가요?

  • 익명 2016.03.20 15:57

    git clone git-repo@localhost:gitolite-admin.git 여기서 막히신분들
    git clone git-repo@localhost:repositories/gitolite-admin.git 이렇게 해보세요

  • Git초심자 2017.11.18 19:13

    안녕하세요. 정말 대단히 유용한 자료를 만들어 주셔 감사합니다(__)..
    덕분에 Git을 써봅니다.
    중간에 반응들이 다른 결과가 좀 있었진만 어쨋든 잘 흘러가고 있습니다.
    계속 정주행 하며 정독하겠습니다.
    감사합니다~

  • 초보자 2018.04.11 22:03

    Git을 처음 사용하는데 제가 찾던 자료가 여기 있었네요.
    많은 도움이 되었습니다. ^^
    감사합니다.