GitLabHQ
설치형 Github같은게 있으면 좋겠다 생각하고 있었는데 GitLabHQ가 딱 그 목적에 맞는 프로젝트입니다. 다시 말하면 Git 저장소를 생성하고 Github처럼 프로젝트관리까지 할 수 있는 설치형 오픈소스 솔루션입니다. 루비 온 레일즈 기반으로 만들어진 프로젝트고 거의 부족함이 없다고 생각되는 Github에 비하자면 아직 부족한 부분이 많기는 하지만 비공개 Git 저장소를 사용하기에는 괜찮아보입니다.
GitLabHQ는 내부적으로 Git저장소 관리를 위해서 Gitolite를 사용하고 있습니다. 기존에는 Gitosis를 사용했지만 12월 말에 GitLabHQ가 2.0 moderno로 버전업되면서 기반을 Gitolite로 변경하였습니다.(듣기로는 Gitolite가 좀더 세밀한 제어를 할 수 있다고 합니다.) Gitolite와 Gitosis 둘 다 Git의 저장소를 관리해 주는 프로젝트입니다. 그래서 GitLabHQ는 Gitolite의 Git 저장소 관리위에 루비 온 레일즈로 웹인터페이스를 붙힌 프로젝트라고 할 수 있습니다.
사실 12월 초에 호스팅받는 서버에 GitLabHQ를 설치했는데 그 사이에 2.0으로 업그래이드 되서 다시 설치해야 합니다. ㅠㅠ 반나절이나 걸렸었는데요. 설치형 Git저장소로 GitLabHQ의 존재를 안지는 좀 되었기 때문에 대부분 알고 계신 줄 알았는데 저번에 설치하면서 트위터에 글을 올리다 보니 많은 분들이 관심을 가지셔서 이번 기회에서 설치과정을 정리합니다. 먼저 사용해보고 싶으신 분은 GitLabHQ의 데모서비스를 이용하거나 Aj가 우분투에 GitLabHQ를 설치하고 아파치까지 연결해서 버츄얼박스 이미지로 만들어 공개한 파일을 사용해 보셔도 좋습니다.
Ruby 설치
GitLabHQ는 루비 온 레일즈 기반이므로 먼저 Ruby가 설치되어 있어야 합니다. Rails 3.1을 사용하기 때문에 루비의 버전은 1.9.2 이상이어야 합니다. 우분투의 ruby1.9.1이 실제로는 1.9.2인데 설치테스트를 우분투 10.04에서 해서 그런지 1.9.1로 깔리더군요. ㅡㅡ;; 제가 루비개발자가 아닌 관계로 루비관련 도구를 설치할 때마다 의존성문제로 삽질을 많이 하게 되는데 잘 모른다면 그냥 rvm을 사용하는 것이 더 편한듯 합니다. rvm은 루비 버전 매니저입니다. rvm을 사용하면 원하는 버전을 설치하고 버전을 바꿔가면서 사용할 수 있습니다.
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
rvm install 1.9.2
rvm use ruby 1.9.2 --default
rvm install 1.9.2
rvm use ruby 1.9.2 --default
rvm사이트에 설치방법이 나와있지만 위처럼 실행하면 Ruby 1.9.2를 사용할 수 있습니다 . 같이 설치되는 RubyGems는 최신 버전이 설치되니 상관없지만 이미 설치되어 있다면 뒤에서 사용할 bundler가 1.3.6부터 사용할 수 있으므로 그 이하의 버전이라면 1.3.6이상으로 업그래이드 해야 합니다.
Gitolite 설치
GitLabHQ는 Gitolite기반으로 동작하므로 먼저 Gitolite를 설치해야 합니다. GitLabHQ의 위키페이지에 설치방법이 나와있습니다. 먼저 의존성을 해결하기 위해 openssh-server를 설치합니다. 우분투에서는 apt-get으로 설치할 수 있습니다.
sudo apt-get install openssh-server
그리고 다음 명령어로 gitolite를 사용할 git이라는 계정을 생성합니다.
sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git
현재 로그인 계정을 git 그룹에 추가합니다.
sudo usermod -a -G git `eval whoami`
gitolite는 SSH키를 기반으로 동작하므로 SSH키를 gitolite에 등록해야 합니다. SSH키를 생성하는 방법을 모른다면 Github의 가이드를 참고하면 됩니다. 일반적으로는 id_rsa라는 이름으로 생성하는데 id_rsa가 개인키파일이고 id_rsa.pub가 공개키파일입니다.(SSH키를 여러개 사용한다면 id_rsa대신에 다른 이름을 사용할 수도 있습니다.) 공개키를 gitolite에 등록하기 위해서 현재 계정의 id_rsa.pub 공개키파일을 git계정의 홈디렉토리로 복사합니다.
sudo cp ~/.ssh/id_rsa.pub /home/git/rails.pub
이제 GitLabHQ가 제공하는 giolite저장소에서 gitolite를 git계정의 홈디렉토리에 내려받습니다.(git이 설치되어 있어야 합니다.)
sudo -u git -H git clone git://github.com/gitlabhq/gitolite /home/git/gitolite
소스를 내려받았으면 gitolite를 다음과 같은 명령어로 설치합니다.
sudo -u git -H /home/git/gitolite/src/gl-system-install
이 과정에서 "gl-setup is not in your $PATH"라는 오류가 나올 수 있습니다. 이 문제는 /home/git/bin 아래에 생성된 gl-setup 명령어를 실행하려면 PATH환경변수에 추가되어 있어야 하는데 그렇지 않다고 나온 오류입니다. 환경변수에 /home/git/bin을 추가하면 됩니다. ~/.bashrc나 /etc/profile 같은 파일에 PATH="/home/git/bin:$PATH"라고 추가해 주면 됩니다. 경로를 추가한 다음에는 source ~/.bashrc로 다시 파일을 읽어들여야 환경변수가 설정됩니다.
$ which gl-setup
/home/git/bin/gl-setup
/home/git/bin/gl-setup
위와 같이 실행해서 제대로 경로가 나타나면 환경변수가 잘 잡힌 것입니다. 환경변수를 설정하고 위의 설치명령어를 다시 실행해도 같은 오류가 다시 나올수 있습니다. 이는 sudo 명령어로 실행했기 때문에 현재 사용자의 환경변수가 초기화 되었기 때문입니다.(sudo which gl-setup로 환경변수가 유지되는지 확인할 수 있습니다.) 사실 /etc/sudoers를 수정하면 환경변수를 초기화하지 않도록 설정할 수 있는데 우분투의 버그로 sudoers가 제대로 동작하지 않고 무조건 초기화되어 버립니다. sudo의 환경변수 문제가 발생한다면 다음과 같이 환경변수를 지정하면서 실행하면 사용할 수 있습니다.
sudo PATH=$PATH -u git -H /home/git/gitolite/src/gl-system-install
이제 gitolite의 설치 스크립트를 실행합니다.
sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup ~/rails.pub"
위 명령에서 보듯이 gl-setup를 실행하면서 앞에서 복사해놓았던 rails.pub 공개키파일을 등록합니다. 이 키는 사실 현재 유저(나중에 GitLabHQ를 실행할 유저)의 SSH키와 동일하므로 SSH키를 기반으로 Gitolite에 인증을 받을 수 있습니다. 설정이 완료되었으면 다음과 같이 repositories 폴더의 권한설정을 합니다.
sudo chmod -R g+rwX /home/git/repositories/
sudo chown -R git:git /home/git/repositories/
sudo chown -R git:git /home/git/repositories/
Gitolite의 대한 설치안내는 Gitolite의 가이드에도 잘 나와있으며 Gitolite의 동작방식은 gitolite in pictures문서를 참고하면 됩니다. 혹시 GitlabHQ설치 후 SSH키 인증문제가 발생한다면 ssh troubleshooting문서를 참고하면 됩니다.
GitLabHQ 설치
GitLabHQ의 의존환경을 다음과 같이 설치합니다.
sudo apt-get install python-dev python-pip sendmail redis-server libicu-dev
sudo pip install pygments
sudo gem install bundler
sudo pip install pygments
sudo gem install bundler
이제 GitLabHQ를 설치할 차례입니다. 설치를 하고자 하는 위치로 이동해서 git으로 소스를 내려받습니다.
git clone git://github.com/gitlabhq/gitlabhq.git
cd gitlabhq
cd gitlabhq
gitlabhq 폴더로 이동해서 다음과 같이 bundler를 이용해서 GitLabHQ가 필요로 하는 라이브러리들을 설치합니다.
bundle install --without development test
만약 이 과정에서 method_missing': undefined method `user_home' for Gem:Module와 같은 오류메시지가 나온다면 ~/.rvm/gems/ruby-1.9.2-p290/gems/bundler-1.0.21/lib/bundler/rubygems_ext.rb 파일을 수정해야 합니다.(이 파일의 경로는 rvm으로 설치하지 않았다면 다른 경로에 있습니다. bundler설치경로에서 이 파일을 찾으면 됩니다.)
Gem::QuickLoader.load_full_rubygems_library
이 부분을 다음과 같이 변경합니다.
Gem::QuickLoader.load_full_rubygems_library unless RUBY_VERSION.eql?('1.9.1')
다시 실행하였을 때 sqlite3 설치부분에서 오류가 난다면 sudo apt-get install libsqlite3-dev로 sqlite3에 대한 의존라이브러리를 설치하면 됩니다. bundler로 의존 라이브러리의 설치가 완료되었으면 다음과 같이 rake로 디비를 설정합니다.
bundle exec rake db:setup RAILS_ENV=production
이 과정에서 https://github.com/gitlabhq/grit.git (at master) is not checked out. Please run `bundle install`와 같이 grit이 설치되지 않았다는 오류가 나타난다면 bundle --deployment를 실행한 뒤에 다시 위의 명령어를 실행하면 정상적으로 설치가 됩니다.
bundle exec rake db:seed_fu RAILS_ENV=production
이제 위 명령어를 설치하면 다음과 같이 어드민계정이 설정되는 것을 확인할 수 있습니다.
GitLabHQ 실행
설치가 완료되었으면 다음 명령어로 GitLabHQ를 실행합니다.(Webrick까지 실행되는데는 시간이 좀 걸립니다.)
bundle exec rails s -e production
웹브라우저에서 http://localhost:3000로 접속하면 다음과 같은 로그인 화면을 볼 수 있습니다.
어드민 계정은 admin@local.host이고 초기 비밀번호는 5iveL!fe입니다.
어드민에서 사용자계정을 추가하고 사용자로 로그인하면 프로젝트를 생성할 수 있습니다.(현재 버그인지 어드민에서 프로젝트를 생성하면 404페이지로 연결되어 버리는데 추가한 사용자에서 하면 문제가 없습니다.) 추가적으로 새로운 프로젝트를 생성할 때 다음과 같은 오류가 콘솔에 나오면서 Gitosis에 접근할 수 없다는 오류가 나타날 수 있습니다.
the following user(pubkey files in parens) do not appear in the config file:
admin_local_host_1326043296
admin_local_host_1326043296
이는 설정이 제대로 발생하지 않아서 생기는 일인데 GitLabHQ의 버그가 아닌가 생각합니다.(아니면 제가 설정과정을 뭔가 빠뜨렸을수도 있는데 아무리 찾아봐도 못 찾았습니다.) 원하는 곳에 다음 명령어로 giolite-admin을 클론받습니다.
git clone gitolite@localhost:gitolite-admin
이는 앞에서 설치한 gitolite에 gitolite-admin의 저장소를 내려받은 것이고 이 저장소를 gitolite가 설정용으로 사용하는 저장소입니다. gitolite-admin의 keydir폴더에 자신의 공개키가 있는지 확인합니다. 저같은 경우에는 admin_local_host_1326043296.pub과 rails.pub 2개의 파일이 있었습니다.(사실 공개키는 하나만 생성했는데 왜 2개가 생성되는지 모르겠지만 gitlabhq의 버그인가 하고 추측할 뿐입니다.) 그리고 conf/gitolite.conf 파일을 열면 다음과 같이 설정되어 있습니다.
repo gitolite-admin
RW+ = rails
repo testing
RW+ = @all
repo example
앞에서 오류메시지가 admin_local_host_1326043296가 설정에 없다고 했으므로 다음과 같이 추가합니다.
repo gitolite-admin
RW+ = rails
repo gitolite-admin
RW+ = admin_local_host_1326043296
repo testing
RW+ = @all
repo example
파일을 수정했으므로 커밋을 하고 푸시로 다시 gitolite로 보내면 수정된 설정이 적용됩니다. 이 문제까지 해결하면 사용하는데 문제가 없을 것입니다.
2.0이 나온지 얼마 안되어서 그런지 모르겠지만(1,2 설치할때도 고생하긴 했습니다.) 설정하면서 꽤나 고생을 했습니다. 하지만 설치형 Git저장소와 프로젝트관리가 필요하다면 괜찮은 대안이라고 생각합니다.
대단하십니다. 이렇게 자세히.
저는 gitosis를 계속 사용중이었는데, aj님이 얼마전 gitolite 얘기를 하시는것을 트윗에서 본 상태였습니다. 어느날 옆에 계신분(우분투 메니아)이 gitolite와 GITLabHQ를 우분투에 설치한걸 보고, gitolite는 모냐고 물어보니 gitosis와 대략적인 부분이 거의 비슷하다 ..... 그럼 차이점이 뭐냐고 물어보니 모르시더라고요. ㅋㅋ.
근데, 여기서 찾게되는군요. ㅋ ㄳ
좋은글 잘 읽고 갑니다. ~
저는 Aj가 처음 얘기했을때 코어를 gitolite로 바꾸신줄 알았더니 그사이에 버전업되면서 gitosis에서 gitolite로 바뀐거였더라구요.
새버전은 설치 안해본거라 버츄얼머신에서 설치테스트를 해서 올릴려고 한거였는데 의도와 다르게 설치에 고생하게 되면서 자세한 설치 설명이 되어버렸네요 ㅎㅎㅎㅎ 이제 저도 서버에 설치한거 버전업해야겠네요 ㅎㅎ
잘 소개해주신 덕분에 쉽게 사용할 수 있게 되어 감사합니다. 다만 중간에 gitolite를 clone해주는 부분에서
git clone gitolite@localhost:gitolite-admin
gitolite계정으로 접근하면 안되지 않나요? 생성된 git계정으로 해야 할 것 같은데요? 저는 접근이 되지 않아서
아래와 같이 해서 clone했습니다.
git clone git@localhost:gitolite-admin
흠... 이유는 잘 모르겠지만 저는 정상적으로 클론받을 수 있었습니다. SSH키때문이 아닌가 싶긴 한데 이유는 정확히 모르겠네요.
좋은 글 감사합니다 ^^
Ubuntu 10.04에 Passenger랑 해서 겨우 설치를 마쳤습니다.
퍼미션 문제, SSH 키 문제때문에 몇번을 재설치했는지 모르겠군요 ㅜㅜ
저도 설치때문에 너무 고생해서.... 생각만해도 끔찍하네요.. ^^
(이렇게 정리해놔도 담번엔 쉽게 설치하겠다는 생각까지는 안드는군요 ㅠㅠ)
아 그리고 GitLabHQ를 저같이 Apache + Passenger를 통해 운영하시는 상태에서, Gitolite Error Application cant get access to your gitolite system. 나시는 분들은 (저같은 경우엔 404에러보단, 퍼미션 문제가 발생하더군요.) http://www.junframe.org/wordpress/?p=817 를 참조하시면 될 거 같아요.
이 문제때문에 구글링 엄청했는데...결론은 아웃사이더님이 포스팅 해주신 이 글에 해결이 이미 나와있던 문제였더라구요 ㅎㅎ ㅜㅜ
근데 좀 의문인게...이렇게 되면 GitLabHQ에서는 퍼미션 관련해서 완전히 자동화?가 되지 않는 느낌입니다...
마치 gitolite를 이용해서, 프로젝트 생성, 사용자 관리(SSH 키) 등 메타정보 관리? 느낌인거 같아요.
예 아직 좀 가야할길이 꽤 있는듯 합니다.(문서화도 그렇고요.)
git 저장소관리는 말씀하신것처럼 gitolote를 이용하고 그 위에 웹프로젝트를 올린것이 맞기는 한데 그래도 gitolite에 대한 관리는 자동화를 하거나 문서화를 해주거나 둘중 하나는 해주어야 하는데 시스템이 워낙 다양해서 그런지 몰라도 설치할때 너무 고생스럽네요 ㅠㅠ
(다시 설치하기가 무서워요 ㅎㅎ)
안녕하세요..
gitolite + gitlabhq 설치로 삽질중인 사람입니다.
git clone git@localhost:gitolite-admin.git
위와 같이 되게 하고 싶은데
git clone git@localhost:/git/repositories/gitolite-admin.git
(/git 가 루트에 있음)
이렇게 전체경로로 해줘야 가져옵니다.
어디를 손봐야 할까요?
수고하세요..
최신 gitlabhq에서는 이 포스팅의 내용과는 약간 다르고 설치가이드(설치스크립트)가 꽤 잘 되어 있는 편입니다. 저장소의 절대경로가 어떻게 되시나요?