Gerrit 설치

다른 포스트에서 이어집니다.

이전 포스트에서 삽질했던 GIT 저장소에 대한 내용을 gerrit에서 직접적으로 사용하진 않습니다.

설치

유틸 설치

  • JDK7 이상
  • Apache2
  • Database
    • H2, Apache Derby, PostgreSQL, MySQL, Oracle, SAP MaxDB, DB2 중 하나를 사용하면 된다.
    • H2를 사용하면 gerrit의 기본 database라서 따로 설정할 것이 없다.
$ sudo apt-get install oracle-java7-installer
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-proxy-html
$ sudo apt-get install apache2-utils
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo service apache2 restart

gerrit 설치

우선, gerrit을 위해 ‘gerrit’ 이라는 user를 하나 생성하였다.

설치 파일을 아래의 wget 명령어로 download받을 수 있으며, ~/Downloads 디렉토리를 생성하여 그곳에 받았다.

$ wget https://gerrit-releases.storage.googleapis.com/gerrit-2.12.3.war

설치한다. init -d 이후의 경로는 설치하고 싶은 경로를 지정한다.

$ java -jar gerrit-2.12.3.war init -d ~/opt/gerrit

나의 경우 설치 과정은 다음과 같다.

gerrit@computer:~/Downloads$ java -jar gerrit-2.12.3.war init -d ~/opt/gerrit
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2016-08-14 17:19:33,592] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /home/gerrit/opt/gerrit/etc/gerrit.config; assuming defaults
*** Gerrit Code Review 2.12.3
***
Create '/home/gerrit/opt/gerrit' [Y/n]? Y
*** Git Repositories
***
Location of Git repositories [git]: /home/gerrit/repository/
*** SQL Database
***
Database server type [h2]:
*** Index
***
Type [LUCENE/?]:
The index must be rebuilt before starting Gerrit:
java -jar gerrit.war reindex -d site_path
*** User Authentication
***
Authentication method [OPENID/?]: http
Get username from custom HTTP header [y/N]? y
Username HTTP header [SM_USER]:
SSO logout URL : http://aa:aa@192.168.0.99:80/login/
Enable signed push support [y/N]?
*** Review Labels
***
Install Verified label [y/N]?
*** Email Delivery
***
SMTP server hostname [localhost]: smtp.gmail.com
SMTP server port [(default)]: 465
SMTP encryption [NONE/?]: SSL
SMTP username [gerrit]: 계정@gmail.com
계정@gmail.com's password :
confirm password :
*** Container Process
***
Run as [gerrit]:
Java runtime [/usr/lib/jvm/java-7-oracle/jre]:
Copy gerrit-2.12.3.war to /home/gerrit/opt/gerrit/bin/gerrit.war [Y/n]? Y
Copying gerrit-2.12.3.war to /home/gerrit/opt/gerrit/bin/gerrit.war
*** SSH Daemon
***
Listen on address [*]:
Listen on port [29418]:
Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v152
If available, Gerrit can take advantage of features
in the library, but will also function without it.
Download and install it now [Y/n]?
Downloading http://repo2.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.52/bcpkix-jdk15on-1.52.jar ... OK
Checksum bcpkix-jdk15on-1.52.jar OK
Gerrit Code Review is not shipped with Bouncy Castle Crypto Provider v152
** This library is required by Bouncy Castle Crypto SSL v152. **
Download and install it now [Y/n]?
Downloading http://repo2.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk15on-1.52.jar ... OK
Checksum bcprov-jdk15on-1.52.jar OK
Generating SSH host key ... rsa... dsa... done
*** HTTP Daemon
***
Behind reverse proxy [y/N]? y
Proxy uses SSL (https://) [y/N]?
Subdirectory on proxy server [/]:
Listen on address [*]: 192.168.0.99
Listen on port [8081]:
Canonical URL [http://127.0.0.1/]: http://192.168.0.99
*** Plugins
***
Installing plugins.
Install plugin commit-message-length-validator version v2.12.3 [y/N]? y
Install plugin download-commands version v2.12.3 [y/N]? y
Install plugin replication version v2.12.3 [y/N]? y
Install plugin reviewnotes version v2.12.3 [y/N]? y
Install plugin singleusergroup version v2.12.3 [y/N]? y
Initializing plugins.
No plugins found with init steps.
Initialized /home/gerrit/opt/gerrit

위의 설정사항은 설치디렉토리/etc/gerrit.config 에 저장된다.

Index rebuilt

잘은 모르겠지만 검색 엔진에 대한 색인 과정인 것 같다. 이 명령어를 수행해줘야 하는 것 같다.

$ java -jar gerrit-2.12.3.war reindex -d ~/opt/gerrit

Gerrit 실행

$ cd ~/opt/gerrit/bin
$ ./gerrit.sh start

실행은 됐는데 브라우저로 확인할 수가 없다.

apache 설정을 할 차례가 됐다.

apache proxy 설정

VirtualHost 파일 생성

$ sudo vim /etc/apache2/sites-available/gerrit.conf
<VirtualHost *:80>
ServerName localhost
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location /login/>
AuthType Basic
AuthName "Gerrit Code Review"
Require valid-user
AuthUserFile /home/gerrit/opt/gerrit/etc/passwords
</Location>
ProxyPass / http://192.168.0.99:8081/
ProxyPassReverese / http://192.168.0.99:8081/
</VirtualHost>

Site-enabled 설정

$ cd /etc/apache2/sites-enabled
$ sudo ln -s ../sites-available/gerrit.conf ./001-gerrit.conf
$ sudo a2ensite 001-gerrit.conf

기본 설정파일의 포트를 변경

포트 충돌로 인해 gerrit이 로딩이 안될 수 있으므로, sudo vim /etc/apache2/sites-available/000-default.conf 파일의 포트를 80에서 10080 등으로 변경한다.

<VirtualHost *:10080>

Gerrit 사용자 등록

관리자 계정을 생성한다.

htpasswd로 생성하는 계정은 apache에서 인증을 위해 사용하는 계정이며, gerrit은 처음 생성된 계정(uid 1000000)을 administrator로 인식한다.

$ htpasswd -c /home/gerrit/opt/gerrit/etc/passwords "admin"
passwords파일을 처음 생성할 때에만 -c 옵션을 사용하며 이후 다른 계정을 추가할 때에는 그냥 아래와 같이 추가한다.
$ htpasswd /home/gerrit/opt/gerrit/etc/passwords "usera"

Apache 재시작 및 gerrit 재시작

$ sudo service apache2 restart
$ cd ~/opt/gerrit/bin
$ ./gerrit.sh restart

이후 접속을 시도하면, 사용자 이름 및 비밀번호를 묻는다.

위에서 설정한 admin / password 를 넣는다.

로그인 된다.

Login 성공

그런데 브라우저에따라 sign out이 안 되는 문제가 있다.

이 문제의 해결을 위해서는 설치 시 logout URL을 http://aa:aa@192.168.0.99:80/login/ 처럼 넣어주면 된다. aa:aa 는 문자 그대로 aa:aa 그대로 넣어주면 된다.

이게 조금 이상한 버그인게… 사람마다 아래 중 하나로 해야 해결되는 케이스가 있다고 한다.

logout URL을 처음에 설정을 못 하였다면 /etc/gerrit.config 파일을 열고 [auth] 아래에 다음과 같이 추가하면 된다.

[auth]
SSO logout URL : http://aa:aa@192.168.0.99:80/login/

sign out이 안되는 문제의 기본적인 원인은 HTTP의 특성 (https://groups.google.com/forum/?fromgroups=#!topic/repo-discuss/7P73ZvK4OQQ 참조)이라고 한다. auth type을 다른 것들(oAuth, OpenID, etc.)로 지정하면 이런 문제는 발생하지 않는 듯 하다.

참조

Share