composer.pharは1行目のshebangが
#!/usr/bin/env php
となっているので、コマンドとして叩くとphpで実行されてしまいます。
hhvmで起動するためには
$ hhmv --php composer.phar
とする必要があります。
しかしこれは面倒くさい。
composer.pharは改ざんするとエラーになる
じゃあshebangを書き換えればいいじゃないかと思って
- #!/usr/bin/env php
+ #!/usr/bin/hhvm --php
と書き換えて実行してみると、
$ ./composer.phar
Fatal error: Uncaught exception 'PharException' with message 'phar has a broken signature' in :
Stack trace:
#0 (): Phar->parsePhar()
#1 (): Phar->__construct()
#2 /usr/local/bin/composer.phar(23): Phar::mapPhar()
#3 {main}
むむむ・・「シグネチャが壊れた」というエラーメッセージが。
composer.pharにはコンテンツ改ざん検知の仕組みがあって、中身が改ざんされたらエラーになってしまうようです。
なんとおせっかい、いや、セキュアなことでしょう。
対策:ラップコマンドを作ればおk
とりあえずオリジナルのcomposer.pharをパスの通った場所に設置して、
mv composer.phar /usr/local/bin/composer.phar
下記のようなラップコマンドをつくって/usr/local/bin/composer
として保存します。
/usr/local/bin/composer
#!/bin/bash
# simply delegate to composer.phar
dir=$(cd $(dirname $0);pwd)
exec hhvm --php $dir/composer.phar "$@"
こうすると、composer
と叩くだけで hhvm経由でcomposer.pharを起動することができます。