Compilar darktable en Ubuntu 22.04 LTS

Pasos para compilar darktable en Ubuntu 22.04LTS

Probado con darktable 3.8, 3.8.1 y 3.9

Hay que seguir más pasos que en versiones anteriores de Ubuntu, pero se puede hacer igual.

Esta compilación activa todas las dependencias y funcionalidades opcionales, por lo que el resultado final es una versión algo más completa que si simplemente instalamos darktable con sudo apt install darktable. Tambien nos puede servir para instalar versiones más nuevas que aún no están en nuestra distribución de Linux.

Para los curiosos, aquí estan las dependecias oficiales del paquete darktable en Jammy (Ubuntu 22.04LTS) y vereis que faltan algunas de las que incluyo más abajo.

1. Actualizamos el sistema

sudo apt update && sudo apt upgrade -y

2 Instalamos todas las dependencias menos openexr y jasper (explicado el porqué, más abajo):

sudo apt install -y \
git \
gcc \
cmake \
perl \
g++ \
xsltproc \
json-schema-test-suite \
intltool \
clang \
po4a \
libxml2-utils \
libimage-exiftool-perl \
zlib1g-dev \
llvm-13-dev \
libjson-glib-dev \
libgtk-3-dev \
libavif-dev \
libpugixml-dev \
libjpeg-dev \
libgphoto2-dev \
liblensfun-dev \
libheif-dev \
libsqlite3-dev \
libwebp-dev \
librsvg2-dev \
libcurl4-openssl-dev \
liblcms2-dev \
libexiv2-dev \
libsoup2.4-dev \
libopenjp2-7-dev \
libsecret-1-dev \
libcolord-dev \
libgraphicsmagick1-dev \
libgmic-dev \
liblua5.4-dev \
libosmgpsmap-1.0-dev \
libcolord-gtk-dev \
libsdl2-dev \
libcups2-dev \
libglib2.0-dev \
librsvg2-dev

Notas sobre dependencias:

  • Si instalas llvm sin más, se instala la versión 14, que por algún motivo no lo detecta darktable, por eso especificamos instalar la versión 13 con llvm-13-dev en vez.

  • En Ubuntu 22.04 libopenexr-dev instala la versión 2.5.7 de OpenEXR pero darktable necesita la versión 3.0. Para solucionar este problema instalaremos OpenEXR directamente de su repositorio más adelante.

  • En Ubuntu 22.04 el paquete jasper es la versión 0.69 y no es válida para darktable, por lo que procedemos en vez a instalarlo directamente de la fuente más adelante (versión 3.0.3)

3 Instalamos Openexr 3.1.5 del código fuente

cd
wget https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v3.1.5.tar.gz
tar xf v3.1.5.tar.gz && rm v3.1.5.tar.gz
mkdir openexr-build && cd openexr-build
cmake ../openexr-3.1.5
sudo make
sudo make install
cd && rm -rf openexr-build && rm -rf openexr-3.1.5

4 Instalamos Jasper 3.0.3 del código fuente

cd
wget https://github.com/jasper-software/jasper/archive/version-3.0.3/jasper-3.0.3.tar.gz
tar xf jasper-3.0.3.tar.gz && rm jasper-3.0.3.tar.gz
cd jasper-version-3.0.3
mkdir BUILD && cd BUILD

cmake -DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_RPATH=YES \
-DJAS_ENABLE_DOC=NO \
-DCMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-3.0.3 \
..

make
sudo make install
cd && rm -rf jasper-3.0.3

5. Clona el repositorio darktable con sus submódulos

git clone --recurse-submodules https://github.com/darktable-org/darktable.git

6. Adelantate a un fallo

Debido a una incidencia en Git explicada aquí, es posible que después de la instalación, darktable se quede etiquetado como versión desconocida.

Sale esto…

$ ./darktable --version
this is darktable unknown-version

en vez de algo como esto…

$ ./darktable --version
this is darktable 3.8.1+dirty

Para evitar este fallo (hasta que se solucione) podemos arreglar simplemente marcando como carpeta segura a la carpeta donde hemos clonado el repositorio. En mi caso es /home/alejandro/darktable

sudo git config --global --add safe.directory /home/alejandro/darktable

7. Selecciona la versión que deseas instalar. En el momento de este escrito la última versión estable es la 3.8.1

cd darktable
git checkout release-3.8.1

Opcionalmente puedes escribir git tag para ver el listado de los releases actuales.

Recordemos que las versiones pares (3.6, 3.8) son las versiones estables y las impares (3.7, 3.9), las de desarrollo. Por lo que si queremos la última versión estable deberíamos seleccionar el último release par.

Finalmente compilamos:

./build.sh

Nota: Si ya has realizado un build anteriormente borra la carpeta build antes de ejecutar el comando anterior.

Cuando termine te indicará el comando que tienes que poner para finalmente instalar la aplicación. Ejecutalo con sudo:

[100%] Built target manpages
darktable finished building.
To actually install darktable you need to type:
$ cmake --build "/home/alejandro/darktable/build" --target install -- -j1
sudo cmake --build "/home/alejandro/darktable/build" --target install -- -j1

8. ¡Disfrutar de darktable!

Ya tendrás darktable instalado en la carpeta /opt/darktable.

Puedes abrirlo ejecutando /opt/dartable/bin/darktableo crearte un enlace directo al mismo para mayor comodidad

sudo ln -s /opt/darktable/share/applications/darktable.desktop /usr/share/applications/darktable.desktop

9. Actualizar versión y/o desinstalar

Darktable utiliza 2 carpetas:

  • /opt/darktable para almacenar la aplicación en sí.

  • ~/.config/darktable para almacenar tu configuración personal y tu base de datos.

