Compile and Install Ubuntu: Difference between revisions

From GRASS-Wiki
Jump to navigation Jump to search
mNo edit summary
(delete pdal from *Install further compilation dependencies* - it is already in geospatial deps)
 
(267 intermediate revisions by 19 users not shown)
Line 1: Line 1:
{{MoveToTrac}}
<div class="boilerplate metadata" id="attention" style="-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;">
This page shall help to install the latest GRASS on Ubuntu based systems.
<p style="font-size: 150%; text-align: left;"><span style="color:#35824B">'''Attention'''</span>&nbsp;</p><span style="color:#333333">'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''</span>
</div>


= Current Release Branch =
== Quick instructions ==


The manual is based on Ubuntu 9.04.
These instructions should work fine on Ubuntu distributions:


=== Install geospatial dependencies ===
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools <br />
(note: you need Python 3)
<source lang="bash">
# be sure to have an updated system
sudo apt update && sudo apt upgrade -y
# install PROJ
sudo apt install libproj-dev proj-data proj-bin unzip -y
</source>
<source lang="bash">
# optionally, install (selected) datum grid files
sudo apt-get install proj-data
# install GEOS
sudo apt install libgeos-dev -y
# install GDAL
sudo apt install libgdal-dev python3-gdal gdal-bin -y
# install PDAL (optional)
sudo apt install libpdal-dev pdal -y
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
</source>
Install compiler stuff and further dependencies.
Note: this is a single command, please copy-paste it entirely into the terminal:
=== Install further compilation dependencies (Ubuntu 22.04) ===
For Ubuntu 22.04:
<source lang="bash">
sudo apt-get install \
  build-essential \
  flex make bison gcc libgcc1 g++ ccache \
  python3 python3-dev python3-pip \
  python3-opengl python3-wxgtk4.0 \
  python3-dateutil libgsl-dev python3-numpy \
  wx3.0-headers wx-common libwxgtk3.0-gtk3-dev \
  libwxbase3.0-dev  \
  libncurses5-dev \
  libbz2-dev \
  zlib1g-dev gettext \
  libtiff5-dev libpnglite-dev \
  libcairo2 libcairo2-dev \
  sqlite3 libsqlite3-dev \
  libpq-dev libreadline-dev \
  libfreetype6-dev libfftw3-3 \
  libfftw3-dev libboost-thread-dev \
  libboost-program-options-dev git \
  libzstd-dev checkinstall \
  libglu1-mesa-dev libxmu-dev \
  ghostscript wget -y
</source>
For NVIZ on Ubuntu:
<source lang="bash">
sudo apt-get install \
  ffmpeg libavutil-dev ffmpeg2theora \
  libffmpegthumbnailer-dev \
  libavcodec-dev \
  libxmu-dev \
  libavformat-dev libswscale-dev -y
</source>
Update wxpython:
<source lang="bash">
# be sure to pick the correct Ubuntu version
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython
</source>
=== Source code download ===
Now we have all "ingredients" readily installed on our system.
'''Source code download''':
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):
'''a) Download of the weekly source code snapshot (not recommended):'''
<source lang="bash">
# download latest GRASS GIS 8.x stable release source code:
mkdir $HOME/src/
cd  $HOME/src/
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz
# Unpack source code package and remove tarball archive:
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz
rm -f grass-8.4.git_src_snapshot_latest.tar.gz
# rename source code directory (yes, with the questionmarks!)
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest
cd grass-8.4.latest/
</source>
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:
<source lang="bash">
sudo apt-get install git
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git
cd grass-8.4.latest.git/
git checkout releasebranch_8_4
</source>
=== Compilation ===
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:
<source lang="bash">
# "configure" source code for local machine (checks for CPU type etc):
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'
#MYCXXFLAGS=''
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'
LDFLAGS="$MYLDFLAGS" CFLAGS="$MYCFLAGS" CXXFLAGS="$MYCXXFLAGS" ./configure \
  --with-cxx \
  --enable-largefile \
  --with-proj --with-proj-share=/usr/share/proj \
  --with-gdal=/usr/bin/gdal-config \
  --with-python \
  --with-geos \
  --with-sqlite \
  --with-nls \
  --with-zstd \
  --with-pdal \
  --with-cairo --with-cairo-ldflags=-lfontconfig \
  --with-freetype=yes --with-freetype-includes="/usr/include/freetype2/" \
  --with-wxwidgets \
  --with-fftw \
  --with-openmp \
  --with-opengl-libs=/usr/include/GL \
  --with-postgres=yes --with-postgres-includes="/usr/include/postgresql" \
  --without-netcdf \
  --without-mysql \
  --without-odbc \
  --without-ffmpeg
