Help us understand the problem. What is going on with this article?

Homebrew brew linkしてもリンクしたopensslを使ってくれない。

More than 3 years have passed since last update.

環境: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を参照してしまう問題が発生した。

Mac OS X の 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ができない問題

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away