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.