</source>
Now compile the source code (this will take some time as it generates binary code from the source code):
<source lang="bash">
# note: the more CPUs you have, the higher the -j number may be set to
# here: build using 4 CPU cores
make -j4
</source>
=== Installation ===
Install resulting GRASS GIS binaries into /usr/local/:
<source lang="bash">
sudo make install
</source>
Start GRASS GIS in the terminal:
<source lang="bash">
grass
</source>
'''Done & enjoy!'''
== Hints ==
* Usually, the installation of compiled code is done by using the <source lang="bash" enclose="none">make</source> tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., <source lang="bash" enclose="none">sudo checkinstall</source>  instead of  <source lang="bash" enclose="none">sudo make install</source>) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. <source lang="bash" enclose="none">make -j2</source>  or  <source lang="bash" enclose="none">make -j3</source>  or even <source lang="bash" enclose="none">make -j4</source>) which specify the number of jobs (commands) to run simultaneously.
== Pre-compiled packages and backports ==
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''
Version overview:
* noble 8.3
* jammy (22.04): 8.3
* focal (20.04 LTS): 8.2
* bionic (18.04 LTS): 7.8
* xenial (16.04 LTS): 7.6
* trusty (14.04 LTS): 7.4
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':
<source lang=bash>
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo add-apt-repository ppa:grass/grass-devel
</source>
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':
<source lang=bash>
sudo add-apt-repository ppa:ubuntugis/ppa
sudo add-apt-repository ppa:grass/grass-stable
sudo apt-get update
sudo apt-get install grass
</source>


== Dependencies ==
== Dependencies ==


'''Preparation'''
=== Current stable Ubuntu version ===
sudo apt-get update && sudo apt-get upgrade
First, update the system from the repositories<source lang="bash">
sudo apt-get update && sudo apt-get upgrade
</source>
 
Then, install ''SQLite'', ''SVN'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as <source lang="bash" enclose="none">The following extra packages will be installed:</source>...):<br/>
 
The following dependencies concern [http://releases.ubuntu.com/xenial/ Ubuntu Xenial Xerus (16.04 LTS)]
 
<source lang="bash">
# 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-opengl \
  python-wxversion python-wxtools python-wxgtk3.0 \
  python-dateutil libgsl-dev python-numpy \
  wx3.0-headers wx-common libwxgtk3.0-dev \
  libwxbase3.0-dev  \
  libncurses5-dev \
  zlib1g-dev gettext \
  libtiff5-dev libpnglite-dev \
  libcairo2 libcairo2-dev \
  sqlite3 libsqlite3-dev \
  libpq-dev \
  libreadline6 libreadline6-dev libfreetype6-dev \
  libfftw3-3 libfftw3-dev \
  libboost-thread-dev libboost-program-options-dev \
  resolvconf \
  libjasper-dev \
  git \
  libav-tools libavutil-dev ffmpeg2theora \
  libffmpegthumbnailer-dev \
  libavcodec-dev \
  libxmu-dev \
  libavformat-dev libswscale-dev \
  checkinstall \
  libglu1-mesa-dev libxmu-dev \
  ghostscript
</source>
 
The following dependencies concern [http://releases.ubuntu.com/trusty/ Ubuntu Trusty Tahr (14.04 LTS)]


* install dependencies for compiling (in general) and dependencies for GRASS: PROJ, GDAL/OGR
<source lang="bash">
sudo apt-get install grass build-essential flex bison libncurses5-dev zlib1g-dev libjpeg62-dev libgdal1-dev libtiff4-dev libgcc1 tcl8.4-dev tk8.4-dev fftw3-dev libfreetype6-dev libavcodec-dev libxmu-dev gdal-bin libgdal1-dev libreadline5 libreadline5-dev make python-dev python-wxversion swig libavutil-dev libavutil49
# this is a single command, please copy-paste it entirely into the terminal:
sudo apt-get build-dep grass
sudo apt-get install \
  build-essential \
  flex make bison gcc libgcc1 g++ \
  python python-dev \
  python-dateutil libgsl0-dev python-numpy \
  zlib1g-dev gettext \
  libtiff-dev libpnglite-dev \
  sqlite3 libsqlite3-dev \
  libboost-thread-dev libboost-program-options-dev \
  resolvconf \
  git \
  checkinstall \
  cmake ccache \
  python-opengl \
  python-wxversion python-wxtools python-wxgtk2.8 \
  wx2.8-headers wx-common libwxgtk2.8-dev libwxgtk2.8-dbg \
  libwxbase2.8-dev libwxbase2.8-dbg \
  libncurses5-dev \
  libcairo2 libcairo2-dev \
  libpq-dev \
  libreadline6 libreadline6-dev libfreetype6-dev \
  libfftw3-3 libfftw3-dev \
  libjasper-dev \
  libav-tools libavutil-dev ffmpeg2theora \
  libffmpegthumbnailer-dev \
  libavcodec-dev \
  libxmu-dev \
  libavformat-dev libswscale-dev \
  libglu1-mesa-dev libxmu-dev \
  ghostscript</source>


* install SQLite
sudo apt-get install sqlite3 libsqlite3-dev


* install SVN
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).
sudo apt-get install subversion


* create a directory as a simple user where source code(s) are going to be stored (in our example we use a directory called '''src''' under '''/usr/local''')
* for mysql support, <source lang="bash" enclose="none">libmysqlclient-dev</source> is required
<source lang="bash">
sudo apt-get install libmysqlclient-dev
</source>


  sudo mkdir /usr/local/src
* for netcdf support, <source lang="bash" enclose="none">netcdf-bin</source> and <source lang="bash" enclose="none">libnetcdf-dev</source> is required
<source lang="bash">
sudo apt-get install netcdf-bin libnetcdf-dev
</source>


* grant rwx (read-write-execute) permissions for our userid/ groupid on the directory (replace words userid and groupid with real userid):
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:
sudo chown ''userid'':''groupid'' /usr/local/src
<source lang="bash">
sudo apt-get install libatlas-dev libblas-dev liblapack-dev
</source>


sudo chmod ug+rwx /usr/local/src
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named <source lang="bash" enclose="none">src</source> under <source lang="bash" enclose="none">/usr/local</source> is created <source lang="bash">
sudo mkdir /usr/local/src
</source>


* download latest source code from GRASS SVN repository in a directory on the system (e.g. /usr/local/src)
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real <source lang="bash" enclose="none">userid</source>): <source lang="bash">
svn checkout https://svn.osgeo.org/grass/grass/branches/releasebranch_6_4 grass_current
sudo chown userid:groupid /usr/local/src</source>