Si más adelante deseas compilarte e instalarte un versión más nueva, querrás borrar la carpeta /opt/darktable solamente, para que así mantengas tu base de datos y configuración en la versión nueva.

Si en cambio quieres eliminar darktable por completo de tu sistema y empezar con una instalación limpia (borrando por tanto tu configuración actual), entonces borra ambas carpetas antes de volver a compilar e instalar de nuevo.

¿Problemas?

Si te encuentras con cualquier problema pide ayuda.

Puedes crear un fichero log de cualquier comando anexando | tee ficherolog.txt a tu comando. Por ejemplo si te falla el comando ./build.sh, puedes en vez escribir /.build.sh | tee ficherolog.txt y te creara un fichero llamado ficherolog.txt con todo lo que ha salido en tu ventana de comandos.

Muy útil para luego compartir este fichero en el foro y explicar mejor donde te está fallando.

3 Me gusta

Los pasos de arriba me funcionan como la seda en máquinas virtuales con el sistema operativo recién instalado. Sin embargo, tengo un equipo, (tambien Ubuntu 22.04LTS) donde me da un fallo al compilar y no doy con la solución:

[ 55%] Building C object bin/CMakeFiles/lib_darktable.dir/common/printing.c.o
[ 55%] Linking C shared library libdarktable.so
/usr/bin/ld: cannot find -lzlib_shared: No such file or directory
collect2: error: ld returned 1 exit status
gmake[2]: *** [bin/CMakeFiles/lib_darktable.dir/build.make:3249: bin/libdarktable.so] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1880: bin/CMakeFiles/lib_darktable.dir/all] Error 2
gmake: *** [Makefile:156: all] Error 2

Adjunto el log completo del build. log-build-3.8.1.txt (64,7 KB)

¿Alguna idea de como solucionarlo? ¡Gracias de antemano!

Gracias por las explicaciones. Yo hace dias ando con la idea de compilar (ya lo hice con las versiones 3.4 y 3.6) pero es muy cómodo usar repositorios o los .deb.

Si averigua algo mas lo paso al foro.

Edito: No veo las bibliotecas liblz* que es de lo que se queja el compilador…

Saludos y suerte.

Gracias por las sugerencias @jofial .

He probado siguiendo las instrucciones en el enlace que has mandado y con ello se instalaron los siguientes paquetes adicionales:

  autopoint debhelper debugedit dh-autoreconf dh-strip-nondeterminism dwz
  intltool-debian libdebhelper-perl libfile-stripnondeterminism-perl
  libilmbase-dev libopenexr-dev libsub-override-perl po-debconf

Sin embargo, aún así el resultado es el mismo, con el mismo error. De hecho comparando los logs del build de antes y despues veo que no ha cambiado nada.

En cuanto al compilador, tengo clang instalado pero no estoy seguro cual está usando de verdad ya que lo primero que dice es GNU 11.2.0:

➜  darktable git:(6d546821a) ✗ ./build.sh | tee log-build-3.8.1.txt
darktable build script

Building directory:  /home/alejandro/darktable/build
Installation prefix: /opt/darktable
Build type:          RelWithDebInfo
Build generator:     Unix Makefiles
Build tasks:         20
CPU Architecture:    Intel

-- The CXX compiler identification is GNU 11.2.0
-- The C compiler identification is GNU 11.2.0

El segundo enlace que mandas de la wiki, lo escribí yo en su momento, jeje. Pero parece que con las versiones nuevas han cambiando varias cosas.

Seguiré investigando…

Vaya no sabia.

Ya puestos tengo una duda. Aurelien Pierre, anda metido en un fork de DT que es el R-Darktable

Soy incapaz de saber como hacer la compilación de su source o submodule. Nunca he entendido el árbol de directorios de GitHub, para buscar una rama o fork concreto.

SAludos.

Ya había escuchado que se había hartado y estaba con su fork, pero aun no lo he tocado.
Lo voy a mirar…

Con los pasos de arriba pero sustituyendo el repositorio de darktable por el de r-darkable, es decir, en vez de esta línea:

git clone --recurse-submodules https://github.com/darktable-org/darktable.git

pon:

git clone --recurse-submodules https://github.com/aurelienpierre/R-Darktable.git

Si quieres su última versión de desarrollo omite también el paso de git checkout release-3.8.1, y así estarás usando el master branch.

El resto todo igual y funciona.

En mi caso estoy igual que siempre. Me funciona en máquinas virtuales pero me da el mismo error en el equipo que necesito. :frowning:

Que cosa mas extraña. Hoy no he podido por estar de viaje. Pero sigo investigando. Si aparece algo lo cuento.

Saludos.

He estado investigando y no he encontrada ninguna referencia que explica para que sirve esta biblioteca.

He encontrado esto, puede que arroje algo de luz a la cuestión. Pero no tengo ni idea.

Saludos.

Muchas gracias @jofial por tu mensaje.

Lamentablemente no me funciona. He instalado el paquete que dices (no lo tenía instalado) pero el resultado es el mismo. :frowning:

:disappointed_relieved: Seguimos…

Saludos.

No podre ayudarte en tu batalla, pero sirva para el respetable que he compilado con éxito R-Darktable de Aurelien Pierre, me ha dado algún error con jasper (tu ya lo advertías), pero es operativo.

Como lo he instalado en un viejo i7 (1a.generación) con opencl activo, no va muy fluido, tiene algún error como que el texto de la página inicial esta en ingles y el cuarto oscuro y demás esta en castellano. Pero eso es pecata minuta. Ahora tengo que ir viendo que cosas si (para bien) y que cosas no (para mal).

Iré informando.

2 Me gusta