![在 macOS 10.15.6 上使用 Homebrew 安装的 OpenSSL 似乎停留在版本 @1.1,是否可以获取最新版本?](https://linux22.com/image/1633196/%E5%9C%A8%20macOS%2010.15.6%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20Homebrew%20%E5%AE%89%E8%A3%85%E7%9A%84%20OpenSSL%20%E4%BC%BC%E4%B9%8E%E5%81%9C%E7%95%99%E5%9C%A8%E7%89%88%E6%9C%AC%20%401.1%EF%BC%8C%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%EF%BC%9F.png)
我正在使用 macOS 10.15.6 Catalina 和 Homebrew(最新版本 2.5.1)。当我这样做时,我注意到我的已安装公式列表中brew list
有一个。[email protected]
我不记得我是否曾经openssl
手动安装过或者它是否附带其他公式,但我肯定从未@1.1
自己明确选择过该版本。
当我openssl version
这样做时,它说LibreSSL 2.8.3
。
当我brew install openssl
这样做时它说:
警告:[电子邮件保护]1.1.1g 已安装且为最新版本
要重新安装 1.1.1g,请运行brew reinstall [email protected]
相反,我尝试了brew install libressl
。安装成功,但现在我openssl version
仍旧提示LibreSSL 2.8.3
。
但是如果我这样做,它会/usr/local/opt/libressl/bin/openssl version
说LibreSSL 3.1.4
哪个版本似乎更新。所以现在显然安装了两个版本,但“默认”版本仍然是旧版本。
两个问题:
我只想使用最新的 openssl(或 libressl)。运行时
openssl
我希望它调用可用的最新版本。我可以或应该以某种方式删除该@1.1
版本并只安装最新的 openssl 吗?或者像我一样安装 libressl,但我希望它是默认的,而不是旧的。考虑到 @1.1 版本可能出于某种原因而存在,这是否意味着依赖于该特定版本的其他软件将不再工作?这感觉有点糟糕,例如,如果我碰巧有两个软件,每个软件都依赖于不同的特定版本,该怎么办?我可以指示依赖于旧 openssl 版本的软件使用该旧版本的特定路径,同时仅保持
openssl
(没有明确路径)为最新版本吗?
答案1
MacOS 包含一个旧版本的openssl
,这是路径中的默认版本,也是您将看到的版本(尝试which openssl
查看您的计算机上会选择哪一个)。
Homebrew 安装[email protected]
到/opt
,这意味着您需要从那里明确调用它,并且如果您想将编译的其他程序链接到它,则需要设置库路径等。
libressl 也一样。
我只想使用最新的 openssl(或 libressl)。
我猜是二进制文件吧?一种方法是将您自己的$HOME/bin
目录添加到 shell 中的前面PATH
(无论如何我都推荐这样做),然后openssl
在其中创建一个调用您要使用的版本的 shell 脚本。当您这样做时,您不会弄乱任何其他东西。
这是否意味着依赖该特定版本的其他软件将不再运行?
确实如此。这就是为什么你不应该替换 MacOS 自带的那个。
我可以指示依赖旧 openssl 版本的软件使用该旧版本的特定路径吗?
如果您以相反的方式执行此操作(在终端中使用不同的 PATH),那么您从终端外部调用的任何内容都不会中断,首先。
回答评论中的问题:
我有
~/.profile
一个export PATH=$HOME/bin:$PATH
在里面。
看这个答案即:创建一个
~/bin/openssl
文件#!/bin/bash exec /usr/local/opt/libressl/bin/openssl "$@"
在里面。别忘了chmod a+x ~/bin/openssl
。
环境将被传递,重定向将应用。通配符将在第一次调用时解析,但以解析后的形式传递。