* Above command places GRASS' source code in '''/usr/local/src/grass_trunk'''. In case of a subsequent update use the command: '''svn up''' from within the grass_trunk directory
* similarly, grant <source lang="bash" enclose="none">rwx</source> (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the <source lang="bash" enclose="none">src</source> directory: <source lang="bash">
sudo chmod ug+rwx /usr/local/src</source>


----
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==
'''Before''' attempting to compile GRASS, READ section (C) in the '''INSTALL''' file located in the main directory of GRASS source code entitled:
'''(C) COMPILATION NOTES for 64bit platforms'''
----


====== '''go for GRASS!''' ======
=== PROJ ===
* in our example we used the /usr/local/src directory to store GRASS' source code, so:
cd /usr/local/src/grass_trunk


* configuration
Install the <source lang="bash" enclose="none">dev</source> package:
  CFLAGS="-g -Wall" ./configure --with-cxx --with-freetype=yes \
      --with-postgres=no --with-sqlite=yes --enable-largefile=yes \
      --with-tcltk-includes=/usr/include/tcl8.4 \
      --with-freetype-includes=/usr/include/freetype2 \
      --with-opengl-libs=/usr/include/GL --with-readline \
      --with-python=yes --program-suffix=-svn --with-proj-share=/usr/share/proj


* compilation
<source lang="bash">
make
sudo apt-get install libproj-dev proj-data proj-bin
</source>


* compilation is expected to end with a statement similar to the following:
* In the call to <source lang="bash" enclose="none">./configure</source> for [[#GRASS|GRASS]], replace <source lang="bash" enclose="none">--with-proj-share=/usr/local/share/proj/</source> by <source lang="bash" enclose="none">--with-proj-share=/usr/share/proj/</source>


Started compilation: Wed Feb 27 00:24:36 CET 2008
=== GEOS ===
--
Errors in:
No errors detected.


* installation
Install the <source lang="bash" enclose="none">dev</source> package:
sudo checkinstall


* launch 64-bit GRASS.6.4.svn
<source lang="bash">
grass64
# probably you also need to additionally install "libgeos-c1v5"
sudo apt-get install libgeos-dev
</source>


'''Notes'''
* In the call to <source lang="bash" enclose="none">./configure</source> for [[#GRASS|GRASS]], replace <source lang="bash" enclose="none">--with-geos=/usr/local/bin/geos-config</source> by <source lang="bash" enclose="none">--with-geos=/usr/bin/geos-config</source>
* in case of errors in future compilation attempts, remember to remove program binaries with
 
make clean
=== GDAL ===
* and the files created with the "configuration" from previous compilations with
 
make distclean
Install the <source lang="bash" enclose="none">dev</source> package (possibly without support for datumgrid):


===== Current Development Branch =====
<source lang="bash">
== Current 6.5.0 Development Branch version of GRASS 6 ==
sudo apt-get install libgdal-dev
This page shall help to install the current 6.5.0 development branch version of GRASS 6 on Ubuntu based systems.
</source>
The instructions were tested on Ubuntu Jaunty Jackalope 9.04.


For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:
<source lang="bash">
sudo apt-get install python-gdal gdal-bin
</source>


== Dependencies ==
* Install also the required extra packages (note the message: <source lang="bash" enclose="none">The following extra packages will be installed:</source>)
* 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: <source lang="bash">
sudo apt-get install <package>=<required.version></source>


'''Preparation'''
=== GRASS-GIS ===
sudo apt-get update && sudo apt-get upgrade


* install SQLite, SVN and dependencies for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN:
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]
sudo apt-get install \
build-essential \
make \
flex \
bison \
gcc \
libgcc1 \
g++ \
cmake \
ccache \
swig swig1.3 \
python python-dev \
python3 python3-dev \
python-qt4 python-qt4-dev \
sip4 \
python-sip4 python-sip4-dev \
python-opengl \
libgsl0-dev \
python-wxversion python-wxtools \
python-wxgtk2.8 \
wx2.8-headers wx-common \
libwxgtk2.8-dev libwxgtk2.8-dbg \
libwxbase2.8-dev  libwxbase2.8-dbg \
ruby \
libncurses5-dev \
zlib1g-dev \
libjpeg62-dev \
libtiff4-dev \
libpngwriter-dev \
libhdf4g-dev libhdf4g-run \
tcl8.4-dev tk8.4-dev \
libcairo libcairo-dev \
sqlite3 libsqlite3-dev \
libpq-dev \
libreadline5 libreadline5-dev libfreetype6-dev \
txt2tags \
fftw3 fftw3-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 \
subversion


* create a directory as a simple user where source code(s) are going to be stored (in our example we use a directory called '''src''' under '''/usr/local''')
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==


sudo mkdir /usr/local/src
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:


* grant rwx (read-write-execute) permissions for our userid/ groupid on the directory (replace words userid and groupid with real userid):
<source lang="bash">
sudo add-apt-repository ppa:imincik/gis
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev
</source>


sudo chown ''userid'':''groupid'' /usr/local/src
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])
sudo chmod ug+rwx /usr/local/src


== Compile from source ==


== PROJ4 ==


* download '''proj-4.6.1.tar.gz''' and '''proj-datumgrid-1.4.zip''' from [http://trac.osgeo.org/proj http://trac.osgeo.org/proj]
=== PROJ ===
* move and decompress PROJ4 to '''/usr/local/src''' directory
tar xzvf proj-4.6.1.tar.gz


* move '''proj-datumgrid-1.4.tar.gz''' to '''proj/nad'''
* within the directory <source lang="bash" enclose="none">/usr/local/src</source> (create it if it does not exist) checkout <source lang="bash" enclose="none">proj</source> from its GitHub repository: <source lang="bash">
unzip proj-datumgrid-1.4.zip
https://github.com/OSGeo/PROJ/
</source>


* clean previous configuration & compilation
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under <source lang="bash" enclose="none">proj/nad</source>
make distclean
<ul><source lang="bash">
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad
cd /usr/local/src/proj/nad
</source>
  </ul>


* simple configure, compile and install
* decompress it <source lang="bash">
./configure  &&  make  &&  sudo make install
unzip proj-datumgrid-1.8.zip
</source>


* go back to the <source lang="bash" enclose="none">proj</source> directory <source lang="bash">
cd /usr/local/src/proj
</source>


* if required, clean previous configuration & compilation <source lang="bash">
make distclean
</source>


== GEOS ==
* simple configure, compile and install <source lang="bash">
./configure  &&  make  &&  sudo make install
</source>
<ul> or <source lang="bash">
./configure && make -j2  &&  sudo checkinstall
</source>
  </ul>


* download geos-3.1.1.tar.bz2 from http://trac.osgeo.org/geos/
* ensure that <source lang="bash" enclose="none">/usr/local/lib</source> is added to <source lang="bash" enclose="none">/etc/ld.so.conf</source> and afterwards run <source lang="bash">
* move to "source-code" folder and decompress
sudo ldconfig
bunzip geos-3.1.1.tar.bz2
</source>
tar xvf  geos-3.1.1.tar.bz2


* clean previous configuration & compilation
* finally, go back to the parent directory simply by instructing<source lang="bash">
make distclean
cd ..
</source>


* simple configure, compile and install
=== GEOS ===
./configure  &&  make  &&  sudo make install  &&  sudo ldconfig


* Ensure that /usr/local/lib is added to /etc/ld.so.conf
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using <source lang="bash" enclose="none">wget</source> <source lang="bash">
* Ensure that you run /sbin/ldconfig afterwards
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2
sudo ldconfig
</source>


* move to the "source-code" directory and decompress
<ul><source lang="bash">
cd /usr/local/src/
bunzip2 geos-3.12.2.tar.bz2
tar xvf  geos-3.12.2.tar
</source>
  </ul>


* if required, clean previous configuration & compilation  <source lang="bash">
make distclean
</source>


== GDAL ==
* move to geos directory  <source lang="bash">
cd geos-3.12.2
</source>


* Must* compile without GRASS support
* simple configure, compile and install <source lang="bash">
./configure  &&  make  &&  sudo make install
</source>
<ul> or <source lang="bash">
./configure  && make -j2  &&  sudo checkinstall
</source>
  </ul>


* enter in directory gdal_stable
* do not forget to execute <source lang="bash">
cd /usr/local/src/gdal_stable
sudo ldconfig
</source>


* download with svn ## or update with svn up
=== GDAL ===


* clean previous configurations/compilations
'''Note''', GDAL must be compiled '''without''' GRASS support!
make distclean


* configure
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):
CFLAGS="-g -Wall" LDFLAGS="-s" ./configure \
<source lang="bash">
--with-png=internal \
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz
--with-libtiff=internal \
</source>
--with-geotiff=internal \
--with-jpeg=internal \
--with-gif=internal \
--with-ecw=yes \
--with-expat=yes \
--with-expat-inc=/usr/include/ \
--with-expat-lib=/usr/lib \
--with-sqlite3=yes \
--with-geos=yes \
--with-python \
--with-libz=internal \
--with-netcdf \
--with-sqlite \
--with-threads=yes \
--without-grass  \
--without-ogdi \
--with-pg=/usr/bin/pg_config \
--with-xerces=yes


* compile & install & ldconfig
Follow the instructions to compile GDAL:
make  &&  sudo make install  &&  sudo ldconfig
https://gdal.org/development/building_from_source.html


== GRASS ==
=== GRASS GIS ===


''' Getting GRASS' source code '''
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).


