{"id":33634,"date":"2023-04-30T14:33:03","date_gmt":"2023-04-30T14:33:03","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=33634"},"modified":"2023-04-30T14:33:38","modified_gmt":"2023-04-30T14:33:38","slug":"gerrit-setup-using-tomcat-and-mysql","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/gerrit-setup-using-tomcat-and-mysql\/","title":{"rendered":"Gerrit Setup using Tomcat and Mysql"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">MySQL database<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create database and user for Gerrit<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>CREATE<\/strong> <strong>USER<\/strong> 'gerrit'@'localhost' <strong>IDENTIFIED<\/strong> <strong>BY<\/strong> 'gerrit';  \n<strong>CREATE<\/strong> <strong>DATABASE<\/strong> gerritdb;  \n<strong>ALTER<\/strong> <strong>DATABASE<\/strong> gerritdb charset=latin1;  \n<strong>GRANT<\/strong> <strong>ALL<\/strong> <strong>ON<\/strong> gerritdb.* <strong>TO<\/strong> 'gerrit'@'localhost';  \n<strong>FLUSH<\/strong> PRIVILEGES;  \nexit;<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Apache Configuration<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable required modules<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo a2enmod proxy\nsudo a2enmod proxy_http  \nsudo service apache2 restart\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create virtualhost for gerrit:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>vim<\/strong> <strong>\/<\/strong>etc<strong>\/<\/strong>apache2<strong>\/<\/strong>sites-available<strong>\/<\/strong>001_gerrit.conf\n&nbsp;\nNameVirtualHost <strong>*<\/strong>:81\n&nbsp;\n<strong>&lt;<\/strong>VirtualHost <strong>*<\/strong>:81<strong>&gt;<\/strong>\n&nbsp;\n  ProxyRequests Off\n  ProxyVia Off\n  ProxyPreserveHost On\n&nbsp;\n  <strong>&lt;<\/strong>Proxy <strong>*&gt;<\/strong>\n    Order deny,allow\n    Allow from all\n  <strong>&lt;\/<\/strong>Proxy<strong>&gt;<\/strong>\n&nbsp;\n  <em># Reverse proxy mode<\/em>\n&nbsp;\n  ProxyPass <strong>\/<\/strong>gerrit<strong>\/<\/strong> http:<strong>\/\/<\/strong>localhost:8080<strong>\/<\/strong>gerrit<strong>\/<\/strong>\n  ProxyPassReverse <strong>\/<\/strong>gerrit<strong>\/<\/strong> http:<strong>\/\/<\/strong>localhost:8080<strong>\/<\/strong>gerrit<strong>\/<\/strong>\n&nbsp;\n  <strong>&lt;<\/strong>Location <strong>\/<\/strong>gerrit<strong>\/<\/strong>login<strong>\/&gt;<\/strong>\n    AuthType Basic\n    AuthName \"Gerrit Code Review\"\n    AuthBasicProvider <strong>file<\/strong>\n    AuthUserFile <strong>\/<\/strong>etc<strong>\/<\/strong>apache2<strong>\/<\/strong><strong>passwd<\/strong>\n    Require valid-user\n  <strong>&lt;\/<\/strong>Location<strong>&gt;<\/strong>\n<strong>&lt;\/<\/strong>VirtualHost<strong>&gt;<\/strong><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Deploy Gerrit in Tomcat<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stop Tomcat7<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">service tomcat7 stop\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In order to access the database from the Tomcat we need a database connector for the mysql database:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>&lt;Context&gt;<\/strong>\n    <em>&lt;!-- DB connector for gerrit --&gt;<\/em>\n    <strong>&lt;Resource<\/strong> name=\"jdbc\/ReviewDb\" auth=\"Container\"\n          type=\"javax.sql.DataSource\" \n          maxActive=\"100\" maxIdle=\"30\" maxWait=\"10000\"\n          username=\"gerrit\" password=\"gerrit\"\n          driverClassName=\"com.mysql.jdbc.Driver\"\n          factory=\"org.apache.commons.dbcp.BasicDataSourceFactory\"\n          url=\"jdbc:mysql:\/\/localhost:3306\/gerritdb\"<strong>\/&gt;<\/strong>\n<strong>&lt;\/Context&gt;<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deploy the &#8216;gerrit.war&#8217; in Tomcat7<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\/gerrit\/\ncp bin\/gerrit.war \/var\/lib\/tomcat7\/webapps\/\ncp lib\/mysql-connector-java-5.1.21.jar \/usr\/share\/tomcat7\/lib\/\nchown tomcat7:tomcat7 -R \/opt\/gerrit\/\nchown tomcat7:tomcat7 -R \/var\/lib\/git\/\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modify&nbsp;<strong>canonicalWebUrl<\/strong>&nbsp;in Gerrit config to point to Gerrit Virtualhost in Apache as gerrit wants to provide some links to itself:<\/li>\n<\/ul>\n\n\n\n<p>change<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>[<\/strong>gerrit<strong>]<\/strong>\n        basePath = <strong>\/<\/strong>var<strong>\/<\/strong>lib<strong>\/<\/strong>git<strong>\/<\/strong>repo\n        canonicalWebUrl = http:<strong>\/\/<\/strong>localhost:8081<strong>\/<\/strong><\/pre>\n\n\n\n<p>to<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>[<\/strong>gerrit<strong>]<\/strong>\n        basePath = <strong>\/<\/strong>var<strong>\/<\/strong>lib<strong>\/<\/strong>git<strong>\/<\/strong>repo\n        canonicalWebUrl = http:<strong>\/\/<\/strong>localhost:81<strong>\/<\/strong><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Setup Gerrit<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\">root@gerrit:~# java -jar gerrit-2.11.2.war  init -d \/opt\/gerrit\nUsing secure store: com.google.gerrit.server.securestore.DefaultSecureStore\n\n*** Gerrit Code Review 2.11.2\n*** \n\nCreate '\/opt\/gerrit'           [Y\/n]? Y\n\n*** Git Repositories\n*** \n\nLocation of Git repositories   [git]: \/var\/lib\/git\/repo\n\n*** SQL Database\n*** \n\nDatabase server type           [h2]: mysql\n\nGerrit Code Review is not shipped with MySQL Connector\/J 5.1.21\n**  This library is required for your configuration. **\nDownload and install it now [Y\/n]? Y\nDownloading http:\/\/repo2.maven.org\/maven2\/mysql\/mysql-connector-java\/5.1.21\/mysql-connector-java-5.1.21.jar ... OK\nChecksum mysql-connector-java-5.1.21.jar OK\nServer hostname                [localhost]: \nServer port                    [(mysql default)]: \nDatabase name                  [reviewdb]: gerritdb\nDatabase username              [root]: gerrit\ngerrit's password             &nbsp;: \n              confirm password&nbsp;: \n\n*** Index\n*** \n\nType                           [LUCENE\/?]: \n\n*** User Authentication\n*** \n\nAuthentication method          [OPENID\/?]: http\nGet username from custom HTTP header [y\/N]? \nSSO logout URL                &nbsp;: \n\n*** Review Labels\n*** \n\nInstall Verified label         [y\/N]? \n\n*** Email Delivery\n*** \n\nSMTP server hostname           [localhost]: \nSMTP server port               [(default)]: \nSMTP encryption                [NONE\/?]: \nSMTP username                 &nbsp;: \n\n*** Container Process\n*** \n\nRun as                         [root]: \nJava runtime                   [\/usr\/lib\/jvm\/java-7-openjdk-amd64\/jre]: \nCopy gerrit-2.11.2.war to \/opt\/gerrit\/bin\/gerrit.war [Y\/n]? \nCopying gerrit-2.11.2.war to \/opt\/gerrit\/bin\/gerrit.war\n\n*** SSH Daemon\n*** \n\nListen on address              [*]: \nListen on port                 [29418]: \n\nGerrit Code Review is not shipped with Bouncy Castle Crypto SSL v151\n  If available, Gerrit can take advantage of features\n  in the library, but will also function without it.\nDownload and install it now [Y\/n]? n\nGenerating SSH host key ... rsa(simple)... done\n\n*** HTTP Daemon\n*** \n\nBehind reverse proxy           [y\/N]? \nUse SSL (https:\/\/)             [y\/N]? \nListen on address              [*]: \nListen on port                 [8080]: 8081\nCanonical URL                  [http:\/\/localhost:8081\/]: \n\n*** Plugins\n*** \n\nInstalling plugins.\nInstall plugin reviewnotes version v2.11.2 [y\/N]? \nInstall plugin replication version v2.11.2 [y\/N]? \nInstall plugin download-commands version v2.11.2 [y\/N]? \nInstall plugin singleusergroup version v2.11.2 [y\/N]? \nInstall plugin commit-message-length-validator version v2.11.2 [y\/N]? \nInitializing plugins.\nNo plugins found with init steps.\n\nInitialized \/opt\/gerrit\nExecuting \/opt\/gerrit\/bin\/gerrit.sh start\nStarting Gerrit Code Review: \nOK\nWaiting for server on localhost:8081 ... OK\nOpening http:\/\/localhost:8081\/#\/admin\/projects\/ ...FAILED\nOpen Gerrit with a JavaScript capable browser:\n  http:\/\/localhost:8081\/#\/admin\/projects\/\n<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Logging configuration<\/h1>\n\n\n\n<p>log4j settings in Gerrit configuration log4j settings in Gerrit configuration<\/p>\n\n\n\n<p>log4j settings in gerrit.config. For heavy users, it&#8217;s recommended switching from verbose tracing to normal logging in the log4j.properties file. The original file section looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Normal logging\n#log4j.appender.TRC.Threshold=OFF\n#log4j.logger.com.google.gerrit.rpc=INFO\n#log4j.logger.com.google=INFO\n#log4j.logger.com.gerics=INFO\n#log4j.logger.com.google.gerrit=INFO\n#log4j.logger.com.google.gerrit.pgm.util.RuntimeShutdown$ShutdownCallback=INFO\n&nbsp;\n# Verbose tracing (<strong>for<\/strong> troubleshooting purposes)\nlog4j.appender.TRC.Threshold=DEBUG\nlog4j.logger.com.google.gerrit.rpc=INFO\nlog4j.logger.com.google=DEBUG\nlog4j.logger.com.gerics=DEBUG\nlog4j.logger.com.google.gerrit=DEBUG\nlog4j.logger.com.google.gerrit.pgm.util.RuntimeShutdown$ShutdownCallback=INFO<\/pre>\n\n\n\n<p>Replace it with the following (uncomment normal logging and comment out the verbose tracing):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Normal logging\nlog4j.appender.TRC.Threshold=OFF\nlog4j.logger.com.google.gerrit.rpc=INFO\nlog4j.logger.com.google=INFO\nlog4j.logger.com.gerics=INFO\nlog4j.logger.com.google.gerrit=INFO\nlog4j.logger.com.google.gerrit.pgm.util.RuntimeShutdown$ShutdownCallback=INFO\n&nbsp;\n# Verbose tracing (<strong>for<\/strong> troubleshooting purposes)\n#log4j.appender.TRC.Threshold=DEBUG\n#log4j.logger.com.google.gerrit.rpc=INFO\n#log4j.logger.com.google=DEBUG\n#log4j.logger.com.gerics=DEBUG\n#log4j.logger.com.google.gerrit=DEBUG\n#log4j.logger.com.google.gerrit.pgm.util.RuntimeShutdown$ShutdownCallback=INFO<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">LDAP integration<\/h1>\n\n\n\n<p>In this example we will use a test DIT, which you can find&nbsp;<a href=\"http:\/\/wiki.nix-pro.com\/index.php?title=LDAP_ldif_file_examples\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Make changes to Gerrit configuration file:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">vim \/opt\/gerrit\/etc\/gerrit.config\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change auth type to ldap:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>[<\/strong>auth<strong>]<\/strong>\n    <strong>type<\/strong> = ldap<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configure LDAP connection settings:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>[<\/strong>ldap<strong>]<\/strong>  \n    server = ldap:<strong>\/\/<\/strong>10.10.10.1\n    username = cn=admin,dc=example,dc=com <em>#oldRootDN<\/em>\n    password = password                   <em>#olcRootPW<\/em>\n    accountBase = ou=People,dc=example,dc=com\n    referral = follow  \n    accountPattern = <strong>(<\/strong><strong>&amp;<\/strong><strong>(<\/strong>objectClass=person<strong>)<\/strong><strong>(<\/strong>uid=${username}<strong>)<\/strong><strong>)<\/strong>\n    accountFullName = cn  \n    accountEmailAddress = mail\n    groupBase = ou=Groups,dc=example,dc=com\n    groupMemberPattern = <strong>(<\/strong><strong>&amp;<\/strong><strong>(<\/strong>objectClass=groupOfUniqueNames<strong>)<\/strong><strong>(<\/strong>uniquemember=${dn}<strong>)<\/strong><strong>)<\/strong><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Used Documentation<\/h1>\n\n\n\n<p>understanding Gerrit:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><a href=\"https:\/\/nofluffjuststuff.com\/magazine\/2016\/04\/understanding_and_applying_gerrit_part_3_gerrit_submit_types_and_git_review\" target=\"_blank\" rel=\"noopener\">https:\/\/nofluffjuststuff.com\/magazine\/2016\/04\/understanding_and_applying_gerrit_part_3_gerrit_submit_types_and_git_review<\/a>\n<\/pre>\n\n\n\n<p>gerrit under tomcat:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><a href=\"http:\/\/serverfault.com\/questions\/383573\/how-do-i-install-gerrit-under-tomcat-with-ldap\/385076#385076\" target=\"_blank\" rel=\"noopener\">http:\/\/serverfault.com\/questions\/383573\/how-do-i-install-gerrit-under-tomcat-with-ldap\/385076#385076<\/a>\n<a href=\"http:\/\/pjankows.blogspot.com\/2013\/04\/howto-deploy-gerrit-and-jenkins-on-tomat.html\" target=\"_blank\" rel=\"noopener\">http:\/\/pjankows.blogspot.com\/2013\/04\/howto-deploy-gerrit-and-jenkins-on-tomat.html<\/a>\n<a href=\"http:\/\/codeandme.blogspot.com\/2012\/11\/setup-dedicated-gerrit-server.html\" target=\"_blank\" rel=\"noopener\">http:\/\/codeandme.blogspot.com\/2012\/11\/setup-dedicated-gerrit-server.html<\/a>\n<a href=\"https:\/\/kupschke.net\/2012\/06\/27\/gerrit-code-review-mit-tomactmysql-und-ldap\/\" target=\"_blank\" rel=\"noopener\">https:\/\/kupschke.net\/2012\/06\/27\/gerrit-code-review-mit-tomactmysql-und-ldap\/<\/a>\n<a href=\"https:\/\/git.help.collab.net\/entries\/24136668-log4j-settings-in-Gerrit-configuration\" target=\"_blank\" rel=\"noopener\">https:\/\/git.help.collab.net\/entries\/24136668-log4j-settings-in-Gerrit-configuration<\/a>\n<\/pre>\n\n\n\n<p>mod_jk:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><a href=\"https:\/\/tomcat.apache.org\/connectors-doc\/reference\/workers.html\" target=\"_blank\" rel=\"noopener\">https:\/\/tomcat.apache.org\/connectors-doc\/reference\/workers.html<\/a>\n<a href=\"https:\/\/wiki.eclipse.org\/Jetty\/Howto\/Configure_AJP13\" target=\"_blank\" rel=\"noopener\">https:\/\/wiki.eclipse.org\/Jetty\/Howto\/Configure_AJP13<\/a>\n<\/pre>\n\n\n\n<p>gerrit LDAP integration<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><a href=\"http:\/\/kir1.blogspot.com\/2011\/07\/install-gerrit.html\" target=\"_blank\" rel=\"noopener\">http:\/\/kir1.blogspot.com\/2011\/07\/install-gerrit.html<\/a><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Reference<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>https:\/\/blog.dachary.org\/2013\/01\/03\/configuring-gerrit-for-jenkins-and-git-2\/<\/li>\n\n\n\n<li>https:\/\/blog.dachary.org\/2013\/01\/03\/configuring-gerrit-for-jenkins-and-git-2\/<\/li>\n\n\n\n<li>https:\/\/wiki.jenkins.io\/pages\/viewpage.action?pageId=82673841<\/li>\n\n\n\n<li>https:\/\/gerrit-review.googlesource.com\/Documentation\/config-reverseproxy.html<\/li>\n\n\n\n<li>https:\/\/stackoverflow.com\/questions\/18179728\/set-up-gerrit-with-http-authentication<\/li>\n\n\n\n<li>https:\/\/gerrit-documentation.storage.googleapis.com\/Documentation\/2.15.3\/config-reverseproxy.html<\/li>\n\n\n\n<li>https:\/\/gerrit-review.googlesource.com\/Documentation\/config-reverseproxy.html<\/li>\n\n\n\n<li>https:\/\/stackoverflow.com\/questions\/18179728\/set-up-gerrit-with-http-authentication<\/li>\n\n\n\n<li>https:\/\/gerrit-review.googlesource.com\/Documentation\/config-sso.html#_http_basic_digest_authentication<\/li>\n\n\n\n<li>https:\/\/wiki.nix-pro.com\/view\/Gerrit<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>MySQL database CREATE USER &#8216;gerrit&#8217;@&#8217;localhost&#8217; IDENTIFIED BY &#8216;gerrit&#8217;; CREATE DATABASE gerritdb; ALTER DATABASE gerritdb charset=latin1; GRANT ALL ON gerritdb.* TO &#8216;gerrit&#8217;@&#8217;localhost&#8217;; FLUSH PRIVILEGES; exit; Apache Configuration sudo a2enmod proxy sudo a2enmod proxy_http sudo service apache2 restart vim \/etc\/apache2\/sites-available\/001_gerrit.conf &nbsp; NameVirtualHost *:81 &nbsp; &lt;VirtualHost *:81&gt; &nbsp; ProxyRequests Off ProxyVia Off ProxyPreserveHost On &nbsp; &lt;Proxy *&gt; Order&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-33634","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/33634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=33634"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/33634\/revisions"}],"predecessor-version":[{"id":33637,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/33634\/revisions\/33637"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=33634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=33634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=33634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}