田舎の技術者が奮闘中

php ruby node.js javascript などのスクリプト言語とサーバー(Chef、Vagrant)に関して書きます。

LaravelのHomesteadにv8jsが使えるようにする。

Laravelは公式でHomesteadと呼ばれるVagrantが準備されています。
基本的なものはインストールされているのですが、それ以外のものをインストールしようとした時にハマった話です。。

Homesteadのインストール方法は Laravel Homestead - Laravel - The PHP Framework For Web Artisans を参考にして下さい。
ある程度準備が完了すると、~/.homesteadが出来ると思います。
今回は ~/.homestead/after.sh にv8jsインストール用のシェルスクリプトを記載します。

以下をコピペ

#!/bin/sh

sudo apt-get -y install g++

cd /tmp

if [ ! -e depot_tools ]; then
   git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
fi

export PATH=`pwd`/depot_tools:"$PATH"

if [ ! -e v8 ]; then
    fetch v8

    cd /tmp/v8
    git checkout 3.32.6

    gclient sync
    make native library=shared snapshot=off -j8

    sudo mkdir -p /usr/lib /usr/include
    sudo cp out/native/lib.target/lib*.so /usr/lib/
    sudo cp -R include/* /usr/include

    sudo ar -M <<SCRIPT
create /usr/lib/libv8_libplatform.a
addlib out/native/obj.target/tools/gyp/libv8_libplatform.a
save
end
SCRIPT
fi

if ! pecl list | grep -q v8js; then
    sudo pecl install v8js-1.0.0 << END_OF_INPUT
END_OF_INPUT
fi

if [ ! -e /etc/php/mods-available/v8js.ini ]; then
    echo "extension=v8js.so" > /etc/php/mods-available/v8js.ini
    sudo ln -s /etc/php/mods-available/v8js.ini /etc/php/7.0/cli/conf.d/20-v8js.ini
    sudo ln -s /etc/php/mods-available/v8js.ini /etc/php/7.0/fpm/conf.d/20-v8js.ini
fi

sudo service php7.0-fpm restart
sudo service nginx restart

詳細な説明は省きます。(ちょっとifの分岐がまだ完全じゃないです。)