Saturday, July 02, 2011

Install Gerrit

1) Install tomcat.

2) Download/build gerrit.war to tomcat websapps directory

3) Create gerrit directory
mkdir /usr/share/gerrit


4) Initialize gerrit configurations
java -jar gerrit.war init -d /usr/share/gerrit


- Choose default values for all configuration except
- Choose authentication method HTTP
- Enter tomcat as "run-as user"
- Choose to Update/copy gerrit.war
- Choose to use Bouncy Castle

5) Edit /usr/share/gerrit/etc/gerrit.conf
and it modify it to looks like this:

[gerrit]
basePath = git
[database]
type = H2
database = db/ReviewDB
[auth]
type = LDAP
[sendemail]
smtpServer = localhost
[container]
user = tomcat
javaHome = /usr/lib/jvm/jdk1.6.0_26/jre
[sshd]
listenAddress = MYIP:8418
[httpd]
listenUrl = http://*:8282/
[cache]
directory = cache
[ldap]
server = ldap://MYIP:10389
username = uid=gerrit,ou=users,ou=system
password = gerrit
accountBase = ou=Users,dc=MYHOST
accountPattern = (&(objectClass=person)(uid=${username}))
accountFullName = displayName
accountEmailAddress = mail

groupBase = ou=Groups,dc=MYHOST
groupMemberPattern = (&(objectClass=groupOfUniqueNames)(uniquemember=${dn}))


Where you need to replace MYIP, MYHOST with the IP and the host name of the machine.
Note the LDAP configuration. We need to add gerrit user to ou=system and create the MYHOST domain structure.

6) Install ApacheDS LDAP server for user management. (There is a RPM package for Fedora, so just download and follow installation instructions).

7) We need to configure ApacheDS.
Open /var/lib/apacheds/default/conf/server.xml and add new partition
<jdbmPartition id="MYHOST" suffix="dc=MYHOST" optimizerEnabled="true" syncOnWrite="true" cacheSize="100"/gt;

Replace MYHOST with machine hostname.

Remove anonymous access
<defaultDirectoryService ... allowAnonymousAccess="false" ... >



7) Start the service
service apacheds start default



8) Install and Apache Directory Studio and connect to LDAP server
ldap://MYHOST:10389

where MYHOST is the hostname/IP address of the machine
The default username is "uid=admin,ou=system" and password is "secred"

Go to ou=system, and select uid=admin. Change the userPassword attribute with new password


9) Add new user to ApacheDS. Open Apache Directory Studio and import following LDIF

dn: uid=gerrit,ou=users,ou=system
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: gerrit administrator
sn: gerrit
displayName: Gerrit administrator
uid: gerrit
userPassword:: e1NIQX1PNWNIRFViTTFtUWlxT2U0UG1sbjdZUjRCVGc9

It contains a user gerrit and password gerrit

9) Create init.ldif file containing

#########################################################
# Root node for domain
#########################################################
dn: dc=MYHOST
objectClass: domain
objectClass: extensibleObject
objectClass: top
dc: MYHOST

#########################################################
# Root node for Users
#########################################################
# The node contains all users
dn: ou=Users,dc=MYHOST
objectClass: organizationalUnit
objectClass: top
ou: Users

#########################################################
# Root node for Groups
#########################################################
# Each group contains the user Ids assigned to the group
dn: ou=Groups,dc=MYHOST
objectClass: organizationalUnit
objectClass: top
ou: Groups

#########################################################
# Groups
#########################################################
dn: cn=admins,ou=Groups,dc=MYHOST
objectClass: groupOfUniqueNames
objectClass: top
cn: admins
description: Administrators group
uniquemember: uid=user1,ou=Users,dc=MYHOST

dn: cn=developers,ou=Groups,dc=MYHOST
objectClass: groupOfUniqueNames
objectClass: top
cn: developers
description: Developers group
uniquemember: uid=admin,ou=system
uniquemember: uid=user1,ou=Users,dc=MYHOST
uniquemember: uid=user1,ou=Users,dc=MYHOST

dn: cn=guests,ou=Groups,dc=MYHOST
objectClass: groupOfUniqueNames
objectClass: top
cn: guests
description: Guests group
uniquemember: uid=admin, ou=system

#########################################################
# Users
#########################################################
dn: uid=user1,ou=Users,dc=MYHOST
objectClass: organizationalPerson
objectClass: person
objectClass: extensibleObject
objectClass: uidObject
objectClass: inetOrgPerson
objectClass: top
cn: John Smith
givenname: John
sn: Smith
displayName: John Smith Jr.
mail: johnsmith@MYHOST
ou: Users
uid: user1
userpassword:: e1NIQX1zOXFuZTB3RXFWVWJoNEhRTVpIK0NZOHlYbWM9

dn: uid=user2,ou=Users,dc=MYHOST
objectClass: organizationalPerson
objectClass: person
objectClass: extensibleObject
objectClass: uidObject
objectClass: inetOrgPerson
objectClass: top
cn: Joe Doe
givenname: Joe
sn: Doe
displayName: terminator
mail: JoeDoe@MYHOST
ou: Users
uid: user2
userpassword:: e1NIQX1vWWdjQnU3SmJibVFISHUvNUJ4Q28vQ09uTFE9


Replace MYHOST with the name of the host. If your host have full domain name, then replace dc=MYHOST, with dc=mysubdomain,dc=mydomain,dc=com

The file describes a simple Groups/User hierarchy with 3 groups: admins,developers,users and 2 users: user1 (password:user1) and user2 (password:user2)

10) Using Apache Directory Studio import init.LDIF into LDAP server

11) Start tomcat service
service tomcat7 start


12) Stop tomcat service
service tomcat7 stop


13) Copy Bouncy castle jars to /usr/share/tomcat7/webapps/gerrit/WEB-INF/libs
cp /usr/share/gerrit/lib/bcprov-jdk16-144.jar /usr/share/tomcat7/webapps/gerrit/WEB-INF/lib


14) Start tomcat service and now you must be able to login to gerrit system with user1/user1 or user2/user2

15) Generating public/private keys.
Windows:
Download puttygen.exe and use it to generate a new private/public key. Use the menu Conversion / Export OpenSSH key to export the private key. Copy the OpenSHH public key (from the textbox)

Linux:
ssh-keygen -t rsa

Will generate /home/user/.ssh/id_rsa and /home/user/.ssh/id_rsa.pub
Copy the content of id_rsa.pub

16) Login into gerrit go to settigs, SSH key and paste the OpenSSH key (generated from the puttygen or ssh-keygen). Don't forget to click "Add"

17) Testing ssh connection. From Linux shell (or cygwin on windows boxes)
ssh -p 8418 -i <path to the private key> <gerrit IP/host>


18) Creating new project.
ssh -p 8418 -i <path to the private key> <gerrit IP/host> gerrit create-project -n <project name>


19) Go to Gerrit, choose "Admin" / "Projects" and select the newly created project.
Go to "Access" and add Submit,Push,Read permissions to "Registered Users" group

20) Cloning the newly created project for the first time.

git config --global user.name "Your Name"
git config --global user.email you@example.com
git config --global core.autocrlf false

git clone ssh://GERRIT_HOST:8418/PROJECT_NAME.git
cd PROJECT_NAME
git config remote.origin.push HEAD:refs/for/master
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
echo Hello > readme.txt
git add readme.txt
git commit -m "Initial commit"
git push

After that the warning messages "You appear to have cloned an empty repository." or "remote HEAD refers to nonexistent ref, unable to checkout." will disappear.

0 comments: