wkhtmltopdfをAmazon Linux 2023にインストールする方法
HTMLからPDFを生成するのに便利なwkhtmltopdfですが、開発が止まってしまっている関係でインストールに難アリなんですよね…!
公式サイトのダウロードページを見ると、
https://wkhtmltopdf.org/downloads.html
という感じでAmazon Linux 2023向けのrpmファイルが提供されていないんですよねー。
CentOSの乗り換え先として使う事がちょいちょい出てきたAlma Linux 9だと対応してくれてるので何とかなってたんですが、
Amazon Linux 2023への引っ越し案件が来てついに壁にぶち当たりました…。
ネットで探すと「AlmaLinux 9向けのrpmファイルでインストールできるかも!」とか、
「乗り換え先のソフトはこれだよ!」とか出てくるんですが、
公式のGitHubでAmazon Linux 2023についての話が出ていて、自前でrpmファイルをビルドすればイケそうな雰囲気だったので試してみました!
■Amazon Linux 2023へのインストールについて話してるissue
https://github.com/wkhtmltopdf/packaging/issues/154
作業環境について
今回の記事では
【環境1:wkhtmltopdfをビルドする環境】
【環境2:wkhtmltopdfをインストールする環境】
の2環境を用意しています。
両方ともOSはAmazon Linux 2023です。
作業の流れは
1. 【環境1:wkhtmltopdfをビルドする環境】でrpmファイルをビルドする。
2. SFTPでローカルにダウンロードする。
3. 【環境2:wkhtmltopdfをインストールする環境】にrpmファイルをSFTPでアップロードする。
4. rpmファイルからwkhtmltopdfをインストールする。
という感じです。
1つの環境でビルド&インストールすることは可能です。
ただ、インストールする環境にビルド用のツールを入れれない場合もあるでしょうし、
ビルドしたrpmファイルは手元に残しておけば使いまわしができるので、一時的にビルド用のEC2インスタンスを作っちゃうのが無難ですね。
【環境1:wkhtmltopdfをビルドする環境】のインスタンスタイプは「c5.large」です。
ビルド時に1時間ほどCPUがフル稼働するので、CPUクレジットが必要なt系は避けた方が良いですね。
rpmファイルをビルドしてインストールする方法
【環境1:wkhtmltopdfをビルドする環境】にビルド用のソフトをインストールする。
まずは【環境1:wkhtmltopdfをビルドする環境】にSSHでログインして以下のコマンドを打っていきます。
まずはビルドに必要なソフト類のインストールです。
※rootで作業しちゃいます。
$ sudo su -
# yum -y install git
# yum -y install p7zip
# yum -y install docker
# systemctl start docker
# yum -y install python-unversioned-command
最後にインストールしている「python-unversioned-command」ですが、これは古いpythonとの互換性を保つためのやつですね。
Amazon Linux 2023にはPython 3が入っているので、「python3」コマンドが使えるようになってます。
しかし、wkhtmltopdfのビルドツールはおそらく開発された時期的にPython 2系での動作を想定しているのか、
「python」コマンドが使えないとビルド時に
「/usr/bin/env: ‘python’: No such file or directory」
って感じでエラーっちゃうんですよね。
「python-unversioned-command」をインストールすると「python」コマンドが使えるようになって、無事にビルドできるって感じですね。
【環境1:wkhtmltopdfをビルドする環境】にビルド用のソースをダウンロードする。
次はビルド用のソース類をダウンロードします。
作業用ディレクトリとして「/home/temp」を作っていきます。
# cd /home
# mkdir temp
# cd temp
# git clone --branch 0.12.6.1-3 https://github.com/wkhtmltopdf/packaging.git
→「packaging」ディレクトリが出来上がります。
# git clone --recurse-submodules --branch 0.12.6.x https://github.com/wkhtmltopdf/wkhtmltopdf.git
→「wkhtmltopdf」ディレクトリが出来上がります。
この操作でダウンロードしてるのは以下の3個ですね。
・wkhtmltopdfのビルドツール
・wkhtmltopdf本体
・wkhtmltopdf本体で使うQt WebKit rendering engine
ビルドツールは
https://github.com/wkhtmltopdf/packaging
で、「Releases」にある最新の「0.12.6.1 r3」を指定してダウンロードしています。
本体は
https://github.com/wkhtmltopdf/wkhtmltopdf
ですね。
記事の最初の方で紹介したIssueによると
https://github.com/wkhtmltopdf/packaging/issues/154
> Please confirm that you used the 0.12.6.x branch of the main repository.
翻訳:メインリポジトリの 0.12.6.x ブランチを使用したことを確認してください。
という感じで「0.12.6.x」ブランチだとうまくいくってことだったので「0.12.6.x」を指定してダウンロードしています。
Qtは本体をダウンロードする時に「--recurse-submodules」オプションを付けると一緒に落ちてきます。
【環境1:wkhtmltopdfをビルドする環境】でビルドする。
これで準備は整ったので、ビルドしていきましょう!
# cd /home/temp/packaging
# ./build package-docker amazonlinux2023-x86_64 ./../wkhtmltopdf
・・・略・・・
make[1]: Leaving directory '/tgt/app/src/image'
Unable to find image 'wkhtmltopdf/fpm:1.10.2-20221124' locally
1.10.2-20221124: Pulling from wkhtmltopdf/fpm
a603fa5e3b41: Pull complete
824cc1987b4c: Pull complete
36e7129cddea: Pull complete
de3e10db531f: Pull complete
479dda4422d3: Pull complete
0cbd5c2fc6ce: Pull complete
c2006d0524d1: Pull complete
Digest: sha256:01d321510c80104c860987f21ce9ea8da4de1aca16663cbbfbf49e8b73e969d0
Status: Downloaded newer image for wkhtmltopdf/fpm:1.10.2-20221124
Doing `require 'backports'` is deprecated and will not load any backport in the next major release.
Require just the needed backports instead, or 'backports/latest'.
{:timestamp=>"2026-09-16T08:23:16.677427+0000", :message=>"Created package", :path=>"wkhtmltox-0.12.6.1-1.amazonlinux2023.x86_64.rpm"}
ビルドは1時間くらいかかるので、しばらく待ちましょう。
成功すると「/home/temp/packaging/targets」配下に
「wkhtmltox-0.12.6.1-1.amazonlinux2023.x86_64.rpm」が出来上がります!
後はこのrpmファイルをSFTPで手元のパソコンにダウンロードして【環境1:wkhtmltopdfをビルドする環境】での作業は終了です。
【環境2:wkhtmltopdfをインストールする環境】にwkhtmltopdfをインストールする。
先ほど手元のパソコンにダウンロードした
「wkhtmltox-0.12.6.1-1.amazonlinux2023.x86_64.rpm」を
SFTPで【環境2:wkhtmltopdfをインストールする環境】にアップロードしてください。
ここからは公式サイトからrpmファイルをダウンロードしてインストールするのとまったく一緒の手順です。
「/home/install_temp」配下にrpmファイルを保存したとして話を進めていきます。
$ sudo su -
# /home/install_temp
# yum -y install xorg-x11-fonts-75dpi
# yum -y install xorg-x11-fonts-Type1
# yum -y install libjpeg-turbo
# rpm -ivh wkhtmltox-0.12.6.1-1.amazonlinux2023.x86_64.rpm
# wkhtmltopdf -V
wkhtmltopdf 0.12.6.1 (with patched qt)
やりましたね!
Amazon Linux 2023でもインストールできちゃいました!
試しに「/home/install_temp」に「test.html」と「image.jpg」を置いて、
「test.html」には
<html>
<head></head>
<body>
<h1>PDF Test</h1>
<hr>
<img src="./image.jpg" style="width: 300px;">
<hr>
</body>
</html>
という感じでローカル画像を読み込むようなHTMLを書いて、
# wkhtmltopdf --enable-local-file-access test.html test.pdf
とやると、
という感じで超バッチリPDFが生成されちゃいましたね!
実際のサーバー引っ越し案件で使ってる感じだと特に問題無く動いているので、
Amazon Linux 2023でもまだまだ使っていけそうですね!
いつかは別の方法に切り替えていかないといけませんが、ひとまずは自前でビルドして乗り切っていきましょう!