ブラウザ操作周りを自動化するのにNightmareでポチポチ作業してたんだけど
いざデプロイする際にec2で動かなくて詰んだ。
参考:
https://gist.github.com/dimkir/f4afde77366ff041b66d2252b45a13db
ほぼ上記のgistどおりで。ただgistもちょっと古いので動かすまでの備忘録
動かないこと確認
ともあれnightmareのインストール
npm i nightmare --save
nightmareのサンプルコードが付いてくるので実行
DEBUG=nightmare node node_modules/nightmare/example.js
以下のようなログが出て来る。electron依存の部分がやっぱり動かない。
...
you may not have electron installed correctly
...
足りないライブラリ確認
nightmareを入れた時に依存で入ったelectronディレクトリへ移動
cd node_modules/electron/dist
ldd electron | grep 'not found'
以下ログ。この辺りが足りないはず
libgtk-x11-2.0.so.0 => not found
libgdk-x11-2.0.so.0 => not found
libatk-1.0.so.0 => not found
libpangocairo-1.0.so.0 => not found
libgdk_pixbuf-2.0.so.0 => not found
libcairo.so.2 => not found
libpango-1.0.so.0 => not found
libXcursor.so.1 => not found
libXdamage.so.1 => not found
libXrandr.so.2 => not found
libXfixes.so.3 => not found
libXss.so.1 => not found
libgconf-2.so.4 => not found
libcups.so.2 => not found
ライブラリを追加して回る
参考のgistでツールが提供されてるので引っ張って来る
curl -o- https://gist.githubusercontent.com/dimkir/52054dfca586cadbd0ecd3ccf55f8b98/raw/2b5ebdf28f6a1aad760b5ab9cc581e8ad12a49f5/eltool.sh > ~/eltool.sh && chmod +x ~/eltool.sh
eltool.shを使ってライブラリインストール
./eltool.sh dev-tools # installs gcc compiler and some libs
./eltool.sh dist-deps # we install prebuilt dependencies from Amazon Linux repos by using yum
./eltool.sh centos-deps # we install some prebuil dependencies we can take from CentOS6 repo
# There's still a number of libraries which need to compile from source
./eltool.sh gconf-compile gconf-install
./eltool.sh pixbuf-compile pixbuf-install
./eltool.sh gtk-compile # this will take 3 minutes on t2.small instance
./eltool.sh gtk-install
gistのままやるとgconf-compileでORBitのインストールうまくいかないので
ORBitだけ先に入れてやる
ORBit取得
wget ftp://195.220.108.108/linux/centos/6.9/os/x86_64/Packages/ORBit2-devel-2.14.17-6.el6_8.x86_64.rpm
wget ftp://195.220.108.108/linux/centos/6.9/os/x86_64/Packages/ORBit2-2.14.17-6.el6_8.x86_64.rpm
取って来たrpmをlocalinstall
yum localinstall ORBit2-2.14.17-6.el6_8.x86_64.rpm
yum localinstall ORBit2-devel-2.14.17-6.el6_8.x86_64.rpm
インストール確認
yum list installed | grep ORBit2
ORBit2.x86_64 2.14.17-6.el6_8 installed
ORBit2-devel.x86_64 2.14.17-6.el6_8 installed
再度gconfだけインストール
./eltool.sh gconf-compile gconf-install
ライブラリをelectronのディレクトリにリンク貼る
libgconf-2.so.4とlibgtk-x11-2.0.so.0とlibgdk-x11-2.0.so.0とlibgdk_pixbuf-2.0.so.0はelectronのdistに持ってく必要があるので
ディレクトリ移動
cd node_modules/electron/dist
リンク貼りまくる
ln -PL /usr/local/lib/libgconf-2.so.4
ln -PL /usr/local/lib/libgtk-x11-2.0.so.0
ln -PL /usr/local/lib/libgdk-x11-2.0.so.0
ln -PL /usr/local/lib/libgdk_pixbuf-2.0.so.0
確認
以下のコマンド叩いてemptyならライブラリの追加完了
ldd electron | grep 'not found'
Xvfbの追加
再度動作確認
DEBUG=nightmare node node_modules/nightmare/example.js
今度はxvfbが足りないって怒られる
...
you may need xvfb
...
x-serverとかインストール
sudo yum -y install xorg-x11-server-Xorg xterm # x-server
sudo yum -y install xorg-x11-drv-vesa xorg-x11-drv-evdev xorg-x11-drv-evdev-devel # x-drivers
sudo yum -y install Xvfb
nightmareの動作確認
xvfbを起動しつつサンプルプログラムの実行
以下の形でxvfb-runにnodeのプログラム渡してあげる感じで。
xvfb-run -a --server-args="-screen 0 1366x768x24" node node_modules/nightmare/example.js
nightmareとawsでハマった人向け。