我が家は図書館を頻繁に利用するのですが、1つ不満なことがありました。
それは「誰がどの本を予約していて今どの本を借りているのか」を見るために、わざわざ各々のIDとPWでログインしていちいち確認しないといけない点です。
我が家は本を借りまくります。
なので「今何を借りているのか」「何を予約しているのか」を忘れがちになるのです。
そんなわけで「ログインしなくても指定のアドレスにアクセスすれば全員分の貸出一覧・予約一覧が見れるようにしたいなぁ」と思って、Node.js + puppeteerを使って利用している図書館の
- 貸出一覧
- 予約一覧
を自動で取得→それを元にHTMLファイルを作成→HTMLファイルをサーバーに自動でデプロイする・・・というプログラムを作りました。
それでデプロイしたのがコレです↓
https://library-osakashi.web.app/(GitHubソース)
作ったまでは良かったのですが、「作ったプログラムをどうやって定期実行させるか」は深く考えていなくて
今契約しているレンタルサーバー(Xサーバー:x10プラン)上で動かせるだろーと軽く考えていました。
ところがどっこい、実際にXサーバー上で動かしてみると以下のようなエラーが出て動きませんでした🤔
UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!
/home/○○○○/penpen-dev.com/public_html/library-list/node_modules/puppeteer/.local-chromium/linux-869685/chrome-linux/chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
要約すると
launchできなかったよ!
chromeを動かすときにlibatk-1.0.so.0ってファイルが見つからなかったよ!
って言われてるみたい。
このエラー名でググってみると、「Linuxとかの場合は追加でインストールしないといけないパッケージがあるかもだぜ」みたいなことが書かれていたので
lddというコマンドを使って「実行ファイルが利用する共有ライブラリ一覧」を見てみると、以下のようにnot found
と書かれたライブラリが不足しているとのこと。
$ ldd ./node_modules/puppeteer/.local-chromium/linux-869685/chrome-linux/chrome | grep "not" libatk-1.0.so.0 => not found libatk-bridge-2.0.so.0 => not found libxkbcommon.so.0 => not found libXcomposite.so.1 => not found libgtk-3.so.0 => not found libgdk-3.so.0 => not found libatspi.so.0 => not found
なるほどな。じゃあこれらを追加すればいいのか。
と思ったのですが、追加するには管理者権限(su,sudo)が必要。だけどXサーバーには管理者権限がない。
え?詰んでね?😭😭😭
厳密にいうとXサーバーのように、管理者権限がないサーバーの場合は
- 開発環境(C,C++)を用意する
- 自分でソースコードをダウンロードしてきて、自分でビルドする
- 環境変数の
LD_LIBRARY_PATH
にパスを設定する - 3.で設定したパスにビルドした共有ファイルを突っ込む
みたいにすれば共有ライブラリを手動で追加できるっぽいけど、難易度高くね・・・?何より面倒くさすぎね・・・?
不足しているライブラリが1つだけなら「頑張ってビルドしてみるか」とか思えたかもだけど、ライブラリごとにソースをダウンロードしてきてビルドしなきゃいけないとか面倒くさすぎて死ぬ・・・。
管理者権限さえあればパッケージ管理コマンドを叩くだけなのに・・・。
というわけで私はもう諦めました😑
その代わりに、自分のローカルのパソコンで以下のようなバッチファイルを作って
cd /C/Users/○○○○/dev/library-fetch/ node index.js firebase deploy
それをタスクスケジューラー(Windowsなので)に登録して、30分ごとに実行するという風にしました。
自分の場合、ほぼ1日中パソコンを起動しているし、まぁこれでも特に不都合はないだろうということで。
(デプロイにfirebaseを使っているのは「firebaseを使ってみたかった」というのと「無料の範囲内で使えるから」です。)
それにしても今までレンタルサーバーで不自由を感じたことはなかったけど、今回はじめて不自由を味わったぜ!😋
おわり
参考にしたページなど:
puppeteerをcentos7/8に入れて動かす時のポイント
CentOS7で実行ファイルの不足している依存関係を解消する(CentOS7でElectronが試せない話に関連して) – Qiita
コメント