Composerを久々にダウンロードしようとしたらちょっとハマった

投稿日:

もう田舎は寒いですよ。

Composerを久々にダウンロードしようとしたらちょっとハマったのでメモしておきます。

2017-06-02 ここから追記

下にうだうだ書いていますが、

$ curl -sS https://getcomposer.org/installer | php

でダウンロードできるはずです。
もしダウンロードできなかった場合、続きに何か参考となる情報があるかもしれません。

2017-06-02 ここまで追記

前提条件

ローカル(Mac)での話です。
PHPのバージョンはPHP 5.6.24 (cli) (built: Aug 8 2016 16:58:37)です。

発端

Download Composer に書いてある通り(こんなにコマンドあったっけ?と思いつつ)以下をッターンしたんですが、

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

最初のphp -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"でこんなんでました。

Warning: copy(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in Command line code on line 1

Warning: copy(): Failed to enable crypto in Command line code on line 1

Warning: copy(https://getcomposer.org/installer): failed to open stream: operation failed in Command line code on line 1

え、ちょっとまってこんなの知らない。挫けずにちょっとググってみると
ComposerからLaravelを導入しようとしてOpenSSL周りのエラーで困った件 – Qiita
を発見しました。
でも何かphp.iniとかに設定を書くのは気が引けます。

2016-10-26 ここから追記
もう少し調べてみると、SSL通信時に発生する証明書エラーで結構知られているようですね。
※ クライアント側の証明書がちゃんと正しいかどうか(有効期限切れとか)

ですので、上記サイトの通りルート証明書ファイル(CA)を取得して設定するのもよさそうです。
SSL認証を無視させる方法もあるみたいですが。。

SSL認証を無視させる

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php', stream_context_create(
    array(
      'ssl' => array (
        'verify_peer' => false,
        'verify_peer_name' => false)
      )
    )
  );"

こうすればエラーにならないんですけど、
参考 : Quick Fix – SSL operation failed with code 1. OpenSSL Error messages

I know disabling SSL verification isn’t the best thing to do but I was running out of time because we had to ship quickly.

とある通り出来ればあまり真似しないほうがよさそうです。

でも大体curlでエラーになるっていう情報で溢れているんですが、

$ curl -sS https://getcomposer.org/installer | php

(いつもやっていた)これは動くんですよねぇ。。なんなんだろ。。
2016-10-26 ここまで追記

他の方法

他に方法は無いかなぁと探してみると冒頭の Download Composerhow to install Composer programmatically なるリンクがあるので見てみます。
うん。シェルが書いてありますね。

#!/bin/sh

EXPECTED_SIGNATURE=$(wget https://composer.github.io/installer.sig -O - -q)
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');")

if [ "$EXPECTED_SIGNATURE" = "$ACTUAL_SIGNATURE" ]
then
    php composer-setup.php --quiet
    RESULT=$?
    rm composer-setup.php
    exit $RESULT
else
    >&2 echo 'ERROR: Invalid installer signature'
    rm composer-setup.php
    exit 1
fi

こちらを composer.sh とかで保存しておきます。
そうしたらsh composer.sh で実行します。

Warning: copy(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in Command line code on line 1

Warning: copy(): Failed to enable crypto in Command line code on line 1

Warning: copy(https://getcomposer.org/installer): failed to open stream: operation failed in Command line code on line 1
ERROR: Invalid installer signature

お、おぅ。同じエラー。(そりゃそうだ)

他の方法2

諦めたらダメです。諦めたらそこで人間終了と誰かが言っていました。
シェルの下にこういうのも書いています。

Alternatively if you want to rely on an exact copy of the installer you can fetch a specific version from github’s history.
The commit hash should be enough to give it uniqueness and authenticity as long as you can trust the GitHub servers. For example:

wget https://raw.githubusercontent.com/composer/getcomposer.org/1b137f8bf6db3e79a38a5bc45324414a6b1f9df2/web/installer -O – -q | php — –quiet

You may replace the commit hash by whatever the last commit hash is on https://github.com/composer/getcomposer.org/commits/master

GitHubの履歴から特定のバージョンを取得することができるとのことです。

wget https://raw.githubusercontent.com/composer/getcomposer.org/1b137f8bf6db3e79a38a5bc45324414a6b1f9df2/web/installer -O - -q | php -- --quiet

のコミットハッシュ値1b137f8bf6db3e79a38a5bc45324414a6b1f9df2https://github.com/composer/getcomposer.org/commits/master から選択しろと言っていますので最新のコミットハッシュ値を使ってみます。

composer_getcomposer_org

キャプチャの通り最新(1.2.1)のコミットハッシュf36ea4aefc6c80ae074a67b33bf6942f0525f1c2を使ってやってみます。

wget https://raw.githubusercontent.com/composer/getcomposer.org/f36ea4aefc6c80ae074a67b33bf6942f0525f1c2/web/installer -O - -q | php -- --quiet

何も反応無く終わればダウンロード終了です。
コマンドを叩いたディレクトリにcomposer.pharがあるはずです。

一応確認します。

$ php composer.phar --version
Composer version 1.2.1 2016-09-12 11:27:19

んふ、おk。
グローバルに使いたければ、

mv composer.phar /your/path/to/composer

をしてパスを通します。

最後に

ローカルで使いたいだけだったら、Download Composer の一番下に Manual Downloadがあり、その下のリンク一覧からダウンロードできます。

最初からこれでよかった疑惑。
でもほらレシピとか書く場合とかね。

とりあえず以上です。

作成者: shimabox

Web系のプログラマをやっています。 なるべく楽しく生きていきたい。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください