Prezados leitores,

Nesses últimos dias precisei instalar o GDAL e o MrSID em uma máquina que rodava o SuSe Linux Enterprise Server 15 SP6 (SLES). Como a biblioteca libgdaljava não estava disponível eu precisei compilar tudo na mão. Acabei passando por alguns perrengues, mas no final consegui compilar e habilitar tudo no GeoServer. Vou compartilhar o passo a passo, caso alguém esteja passando pelo mesmo problema:

1. Instalar SDK do MrSID

Para compilar o MrSID é necessário baixar o seu SDK no site da Extensis. A versão utilizada nesse tutorial foi: MrSID DSDK 9.5.5.5244 – rhel9.x86-64.gcc1131

> wget https://bin.extensis.com/download/developer/MrSID_DSDK-9.5.5.5244-rhel9.x86-64.gcc1131.zip

Agora vamos extrair e mover o SDK para a pasta /opt:

> sudo unzip MrSID_DSDK-9.5.5.5244-rhel9.x86-64.gcc1131.zip -d /opt/MrSID/
> cd /opt/MrSID
> sudo chown root:root -R MrSID/
> sudo ln -sfn /opt/MrSID/MrSID_DSDK-9.5.5.5244-rhel9.x86-64.gcc1131 /opt/MrSID/current
> sudo ldconfig

2. Instalação do GDAL

O primeiro passa foi atualizar e habilitar os repositórios adicionais no SLES:

> sudo SUSEConnect --product sle-module-development-tools/15.6/x86_64
> sudo zypper refresh

Depois foi necessário instalar as dependências básicas para compilação:

> sudo zypper install gcc gcc-c++ gcc13 gcc13-c++ make cmake ninja \
  libtool automake autoconf git curl wget unzip bison flex swig
> sudo zypper install unzip zip tar which htop net-tools iproute2 ant

E também as dependências de bibliotecas geoespaciais:

> sudo zypper install proj proj-devel geos geos-devel sqlite3 sqlite3-devel \
  libtiff-devel libjpeg8-devel libpng16-devel libcurl-devel

E por último para evitar erros na hora de rodar o make install, instalei o Python + Numpy:

> sudo zypper install python311 python311-devel python311-numpy python311-pip
> python3.11 -m pip install --user --upgrade pip
> python3.11 -m pip install --user "numpy==1.26.4"

Agora vamos baixar e preparar o GDAL para a compilação. No nosso exemplo estamos usando o GDAL 3.10.1:

> wget https://download.osgeo.org/gdal/3.10.1/gdal-3.10.1.tar.gz
> tar -xvzf gdal-3.10.1.tar.gz
> cd gdal-3.10.1
> mkdir build && cd build

E necessário também apontar o compilador para o gcc13/g++13 no ambiente de build

> export CC=/usr/bin/gcc-13
> export CXX=/usr/bin/g++-13
> SWIG_BIN=$(command -v swig || command -v swig4)
> NUMPY_INC=$(python3.11 -c 'import numpy; print(numpy.get_include())')
> JAVA_HOME=$(dirname "$(dirname "$(readlink -f "$(which javac)")")")

Chegou a hora, vamos compilar o GDAL com suporte ao MrSID e JPEG2k usando o CMake e o Ninja, veja:

> cmake -G "Ninja" .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/usr/local \
  -DCMAKE_INSTALL_LIBDIR=lib \
  -DBUILD_SHARED_LIBS=ON \
  -DGDAL_ENABLE_PLUGINS=ON \
  -DBUILD_PYTHON_BINDINGS=ON \
  -DBUILD_JAVA_BINDINGS=ON \           
  -DGDAL_USE_GEOTIFF_INTERNAL=ON \
  -DGDAL_HIDE_INTERNAL_SYMBOLS=OFF \
  -DGDAL_ENABLE_DRIVER_MRSID_PLUGIN=ON \
  -DGDAL_ENABLE_DRIVER_MRSID=ON \
  -DGDAL_ENABLE_DRIVER_JP2MRSID=ON \
  -DCMAKE_INSTALL_RPATH="/usr/local/lib:/usr/local/lib64:/usr/local/lib/jni" \
  -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
  -DMRSID_LIBRARY=/opt/MrSID/current/Raster_DSDK/lib/libltidsdk.so \
  -DMRSID_INCLUDE_DIR=/opt/MrSID/current/Raster_DSDK/include \
  -DPython3_EXECUTABLE=/usr/bin/python3.11 \
  -DPython3_NumPy_INCLUDE_DIRS="${NUMPY_INC}" \
  -DSWIG_EXECUTABLE="${SWIG_BIN}" \
  -DJAVA_HOME="${JAVA_HOME}"

> ninja -j"$(nproc)"
> sudo ninja install

Verifique se a biblioteca libgdalalljni.so foi criada:

> ldd /usr/local/lib/jni/libgdalalljni.so | grep gdal

Caso a lib não tenha sido criado, você precisa criá-la, pois ela é essencial para a integração com o GeoServer, então você pode criar da seguinte maneira:

> ninja gdalalljni
> sudo ldconfig

Vamos atualiza o cache das bibliotecas:

> echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/gdal.conf
> echo "/usr/local/lib/jni" | sudo tee /etc/ld.so.conf.d/gdal-jni.conf
> echo "/opt/MrSID/current/Raster_DSDK/lib" | sudo tee /etc/ld.so.conf.d/mrsid.conf
> sudo ldconfig

Agora vamos verificar se está tudo correto, pra isso execute os comandos abaixo:

> gdalinfo --version
> gdalinfo --formats | grep -Ei 'mrsid|jp2mrsid'
> ldd /usr/local/lib/jni/libgdalalljni.so | grep gdal

Após executar os passos acima, as saídas abaixo indicam que todo o processo correu bem.

  GDAL 3.10.1, released 2025/01/08
  MrSID -raster- (rov): Multi-resolution Seamless Image Database (MrSID) (*.sid)
  JP2MrSID -raster- (rov): MrSID JPEG2000 (*.jp2)
  libgdal.so.36 => /usr/local/lib/libgdal.so.36 (0x00007fdcbb400000)

Agora para fnalizar é só você habilitar no GeoServer, para isso basta adicionar as seguintes linhas no seu arquivo de inicialização do GeoServer:

-DGDAL_DATA=/usr/local/share/gdal
-Djava.library.path=/usr/local/lib:/usr/local/lib/jni:/opt/MrSID/current/Raster_DSDK/lib