GitHub는 무료로 서비스를 해주지만, 해당 서비스를 내 서버에서 운영할 수는 없다.
물론 돈을 주면 가능하긴 하다지만... 저렴한 인생으로써는...^^

그래서 찾아보던 중 오픈소스 프로젝트로 진행중인 GitLab을 알게 되었다.
설치 과정이 단순하진 않지만... 나만의 GitHub 구축을 위해서 !!!


공식 홈페이지에 설치 가이드가 너무나 잘 나와 있다.
   - https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md


앞에서 작성한 포스트를 참고해도 좋다.
   - http://whatwant.tistory.com/332



01. 필수 패키지 설치

$ sudo apt-get install build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils



02. Git 설치

   - http://whatwant.tistory.com/658


03. Ruby 설치

$ sudo su -
$ curl -L https://get.rvm.io | sudo bash -s stable
$ source /etc/profile
$ rvm install 2.0.0
$ rvm use 2.0.0
$ rvm --default use 2.0.0 

 

$ nano /etc/environment

 

PATH="......:/usr/local/rvm/bin"

 

$ gem install bundler --no-ri --no-rdoc



04. 계정 만들기

$ adduser --disabled-login --gecos 'GitLab' git



05. GitLab-Shell 설치하기

$ cd /home/git

$ sudo -u git -H git clone http://github.com/gitlabhq/gitlab-shell.git -b v1.7.9

$ cd gitlab-shell

$ sudo -u git -H cp config.yml.example config.yml
$ sudo -u git -H nano config.yml

 

...
gitlab_url: "http://localhost/"
...

 

$ sudo su - git
$ cd /home/git/gitlab-shell
$ ./bin/install



08. Database

   - 필자의 취향으로 일단 PostgreSQL로 진행해보자.

$ sudo apt-get install postgresql libpq-dev

$ sudo -u postgres psql -d template1

 

# CREATE ROLE git LOGIN ENCRYPTED PASSWORD 'password' NOINHERIT VALID UNTIL 'infinity';
# CREATE DATABASE gitlabhq_production OWNER git;
# \q


   - 접속이 잘 되는지 테스트 함 해보자.

$ sudo -u git -H psql -d gitlabhq_production



09. GitLab 다운로드

$ cd /home/git
$ sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git -b 6-3-stable gitlab

 


10. GitLab 환경 설정

$ cd /home/git/gitlab

$ sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml


   - 도메인을 지정하고 싶으면 다음처럼 수정 작업을 하면 된다.

$ sudo -u git -H nano config/gitlab.yml


...
   host: localhost
...


   - 권한 조정이 필요하다.

$ sudo chown -R git log/
$ sudo chown -R git tmp/
$ sudo chmod -R u+rwX  log/
$ sudo chmod -R u+rwX  tmp/


   - satellites를 위한 디렉토리를 하나 생성하고, 필요한 디렉토리를 만들자.

$ sudo -u git -H mkdir /home/git/gitlab-satellites


   - 필요한 디렉토리를 추가로 더 만들자.

$ cd /home/git/gitlab

$ sudo -u git -H mkdir tmp/pids/
$ sudo -u git -H mkdir tmp/sockets/
$ sudo chmod -R u+rwX  tmp/pids/
$ sudo chmod -R u+rwX  tmp/sockets/

$ sudo -u git -H mkdir public/uploads
$ sudo chmod -R u+rwX  public/uploads


   - 엄청 귀찮넹... 스크립트로 만들어서 제공하지....

   -  Unicorn 환경 설정을 진행하자.

$ sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb


   - 고성능이 필요하면 cluster mode를 활성화 하자. 방법은 간단하다 ?!

$ sudo -u git -H nano config/unicorn.rb


   - worker_processes를 3으로 변경하면 된다 ?!

...
worker_processes 2
...


   - 이번에는 Rack attack config를 진행하자.

$ sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb


   - rack attack middleware를 설정하고 싶으면 다음과 같이 하자.

$ sudo -u git -H nano config/application.rb


   - 주석처리된 부분을 찾아서 주석 표시를 지우면 된다고 한다. (뭘 하는지는 아직 모르겠다.)

...
   # config.middleware.use Rack::Attack
...



11. 기본 사용자 설정

   - Git 사용자 설정을 하자.

$ sudo -u git -H git config --global user.name "GitLab"
$ sudo -u git -H git config --global user.email "gitlab@whatwant.com"
$ sudo -u git -H git config --global core.autocrlf input


   - 위 설정은 다음의 설정에서도 적용이 필요하다.

$ sudo -u git -H nano config/gitlab.yml



12. Database 환경 파일 설정

   - PostgreSQL을 사용하는 경우이다.

$ sudo -u git cp config/database.yml.postgresql config/database.yml


   - git 계정에서만 읽어볼 수 있게 하기 위한 권한 설정을 하자.

$ sudo -u git -H chmod o-rwx config/database.yml



13. Install Gems

$ sudo su - git
$ cd /home/git/gitlab
$ bundle install --deployment --without development test mysql aws



14. Database 생성

$ sudo su - git
$ cd /home/git/gitlab
$ bundle exec rake gitlab:setup RAILS_ENV=production


   - 설치과정 끝에 나오는 메시지를 잘 확인해야 한다.

...
Administrator account created:

login............admin@local.host
password.....5iveL!fe



15. Init Script 설정하기

