Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Ubuntu에 GitLabHQ 설치하기

Github의 인기가 높아지면서 저도 Github를 많이 사용하는데 Github는 비공개 저장소를 생성하려면 한달에 최소 7불의 비용을 내야 합니다. 필요하다면 비싸다고는 할 수 없지만 저처럼 개인 프로젝트용도로 쓰는 개발자들에게 매달 7불의 비용은 좀 부담스러운 것이 사실입니다. Github와 비슷한 컨셉인 bitbucket은 가격정책이 달라서 협업하는 개발자가 5명이하인 경우에는 비공개 저장소를 만들 수 있으므로 비공개 용도로는 bitbucket을 사용했습니다. bitbucket은 그동안 Mercurial만 지원했지만 최근에는 Git에 대한 지원도 추가되었기 때문에 개인용 비공개 저장소를 사용하기에 괜찮습니다. 하지만 5명이라는 제한이 있기 때문에 그 이상의 개발자가 참여하는 프로젝트라면 비공개 Git 저장소에 대한 별도의 대안이 없었습니다.(물론 비용걱정이 없다면 Github가 Github:Enterprise라는 설치형 솔루션을 판매하고 있긴 합니다.)



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사이트에 설치방법이 나와있지만 위처럼 실행하면 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

현재 로그인 계정을 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

위와 같이 실행해서 제대로 경로가 나타나면 환경변수가 잘 잡힌 것입니다. 환경변수를 설정하고 위의 설치명령어를 다시 실행해도 같은 오류가 다시 나올수 있습니다. 이는 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/

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

이제 GitLabHQ를 설치할 차례입니다. 설치를 하고자 하는 위치로 이동해서 git으로 소스를 내려받습니다.

git clone git://github.com/gitlabhq/gitlabhq.git
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

이는 설정이 제대로 발생하지 않아서 생기는 일인데 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저장소와 프로젝트관리가 필요하다면 괜찮은 대안이라고 생각합니다.
2012/01/13 01:45 2012/01/13 01:45