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을 해보자.
- 지금 현재 사용자 계정은 [ gitolite ]이다.
- Gitolite에 관리자로 public key를 등록한 계정도 [ gitolite ]이다.
- 그런데, clone을 할 때 [ git-repo ] 계정으로 접근을 했다. 응?!
- 위에서 말한바와 같이, Gitolite를 사용할 때에는 무조건 대표 계정을 사용한다.
- 그러면, 다른 계정에서 똑같이 하면 어떻게 될까?
- Gitolite에 별도로 계정 등록을 하지 않은 사용자 chani 계정에서 접근을 할 때인데... 당연히 접속 불가~!!!
- [ chani ] 계정이 'git-repo' 계정으로 접근을 하지만,
- Gitolite가 등록된 공개키를 확인을 하는데 등록된 것이 없기에 접근을 거부하게 된다.
이번 포스팅을 하면서 너무 오랜 시간이 걸렸고, (헷갈리기도 하고 주말에 열심히 놀기도 하고 사고도 있고.....)
포스팅 내용 자체도 너무 길어지는 관계로 여기까지만해서 설치에 대해서 마무리!!!
계정 관리하는 것이나, admin 환경 설정하는 것이나 그러한 것들은 다음 포스팅으로.......
아자~!!! 오늘 두산 이겼다.... 그런데, 좀 부끄럽게 이겼다.... 프로들이 어이없는 실수들을 서로 남발하는....ㅋㅋㅋ