* download current 6.5.0 development branch from GRASS SVN repository in a directory on the system (e.g. /usr/local/src)
To fully understand the build process, read the  <code>INSTALL</code> file, which is located in GRASS' source code root directory.
  svn checkout https://svn.osgeo.org/grass/grass/branches/develbranch_6 grass6_devel


* The above command places GRASS' source code in '''/usr/local/src/grass_trunk'''. In case of a subsequent update execute the command '''svn up''' from within the '''grass_trunk''' directory
''' Getting GRASS' source code '''


* for latest development branch version of GRASS 7 and other versions follow instructions at [http://trac.osgeo.org/grass/wiki/DownloadSource Downloading GRASS Source]
Select from one of the GRASS GIS versions and download the source code:


----
https://github.com/OSGeo/grass/releases/
'''Before''' attempting to compile GRASS, READ section (C) in the '''INSTALL''' file located in the main directory of GRASS source code entitled:
'''(C) COMPILATION NOTES for 64bit platforms'''
----


''' Configure, Compile and Install'''


'''Suport for ffmpeg'''
Enter the directory with the source code, for example:


* add extra dependencies to get ffmpeg support when compiling grass' source code under Ubuntu 64bit
<source lang="bash">
cd grass
</source>


sudo apt-get install \
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):
ffmpeg ffmpeg2theora \
<ul>
libffmpegthumbnailer-dev \
<source lang="bash">
libavcodec-dev \
CFLAGS="-O2 -Wall" LDFLAGS="-s" ./configure \
libxmu-dev \
--with-nls \
libavformat-dev libswscale-dev
--with-cxx \
--with-proj-share=/usr/local/share/proj/ \
--with-geos=/usr/local/bin/geos-config \
--with-wxwidgets \
--with-cairo \
--with-opengl-libs=/usr/include/GL \
--with-freetype=yes --with-freetype-includes="/usr/include/freetype2/" \
--with-postgres=yes --with-postgres-includes="/usr/include/postgresql" \
--with-sqlite=yes \
--with-mysql=yes --with-mysql-includes="/usr/include/mysql" \
--with-odbc=no \
--with-pdal
</source>
</ul>
<ul>
'''Note''', the above configuration uses the <code>PROJ</code> and <code>GEOS</code> 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. (note the backslashe at the end of each line)
<source lang="bash">
--with-proj-share=/usr/share/proj \
--with-geos=/usr/bin/geos-config \
</source>
  </ul>


