/bin/sh: /usr/bin/wkhtmltopdf: 見つかりません

/bin/sh: /usr/bin/wkhtmltopdf: 見つかりません

/bin/sh: wkhtmltopdf/usr/bin/ディレクトリをインストールしました。しかし、シェル を入力してプログラムを実行しようとすると、/usr/bin/wkhtmltopdfエラーが発生します/bin/sh: /usr/bin/wkhtmltopdf: not found。ただし、 と入力すると動作しますsh /usr/bin/wkhtmltopdf。なぜでしょうか。また、どうすれば修正できますか。

権限は次のとおりですls -l:

-rwxr-xr-x 1 1000 1000 38.0M Nov 22 2016 wkhtmltopdf

type -a wkhtmltopdf : /usr/bin/wkhtmltopdf

編集:

私が使用しているOSはAlpine Linuxです

出力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)

Docker で次のコマンドを実行して wkhtmltopdf をインストールしました。

 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

答え1

出力からわかるようにldd、このwkhtmltopdfバイナリはglibcに対してビルドされており、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)

libcライブラリは、C 標準ライブラリ関数、POSIX API ( libc.so.6)、および動的リンカー ( ld-linux-x86-64.so.2) を実装します。glibc は最も一般的な libc 実装であり、ほとんどの Linux ディストリビューションで使用されます。

Alpine Linuxでは、musl-libcが使用されます。musl は本質的に非常にミニマルであり、強力な POSIX 準拠を目指しています。musl のライブラリ ファイルは でlibc.musl-x86_64.so.1、ダイナミック リンカーは ですld-musl-x86_64.so.1。したがって、glibc にリンクされたプログラムは musl libc にリンクできません。

Alpine Linuxでglibcプログラムを実行するには、通常、説明されているようにglibcをインストールする必要があります。ここlibc6-compat場合によっては、基本的な glibc 互換性のみが必要な場合は、 musl-glibc 互換性パッケージをインストールするだけで十分です。

しかし、より良い代替案は、対応するAlpineパッケージが利用可能であれば、それをインストールすることです(私の経験では、ほとんどの場合利用可能です)。あなたの場合は、wkhtmltopdfパッケージ (Alpine 3.9+): apk add wkhtmltopdf.

関連情報