ComposerでPackagistが読めない場合の対処法(on IPv6環境)
はじめに
composer install/update周りでハマったので残してとく。
事象
composer install/updateをローカル環境だと大丈夫だけど、
AWS上から叩いたらエラーになる
環境
EC2 + AMI + Jenkins pipline
事象
Jenkinsにcomposer installさせるとエラーになる。
Downloading (connecting...) Downloading (failed) [Composer\Downloader\TransportException] The "https://registry.npmjs.org/flatpickr/-/flatpickr-4.2.4.tgz" file could not be downloaded: failed to open stream: Connection timed out install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--ignore-platform-reqs] [--] []... script returned exit code 1
ファイルが取れないとか言ってるけど、ローカルだと上手くいくし、
node周り以外はダウンロードが上手くいっているので「???」な状態に。
やったこと
サーバー上でcomposer diag
結果
HTTP/HTTPSアクセスが両方コケる。
以下が出てきたので、
https://getcomposer.org/doc/articles/troubleshooting.md#operation-timed-out-ipv6-issues-
言われるがままに以下を実行
sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
IPv4を優先させるらしい。
リトライ
無事に成功 (プロジェクトなのでキャプチャとかは自重)
おわりに
端折って結果だけ書きましたが、 npm周りでしかエラーが出なかったので、npm周りの設定を疑ったりとかして色々見てました。
アーキテクチャがよく判ってないと、余計な周り道するなーと。
とりあえず、composer install/updateでエラーが出たら、
composer diagをぶっ叩くというのを徹底しようと思います。