我正在使用 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
。
环境将被传递,重定向将应用。通配符将在第一次调用时解析,但以解析后的形式传递。