解决Homebrew安装出现Calling `sha256 “digest“ => :tag` in a bottle block is disabled

在Mac上通过brew安装软件包时遇到错误:`sha256`digest`在bottle block中被禁用。尝试使用`brew style --fix`修复未成功。更新brew后,问题得到解决,可以正常安装工具包。建议在更新过程中使用代理以加快速度。

问题描述

在Mac上使用brew安装某个工具包时出现以下错误

scrcpy: Calling `sha256 "digest" => :tag` in a bottle block is disabled! Use `brew style --fix` on the formula to update the style or use `sha256 tag: "digest"` instead

根据提示使用brew style --fix进行修复后也不行。

解决方案

更新brew。

adodeMacBook-Pro:~ ado$ brew update
.........

这个过程可能会很长,建议开代理进行更新。
更新完成后,再次安装就不会提示这个错误了。

<think> 我们面临的问题是:在安装md5sha1sum时,其依赖的openssl@3因为Homebrew的配置(HOMEBREW_CELLAR和HOMEBREW_PREFIX)与预编译的bottle要求不一致(预编译bottle要求默认路径,而我们的配置可能是自定义路径)导致需要从源码构建(编译)openssl@3,这通常耗时且可能遇到更多问题。 根据引用[1]和[2]可知,Homebrew默认将软件安装在Cellar目录下,并在/usr/local下创建符号链接。如果我们的配置是/usr/local,那么应该是正常的。但问题描述中明确指出HOMEBREW_CELLAR和HOMEBREW_PREFIX配置与bottle要求不一致,这可能是由于之前修改过Homebrew安装路径(比如从默认的/usr/local改为其他路径,或者反过来)导致的。 引用[3]和[4]提到了一些安装失败和动态库加载的问题,但当前问题主要是路径不一致导致无法使用预编译的bottle解决方案的核心是:确保Homebrew的配置(HOMEBREW_CELLAR和HOMEBREW_PREFIX)与预编译bottle所要求的路径一致。预编译bottle要求的是默认路径,即: - HOMEBREW_PREFIX: /usr/local - HOMEBREW_CELLAR: /usr/local/Cellar 所以,如果我们的配置不是这个,那么就需要修改配置。 步骤: 1. **检查当前Homebrew的配置**: ```bash brew config | grep -E 'HOMEBREW_PREFIX|HOMEBREW_CELLAR' ``` 如果输出显示当前配置不是`/usr/local`和`/usr/local/Cellar`,则需要进行调整。 2. **修改配置**(如果当前配置不是默认路径): 有两种方法: - 方法一:临时设置环境变量(针对当前终端会话) ```bash export HOMEBREW_PREFIX=/usr/local export HOMEBREW_CELLAR=/usr/local/Cellar ``` 然后尝试安装: ```bash brew install md5sha1sum ``` 但是这种方法可能在安装过程中由于brew脚本的其他部分使用全局配置而不可靠。 - 方法二:永久修改Homebrew安装路径(推荐) 实际上,Homebrew安装路径在安装时就确定了,要修改需要通过重新链接(relink)或重新安装Homebrew。但重新安装Homebrew比较麻烦,我们可以尝试通过更改Homebrew的链接路径来修复。 根据引用[2],我们可以手动创建符号链接,使得`/usr/local/opt`指向`/usr/local/Cellar`下的各个软件。但这里的问题不仅仅是opt目录,而是整个Cellar的位置。 更直接的方法:将Homebrew的整个安装重置到默认路径。这需要确保当前Homebrew安装路径和默认路径一致。 但是,如果之前安装Homebrew时已经指定了路径(比如在M1 Mac上默认安装在`/opt/homebrew`),现在想改为`/usr/local`,则需要重新安装Homebrew到`/usr/local`(这需要先卸载Homebrew,然后重新安装到`/usr/local`)。注意:这会影响所有已安装的软件包。 由于重新安装Homebrew影响较大,我们还可以尝试另一种方法:使用`brew extract`将openssl@3提取到一个新的tap中,然后修改其路径要求。但这比较复杂。 3. **忽略路径检查,强制使用源码安装**(如果不想修改配置): 如果不想修改Homebrew的配置,可以强制Homebrew从源码编译openssl@3,尽管这会花费较长时间。可以通过设置环境变量: ```bash export HOMEBREW_BUILD_FROM_SOURCE=1 brew install md5sha1sum ``` 这样会强制从源码构建所有依赖(包括openssl@3)。但编译openssl@3可能需要较长时间,并且需要安装编译依赖(如Xcode命令行工具)。 4. **使用`--build-from-source`选项仅对openssl@3进行源码编译**: ```bash brew install --build-from-source openssl@3 ``` 然后安装md5sha1sum: ```bash brew install md5sha1sum ``` 5. **修改bottle的路径适配**(高级操作): 理论上,可以修改bottle的文件,将其中的路径改为当前配置的路径。但Homebrew并不支持,且操作复杂。 综合以上,推荐方法如下: ### 推荐解决方案(重置Homebrew到默认路径) 1. 备份Homebrew安装软件列表(可选): ```bash brew leaves > brew_packages.txt ``` 2. 卸载Homebrew(如果当前安装在非默认路径): ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)" ``` 3. 安装Homebrew到默认路径`/usr/local`(适用于Intel Mac,对于M1 Mac默认是`/opt/homebrew`,但此处我们指定为`/usr/local`): ```bash sudo mkdir -p /usr/local sudo chown -R $(whoami) /usr/local /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ``` 在安装过程中,按照提示设置环境变量(如果有)。 4. 重新安装之前备份的软件: ```bash xargs brew install < brew_packages.txt ``` 然后再次尝试安装`md5sha1sum`。 ### 替代方案(强制源码编译) 如果不想重新安装Homebrew,可以执行: ```bash # 仅编译openssl@3及其依赖(如果其他依赖也有路径问题,则可能需要全部源码编译) brew install --build-from-source openssl@3 brew install md5sha1sum ``` 或者,设置环境变量强制整个安装过程从源码编译: ```bash export HOMEBREW_BUILD_FROM_SOURCE=1 brew install md5sha1sum ``` ### 注意事项 - 源码编译需要安装编译器(如Xcode命令行工具)和其他构建工具,确保已安装: ```bash xcode-select --install ``` ### 相关问题 §§相关问题§§ 1. 如何查看Homebrew的默认安装路径? 2. 重新安装Homebrew后如何恢复之前安装的软件包? 3. 在M1芯片的Mac上如何将Homebrew安装到`/usr/local`? 4. 如何解决从源码编译时出现的依赖缺失问题? 5. 如何创建Homebrew的本地bottle以避免源码编译? ### 引用说明 根据引用[1][2]我们可以了解到Homebrew的目录结构和符号链接机制,引用[3][4]则提供了安装失败和动态库问题的案例,但当前问题主要是路径配置不一致导致无法使用预编译bottle,因此我们重点调整路径配置。[^1][^2] </think> ### 解决 Homebrew 路径不一致导致需源码编译 openssl@3 的问题 #### 问题分析 当安装 `md5sha1sum` 依赖 `openssl@3` 时,出现需从源码构建的错误,核心原因是: 1. Homebrew 的 **bottle(预编译包)路径要求**为默认值: $$ \text{HOMEBREW\_CELLAR} = \texttt{/usr/local/Cellar} $$ $$ \text{HOMEBREW\_PREFIX} = \texttt{/usr/local} $$ 2. 当前您的 **实际配置路径不同**(如 ARM 架构默认路径): $$ \text{当前配置} \neq \texttt{/usr/local} $$ 3. 路径不一致导致无法使用预编译包,触发源码编译流程[^1][^2] --- ### 解决方案(三选一) #### 方案一:重置 Homebrew 至默认路径(推荐) ```bash # 1. 移除现有配置 rm -rf $(brew --repo)/Library/Taps/homebrew/homebrew-core brew untap homebrew/core # 2. 重置路径变量(在 ~/.zshrc 或 ~/.bashrc 中添加) echo 'export HOMEBREW_CELLAR="/usr/local/Cellar"' >> ~/.zshrc echo 'export HOMEBREW_PREFIX="/usr/local"' >> ~/.zshrc source ~/.zshrc # 3. 重新关联核心仓库 brew tap homebrew/core # 4. 修复符号链接[^2] brew doctor brew prune sudo chown -R $(whoami) /usr/local # 5. 安装 md5sha1sum brew install md5sha1sum ``` #### 方案二:强制使用源码编译 ```bash # 1. 清除旧编译缓存 brew cleanup -s openssl@3 # 2. 设置源码编译标志 export HOMEBREW_BUILD_FROM_SOURCE=1 # 3. 安装并跳过二进制检查 brew install --force-bottle md5sha1sum # 4. 验证安装 brew link --overwrite openssl@3 ``` #### 方案三:手动构建 openssl@3 ```bash # 1. 卸载冲突版本 brew uninstall --ignore-dependencies openssl@1.1 openssl # 2. 下载源码 curl -O https://www.openssl.org/source/openssl-3.0.7.tar.gz tar xzf openssl-3.0.7.tar.gz # 3. 编译安装(ARM 架构示例) cd openssl-3.0.7 ./Configure darwin64-arm64-cc --prefix=/usr/local/Cellar/openssl@3/3.0.7 make -j$(sysctl -n hw.logicalcpu) sudo make install # 4. 创建符号链接 brew link --force openssl@3 # 5. 安装 md5sha1sum brew install md5sha1sum ``` --- ### 关键技术点 1. **路径一致性原理** Homebrew 通过符号链接实现路径抽象: $$ \texttt{/usr/local/bin} \rightarrow \texttt{/usr/local/Cellar/.../bin} $$ 路径不一致会导致链接断裂[^2] 2. **Bottle 机制限制** 预编译包的路径硬编码在元数据中: ```json "bottle": { "cellar": "/usr/local/Cellar", // 必须匹配 "files": { ... } } ``` 3. **架构兼容方案** | 场景 | 安装命令 | 路径要求 | |---------------|-----------------------------|--------------------| | Intel 默认 | `brew install` | `/usr/local` | | ARM 默认 | `brew install` | `/opt/homebrew` | | 自定义路径 | 需源码编译或修改配置 | 用户定义路径 | --- ### 验证安装 ```bash # 检查 openssl 链接路径 ls -l /usr/local/opt/openssl@3 # 应显示:../Cellar/openssl@3/3.0.x # 测试 md5sha1sum echo "test" | md5sum # 输出:d8e8fca2dc0f896fd7cb4cb0031ba249 - ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值