Instalé /bin/sh: /usr/bin/
directorio wkhtmltopdf. Sin embargo, cuando intento ejecutar el programa ingresando /usr/bin/wkhtmltopdf
al shell, recibo un error /bin/sh: /usr/bin/wkhtmltopdf: not found
. Funciona, sin embargo, si entro sh /usr/bin/wkhtmltopdf
. ¿A qué se debe esto y cómo puedo solucionarlo?
Los permisos son ls -l
:
-rwxr-xr-x 1 1000 1000 38.0M Nov 22 2016 wkhtmltopdf
type -a wkhtmltopdf : /usr/bin/wkhtmltopdf
Editar:
El sistema operativo que uso es Alpine Linux.
Salida de ldd wkhtmltopdf
:
/usr/bin # ldd wkhtmltopdf
/lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
/usr/lib/preloadable_libiconv.so => /usr/lib/preloadable_libiconv.so (0x7f8871fec000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x7f8871fe0000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x7f8871fa4000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x7f8871ef3000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x7f8871ee1000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x7f8871dbe000)
libz.so.1 => /lib/libz.so.1 (0x7f8871da4000)
libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
librt.so.1 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f8871c4f000)
libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f8871c3b000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by wkhtmltopdf)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x7f8871c18000)
libuuid.so.1 => /lib/libuuid.so.1 (0x7f8871c0f000)
libbz2.so.1 => /usr/lib/libbz2.so.1 (0x7f8871c00000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x7f8871bd0000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x7f8871ba9000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x7f8871ba4000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x7f8871b9c000)
libbsd.so.0 => /usr/lib/libbsd.so.0 (0x7f8871b88000)
Instalé wkhtmltopdf ejecutando los siguientes comandos en Docker:
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && \
tar xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && \
mv wkhtmltox/bin/wkhtmltopdf /usr/bin/ && mv wkhtmltox/bin/wkhtmltoimage /usr/bin
Respuesta1
Como lo indica el ldd
resultado, este wkhtmltopdf
binario está construido contra glibc, elBiblioteca GNU C:
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by wkhtmltopdf)
EllibcLa biblioteca implementa las funciones de la biblioteca estándar de C, así como la API POSIX ( libc.so.6
) y el vinculador dinámico ( ld-linux-x86-64.so.2
). glibc es la implementación de libc más común y utilizada por la mayoría de las distribuciones de Linux.
En Alpine Linux,musl-libcse utiliza. musl es de naturaleza mucho más minimalista y apunta a un fuerte cumplimiento de POSIX. El archivo de biblioteca para musl es libc.musl-x86_64.so.1
y el vinculador dinámico es ld-musl-x86_64.so.1
. Por lo tanto, los programas vinculados a glibc no podrán vincularse a musl libc.
Para ejecutar programas glibc en Alpine Linux, normalmente es necesario instalar glibc, como se describeaquí. En algunos casos, si solo se requiere compatibilidad básica con glibc, basta con instalar libc6-compat
cuál es el paquete de compatibilidad musl-glibc.
Sin embargo, una mejor alternativa es instalar el paquete Alpine correspondiente, si está disponible (según mi experiencia, en la mayoría de los casos lo está). En su caso, simplemente instale elwkhtmltopdf
paquete (Alpine 3.9+): apk add wkhtmltopdf
.