環境:Mac OS X(10.9.5 Mavericks)
結論から言うと、パスの優先順位の問題で、パスを直したらうまくいった。
軽く混乱気味なので、先に用語を整理(homebrewの勉強不足ですね。)
下記の記事でちょっと用語を整理
homebrewとは何者か。仕組みについて調べてみた
Homebrewまとめ
What does “brew link” do?
homebrew のサブコマンド一覧1 (a-i)
keg-only: Cellar だけにインストールされ、/usr/local にはリンクされていない formula のこと。これは、ほとんどのツールが当該の formula を見つけることができないことを意味する。(?) brew link を使えば、リンクすることはできる。
celler: インストール先。brew install でインストールしたパッケージがある場所。
formulate: パッケージのこと
brew link: シンボリックリンクを貼る。リンク先はbrew --prefixで表示されるパスのbinディレクトリに配置される。
以下本題。
下記の記事を参考にopensslをアップデートした。
しかし、brew link openssl --forceでシンボリックリンクを作成しても、古いバージョンのopensslを参照してしまう問題が発生した。
いろいろコマンドを実行して状況確認する。(opensslは更新済み。シンボリックリンクを作るところから)
opensslの新しいバージョンは正しくインストールされている。
brew list openssl
/usr/local/Cellar/openssl/1.0.2g/bin/c_rehash
/usr/local/Cellar/openssl/1.0.2g/bin/openssl
/usr/local/Cellar/openssl/1.0.2g/include/openssl/ (75 files)
/usr/local/Cellar/openssl/1.0.2g/lib/libcrypto.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.2g/lib/libssl.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.2g/lib/engines/ (12 files)
/usr/local/Cellar/openssl/1.0.2g/lib/pkgconfig/ (3 files)
/usr/local/Cellar/openssl/1.0.2g/lib/ (4 other files)
/usr/local/Cellar/openssl/1.0.2g/share/man/ (1575 files)
リンクをすると成功する。
$ brew link openssl --force
Linking /usr/local/Cellar/openssl/1.0.2g... 1588 symlinks created
リンクは成功しているが、バージョンは古いまま(最新は1.0.2g)
$ openssl version
OpenSSL 1.0.2d 9 Jul 2015
opensslとbrew linkのリンク先を確認すると、別のパスをさしている事がわかった。
パスの優先順位の問題じゃないかと疑う。
$ which openssl
/opt/local/bin/openssl
brew linkでのリンク先
$ brew --prefix
/usr/local
.bash_profileを見てみると、既存の/opt/local/binの方が優先順が先になっている。MacPortsが自動でPATHを追加したようだ。
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
なので、こいつをパスの最後につけるようにしてみる。
export PATH=$PATH:"/opt/local/bin:/opt/local/sbin"
パスの設定を変更したところで確認すると、Homebrewでインストールしたopensslを使ってくれてる模様。
$ which openssl
/usr/bin/openssl
$ openssl version
OpenSSL 1.0.2g 1 Mar 2016
これでopensslの更新完了。
単純な問題だった。もうちょっとパスの優先順位に気をつけていれば良かった。
※追記1
先日El Capitanにアップグレードしたところ、またパスが変わっていた。
どうやら、etc/pathsの設定を読み込むようになっていたらしい。こちらの記事を読んで、.zshenvに”setopt no_global_rcs”を追加することで、パスの問題を解決できた。
.zshenv で PATH を管理したら罠にハマった
※追記2
home brewでopensslをダウンロードしてbrew linkでlinkする方法は2016年8月くらいから使用できなくなった模様。
下記コマンドを実行すると、以下のようなメッセージが出力される
% brew link openssl --force
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib
下の記事によると、opensslのパスを直接通せばいいらしい。
brew link openssl --forceができない問題