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

  • 0
    いいね
  • 0
    コメント

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