Gerrit Code Review mit Tomact,MySQL und LDAP

Dieses Howto beschreibt die Installation eines Gerrit Code Review Systems, anstatt des mitgelieferten Jetty Application-Servers wird ein Tomcat eingesetzt. Als Datenbank wird ein MySQL-Server genutzt und die Benutzerdaten kommen aus einer bestehenden LDAP Installation.
Die Installation funktioniert unter Debian und Ubuntu, sollte aber mit geringem Aufwand auch auf anderen Linux-Distributionen funktionieren.

1. Benötigte Pakete installieren

apt-get install git git-core openjdk-6-jre apache2 libapache2-mod-jk mysql-server tomcat6

2. CA Zertifikat in den Java Keystore übernehmen
Dieser Schritt ist nur dann wichtig, wenn der LDAP-Server über eine SSL/TLS geschützte Verbindung angesprochen werden soll.

Für OpenJDK lautet der Importbefehl wie folgt:

keytool -import -trustcacerts -alias "example-ca" -file CA.pem -keystore /etc/ssl/certs/java/cacerts -storepass "changeit"

Falls ein Oracle Java genutzt wird sieht der Befehl etwas anders aus:

keytool -import -trustcacerts -alias "example-ca" -file CA.pem -keystore /etc/java6-sun/security/cacerts -storepass "changeit"

3. MySQL-Datenbank anlegen
Zuerst muss man sich in die MySQL-Datenbank mit dem während der Installation gesetzten Passwort einloggen:

mysql -u root -p

Nun legt man eine neue Datenbank und einen Benutzer für die Gerrit Instanz an:

CREATE USER 'gerrit'@'localhost' IDENTIFIED BY 'gerrit';
CREATE DATABASE reviewdb;
ALTER DATABASE reviewdb charset=latin1;
GRANT ALL ON reviewdb.* TO 'gerrit'@'localhost';
FLUSH PRIVILEGES;
quit;

4. Initiale Gerrit Konfiguration durchführen
Zuerst muss ein Ordner für die Gerrit Git-Repositorys und einige Konfigurationsdateien angelegt werden:

mkdir /opt/gerrit
cd /opt/gerrit

Nun können die benötigten Installationsdateien heruntergeladen werden:

wget https://gerrit.googlecode.com/files/gerrit-2.4.2.war -O gerrit.war

Die Gerrit Installation wird mit diesem Befehl gestartet:

java -jar gerrit.war init -d /opt/gerrit/gerrit-home

Während der Installation werden einige Fragen gestellt, die entsprechenden Antworten habe ich fett markiert:


*** Gerrit Code Review 2.4.2
***

Create ‚/opt/gerrit/review_site‘ [Y/n]? y

*** Git Repositories
***

Location of Git repositories [git]: /opt/gerrit/git

Database server type [H2/?]: mysql

Gerrit Code Review is not shipped with MySQL Connector/J 5.1.10
** This library is required for your configuration. **
Download and install it now [Y/n]? y
Downloading http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.10/mysql-connector-java-5.1.10.jar … OK
Checksum mysql-connector-java-5.1.10.jar OK

Server hostname [localhost]:
Server port [(MYSQL default)]:
Database name [reviewdb]:
Database username [root]:
gerrit’s password :
confirm password :

