Install and Setup Koha to use Git on a Development Server

From Koha Wiki

Jump to: navigation, search
Koha > Technical > Development
Koha > Technical > Development > Git



Installed a minimal debian system, sudo, vim, xorg, xterm, wdm, fluxbox, idesk, and iceweasel. (idesk is used for desktop icons in the fluxbox window manager.)

Add Koha and Zebra Sources

Prevent annoying password prompts:

 sudo ls

Create the file /etc/apt/sources.list.d/koha.list:

 echo deb unstable main | sudo tee /etc/apt/sources.list.d/koha.list 

Create the file /etc/apt/sources.list.d/zebra.list:

 echo deb jessie main | sudo tee /etc/apt/sources.list.d/zebra.list

Add the Keys:

 wget -O- | sudo apt-key add - 
 wget -O- | sudo apt-key add - 

Update the Sources:

 sudo apt-get update

Install Koha

Make sure you have fully updated your machine:

 sudo apt-get update 
 sudo apt-get upgrade 

Install koha-common:

 sudo apt-get install koha-common 

Setup Koha

Enable the Apache Rewrite Module:

 sudo a2enmod rewrite 

Create a koha instance and Create the koha database:

 sudo koha-create --create-db instancename 

Create a koha instance and use a remote server:

 sudo koha-create --request-db mylibrary 

(See Appendix A for more details.)

Make sure the koha site is enabled:

 sudo a2ensite koha 

Edit the Apache2 ports.conf file to listen on port 8080:

 sudo vi /etc/apache2/ports.conf 

Insert the following line after the NameVirtualHost line for port 80:

 NameVirtualHost *:8080 

Insert the following line after the Listen line for port 80:

 Listen 8080 

Restart Apache2:

 sudo /etc/init.d/apache2 restart 

Find the passwords for koha:

 sudo less /etc/koha/koha/sites/instancename/koha-conf.xml 

(You need the user and password near the end of the file to login to the setup page.)

Start fluxbox:


Open the Iceweasel web browser:

 Right-Click->Applications->Network->Web Browsing->Iceweasel 

Start Koha Setup:


Follow the onscreen instructions.

Install and Setup Git

Git is typically used for Development, Testing Bugs, Fixing Bugs, and Signing-Off on bug patches. (Git is not what you want for a typical Live/Production Server.)

Install Git:

 sudo apt-get install git-core 

Set your name and mail address in git:

 git config --global "Your NAME"
 git config --global "" 

Set up a SMTP server using gmail:

 git config --global sendemail.smtpserver
 git config --global sendemail.smtpserverport 587
 git config --global sendemail.smtpencryption tls
 git config --global sendemail.smtpuser
 git config --global sendemail.smtppass your_password 

Automatically fix whitespace errors in patches:

 git config --global core.whitespace trailing-space, space-before-tab
 git config --global apply.whitespace.fix 

Set Syntax Highlighting/Color UI:

 git config --global color.ui auto 

For further Git Configuration help: 

Clone the public repository:

 git clone git:// kohaclone