====== '''go for GRASS!''' ======
* compile & install <source lang="bash">
* in our example we used the /usr/local/src directory to store GRASS' source code, so:
make -j2  &&  sudo make install  && sudo ldconfig
  cd /usr/local/src/grass_trunk
</source>


* configuration
<ul> or <source lang="bash">
CFLAGS="-g" ./configure \
make -j2 && sudo checkinstall && sudo ldconfig
--enable-debug \
</source>
  --enable-64bit \
  </ul>
  --with-libs=/usr/lib64 \
  --with-cxx \
  --with-freetype=yes \
--with-freetype-includes="/usr/include/freetype2/" \
--with-postgres=no \
--with-sqlite=yes \
--enable-largefile=yes \
--with-tcltk-includes="/usr/include/tcl8.4/" \
--with-freetype-includes=/usr/include/freetype2 \
--with-opengl-libs=/usr/include/GL \
--with-readline \
--with-python=yes \
--with-proj-share=/usr/local/share/proj/ \
--with-wxwidgets \
--with-cairo \
--with-ffmpeg=yes \
--with-ffmpeg-includes="/usr/include/mythtv/ffmpeg/ /usr/include/libavcodec /usr/include/libavformat /usr/include/libswscale"


* compilation
For subsequent updates execute (not need for the first time):
  make
<source lang="bash">
svn up
make -j2 && sudo make install &&  sudo ldconfig
</source>


* compilation is expected to end with a statement similar to the following:
Sometimes, it is required to clean previous configuration and compilation:
<source lang="bash">
make distclean
svn up
./configure ... # (use the configure command above)
make -j2 && sudo make install  &&  sudo ldconfig
</source>


Started compilation: Wed Feb 27 00:24:36 CET 2008
=== GDAL-GRASS-Plugin ===
--
Errors in:
No errors detected.


* installation
See: https://github.com/OSGeo/gdal-grass
sudo make install  &&  sudo ldconfig


* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: "gdal-grass-X.Y.Z.tar.gz" using <source lang="bash" enclose="none">wget</source>
<ul><source lang="bash">
# update version number accordingly!
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz
tar xvzf gdal-grass-1.0.2.tar.gz
cd gdal-grass-1.0.2
</source></ul>


