要約
Webページから主にリンクなどの情報を抽出するアプリを作成した際、VPS上へのpuppeteerのインストール時に不足しているファイルが存在していて、解決に少し時間がかかりました。
必要なライブラリさえ判明すればすぐ終わるタスクのため、そのライブラリの一覧を共有します。
参考になれば幸いです。
前提
- OSはDebian12(XServer VPSの4GBプランに構築)を使用
- Node.jsはvolta経由でインストール済み
- puppeteerパッケージはnpm i puppeteerでインストール済み
この記事ではapt-getコマンドを使用していますが、aptコマンドでのインストールの方がユーザーに易しいようです。必要に応じてaptコマンドに読み替えても問題ないと思います。
必要なライブラリをインストール
puppeteerには軽量版の「old Headless mode」と通常のchromiumに近い通常版の2通りのブラウザが同梱されています。
そのため、一覧表は2つに分けています。
必要な範囲で「インストールするライブラリ」に記載のパッケージをインストールしてください。
全部インストールしても問題無いです。私の環境では全部インストールしました。
ライブラリと呼んでいますが、インストールするパッケージのファイル名でライブラリと判断しています。
間違っていたらすみません。
sudo apt-get install 「インストールするライブラリ」
軽量版
| 不足ファイル | インストールするライブラリ(パッケージ) |
|---|---|
| libnspr4.so | libnspr4 |
| libnss3.so | libnss3 |
| libnssutil3.so | libnss3 |
| libatk-1.0.so.0 | libatk1.0-0 |
| libatk-bridge-2.0.so.0 | libatk-bridge2.0-0 |
| libatspi.so.0 | libatspi2.0-0 |
| libX11.so.6 | libx11-6 |
| libXcomposite.so.1 | libxcomposite1 |
| libXdamage.so.1 | libxdamage1 |
| libXext.so.6 | libxext6 |
| libXfixes.so.3 | libxfixes3 |
| libXrandr.so.2 | libxrandr2 |
| libgbm.so.1 | libgbm1 |
| libxcb.so.1 | libxcb1 |
| libxkbcommon.so.0 | libxkbcommon0 |
| libasound.so.2 | libasound2 |
通常版
軽量版に加えて、以下が必要です。
| 不足ファイル | インストールするライブラリ(パッケージ) |
|---|---|
| libsmime3.so | libnss3 |
| libcups.so.2 | libcups2 |
| libcairo.so.2 | libcairo2 |
| libpango-1.0.so.0 | libpango-1.0-0 |
これで一応は問題なく動くはずです。
私のウェブアプリでは、たまにどのページにアクセスしてもタイムアウトする現象が起きますが、サーバーの再起動で直るので一旦放置しています。
不足ファイルの調査方法
不足ファイルの調査方法は以下です。
まず、lddコマンドでpuppeteer付属のchromeの依存ファイルのうち、不足しているもののリストを取得します。
lddコマンドでは実行ファイルの絶対パスが必要です。
puppeteerで使用するchromiumは~/.cache/puppeteer/配下に格納されています。
軽量版は~/.cache/puppeteer/chrome-headless-shell/linux-140.0.7339.82/chrome-linux64/chrome-headless-shell
通常版は~/.cache/puppeteer/chrome/linux-140.0.7339.82/chrome-linux64/chrome
となっているはずです。
「linux-140.0.7339.82」の箇所はおそらくchromiumのバージョンによって異なるはずです。
以下のコマンドでは、私の環境での値を使用しています。
ldd ~/.cache/puppeteer/chrome/linux-140.0.7339.82/chrome-linux64/chrome | grep 'not found'
不足ファイルを使用しているパッケージをapt-fileコマンドで探します。
apt-file search 「不足しているファイル名」
apt-fileコマンドは標準ではインストールされていません。コマンドが存在しない場合は
sudo apt-get install apt-file
でインストールしてください
「パッケージ名: ファイルパス」の形で出力されます。
このパッケージ名でインストールを行ってください。
sudo apt-get install 「パッケージ名」
VPS上でのpuppeteer使用時の注意点
GUI(Graphical User interface)のないVPS上のOSで使用しているためか、アクセスするページによってはWebGPU関連のエラーがchromiumのコンソールに記録される場合があります。
前述の通り、少なくとも通常版は常駐させると、たまにどのページにアクセスしてもタイムアウトするなど、挙動が不安定になる場合があります。
軽量版はexample.comのような軽いページでは問題ないですが、重いページにアクセスするとタイムアウトします。
以上です。何か間違いなどがありましたら、お手数ですが指摘していただけると助かります。