*** User Authentication
***
Authentication method [OPENID/?]: ldap
LDAP server [ldap://localhost]: ldaps://ldap.example.org
LDAP username :
Account BaseDN [DC=example,DC=org]: OU=Users,DC=example,DC=org
Group BaseDN [OU=Users,DC=example,DC=org]: OU=Groups,DC=example,DC=org
*** Email Delivery
***

SMTP server hostname [localhost]:
SMTP server port [(default)]:
SMTP encryption [NONE/?]:
SMTP username :

*** Container Process
***

Run as [root]:
Java runtime [/usr/lib/jvm/java-6-openjdk-i386/jre]:
Copy gerrit.war to /opt/gerrit/review_site/bin/gerrit.war [Y/n]? y
Copying gerrit.war to /opt/gerrit/review_site/bin/gerrit.war

*** SSH Daemon
***

Listen on address [*]:
Listen on port [29418]:

Gerrit Code Review is not shipped with Bouncy Castle Crypto v144
If available, Gerrit can take advantage of features
in the library, but will also function without it.
Download and install it now [Y/n]? n
Generating SSH host key … rsa(simple)… done

*** HTTP Daemon
***

Behind reverse proxy [y/N] y?
Use SSL (https://) [y/N] y?
Listen on address [*]:
Listen on port [8080]:

5. Gerrit in den Tomcat deployen
Als aller erstes wird Tomcat gestoppt:

/etc/init.d/tomcat6 stop

Damit der Zugriff auf die Datenbank aus dem Tomcat funktioniert muss eine Datasource in der Datei /etc/tomcat6/context.xml angelegt werden:

<Context>
....
  <Resource name="jdbc/ReviewDb" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="gerrit" password="gerrit" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/reviewdb"/>
....
</Context>

Um nachher die den Apache-Webserver über mod_jk anzubinden muss zuerst der AJP1.3 freigeschaltet werden. Die Freischaltung geschieht in der Datei /etc/tomcat6/server.xml, so sehen die Zeilen vor der Bearbeitung aus:

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    -->

Und so nach der Bearbeitung:

    <!-- Define an AJP 1.3 Connector on port 8009 -->
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

Nun werden die benötigten Daten in die entsprechenden Tomcat Verzeichnisse verschoben:

cd /opt/gerrit/gerrit-home/
cp bin/gerrit.war /var/lib/tomcat6/webapps/
cp lib/mysql-connector-java-5.1.10.jar /usr/share/tomcat6/lib/
chown tomcat6.tomcat6 -R /opt/gerrit/

6. Tomcat über mod-jk anbinden
JK-Worker für Gerrit anlegen:

vi /etc/libapache2-mod-jk/workers.properties

Die workers.properties sollte so aussehen:


workers.tomcat_home=/usr/share/tomcat6
workers.java_home=/usr/lib/jvm/default-java
ps=/

worker.list=gerrit_worker

worker.gerrit_worker.port=8009
worker.gerrit_worker.host=localhost
worker.gerrit_worker.type=ajp13
worker.gerrit_worker.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=gerrit_worker

Als nächstes wird eine Konfigurationsdatei für eine generelle mod_jk Konfiguration angelegt:
touch /etc/apache2/conf.d/jk.conf

Die Datei wird mit diesem Inhalt gefüllt:

JkShmFile /var/log/apache2/mod_jk.shm
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +RejectUnsafeURI +ForwardKeySize
JkMount /gerrit gerrit_worker
JkMount /gerrit/* gerrit_worker

Als letztes muss man die VirtualHosts anpassen, in denen die Applikationen verfügbar sein sollen, dazu fügt man folgende Zeile ein:

JkMountCopy On

Zum Abschluss sollten der Tomcat- und der Apache-Server einmal neugestartet werden:

/etc/init.d/tomcat6 restart
/etc/init.d/apache2 restart

Nun könnt ihr euer Gerrit Code Review System über http(s)://your-host/gerrit aufrufen.

Zum Abschluss poste ich hier noch meine funktionierende gerrit.config:

[gerrit]
basePath = /opt/gerrit/git
[database]
type = MYSQL
hostname = localhost
database = reviewdb
username = gerrit
[auth]
type = LDAP
[ldap]
server = ldap://ldap.example.org
accountBase = OU=Users,DC=example,DC=org
groupBase = OU=Groups,DC=example,DC=org
[sendemail]
smtpServer = localhost
[container]
user = root
javaHome = /usr/lib/jvm/java-6-openjdk-i386/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8080/
[cache]
directory = cache

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.