ブラウザ操作周りを自動化するのに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でハマった人向け。