$ cd /home/git/gitlab
$ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
$ sudo chmod +x /etc/init.d/gitlab
$ sudo update-rc.d gitlab defaults 21



16. log 관리하기

$ sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab



17. 환경 설정이 잘 되었는지 점검

   - 환경 설정이 잘 되었는지 확인을 해야하는데...
   - 우선 우리는 기본 설정값과 다른 git 경로부터 수정하고 확인을 하자.

$ sudo -u git nano config/gitlab.yml

 

...
git:
   bin_path: /usr/local/bin/git
...


   - git 경로를 제대로 적어주고나서 환경 설정 값들을 확인해보자.
 

$ sudo su - git
$ cd /home/git/gitlab
$ bundle exec rake gitlab:env:info RAILS_ENV=production

 


18. 시작

   - 이후 부터는 재부팅 될 때 자동으로 실행이 되겠지만, 지금은 직접 한 번 실행을 해보자.

$ sudo service gitlab start

 

Starting the GitLab Unicorn web server...
Starting the GitLab Sidekiq event dispatcher...
The GitLab Unicorn webserver with pid 1478 is running.
The GitLab Sidekiq job dispatcher with pid 1506 is running.
GitLab and all its components are up and running.



19. 상태 점검

   - green으로 나오면 좋은 것이다 ^^

$ sudo su - git
$ cd /home/git/gitlab
$ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production



20. Nginx


http://tuwlab.com/10476
http://kkame.kr/106
http://blog.naver.com/PostView.nhn?blogId=delltin&logNo=90184174945

   - 개인적으로 Apache2의 대용품(?)으로 좋아하다가 요즘은 살짝 관심을 끊은 Nginx ... ^^
   - GitLab은 공식적으로 웹서버로 Nginx를 추천한다고 한다.

$ sudo apt-get install nginx


   - 설정도 진행을 하자.

$ sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
$ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab


   -  수정할 것도 있다.

$ sudo nano /etc/nginx/sites-available/gitlab

 

...
   server_name localhost;
...


   - 재시작 !

$ sudo service nginx restart



