Build QGIS master with Oracle provider yourself on CentOS7
So you are in a corporate environment using RED-HAT or CentOS, and need QGIS or QGIS-server.
Marcus wrote how you can ‘easily’ install QGIS now on Fedora21 and Centos7
But “I want to run latest development version” you say? Well you can always compile from source :-)
For Debian if you follow the instructions from INSTALL.txt it is ‘easy’.
BUT something is missing? You say, your company has only Oracle dba’s so you are only allowed to work with Oracle instead of your beloved Postgis spatial database...
You need QGIS WITH the native Oracle provider (using OCI). So you see THAT icon:
Below you can find the steps to build QGIS on CentOS7 from source.
The system I have here is CentOS Linux release 7.1.1503 (Core)
IF on a fresh system without X: after the Core install (no X server) install latest Gnome Desktop:
yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
Else: update your system:
Now make sure you enable the Extra Packages Enterprise Linux (EPEL) repository
# enable epel as root cd /tmp wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm ls *.rpm yum install epel-release-7-5.noarch.rpm yum repolist
Thanks to Matthias and Volker there is a spec-file in Github, these are helpfull to determine all packages needed for our build system:
# from https://github.com/qgis/QGIS/blob/master/rpm/qgis.spec.template # build tools yum --enablerepo="epel" install yum --enablerepo="epel" install gcc gcc-c++ cmake desktop-file-utils expat-devel fcgi-devel git flex bison gdal-devel geos-devel grass-devel gsl-devel # rest (most from epel) yum install libspatialite-devel postgresql-devel proj-devel PyQt4-devel PyQwt-devel python2-devel qextserialport-devel, qscintilla-devel qscintilla-python-devel qt4-devel qt-mobility-devel qt4-webkit-devel qwt-devel qca2-devel qca-ossl # mmm #No package PyQwt-devel available. #No package qextserialport-devel, available. yum install qt-mobility-devel qt4-webkit-devel qwt-devel qextserialport-devel qwtpolar-devel sip-devel spatialindex-devel sqlite-devel xorg-x11-server-Xvfb gpsbabel
My way to compile and run different QGIS version on Debian, is to compile in a ~/dev dir and install in ~/app dir. So:
mkdir -p ~/apps/qgis/master mkdir -p ~/dev/ cd ~/dev # clone the sources from Github (will be in ~/dev/QGIS is this way) git clone https://github.com/qgis/QGIS.git # create a build dir mkdir ~/dev/QGIS/build cd ~/dev/QGIS/build
Normally I use the curses based ‘gui’ ccmake to do the configure. We instruct it with the following values to ‘prefill’ those fields.
Note the .. on the end: we are running this from within the build ~/dev/QGIS/build dir and point to one dir lower:
ccmake -DWITH_QWTPOLAR=OFF -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=~/apps/qgis/master ..
In the ccmake gui use the following keystrokes to configure and generate:
'c' to start configure: scripts will try to find dependencies, and ommisions will be shown 'e' if you are in the warning/error screen go back 'g' to generate the actual files
Most of the times you will need to do several ‘c and fix’ jumps before you can hit ‘g’.
make # or even faster (if you have some cores available ...): make -j8
This will take some time depending on your system, but if all went well you will have an output directory with a bin/qgis in it.
Now to install it in ~/apps/qgis/master do:
Last part of this excercise is to create a little script which points to your freshly baked QGIS and some paths.
Put the following in a file named /usr/local/bin/qgis (as root):
# create a file /usr/local/bin/qgis to point to your install (YOU will be YOU :-) ) export LD_LIBRARY_PATH=/home/YOU/apps/qgis/master/lib/ # passing ALL parameters to qgis bin # eg to be able to call a certain translation # qgis --lang nl /home/YOU/apps/qgis/master/bin/qgis "$@"
If you start QGIS now via qgis you will get some python errors, because some standard Python libs are missing. Install them via:
# now to run you'll need some python libs installed: yum install qscintilla-python # proably also: yum install PyQt4-webkit # gdal python bindings (will also get numpy and nose) yum install gdal-python
That’s all to have a running QGIS master on Centos7!
But.. but... you promissed Oracle providers...
OK, first you need to register or go to this link and try to download:
You can only download as a registered user, it is free (but maybe your get a phonecall from Oracle....)
From above download the following zips (at this time):
mkdir -p ~/dev/oracle mv instantclient-basiclite-linux.x64-220.127.116.11.0.zip ~/dev/oracle mv instantclient-sdk-linux.x64-18.104.22.168.0.zip ~/dev/oracle
Note that you cannot wget them as you need to be authenticated via your browser. So download via your browser and:
# unzip both in ~/dev/oracle so you will have unzip instantclient-basiclite-linux.x64-22.214.171.124.0.zip unzip instantclient-sdk-linux.x64-126.96.36.199.0.zip # so you will have all Oracle stuff in: /home/YOU/dev/oracle/instantclient_12_1
Now point to the libclntsh.so with:
cd ~/dev/QGIS/build export LD_LIBRARY_PATH=/home/YOU/dev/oracle/instantclient_12_1/libclntsh.so.12.1
And do a new ccmake pointing to the include files and oracle library:
ccmake -DWITH_QWTPOLAR=OFF -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=~/apps/qgis/master -DWITH_ORACLE=TRUE -DOCI_INCLUDE_DIR=/home/YOU/dev/oracle/instantclient_12_1/sdk/include -DOCI_LIBRARY=/home/YOU/dev/oracle/instantclient_12_1/libclntsh.so.12.1 ..
After this, I had to restart the build several times because it stopped with an unclear error, not sure what the problem was:
Because the oracle provider wants to copy some drivers to qt system libs, do:
sudo make install # OR do this by hand, you need the oracle lib in the right dir so do: sudo cp /home/YOU/dev/QGIS/build/output/lib/qgis/plugins/sqldrivers/libqsqlocispatial.so /usr/lib64/qt4/plugins/sqldrivers/libqsqlocispatial.so
Then make sure that your ‘start script’ at /usr/local/bin/qgis contains the pointers to the Oracle libs too:
export LD_LIBRARY_PATH=/home/YOU/apps/qgis/master/lib/:/home/YOU/dev/oracle/instantclient_12_1 # passing ALL parameters to qgis bin # eg to be able to call a certain translation # qgis --lang nl /home/YOU/apps/qgis/master/bin/qgis "$@"
And GO and connect to that Oracle database.
BUT please note: Postgis is nicer ;-)