76
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-06

環境: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ができない問題

76
74
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?