== GDAL-GRASS-PLUGIN ==
* create  <source lang="bash" enclose="none">/etc/ld.so.conf.d/grass.conf</source>  or add in  <source lang="bash" enclose="none">/etc/ld.so.conf</source> the GRASS library path:
<ul><source lang="bash">
# GRASS GIS stable library path (adapt as needed)
/usr/local/src/releasebranch_8_4/lib


* get the plugin from [http://download.osgeo.org/gdal http://download.osgeo.org/gdal] [http://download.osgeo.org/gdal/gdal-grass-1.4.3.tar.gz gdal-grass-1.4.3.tar.gz]
# GRASS GIS development version library path (adapt as needed)
* create grass6.conf or add in ld.so.conf the GRASS library path
/usr/local/src/grass_master/lib
</source></ul>


* clean previous configurations/compilations
* optionally, clean previous configurations/compilations<source lang="bash">
  make distclean
  make distclean</source>


* configure ##point to grass installation as needed
* configure -- point to GRASS installation/binaries
./configure \
<ul><source lang="bash"> ./configure \
  --prefix=/usr/local \
  --prefix=/usr/local \
  --with-gdal=/usr/local/bin/gdal-config \
  --with-gdal=/usr/local/bin/gdal-config \
  --with-grass=/usr/local/grass-6.5.svn/ \
  --with-grass=/usr/local/grass/ \
--with-autoload="/usr/local/lib/gdalplugins/" \
--with-autoload="/usr/local/lib64/gdalplugins/" \
  --with-ld-shared="g++ -shared"
  --with-ld-shared="g++ -shared"</source></ul>
</ul>


* change to '''grass_trunk for grass7''' if compiling GRASS version 7
* compile & install using checkinstall<source lang="bash">
make -j2  &&  sudo checkinstall</source>


* compile & install
= Post compilation/installation control =
make  &&  sudo make install


* launch 64-bit GRASS
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]
grass65


'''Notes'''
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the "configuration" from previous compilations with
* in case of errors in future compilation attempts, remember to remove program binaries with
make clean
* and the files created with the "configuration" from previous compilations with
  make distclean
  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 (update version numbers accordingly)
* <source lang="bash" enclose="none">/usr/local/grass</source> (directory, binaries location)
* <source lang="bash" enclose="none">/usr/local/bin/grass</source> (file)
* <source lang="bash" enclose="none">/home/username/.grassrc8</source> (file)
If wanted, delete also the complete source code:
* <source lang="bash" enclose="none">/usr/local/src/grass_release</source> (directory, source code location)
To remove <code>grass</code> (or any other package) which was installed by <source lang="bash" enclose="none">checkinstall</source>, use <source lang="bash" enclose="none">dpkg</source>, e.g.<source lang="bash">
sudo dpkg -r grass # package name defined at installation is important</source>
== See also ==
* Docker: https://grass.osgeo.org/download/docker/
* [[Ubuntu Packaging]]
* [[GRASS in Debian]]
= Archived Notes =
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.
[[Category: Compilation]]
[[Category: Installation]]
[[Category: Ubuntu]]
[[Category: FAQ]]

Latest revision as of 10:54, 6 January 2025

Quick instructions

These instructions should work fine on Ubuntu distributions:

Install geospatial dependencies

1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools
(note: you need Python 3)

# be sure to have an updated system
sudo apt update && sudo apt upgrade -y

# install PROJ
sudo apt install libproj-dev proj-data proj-bin unzip -y
# optionally, install (selected) datum grid files
sudo apt-get install proj-data

# install GEOS
sudo apt install libgeos-dev -y

# install GDAL
sudo apt install libgdal-dev python3-gdal gdal-bin -y

# install PDAL (optional)
sudo apt install libpdal-dev pdal -y

# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1

Install compiler stuff and further dependencies. Note: this is a single command, please copy-paste it entirely into the terminal:

Install further compilation dependencies (Ubuntu 22.04)

For Ubuntu 22.04:

 sudo apt-get install \
  build-essential \
  flex make bison gcc libgcc1 g++ ccache \
  python3 python3-dev python3-pip \
  python3-opengl python3-wxgtk4.0 \
  python3-dateutil libgsl-dev python3-numpy \
  wx3.0-headers wx-common libwxgtk3.0-gtk3-dev \
  libwxbase3.0-dev   \
  libncurses5-dev \
  libbz2-dev \
  zlib1g-dev gettext \
  libtiff5-dev libpnglite-dev \
  libcairo2 libcairo2-dev \
  sqlite3 libsqlite3-dev \
  libpq-dev libreadline-dev \
  libfreetype6-dev libfftw3-3 \
  libfftw3-dev libboost-thread-dev \
  libboost-program-options-dev git \
  libzstd-dev checkinstall \
  libglu1-mesa-dev libxmu-dev \
  ghostscript wget -y

For NVIZ on Ubuntu:

sudo apt-get install \
  ffmpeg libavutil-dev ffmpeg2theora \
  libffmpegthumbnailer-dev \
  libavcodec-dev \
  libxmu-dev \
  libavformat-dev libswscale-dev -y

Update wxpython:

# be sure to pick the correct Ubuntu version
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython

Source code download

Now we have all "ingredients" readily installed on our system.