(See Appendix B for HTTP instructions, if you are unable to connect to port 9418 on

Create a branch to work on:

 cd kohaclone
 git checkout -b mywork origin/master

(You want to apply patches to the origin/master branch for testing.)

Update multiple files to point to the kohaclone

tl:dr This step can be done in one go using the koha-gitify script. The script is kept up to date and is likely to be more correct than the instructions in this section.

In the example below I assume you have put your Git Clone Folder of Koha in your Home Directory. Replace USER/GitCloneFolder with your username and the name of your git clone folder.

In /etc/koha/apache-shared.conf:

 replace SetEnv PERL5LIB "/usr/share/koha/lib" with SetEnv PERL5LIB "/home/USER/GitCloneFolder" 

In /etc/koha/apache-shared-opac.conf:

 replace DocumentRoot /usr/share/koha/opac/htdocs with DocumentRoot /home/USER/GitCloneFolder/koha-tmpl
 replace ScriptAlias /cgi-bin/koha/ "/usr/share/koha/opac/cgi-bin/opac/" with ScriptAlias /cgi-bin/koha/ "/home/USER/GitCloneFolder/opac/" 
 replace ScriptAlias /index.html "/usr/share/koha/opac/cgi-bin/opac/" with ScriptAlias /index.html "/home/USER/GitCloneFolder/opac/"
 replace ScriptAlias /search "/usr/share/koha/opac/cgi-bin/opac/" with ScriptAlias /search "/home/USER/GitCloneFolder/opac/"
 replace ScriptAlias / "/usr/share/koha/opac/cgi-bin/opac/" with ScriptAlias / "/home/USER/GitCloneFolder/opac/" 

In /etc/koha/apache-shared-intranet.conf:

 replace DocumentRoot /usr/share/koha/intranet/htdocs with DocumentRoot /home/USER/GitCloneFolder/koha-tmpl
 replace ScriptAlias /cgi-bin/koha/ "/usr/share/koha/intranet/cgi-bin/" with ScriptAlias /cgi-bin/koha/ "/home/USER/GitCloneFolder/"
 replace ScriptAlias /index.html "/usr/share/koha/intranet/cgi-bin/" with ScriptAlias /index.html "/home/USER/GitCloneFolder/"
 replace ScriptAlias /search "/usr/share/koha/intranet/cgi-bin/" with ScriptAlias /search "/home/USER/GitCloneFolder/catalogue/" 

In /etc/koha/sites/instancename/koha-conf.xml:

 replace <intranetdir>/usr/share/koha/intranet/cgi-bin</intranetdir> with <intranetdir>/home/USER/GitCloneFolder/</intranetdir>
 replace <opacdir>/usr/share/koha/opac/cgi-bin/opac</opacdir> with <opacdir>/home/USER/GitCloneFolder/opac/</opacdir>
 replace <opachtdocs>/usr/share/koha/opac/htdocs/opac-tmpl</opachtdocs> with <opachtdocs>/home/USER/GitCloneFolder/koha-tmpl/opac-tmpl/</opachtdocs>
 replace <intrahtdocs>/usr/share/koha/intranet/htdocs/intranet-tmpl</intrahtdocs> with <intrahtdocs>/home/USER/GitCloneFolder/koha-tmpl/intranet-tmpl/</intrahtdocs>
 replace <includes>/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/includes/</includes> with <includes>/home/USER/GitCloneFolder/koha-tmpl/</includes> 

Search for Missing Dependencies:

 cd /home/USER/GitCloneFolder
 ./ -m 

Mine displayed 2 missing dependencies:


(Note that it shows which Modules are Required.) (Crypt::Eksblowfish::Bcrypt is a required module.)

Install Missing Dependencies:

 sudo install libcrypt-eksblowfish-perl 

Restart Apache:

 sudo /etc/init.d/apache2 restart 

(It's a good idea to restart Apache just to be sure everything is working well.)

Navigate to localhost:8080: It may require you to upgrade the database and run another web installer, but shouldn't go through the whole web install again. Login with the Username/Password for the superlibrarian account you have created. Otherwise login with the user/pass specified in the /etc/koha/sites/instancename/koha-conf.xml. Then Create a superlibrarian account, log off, and login with the new superlibrarian account.

Working with git

Create a bugzilla report for the bug you are fixing, if a bug has not already been reported: 

Now you do some work. Such as editing a template file that is messed up or editing a file to fix a bug. Commit the file once you have finished making changes to the file.

Commit the file:

 git commit file

(Use "git commit -a" for a bunch of files.) You'll be asked to enter a comment for your patch. Start the first line with the bugzilla number.

"Bug NNNN blabla bla full description of what my patch does continued contnued ... "

Add [ENH] just after the patch number, if your patch is an Enhancement. (Instead of a bug fix.)

Show how your commit fits with all the other commits in this branch/clone:

 git log 

Update Git

Save your changes, Update git, Restore your changes:

 git stash save
 git fetch
 git rebase origin/master
 git stash apply 

Update git and wipeout your changes:

 git fetch
 git rebase origin/master 

Share git patch with the rest of the world

Create a patch and send it to the QA Manager:

 git format-patch origin
 git send-email 0001-filename 

Deleting Branches in git

Delete a branch:

 git branch -D branchname 

Delete multiple branches at once:

 git branch | grep "^ bug_" | xargs git branch -D 

Testing a patch using git and Signing-Off

Download the patch:

 wget -O <name_of_patch_file><attachment_number>

(Or just go to the bugzilla page and download it using a web browser.)

Apply the Patch:

 git checkout -b qa_bug_xxxx
 git am -3 -i -u <name_of_patch_file>

Test it: Test the functionality of the patch. Does it do what is says it does? Does it do something it shouldn't?

Finish testing by running the following automated tests:

 prove t/ 
 prove t/db_dependent 
 prove xt/ 
 prove xt/author

(For all of the tests is xt/author to complete, you need the following perl modules:)

(Test::Pod, Test::Pod::Spelling, and Text::CSV::Unicode.)


Create a new signed-off patch, if the patch you tested is ok:

 git format-patch -s -l origin/master 

Attach the Signed-Off patch to the bugzilla post, and mark the bug as Signed-Off.

Appendix A

Create koha instance and use a remote server:

Most of the instructions assume a local MySQL database server. If you intend to use an external or separate database server, it is important that you don't run koha-create --create-db mylibrary.

Instead, use the following steps:

 koha-create --request-db mylibrary 

Example output: root@web:~# koha-create --request-db mylibrary

See mylibrary-db-request.txt for database creation request.

Please forward it to the right person, and then run /usr/sbin/koha-create --populate-db mylibrary

Thanks. Restarting web server: apache2 ... waiting .

Show database request:

 cat mylibrary-db-request.txt 

Create a MySQL database and user on mysql as follows:

 database name: koha_mylibrary
 database user: koha_mylibrary 
      password: somerandomstring

Create MySQL database and set privileges. Use the database name, user name, and password specified in mylibrary-db-request.txt:

 ssh root@db 
 mysql -u root -p 

Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 20353 Server version: 5.1.49-3 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 mysql> create database koha_mylibrary; Query OK, 1 row affected (0.00 sec) 
 mysql> grant all privileges on koha_mylibrary.* to 'koha_mylibrary'@'' identified by 'somerandomstring'; Query OK, 0 rows affected (0.17 sec) 
 mysql> flush privileges; Query OK, 0 rows affected (0.12 sec) 
 mysql> exit Bye root@db:~# 

Populate the database:

 koha-create --populate-db mylibrary 

Koha instance is empty, no staff user created.

Enabling site mylibrary.

Run '/etc/init.d/apache2 reload' to activate new configuration!

Restarting web server: apache2 ... waiting .

Starting Zebra server for mylibrary root@web:~#

Appendix B

Cloning over HTTP:

 git clone kohaclone
Personal tools