21. 사이트 테스트

   - [ http://localhost/ ] 접속


   - ID / Password = [ admin@local.host / 5iveL!fe ]


   - 패스워드 재설정 창이 나온다.
   - 여기에서 재설정을 하면 다시 로그인 창이 나온다. 다시 로그인을 하면 된다.


   - 드디어 제대로 된 화면이 나왔다 !!!



헥헥... 너무 힘들다.... 이거, 반드시 스크립트 제공해줘야 한다 !!!

여하튼 일단 페이지 빵! 뜨는 것 까지는 성공~

반응형

기본적으로 RedHat 기본 계정이 root라고 전제하고 진행하면 되겠다.


1. 계정 생성

$ adduser git
$ passwd git
$ adduser gitolite
$ passwd gitolite




2. gitolite 다운로드

$ su git
$ cd
 $ git clone http://github.com/sitaramc/gitolite.git
$ cd gitolite/




3. 관리자 SSH Public-Key 파일 확보 하기

$ exit

$ su gitolite
$ ssh-keygen

$ exit
$ cp /home/gitolite/.ssh/id_rsa.pub /home/git/gitolite/gitolite.pub
$ chown git:git /home/git/gitolite/gitolite.pub 




4. 설치하기

$ su git
$ /home/git/gitolite

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




5. gitolite 관리자 계정

$ exit
$ su gitolite
$ cd

$ git clone git@localhost:gitolite-admin.git 

$ git config --global user.email "seinfra@whatwant.com"

$ git config --global user.name "seinfra"

$ git config --global push.default matching



gitolite 사용법이나 기타 사항은 별도의 포스팅을 참고하기 바라며...


반응형

Redmine의 장점 중 하나가 바로 형상관리 도구와의 연계이다.
Git 역시 Redmine과 잘 연동이 된다.

하지만 환경 설정을 좀 해줘야 한다.


1. config/configuration.yml

     - git을 사용하고 싶으면 실행파일의 경로를 알려줘야 한다.


$ cd /srv/www/redmine.whatwant.com/redmine
$ sudo nano ./configuration.yml

# = Redmine configuration file
#

# ==== SMTP server at using TLS (GMail)
#
default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      tls: true
      enable_starttls_auto: true
      address: "smtp.gmail.com"
      port: 587
      domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
      authentication: :plain
      user_name: xxx@gmail.com
      password: "xxx"

  # Absolute path to the directory where attachments are stored.
  #
  attachments_storage_path: /srv/www/redmine.whatwant.com/files

  # Configuration of SCM executable command.
  #
#  scm_subversion_command:
#  scm_mercurial_command:
  scm_git_command: /usr/local/bin/git
#  scm_cvs_command:
#  scm_bazaar_command:
#  scm_darcs_command:

     - 윗 부분은 이메일 셋팅이고, 아랫부분이 형상관리 도구 경로를 명시해주는 부분이다.
     - git을 사용하기 위해서 [ scm_git_command: /usr/local/bin/git ] 부분을 명시해주면 되는 것이다.



2. 전체 설정 - 저장소

     - 위와 같이 설정을 해주면 이제 사용할 수 있다.


     - 관리자 계정 (admin)으로 로그인해서 관리 메뉴를 고르고 저장소 항목을 보면 위와 같은 화면을 볼 수 있다.
     - 설정이 안된 도구들은 사용할 수가 없다는 것을 알 수 있을 것이다.



3. Project 저장소

     - 그러면 이제 실제 프로젝트에서의 설정을 살펴보자.


     - 위와 같이 간편하게 설정할 수 있다.
     - "Main repository"와 "식별자" 부분이 있는 것은 하나의 프로젝트에 복수의 저장소를 사용하는 경우 때문이다.



4. Remote Repository

     - 그런데, Redmine과 Repository는 기본적으로 같은 Local에 있어야지만 된다.
     - 만약 별도의 서버에 존재한다면 mirror repository를 만든다던지 해서 결국 같은 local에 위치시켜야 한다.

     - 일반적으로 Redmine이 있는 서버에 다른 서버에 위치하고 있는 repository를 clone을 한다.
     - 그리고, crontab 등을 이용해서 동기화를 하여 사용하는 형식을 취한다.

$ git clone --mirror git@xxx.xxx.xxx.xxx:myrepository.git

$ git remote update

     - 위와 같이 하면 된다고 하지만, 실제 위와 같이 운용해보지는 않았다.



5. Authority

     - local에 위치한 repository를 위 스크린샷과 같이 경로만 적어주면 Redmine이 알아서 이해를 해야하는데...
     - 그게 생각처럼 바로 잘 되는 경우가 없다. 그 이유는 바로 권한 !!!


     - 지금 현재 필자가 구동하고 있는 Redmine은 ubuntu 패키지 설치로 apache2로 하고 있다.
     - 그래서 웹서버가 www-data 계정으로 구동되고 있다.
     - 따라서 Redmine에서 저장소를 보기 위해 접근하고 있는 것은 www-data 계정이다.

$ cd /srv
$ sudo chown -R git.www-data ./repositories

     - 여기에선 이 글을 보고 계신 분의 설정 상황에 많이 좌우된다.
     - 즉, 여기에 쓰여져 있는 내용을 참조해서 본인의 상황에 맞춰 잘 판단해서 적용해야 한다.

     - 현재 repository는 git 계정으로 gitolite를 활용하여 운용이 되고 있고,
     - 그래서 사용자가 접근하여 사용하는 모든 행위는 git 계정의 권한으로 이루어지고 있다.
     - 그리고 앞에서 설명한 바와 같이 redmine은 apache2의 www-data 계정으로 활동을 한다.

     - 그래서 위와 같이 repository 들의 소유권 중에서 그룹을 www-data로 전부 변경을 해버리자.
     - 기본적으로 그룹에게 읽기 권한은 주어져 있는 상태이기 때문에 redmine에서 저장소 접근이 된다.

     - 그런데, 여기에서 또 하나 고려해야 하는 것이 있다.
     - 지금 현재 상태에서는 접근이 잘 되지만,
     - 사용자가 push를 하게 되면 그 때 생성되거나 수정된 파일의 권한이 바뀌면서 redmine에서 저장소를 못 읽는다.

     - 그렇다면, 그냥 git 계정의 정체를 바꿔버리면 간단히 해결이 된다.
     - 즉, git 계정의 소속 그룹을 그냥 www-data로 바꿔버리는 것이다.

$ sudo usermod -g www-data git


     - 최신 버전은 commit의 흐름도 제일 왼쪽에 visual하게 보여주어서 더더욱 마음에 든다!!!!!



Redmine 사용자 분들에게 많은 도움이 되길 기원하며....
반응형

나름의 목적을 가지고 열심히 포스팅을 하고 있는 블로그이지만,
댓글 하나 없이 몇 날 몇 일이 흐르면 조금 외롭게 되는데, 최근 댓글을 잘 달아주시는 분들이 생겨서 너무 좋다.
그런 감사한 분들 중 한 분이 알고 싶으시다는 내용이기도 하고 내가 하려고 했던 내용이기도 하다.


EGit에 대한 정보는 다음을 참조했다.
     - http://wiki.eclipse.org/EGit/User_Guide


여기에서 알아보고자 하는 내용은 바로 "Eclipse"에서 Git 사용하기!!!



01. Eclipse

     - 개발 환경으로 가장 유명한 도구 중 하나임은 다시 설명할 필요가 없을 것이다.
     - Java 기반의 프로그램으로써 한계를 고스란히 안고 있는 것 또한 사실이다. 무겁다는 말이다.


     - JDK 설치 먼저 해야하는 것은 당연하고...
        → http://www.oracle.com/technetwork/java/javase/downloads/index.html
     - Eclipse 역시 다운 받아서 설치, 아니 압축을 풀어주면 된다.
        → http://www.eclipse.org/downloads/



02. 확인

     - Eclipse에서 사용할 수 있는 Git plugin은 크게 JGit 과 EGit 두 가지가 있다.
     - 그런데, 예전에는 이 plug-in들을 별도로 설치를 해주어야 했지만 최근들어 이걸 기본적으로 제공해주고 있다.

     - 하지만, Eclipse Classic을 설치하면 포함이 안되어있다.


     - Import 하는 부분에 CVS는 있지만, Git은 안보인다.






03. 설치

     - GIt 관련 Plug-in이 내장되어있지는 않지만, 제공은 해주고 있다.


     - [ Help ] → [ Install New Software ]
     - Work with 부분에서 "Indigo"를 골라주자.


     - "Collaboration" 항목을 확장해서 "Eclipse EGit"을 선택하면 된다. 나머지 과정은 그냥 쓕쓕~


     - 설치를 마치고 나면, 재시작을 물어본다. 당연히 재시작해주면 된다.




04. Preference

     - EGit Plug-in의 환경 설정을 하자.


     - [ Window ] → [ Preference ]


     - "Team" → "Git" 항목을 선택하면 위와 같은 화면이 나온다.



05. User Settings

     - 개발 PC에서 Git을 사용하기 위해 환경을 맞출 때에 제일 먼저 해야할 것은 내가 누구인지 알려주는 것이다.


     - 기본적인 환경 설정에 대해서 잘 확인하고 입력해놓자.



06. SSH public key

     - 우리는 지금 Gitolite를 사용하고 있는 환경에 대해서 알아보고 있으므로 공개키를 등록해보자.


     - [ Git ] 항목이 아니라 [ General ] 항목에서 "Network Connections - SSH2" 부분에서 설정을 한다.
     - 앞 포스팅에서 "Git Bash"를 통해 "ssh-keygen"으로 키를 만들었으면 위와 같은 설정을 그대로 사용하면 된다.
     - 물론 만약 다른 경로에 위치하고 있다면, 그에 맞게 변경하면 된다.



07. Import

     - 이제 Remote Repository에 있는 프로젝트를 가져오는 과정에 대해서 알아보자.


     - [ File - Import ] 메뉴를 선택해서 나오는 창을 살펴보면 "Git"이라는 항목이 새로 나온 것이 확인된다.
     - "Projects from Git"을 선택하면 된다.


     - Remote Repository로 부터 받아올 것이니 당연히 "URI"를 선택하면 된다.


     - URI를 작성할 때에 바로 URI를 작성할 필요없이, 밑의 항목들을 입력하면 자동으로 URI가 완성된다.
     - Host, Repository path, Protocol(다시 한 번 ssh 선택해주면 된다), User를 입력해주자.
     - Password는 비워두면 된다. 왜냐하면, 우리는 SSH 공개키를 등록했기 때문이다.


     - 성공적으로 연결이 되면 branch를 선택하는 창이 나온다.


     - 어디에다가 파일들을 받을 것인지, 어느 branch로 시작을 할 것인지, Remote 이름을 확인하자.


     - 그러면 위와 같이 cloning 작업을 수행한다.


     - 다 받아오게 되면 위와 같이 받아온 소스코드를 프로젝트와 어떻게 연결할 것인지를 묻는 화면이 나온다.
     - 일단은 위 스크린샷과 같이 새로운 프로젝트로 만들어보자.


     - 받아온 소스코드 성격에 따라서 프로젝트 타입을 골라주면 된다.


     - 그리고, 프로젝트 名을 적어주면 된다.


     - 그러면, 이제 마무리가 되어야 하는데...

     - 뭔가 이상하지 않은가??????



08. Directory

     - 그렇다. 프로젝트를 만들었는데, 파일들이 안보인다.

     - 앞에서 살펴본 부분에서 Directory들을 한 번 살펴보면 이상한 원인이 보일 것이다.


     - 프로젝트를 만들 때 location을 확인해야 한다.
     - Remote Repository를 clone 받을 때에 지정했던 경로와 동일하게 설정을 해주어야 하는 것이다.


     - 이번에는 제대로 파일들이 보일 것이다!



09. Share Project

     - 그러면 Git 관련 작업을 할 때엔 어떻게 해야할까?!


     - [ Team - Share Project ]를 실행하면 창이 하나 나오는데...


     - 경고 메시지가 나온다. "HOME" 이라는 이름의 환경변수를 설정해야 한다는 말이다.

     - 하지만, 안내메시지처럼 알아서 기본 경로를 잘 잡아준다.
     - 귀찮으면 "Do not show again"을 체크함으로써 끝~

     - 공식 가이드에 의하면 Windows 7 환경에서는 "Users" 디렉토리의 대소문자 오류가 있으니 참고~!!


     - [ Use or create repository in parent folder of project ]에 체크를 하고 "Finish"를 해주면 된다.


     - 모두 설정하고 나면 오른쪽 버튼의 "Team" 항목에 위 스크린샷과 같이 새로운 메뉴가 나타난다.




여기까지~~~~~~
Eclipse 환경에 대해서 너무 길게 포스팅한 것 같지만... 그래도 좀 아쉬운 부분도 있다.



오늘은 이 블로그를 통해서 좋은 인연을 맺게 된 분과 처음으로 만났다.
그로 인해서 너무나 감사한 기회를 얻게 될 것 같은데... 뭔가 정해지면 다시 또 공유해보겠다.

반응형

포스팅을 할 때 가장 즐거운 일은 댓글을 확인하는 것이다 ^^
이번에는 저에게 너무나 큰 기쁨을 주는 댓글을 통해 문의하신 것 중 하나에 대해서 포스팅 해보고자 한다.

Gitolite에 대해서 어려워 하시는 분들의 대부분은 Gitolite 때문이 아니라,
SSH에 대한 이해와 더불어 공개키(public key)에 대한 사항 때문에 어려움을 겪게 된다.


Windows에서 공개키 만들고 등록하는 것은 Linux 환경에서 하는 것과 거의 동일하다.
그래도 다시 한 번 되돌아 보는 의미로 살펴보면서 공개키에 대해서 같이 살펴보도록 하겠다.



1. 공개키 등록하기

     - 새로운 사용자, 지금 상황에서는 Windows XP 환경의 사용자가 등록을 하고 싶은 경우를 살펴보자.


     - 왼쪽 하단의 'chaniXP'라는 이름의 사용자가 공개키를 만들어서,
       왼쪽 상단의 gitolite 관리자에게 보내면, 그 관리자가 등록 및 설정을 하고,
       오른쪽의 Server에 push를 하면,
       chaniXP 사용자는 Server로부터 허용된 repositories를 clone 받을 수 있게 되는 것이다.

     - 여기서 중요한 점은 chaniXP라는 사용자는 Server의 계정이 아니다.
     - Gitolite를 사용하게 되면, Server에서는 'git-repo'라는 계정 하나만 있으면 된다.




2. Git Bash

     - Windows 환경에서 Git 설치하기를 하셨다면, Git Bash가 있을 것이다.


     - 무슨 말인지 모르겠다면, 다음 포스팅을 참조하면 된다.
     - http://whatwant.tistory.com/288





3. Windows에서 공개키 만들기

     - Linux 때와 마찬가지로 [ ssh-keygen ]을 실행하여 공개키를 만들어주자.


$ ssh-keygen

     - Windows 환경에서도 분명히 사용자 이름이 있으며, home directory는 존재한다.
     - 그냥 엔터만 쳐도 잘 만들어진다.




4. 공개키 보내기

     - Gitolite 관리자에게 공개키를 보내서 등록해달라고 해야한다.
     - 여기에서는 gitolite라는 계정에게 scp를 통해서 공개키를 보내주도록 하겠다.



     - 중요한 점은 이전에도 한 번 언급했지만, 일반적으로 [ 계정명.pub ] 형식의 파일명을 사용한다는 것이다.




5. Gitolite 관리자

     - 이제부터는 Gitolite 관리자가 해야하는 일이다.

     - 우선은 새로운 파일이 잘 들어왔는지 확인을 하고, 그 계정에게 권한을 부여해주면 된다.


$ nano ./conf/gitolite.conf

     - ./keydir directory 안에 [ chaniXP.pub ]라는 파일이 잘 들어왔는지 확인을 하고,
     - [ ./conf/gitolite.conf ] 환경 파일을 수정해주면 된다.


     - 공개키를 등록한다해도, 그 계정이 어느 repository에 권한을 갖는지 정해주지 않는다면 무용지물이다.




6. push

     - 제일 중요한 과정이다. 바로 서버에 해당 정보들을 보내주어야 모든 것이 이루어진다.


$ git add ./keydir/chaniXP.pub
$ git commit -a -m "add user - chaniXP"
$ git push

     - 위 스크린샷과 명령어 정리한 내용과 차이가 있다.

     - 정말 종종 실수하는 부분인데, 기존에 등록된 파일의 수정이 아니라 새로운 파일이 등록되었을 경우에는
        [ git commit -a -m "..." ] 명령으로 처리가 되지 않는다. 별도로 등록을 해주어야 하는 것이다!!!!!
     - 이 부분만 주의해서 정리하고 push 해주면 모든 것은 끝난다!!!




강원도 솔비치로 2박3일 가족여행을 다녀오자마자 내 방에 처박혀서 포스팅을 하고 있으니,
우리 아가와 와이프가 째려본다.... ㅋㅋㅋ ^^

솔비치 호텔에서 2박 모두 했는데 바로 앞에 바다가 있어서 아가랑 놀러가기에는 정말 좋은 것 같다.
다만, 아직까지는 물이 차가워서 모래놀이 위주로 했지만...

다음에는 호텔이 아니라 콘도로 예약을 해야겠다 ^___^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

GitHub - Signup  (0) 2012.06.10
Gitolite in Eclipse ( 이클립스 환경에서 Gitolite 접근하기 )  (1) 2012.06.07
Rebase - 또 하나의 merge  (0) 2012.05.30
Gitolite - Personal Branches  (4) 2012.05.28
Gitolite - user, repo 추가하기  (14) 2012.05.26

어이없게도 Gitolite의 설치나 설정만 신경썼지,
사용자를 추가하는 것과 repository를 추가하는 것은 신경도 안썼다.

소사~ 소사~ 맙소사~!!!

     - http://sitaramc.github.com/gitolite/users.html


물론 앞에서 설명한 것들을 잘 조합하면 사용자 추가하는 방법과 repository 추가 등록하는 방법을 알 수는 있지만,
나름 정리하는 차원에서 다시 한 번 살펴보자.



1. 사용자 추가하기

     - Gitolite는 SSH 공개키 (public key) 파일로 사용자 등록을 한다.


$ ssh gitolite@localhost
$ cd ./repositories/gitolite-admin
$ cd ./keydir
$ scp chani@localhost:/home/chani/.ssh/id_rsa.pub ./chani.pub

     - Gitolite 관리자 계정으로 들어가서 clone 해놓은 [ gitolite-admin ] repository 에 위치하자.
     - [ gitolite-admin ] repository를 살펴보면 [ keydir ] 디렉토리가 있다. 이곳이 바로 공개키를 넣을 곳이다.

     - 내 경우는 "scp"를 이용해서 'chani' 계정의 공개키를 복사해왔다.

     - 여기에서 중요한 점은 가져온 공개키의 파일명이다. chani 계정의 경우 [ chani.pub ]라고 이름을 지어줬다.
     - 그러면 다르게 하는 경우도 있지않을까?라는 의문점이 드는데... 불행하게도(?) 그렇다.

     - 사용자 1명이 1개의 공개키를 사용하면 무관하지만, 복수개의 공개키를 사용할 때에는 어떻게할까?!
     - [ chani@gmail.pub, chani@whatwant.pub ] 처럼 파일이름을 해도 되고,
     - [ chani@gmail.com.pub, chani@whatwant.com.pub ] 처럼 파일이름을 해도 된다.



2. Error

     - 그런데, 여기에서 에러 상황이 발생했다.


$ git add ./keydir/chani.pub
$ git commit -a -m "add user 'chani'"
$ git push

     - 여기에서 경고 메시지를 발견했나요?

remote: WARNING: keydir/chani.pub duplicates a non-gitolite key, sshd will ignore it

     - 어?! gitolite가 아닌 키가 중복된다고?! sshd가 이걸 무시할거라고? 이게 뭔말이지?
     - 매뉴얼 등에서 이런 말은 못들었는데~!!!

     - 그래서 뭔가 이상해서 chani의 SSH 키 파일을 새로 생성해서 gitolite-admin/keydir/ 에 다시 등록해보았다.
     - 그랬더니 이번에는 push가 잘 되었는데...

     - chani 계정에서 ssh로 git-repo@localhost 에 접근을 할 수가 없는 것이다.
     - 새로 생성한 공개키를 git-repo@localhost 에 등록하지 않았으니,
     - 즉, 예전 공개키가 등록이 되어있으니 당연한 것이다.

     - 이 때 번뜩 떠오른 생각이 있으니...


     - "chani"라는 계정의 공개키를 지금 현재 2가지의 목적으로 사용하려고 하고 있는 것이다.
     - 물론 내부적으로는 SSH를 이용하고 있다는 점은 같지만,
     - SSH Console 로 접속을 하는 한가지와 Gitolite로 접속하는 한가지...
     - 즉, 2가지 접근 방법을 하나의 통로로 사용하려는 것이다.

     - 그럼 내부적으로 이걸 어떻게 확인할 수 있을까?


$ nano ./.ssh/authorized_keys


     - Gitolite 관리자 계정에서 [ ./.ssh/authorized_keys ] 파일을 확인해보자.


     - 어?! 이상한 내용이 추가되어 있다!!! [ # gitolite start ~ # gitolite end ] 라는 문장들이다.

     - 정확한 내부 로직은 분석을 해보지 않았지만 (솔직히 좀 귀찮다.... 흑... 분석해보면 도움이 될거라는 것은 알지만)
       일단 기본적인 SSH Login 흐름을 Gitolite가 가로채서 자신의 공개키로 인증하게 하는 것으로 추정이 된다.

     - 그러다보니 여기에서 문제가 발생하는 것이다. 같은 공개키를 사용하려하면 이 놈이 햇갈려하는 것 같다.

     - 결론은 같은 공개키로 SSH와 Gitolite를 사용하는 것은 안된다.
     - 어떻게 하면 할 수는 있겠지만, 문제의 소지가 있는 것은 원천적인 해결책을 찾기 전엔 하지 않는 것이 좋다!


     - 일단, 위와 같은 과정을 통해서 사용자 추가는 되었다!



3. Repository 추가하기

     - Gitolite로 관리하는 repository로 만들기에 대해서 알아봐야 하는데, 실은 엄청 쉽다.
     - 지금까지 Gitolite의 환경 파일 [ ./conf/gitolite.conf ] 파일에 해당 repository 정보만 적어주면 되는 것이다.

     - 문제는 이렇게만 알고 있다고 끝이 아니다!!! 이게 생각보다 복잡하다.



4. New Repository 생성하기

     - 신규로 repository를 생성하는 방법은 어떻게 될까?!


repo bare2repo
             RW+          = @whatwant

     - 실제로 존재하지 않는 [ bare2repo ]라는 이름의 repository에 대해서 권한 설정을 해준다.
     - 당연히 commit 하고 push 하는 것은 잊지 않기를...


     - 이제 어떻게 repository가 생기는 것인지 해보자.



     - 위와 같이 repository를 clone을 해서 사용할 수 있다.
     - 여기에서 포인트는 Server에 [ bare2repo.git ] repository가 없는데도 clone을 할 수가 있다는 점이다.

     - 그럼 여기에서 드는 궁금증. Gitolite의 권한 설정 없이 그냥 아무 이름이나 사용해서 가능할까?


     - 위 스크린샷과 같이 에러가 발생한다.


     - 결론!! 새로운 repository를 만들고 싶으면 [ ./conf/gitolite.conf ] 파일에 권한 설정을 해주면 된다!!!



5. Existing repository

     - 이번 포스팅에서 개인적으로 가장 큰 관심이 있는 부분은 바로 이것이다!
     - 기존에 작업하던 repository를 셋팅한 여기 이 Server에 넣어서 관리를 하고 싶을 때 어떻게 하면 될까?!


     - "git-repo" 계정으로 접속해서 가져오고 싶은 repository를 가져오자.
     - [ scp -r ] 명령으로 repository를 전송 받아오면 된다. (가져오는 방법은 각자 다양하게 있을 것이다)

     - 차례대로 따라왔으면 눈치챘겠지만, 가져왔으면 당연히 [ gitolite-admin/conf/gitolite.conf ] 파일을 손봐야한다.


repo bare1repo
             RW+          = @whatwant

     - "bare1repo" repository에 대한 설정을 넣어주면 된다. (commit & push 는 이제 더 이상 말하지 않아도...)

     - [ RW+    personal/USER/ = @whatwant ] 줄은 무시하시길....^^ 다음 포스팅 때 알게될것이니....

     - bare1repo.git repository를 위치에 놓고 계정 권한 설정을 했으니 이제 OK?????


     - 바로 해당 repository를 clone을 하면 위와 같이 error가 발생을 한다.
     - [ gl-conf ]를 못찾는다고 하는데, 대체 [ gl-conf ]가 뭐길래?


     - 혹시나하고 [ gitolite-admin.git ] repository에서 살펴보니 위와 같이 존재한다.
     - 내용은 계정에 대한 정보이다. 아마도 'GitoLite-CONFig' 파일인가보다.


     - 그래서 복사해 놓은 "bare1repo.git " repository의 파일을 살펴보니 당연하게도 [ gl-conf ] 파일은 없다.

     - 그러면, 이걸 어떻게 만들어 넣을 수 있을까?
     - 이 질문을 바꾸면 Gitolite에게 이 repository의 존재에 대해서 어떻게 알려줄 수 있을까?


$ ~/gitolite/src/gitolite setup

     - [ ~/gitolite/src/gitolite setup ] 명령을 실행시키면 [ gl-conf ] 파일이 생성이 된다.
     - 아무런 메시지를 보여주지 않아서 쫌 썰렁하지만, 너무나 간편하다.


     - 다시 clone을 해보면..... 짠~!!! 성공~!!!!



너무 길게 포스팅을 한 것 같지만...
그래도 매뉴얼 같은 곳에서 제대로 된 설명을 찾아보기 힘든 부분이니 잘 참고하세요~^^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Rebase - 또 하나의 merge  (0) 2012.05.30
Gitolite - Personal Branches  (4) 2012.05.28
Git 계정 관리 - Gitolite's Repository  (4) 2012.05.20
Git 계정 관리 - Gitolite 설정하기  (3) 2012.05.19
Git 계정 관리 - Gitolite 설치하기  (23) 2012.05.15

Gitolite의 설정은 계정 관리 하나만의 문제가 아니다.
Repository 관리를 하기 위한 계정 관리 도구이므로 당연히 Repository 관리와도 밀접한 관계에 있다.


1. Repository

     - 제 포스팅을 따라서 Gitolite를 설치하신 분들은 아래와 같은 디렉토리 구조일 것이다.


     - 관심사항인 것만 표시한 것이다.

     - Gitolite에서 repository에 대해서 제약조건을 두는 것은 다음과 같다.

▷ 모든 repository는 Bare Repository여야 한다.
▷ 모든 repository의 접미사는 ".git"으로 끝나야 한다.




2. Path

     - 어떤 분의 문의로 인해서 알아보게 된 [ repositories ] 변경 방법이다.

     - 즉, 현재는 Gitolite 설치 時 정해진 경로대로 위 그림과 같이 자동으로 셋팅이 되어버린다.
     - 그런데, 다른 디렉토리로 설정하고 싶다거나 다른 디스크로 지정하고 싶을 경우에는 어떻게 해야할까?!

     - 여기저기 찾아본 결과 g3 버전의 Gitolite에서는 변경할 수 없었다.
     - [ $REPO_BASE ] 설정으로 변경할 수 있다고 하는데, 몇 번 테스트 결과 정상적으로 되지 않았다.

     - 그러면 어떻게 이 문제를 해결할 수 있을까?!

     - 뭐, 아시는 분들이라면 바로 알 수 있겠지만 '심볼릭 링크(ln)'를 이용하면 된다.

     - 중요한 것은 "권한 설정"이다.



오늘은 여기까지~ 헛! 또 날이 바뀌었네.... ㅠㅠ
반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Gitolite - Personal Branches  (4) 2012.05.28
Gitolite - user, repo 추가하기  (14) 2012.05.26
Git 계정 관리 - Gitolite 설정하기  (3) 2012.05.19
Git 계정 관리 - Gitolite 설치하기  (23) 2012.05.15
GitWeb + Nginx  (0) 2012.05.09

하아~ Gitolite 설치하고 오랜시간이 흘렀다.
이제는 어떻게 쓰는지 알아보자.


1. pwd

     - Gitolite의 환경을 설정을 하기 위해서는 [ gitolite-admin.git ] repository를 다루면 된다.
     - 앞에서 Gitolite의 관리자로 [ gitolite ] 계정을 설정했으니 해당 계정으로 작업을 하면 된다.



     - clone 이후 디렉토리를 살펴보면 위와 같다.



2. gitolite.conf

     - repository 別 권한 설정에 대한 정보는 [ ./conf/gitolite.conf ] 파일에 있다.


     - 참 직관적이고 쉽게 되어있다.
     - 하나씩 알아보자.



3. Permission

     - Gitolite에서 사용할 수 있는 옵션은 다음과 같다.

Permission  Comments
 -  deny
 R  show
 RW  create a ref or fast-forward push a ref. No rewinds or deletes.
 RW+  create, fast-forward push, rewind push, or delete a ref.
 C  create repository.
 RWC  RW but no longer permit creating a ref.
 RW+C  RW+ but no longer permit creating a ref.
 RWD  RW but no longer permit deleting a ref.
 RW+D  RW+ but no longer permit deleting a ref.
 RWCD  RW but no longer permit creating and deleting a ref.
 RW+CD  RW+ but no longer permit creating and deleting a ref.
 M  no longer permit merge.

     - (우쒸 이 놈의 티스토리... 위지윅으로 표 편집하기 짜증나네...)

     - "-", "R" qualifier의 경우는 밑에서 예를 들면서 다시 한 번 설명을 하겠다.

     - "RW" qualifier는 앞으로 나아가는 것은 모두 가능하지만, 지우거나 되돌아가는 것을 허용하지 않는다.
     - "RW+" qualifier는 진정한 모든 기능 할당이다.

     - 단독으로 "C" qualifier를 할당할 경우 repository를 create할 수 있다.

     - "RWC"와 같이 같이 사용되는 "C"와 단독으로 사용되는 "C"는 의미가 다르다!!!

     - 만약 단독으로 사용된 "C" qualifier가 적용되었을 경우,
       다른 qualifier와 같이 사용되는 "C" or "D" permission 내역은 적용되지 않는다.

     - 마지막으로 "M" qualifier가 있다. 이는 merge를 허용하지 않고 싶을 경우에 사용한다고 한다.



4. Structure

     - [ gitolite.conf ] 옵션의 문법(?)은 아래와 같다.

<permission> <zero or more refexes> = <one or more users/user groups>

     - 여기에서 애매한 용어가 나온다. 바로 "refexes"

refexes = a regex that matches a ref

     - 그러면 [ ref ]는 무엇이냐고? 이런 의문을 갖는 분들은 Git을 많이 공부하지 않으신 분이 분명하다!!!
     - [ refs/heads/master ] 이런것 많이 보지 않으셨을런지... ^^

     - 저 위의 "문법"에 대해서 실 사용예를 몇 가지 들어보겠다.

repo wow
     RW    master                      = chani
     RW    refs/tags/v0.[0-9]      = hardworker
     RW    source/                    = iamslave

     - [ RW   master      = chani ]는 "master"라는 브랜치 RW 권한을 chani 계정에게 줘라!라는 의미이다.
     - 그런데, 여기에서 주의할 점이 있다. [ refexes = a regex that matches a ref ] 포인트는 "regex"
     - 그래서 'master' 브랜치 뿐만 아니라 "master21", "master_wow" 등도 모두 해당한다.
     - 그러면 정확히 "master" 브랜치만 지정하려면 어떻게 해야할까? 정답은 "$"

RW    master$     = chani

     - 그 다음 [ RW    refs/tags/v0.[0-9]      = hardworker ]를 살펴보면 tag에 대한 권한 설정도 확인이 된다.
     - 그 다음 [ RW    source/                    = iamslave]를 보면 디렉토리에 대한 권한 설정도 확인이 된다.

     - Gitolite는 기본적으로 명시되지 않을 경우에는 [ refs/heads/ ]가 생략되었다고 판단한다.



5. Group


     - 권한을 주기 위해서 일일이 계정이름을 적어주는 것은 너무 번거롭다.
     - 팀 別 권한을 주고, 그 안에 업무 別 권한을 주는 등의 설정을 위해서 Group 설정을 해보자.

@prj_kernel_repo     = kernel linux
@prj_kernel_user     = chani john

@prj_uboot_repo      = uboot boot               # make uboot
@prj_uboot_user      = miae charlse

@prj_repo               = @prj_kernel @prj_uboot
@prj_user               = @prj_kernel @prj_uboot

     - 여기에서 특이한 점은 repository와 user 그룹을 구분할 방법은 없다.
     - 사용을 할 때에 그 성격이 구분된다.



6, Read but...

     - Permission에서 "-"와 "R"의 용법에 대해서 알아보자.

repo gitolite-admin
   -  =   gitweb daemon
   option deny-rules = 1

repo @all
    R  = gitweb daemon

     - 위 글상자 안의 것을 보면 더 이상 설명이 필요 없을 것 같다.

     - 다만, 주의할 점은 순서이다. "-"가 앞에 위치하고 "R"이 뒤에 와야 한다.



7. Tip

     - Makefile과 같은 중요한 파일을 제어하는 방법에 대해서 알아보자.

@professional                 = chani john whatwant charlse
@begineer                      = doosan twins

repo ourproject
     RW                            = @professional @begineer

     RW   source/              = @professional
     -      source/Makefile  = @begineer
     RW   source/              = @begineer

     - 위 내용을 잘 살펴보아야 한다. 포인트는 제일 밑의 2줄!
     - [ source/Makefile ]에 대한 권한을 빼앗고선 [ source/ ]에 대한 권한을 설정해주었다.
     - 순서가 중요하다!



Gitolite를 제대로 멋지게 사용해보자!!!

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Gitolite - user, repo 추가하기  (14) 2012.05.26
Git 계정 관리 - Gitolite's Repository  (4) 2012.05.20
Git 계정 관리 - Gitolite 설치하기  (23) 2012.05.15
GitWeb + Nginx  (0) 2012.05.09
SSH Public Key - SSH 공개키  (0) 2012.05.04

+ Recent posts