Source code download:

There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):

a) Download of the weekly source code snapshot (not recommended):

# download latest GRASS GIS 8.x stable release source code:
mkdir $HOME/src/
cd  $HOME/src/
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz

# Unpack source code package and remove tarball archive:
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz
rm -f grass-8.4.git_src_snapshot_latest.tar.gz 

# rename source code directory (yes, with the questionmarks!)
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest
cd grass-8.4.latest/

b) Download of the current development version from GitHub (adopt the path below accordingly)

Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:

sudo apt-get install git
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git
cd grass-8.4.latest.git/
git checkout releasebranch_8_4

Compilation

Now we can compile the source code in order to generate the GRASS GIS binaries:

# "configure" source code for local machine (checks for CPU type etc):
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'
#MYCXXFLAGS=''
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'

LDFLAGS="$MYLDFLAGS" CFLAGS="$MYCFLAGS" CXXFLAGS="$MYCXXFLAGS" ./configure \
  --with-cxx \
  --enable-largefile \
  --with-proj --with-proj-share=/usr/share/proj \
  --with-gdal=/usr/bin/gdal-config \
  --with-python \
  --with-geos \
  --with-sqlite \
  --with-nls \
  --with-zstd \
  --with-pdal \
  --with-cairo --with-cairo-ldflags=-lfontconfig \
  --with-freetype=yes --with-freetype-includes="/usr/include/freetype2/" \
  --with-wxwidgets \
  --with-fftw \
  --with-openmp \
  --with-opengl-libs=/usr/include/GL \
  --with-postgres=yes --with-postgres-includes="/usr/include/postgresql" \
  --without-netcdf \
  --without-mysql \
  --without-odbc \
  --without-ffmpeg

Now compile the source code (this will take some time as it generates binary code from the source code):

# note: the more CPUs you have, the higher the -j number may be set to
# here: build using 4 CPU cores
make -j4

Installation

Install resulting GRASS GIS binaries into /usr/local/:

sudo make install

Start GRASS GIS in the terminal:

grass

Done & enjoy!

Hints

  • 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.

Pre-compiled packages and backports

Pre-compiled packages and backports are available from UbuntuGIS via their ppa.launchpad stable and ppa.launchpad unstable repositories. This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.

Version overview:

  • noble 8.3
  • jammy (22.04): 8.3
  • focal (20.04 LTS): 8.2
  • bionic (18.04 LTS): 7.8
  • xenial (16.04 LTS): 7.6
  • trusty (14.04 LTS): 7.4

a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ppa:grass/grass-devel:

sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo add-apt-repository ppa:grass/grass-devel

b) Latest packaged stable version of GRASS GIS is available from ppa:grass/grass-stable:

sudo add-apt-repository ppa:ubuntugis/ppa
sudo add-apt-repository ppa:grass/grass-stable
sudo apt-get update
sudo apt-get install grass

Dependencies

Current stable Ubuntu version

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 (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as The following extra packages will be installed:...):

The following dependencies concern Ubuntu Xenial Xerus (16.04 LTS)

# 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-opengl \
  python-wxversion python-wxtools python-wxgtk3.0 \
  python-dateutil libgsl-dev python-numpy \
  wx3.0-headers wx-common libwxgtk3.0-dev \
  libwxbase3.0-dev   \
  libncurses5-dev \
  zlib1g-dev gettext \
  libtiff5-dev libpnglite-dev \
  libcairo2 libcairo2-dev \
  sqlite3 libsqlite3-dev \
  libpq-dev \
  libreadline6 libreadline6-dev libfreetype6-dev \
  libfftw3-3 libfftw3-dev \
  libboost-thread-dev libboost-program-options-dev \
  resolvconf \
  libjasper-dev \
  git \
  libav-tools libavutil-dev ffmpeg2theora \
  libffmpegthumbnailer-dev \
  libavcodec-dev \
  libxmu-dev \
  libavformat-dev libswscale-dev \
  checkinstall \
  libglu1-mesa-dev libxmu-dev \
  ghostscript

The following dependencies concern Ubuntu Trusty Tahr (14.04 LTS)

# 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++ \
  python python-dev \
  python-dateutil libgsl0-dev python-numpy \
  zlib1g-dev gettext \
  libtiff-dev libpnglite-dev \
  sqlite3 libsqlite3-dev \
  libboost-thread-dev libboost-program-options-dev \
  resolvconf \
  git \
  checkinstall \
  cmake ccache \
  python-opengl \
  python-wxversion python-wxtools python-wxgtk2.8 \
  wx2.8-headers wx-common libwxgtk2.8-dev libwxgtk2.8-dbg \
  libwxbase2.8-dev  libwxbase2.8-dbg \
  libncurses5-dev \
  libcairo2 libcairo2-dev \
  libpq-dev \
  libreadline6 libreadline6-dev libfreetype6-dev \
  libfftw3-3 libfftw3-dev \
  libjasper-dev \
  libav-tools libavutil-dev ffmpeg2theora \
  libffmpegthumbnailer-dev \
  libavcodec-dev \
  libxmu-dev \
  libavformat-dev libswscale-dev \
  libglu1-mesa-dev libxmu-dev \
  ghostscript


  • See the additional packages bellow and in other sections and install them. Note that some of them are required, namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).
  • 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
