Nightmareをec2で頑張って動かした備忘録


ブラウザ操作周りを自動化するのにNightmareでポチポチ作業してたんだけど
いざデプロイする際にec2で動かなくて詰んだ。

参考：
https://gist.github.com/dimkir/f4afde77366ff041b66d2252b45a13db

ほぼ上記のgistどおりで。ただgistもちょっと古いので動かすまでの備忘録


##動かないこと確認

###ともあれnightmareのインストール

```node
npm i nightmare --save
```

###nightmareのサンプルコードが付いてくるので実行

```node
DEBUG=nightmare node node_modules/nightmare/example.js
```

以下のようなログが出て来る。electron依存の部分がやっぱり動かない。

```log
...
you may not have electron installed correctly
...
```

##足りないライブラリ確認

nightmareを入れた時に依存で入ったelectronディレクトリへ移動

```sh
cd node_modules/electron/dist
```

```sh
ldd electron | grep 'not found'
```

以下ログ。この辺りが足りないはず

```log
        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でツールが提供されてるので引っ張って来る

```sh
curl -o- https://gist.githubusercontent.com/dimkir/52054dfca586cadbd0ecd3ccf55f8b98/raw/2b5ebdf28f6a1aad760b5ab9cc581e8ad12a49f5/eltool.sh > ~/eltool.sh && chmod +x ~/eltool.sh 
```

###eltool.shを使ってライブラリインストール

```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取得

```sh
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

```sh
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
```

###インストール確認

```sh
yum list installed | grep ORBit2
```

```log
ORBit2.x86_64                        2.14.17-6.el6_8               installed
ORBit2-devel.x86_64                  2.14.17-6.el6_8               installed
```

###再度gconfだけインストール

```sh
./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に持ってく必要があるので
###ディレクトリ移動

```sh
cd node_modules/electron/dist
```

###リンク貼りまくる

```sh
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ならライブラリの追加完了

```sh
ldd electron | grep 'not found'
```

##Xvfbの追加

###再度動作確認

```node
DEBUG=nightmare node node_modules/nightmare/example.js
```

###今度はxvfbが足りないって怒られる

```log
...
you may need xvfb 
...
```

###x-serverとかインストール

```sh
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のプログラム渡してあげる感じで。

```sh
xvfb-run -a --server-args="-screen 0 1366x768x24" node node_modules/nightmare/example.js
```

nightmareとawsでハマった人向け。