wkhtmltopdfのインストール方法(Amazon Linux2/Alpine Linux)


コンテナにwkhtmltopdfをインストールした時にいろいろつまづいたのでメモしました。
基本的な手順は以下で確認。
https://laox.com/ja/9mcv

Amazon Linuxの場合

1.wkhtmltopdfのダウンロード

公式リポジトリから必要なバージョンのパッケージをダウンロードします。

cd /tmp
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.centos6.x86_64.rpm

2.必須フォントのインストール

rpmコマンドでインストールする場合、無いとwkhtmltopdfのインストールの時に怒られるので仕方なく。
後述しますがyumで

yum install -y xorg-x11-fonts-75dpi xorg-x11-fonts-Type1 

3.wkhtmltopdfのインストール

ここからが参照元のページのようにうまくいかなかったところ。インストール用コマンドは以下。

rpm -Uvh wkhtmltox-0.12.6-1.centos6.x86_64.rpm

実行してみると・・・

rpm -Uvh wkhtmltox-0.12.6-1.centos6.x86_64.rpm
error: Failed dependencies:
        openssl is needed by wkhtmltox-1:0.12.6-1.centos6.x86_64

どうやらダウンロード・保存されたファイル名が求められているファイル名と違う様子。

pwd
/tmp
ls -ltr
total 13252
-rw-r--r-- 1 root   root   13564280 Jun 11  2020 wkhtmltox-0.12.6-1.centos6.x86_64.rpm

ちなみにrpmのオプションは下記のような内容。

-U:rpm -U は、パッケージの必要に応じて アップグレード または インストール のいずれかの機能を実行できます。
-vh:-v および -h のオプション(-U と組み合わされる)により、rpm は、詳細出力を表示し、ハッシュマークを使って進行メーターを表示します。

なぜダウンロードしたファイル名そのままで使用できないんだろう。
ちなみにopensslがお望みのファイル名でダウンロードできないか試したところ、404エラー。
ファイル名の変更も考えたけどそれは違う気がする。
パッケージの依存関係を調べてみる。

rpm -qRp wkhtmltox-0.12.6-1.centos6.x86_64.rpmca-certificates
fontconfig
freetype
glibc
libX11
libXext
libXrender
libjpeg
libpng
libstdc++
openssl
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
xorg-x11-fonts-75dpi
xorg-x11-fonts-Type1
zlib

この依存関係にあるものたちは全てインストールされているのだろうか。
一応yumコマンドでも試してみる事に。

yum install -y wkhtmltox-0.12.6-1.centos6.x86_64.rpm
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/3): make-3.82-24.amzn2.x86_64.rpm                       | 420 kB  00:00:00     
(2/3): openssl-1.0.2k-19.amzn2.0.4.x86_64.rpm              | 495 kB  00:00:00     
(3/3): openssl-libs-1.0.2k-19.amzn2.0.4.x86_64.rpm         | 1.2 MB  00:00:00 

足りなかったと思われるパッケージのダウンロードからやってくれている様子。
その結果、

wkhtmltopdf -V
wkhtmltopdf 0.12.6 (with patched qt)

インストールされた!
yumだと依存パッケージも一緒にインストールしてくれるのでうまくいくらしい。

Alpine Linuxの場合

同じqtパッチが適用されたパッケージをインストールしようと思ったら、公式では用意が無いらしい。
issueでいろいろやり取りがあるけど最終的にパッチ適用バージョンを作っていないように見える。
https://github.com/wkhtmltopdf/packaging/issues/2

下記のような情報を参考に自分でパッチをあてるしかないらしい。
(Alpine Linuxやwkhtmltopdf自体のバージョンにもよるかも)
https://github.com/alloylab/Docker-Alpine-wkhtmltopdf/blob/master/Dockerfile

■おまけ

いざ使おうと思ったら文字化け発生!

作業はroot、実際使うのはapacheだからパーミッションの問題?
と思ったら読み取り可。

ls -ltr /usr/share/fonts/IPAexfont00301/          
total 13524
-rw-r--r-- 1 root root 7776964 Dec 21 16:17 ipaexm.ttf
-rw-r--r-- 1 root root 6041284 Dec 21 16:17 ipaexg.ttf
-rw-r--r-- 1 root root    1592 Dec 21 16:17 Readme_IPAexfont00301.txt
-rw-r--r-- 1 root root   20564 Dec 21 16:17 IPA_Font_License_Agreement_v1.0.txt

この時急いで修正したので、どう対応したか忘れてしまった、、
呼び出す側のコードの方を修正して改善したような。
次文字化けに出会ったら今度はちゃんと書こう。