Compile and Install Ubuntu

From GRASS-Wiki
Revision as of 14:48, 16 June 2013 by NikosA (talk | contribs) (GRASS GIS: added "/usr/include/libavutil" in configuration for G7)

Jump to: navigation, search

Very Important notes

  • Pre-compiled packages and backports are available from UbuntuGIS via their ppa.launchpad repositories. This is by far the simplest and fastest solution. Please prefer it over the manual way described below.
  • To build an updated version of GRASS or support libraries unmodified, in most cases it will be easier to use an automated build tool such as pbuilder, debuild or cowbuilder. See the debian/ directory in the source code for details.
  • Some things change fast and therefore it is expected that the instructions might fail. Please inform the grass-user list in case something just does not work (like for example non-available dependecies/packages from the repositories) or update this page respectively.
  • GRASS version 6.5 exists for development purposes, testing features to-be backported to version 6.4. As such it may include unstable code and is not intended for production and end-users.
  • An alternate method is to use the DebianGIS packaging scripts, which enable a lot of this to happen automatically (see debian/README.debian in the GRASS Subversion source code repository). Specifically, this command will get you 90% of the way there:
    sudo apt-get build-dep grass
(you'll need to have the deb-src lines active in your /etc/apt/sources.list file)


  • Usually, the installation of compiled code is done by using the make tool. Alternatively, this can be done by using the checkinstall tool (i.e., sudo checkinstall instead of sudo make install) which eases off removal of packages. If checkinstall fails to deliver, please note some related bugs: 78455 and 599163. Useful information on using checkinstall: Compiling things on Ubuntu the Easy Way.
  • In multi-core processors, the compilation performance can be boosted by using -j switches (e.g. make -j2 or make -j3 or even make -j4) which specify the number of jobs (commands) to run simultaneously.


Current stable Ubuntu version

The following dependencies concern Ubuntu Quantal Quetzal (12.10)

  • First, update the system from the repositories
    sudo apt-get update && sudo apt-get upgrade
  • then, install SQLite, SVN and dependencies for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN; the following action will also install various dependencies (listed in the command line as The following extra packages will be installed:...):
    # this is a single command, please copy-paste it entirely into the terminal:
    sudo apt-get install \
      build-essential \
      flex make bison gcc libgcc1 g++ cmake ccache \
      python python-dev python-qt4 python-qt4-dev \
      python-opengl \
      python-wxversion python-wxtools python-wxgtk2.8 \
      python-dateutil libgsl0-dev python-numpy \
      wx2.8-headers wx-common libwxgtk2.8-dev libwxgtk2.8-dbg \
      libwxbase2.8-dev  libwxbase2.8-dbg \
      libncurses5-dev \
      zlib1g-dev gettext \
      libtiff-dev libpnglite-dev \
      tcl8.5-dev tk8.5-dev \
      libcairo2 libcairo2-dev \
      sqlite3 libsqlite3-dev \
      libpq-dev \
      libreadline6 libreadline6-dev libfreetype6-dev \
      txt2tags \
      libfftw3-3 libfftw3-dev \
      libqt4-core libqt4-dbg libqt4-dev libqt4-gui libqt4-sql libqt4-qt3support \
      lsb-qt4 qt4-designer qt4-dev-tools qt4-doc qt4-qtconfig \
      libapt-pkg-perl resolvconf \
      libjasper-dev \
      ruby \
      subversion \
      ffmpeg ffmpeg2theora \
      libffmpegthumbnailer-dev \
      libavcodec-dev \
      libxmu-dev \
      libavformat-dev libswscale-dev \
      checkinstall \
      libglu1-mesa-dev libxmu-dev
  • for mysql support, libmysqlclient-dev is required
    sudo apt-get install libmysqlclient-dev
  • for netcdf support, netcdf-bin and libnetcdf-dev is required
    sudo apt-get install netcdf-bin libnetcdf-dev
  • create a directory as a simple user where all source code is going to be stored -- in this example, a directory named src under /usr/local is created
    sudo mkdir /usr/local/src
  • take over directories ownerships (replace below the terms userid and groupid with a real userid):
    sudo chown userid:groupid /usr/local/src
  • similarly, grant rwx (read-write-execute) permissions for our userid and groupid onto the src directory:
    sudo chmod ug+rwx /usr/local/src

Earlier Ubuntu versions

For earlier Ubuntu versions, watch out for dependency differences! Modify the dependency list given above as instructed below.

  • for Ubuntu Maverick Meerkat (10.10) or later, change the following dependencies:
    • libpngwriter-dev --> libpngwriter0-dev
    • libcairo-dev --> libcairo2-dev
    • fftw3 --> libfftw3-3
    • fftw3-dev --> libfftw3-dev

Using pre-compiled dev Packages for PROJ.4, GEOS and GDAL


Install the dev package (possibly without support for datumgrid):

sudo apt-get install libproj-dev
  • In the call to ./configure for GRASS, replace --with-proj-share=/usr/local/share/proj/ by --with-proj-share=/usr/share/proj/


Install the dev package:

sudo apt-get install libgeos-dev
  • In the call to ./configure for GRASS, replace --with-geos=/usr/local/bin/geos-config by --with-geos=/usr/bin/geos-config


Install the dev package (possibly without support for datumgrid):

sudo apt-get install libgdal-dev
  • Install also the required extra packages (note the message: The following extra packages will be installed:)
  • Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following:
    sudo apt-get install <package>=<required.version>


Jump to sub-section GRASS-GIS below

Compile from source


  • within the directory /usr/local/src (create it if it does not exist) checkout proj from its Subversion repository:
    svn co
    mv /usr/local/src/proj/nad
    cd /usr/local/src/proj/nad
  • decompress it
  • go back to the proj directory
    cd /usr/local/src/proj
  • if required, clean previous configuration & compilation
    make distclean
  • simple configure, compile and install
    ./configure  &&  make  &&  sudo make install
    ./configure && make -j2  &&  sudo checkinstall
  • ensure that /usr/local/lib is added to /etc/ and afterwards run
    sudo ldconfig
  • finally, go back to the parent directory simply by instructing
    cd ..


  • move to the "source-code" directory and decompress
    cd /usr/local/src/
    bunzip2 geos-3.3.5.tar.bz2
    tar xvf  geos-3.3.5.tar
  • if required, clean previous configuration & compilation
    make distclean
  • move to geos directory
    cd geos-3.3.5
  • simple configure, compile and install
    ./configure  &&  make  &&  sudo make install
    ./configure  && make -j2  &&  sudo checkinstall
  • do not forget to execute
    sudo ldconfig


Note, GDAL must be compiled without GRASS support

  • download the current stable version
    svn checkout gdal_stable
  • enter in the gdal_stable directory
    cd /usr/local/src/gdal_stable
  • optionally, update the source code
    svn up
  • if required, clean previous configurations/compilations
    make distclean
  • a simple configuration without any parameters will detect and support various installed libraries
  • skip to the compile and install step or check the following customised configuration example
    CFLAGS="-g -Wall" LDFLAGS="-s" ./configure \
    --with-png=internal \
    --with-libtiff=internal \
    --with-geotiff=internal \
    --with-jpeg=internal \
    --with-gif=internal \
    --with-ecw=no \
    --with-expat=yes \
    --with-sqlite3=yes \
    --with-geos=yes \
    --with-python \
    --with-libz=internal \
    --with-netcdf \
    --with-threads=yes \
    --without-grass  \
    --without-ogdi \
    --with-pg=/usr/bin/pg_config \
  • compile, install & ldconfig
    make -j2  &&  sudo make install  &&  sudo ldconfig
    make -j2  &&  sudo checkinstall  &&  sudo ldconfig


Getting GRASS' source code

  • get current state of the 6.4.x release branch version (stable)
    svn co grass64_release

To download under development versions use

  • for GRASS 6.5 (Note: GRASS version 6.5 is not intended for end-users! It exists for development purposes which should rather take place for GRASS 7.)
    svn checkout grass6_devel
  • for GRASS 7
    svn checkout grass7_trunk
  • for subsequent updates execute
    svn up

Configure, Compile and Install

  • if required, clean previous configuration & compilation (not needed the first time)
    make distclean
  • example configuration (which can/should be adjusted according to specific needs):
    ./configure \
    --enable-largefile=yes \
    --with-nls \
    --with-cxx \
    --with-proj-share=/usr/local/share/proj/ \
    --with-geos=/usr/local/bin/geos-config \
    --with-python=yes \
    --with-wxwidgets \
    --with-cairo \
    --with-opengl-libs=/usr/include/GL \
    --with-motif \
    --with-ffmpeg=yes --with-ffmpeg-includes="/usr/include/libavcodec /usr/include/libavformat /usr/include/libswscale /usr/include/libavutil" \
    --with-freetype=yes --with-freetype-includes="/usr/include/freetype2/" \
    --with-postgres=yes \
    --with-postgresql=yes --with-postgres-includes="/usr/include/postgresql" \
    --with-sqlite=yes \
    --with-mysql=yes --with-mysql-includes="/usr/include/mysql" \
    Note, the above configuration uses the Proj4 and GEOS packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the "defaults", i.e.
    --with-proj-share=/usr/share/proj \
    --with-geos=/usr/bin/geos-config \
  • compile & install
    make -j2  &&  sudo make install  &&  sudo ldconfig
    make -j2  &&  sudo checkinstall  &&  sudo ldconfig


  • create /etc/ or add in /etc/ the GRASS library path, i.e. /usr/local/src/grass64_release/lib
  • optionally, clean previous configurations/compilations
     make distclean
  • configure -- point to GRASS installation/binaries
     ./configure \
     --prefix=/usr/local \
     --with-gdal=/usr/local/bin/gdal-config \
     --with-grass=/geo/osgeo/src/grass64_release/dist.x86_64-unknown-linux-gnu/ \
     --with-autoload="/usr/local/lib/gdalplugins/" \
     --with-ld-shared="g++ -shared"
    • for GRASS 6.5, replace the respective line above, depending on where the source code in question is stored, with something like--with-grass=/usr/local/grass-6.5.svn/
    • for GRASS 7, replace with --with-grass=/usr/local/grass_trunk/
  • compile & install using checkinstall
     make -j2  &&  sudo checkinstall

Post compilation/installation control

  • in case of errors in future compilation attempts, remember to remove program binaries and files created with the "configuration" from previous compilations with
make distclean
  • another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.

Removal of GRASS

To get rid of a GRASS binaries installation, delete

  • /usr/local/grass-6.4.0svn (directory, binaries location)
  • /usr/local/bin/grass64 (file)
  • /usr/local/bin/gem64 (file)
  • /home/username/.grassrc6 (file)

If wanted, delete also the complete source code:

  • /usr/local/src/grass_64svn (directory, source code location)

To remove grass (or any other package) which was installed by checkinstall, use dpkg, e.g.
sudo dpkg -r grass64 # package name defined at installation is important

Packaging of GRASS

  • See the debian/README.debian file in the GRASS source code for directions on rolling your own packages.

For details about the auto-nightly-builds and after-market supplied packages from UbuntuGIS, please refer to the Ubuntu Packaging wiki page.

See also