sudo apt-get install libatlas-dev libblas-dev liblapack-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
    

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

PROJ

Install the dev package:

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

GEOS

Install the dev package:

# probably you also need to additionally install "libgeos-c1v5"
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

GDAL

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

sudo apt-get install libgdal-dev

For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:

sudo apt-get install python-gdal gdal-bin
  • 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>
    

GRASS-GIS

Jump to sub-section GRASS-GIS below

Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA

Ivan Mincik has made all required packages available in his PPA:

sudo add-apt-repository ppa:imincik/gis
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev

Now you can either also install GRASS GIS from there or compile it yourself (see Jump to sub-section GRASS-GIS below)

Compile from source

PROJ

  • within the directory /usr/local/src (create it if it does not exist) checkout proj from its GitHub repository:
    https://github.com/OSGeo/PROJ/
    
    wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip
    mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad
    cd /usr/local/src/proj/nad
    
  • decompress it
    unzip proj-datumgrid-1.8.zip
    
  • 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
    
    or
    ./configure && make -j2  &&  sudo checkinstall
    
  • ensure that /usr/local/lib is added to /etc/ld.so.conf and afterwards run
    sudo ldconfig
    
  • finally, go back to the parent directory simply by instructing
    cd ..
    

GEOS

  • download geos-3.12.2.tar.bz2 from https://libgeos.org/ using wget
    wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2
    
  • move to the "source-code" directory and decompress
    cd /usr/local/src/
    bunzip2 geos-3.12.2.tar.bz2
    tar xvf  geos-3.12.2.tar
    
  • if required, clean previous configuration & compilation
    make distclean
    
  • move to geos directory
    cd geos-3.12.2
    
  • simple configure, compile and install
    ./configure  &&  make  &&  sudo make install
    
    or
    ./configure  && make -j2  &&  sudo checkinstall
    
  • do not forget to execute
    sudo ldconfig
    

GDAL

Note, GDAL must be compiled without GRASS support!

wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz

Follow the instructions to compile GDAL: https://gdal.org/development/building_from_source.html

GRASS GIS

Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).

To fully understand the build process, read the INSTALL file, which is located in GRASS' source code root directory.

Getting GRASS' source code

Select from one of the GRASS GIS versions and download the source code:

https://github.com/OSGeo/grass/releases/

Configure, Compile and Install

Enter the directory with the source code, for example:

cd grass
  • GRASS GIS example configuration (which can/should be adjusted according to specific needs):
    CFLAGS="-O2 -Wall" LDFLAGS="-s" ./configure \
    --with-nls \
    --with-cxx \
    --with-proj-share=/usr/local/share/proj/ \
    --with-geos=/usr/local/bin/geos-config \
    --with-wxwidgets \
    --with-cairo \
    --with-opengl-libs=/usr/include/GL \
    --with-freetype=yes --with-freetype-includes="/usr/include/freetype2/" \
    --with-postgres=yes --with-postgres-includes="/usr/include/postgresql" \
    --with-sqlite=yes \
    --with-mysql=yes --with-mysql-includes="/usr/include/mysql" \
    --with-odbc=no \
    --with-pdal
    
    Note, the above configuration uses the PROJ 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. (note the backslashe at the end of each line)
    --with-proj-share=/usr/share/proj \
    --with-geos=/usr/bin/geos-config \
    
  • compile & install
    make -j2  &&  sudo make install  &&  sudo ldconfig
    
    or
    make -j2  &&  sudo checkinstall  &&  sudo ldconfig
    

For subsequent updates execute (not need for the first time):

svn up
make -j2 && sudo make install  &&  sudo ldconfig

Sometimes, it is required to clean previous configuration and compilation:

make distclean
svn up
./configure ... # (use the configure command above)
make -j2 && sudo make install  &&  sudo ldconfig

GDAL-GRASS-Plugin

See: https://github.com/OSGeo/gdal-grass

  • get the plugin from GitHub: "gdal-grass-X.Y.Z.tar.gz" using wget
    # update version number accordingly!
    wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz
    tar xvzf gdal-grass-1.0.2.tar.gz
    cd gdal-grass-1.0.2
    
  • create /etc/ld.so.conf.d/grass.conf or add in /etc/ld.so.conf the GRASS library path:
    # GRASS GIS stable library path (adapt as needed)
    /usr/local/src/releasebranch_8_4/lib
    
    # GRASS GIS development version library path (adapt as needed)
    /usr/local/src/grass_master/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=/usr/local/grass/ \
     --with-autoload="/usr/local/lib64/gdalplugins/" \
     --with-ld-shared="g++ -shared"
    
  • 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 (update version numbers accordingly)

  • /usr/local/grass (directory, binaries location)
  • /usr/local/bin/grass (file)
  • /home/username/.grassrc8 (file)

If wanted, delete also the complete source code:

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


To remove grass (or any other package) which was installed by checkinstall, use dpkg, e.g.

sudo dpkg -r grass # package name defined at installation is important

See also

Archived Notes

Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.