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