使用 homebrew 编译安装 php 到指定目录,"No such file or directory" 和 "Operation not permitted"?

问题

修改 formula 文件,将

  --prefix=#{prefix}

修改为

 --prefix=/Application/xxx/php

尝试将 php@5.6 安装到这个目录,然后执行命令:

brew install --formula -s  /xxx/homebrew-php/Formula/php@5.6.rb

make instll 环节报错:

image.png

尝试1

将 formula 中的

system "make", "install"

修改为

system "sudo make install"

无效。

尝试2

将目录 chown -R ${whoami} /xxx/ 无效

尝试 3

重新安装 homebrew,无效

阅读 621
avatarAI BotBETA

在 macOS 上使用 Homebrew 编译安装软件时遇到 "No such file or directory""Operation not permitted" 错误通常与权限、目录不存在或 Homebrew 的配置有关。针对你提到的情况,有几个可能的解决方案和考虑因素:

  1. 检查目录是否存在
    确保 /xxx/homebrew-php/Formula/php@5.6.rb 路径中的目录和文件确实存在。你可以使用 ls 命令来检查目录和文件:

    ls -l /xxx/homebrew-php/Formula/php@5.6.rb

    如果文件不存在,你需要找到正确的文件路径。

  2. Homebrew 的 Tap 管理
    通常不建议直接指定 .rb 文件来安装,因为这绕过了 Homebrew 的 tap 管理机制。如果你正在尝试安装一个非官方的 PHP 版本,考虑先添加相应的 tap:

    brew tap <用户名>/homebrew-php

    然后直接使用:

    brew install php@5.6
  3. 权限问题

    • 如果你在编译过程中遇到权限问题,确保你有足够的权限来访问目标目录。通常,Homebrew 会管理自己的目录(如 /usr/local),并且不需要 sudo 来安装大多数包。
    • 如果你确实需要安装到非标准目录,可能需要调整该目录的权限或使用 sudo,但这通常不推荐用于 Homebrew 管理的包。
  4. 使用 sudo 的问题
    修改 formula 中的 system "make", "install"system "sudo make install" 可能不会生效,因为 Homebrew 会尝试以特定的用户身份运行命令,而不是直接通过 sudo。此外,直接在 Homebrew formula 中使用 sudo 可能会破坏 Homebrew 的沙箱环境,导致不可预测的行为。
  5. 检查 SELinux 或其他安全策略
    如果你的系统启用了 SELinux 或其他类似的安全策略,可能会阻止某些操作。检查是否有相关策略阻止了 Homebrew 的操作。
  6. 查看 Homebrew 日志
    查看 Homebrew 的输出和日志文件,以获取更多关于错误的信息。这可能会提供更多关于缺失文件或权限问题的线索。
  7. 清理和重新安装 Homebrew
    如果以上步骤都无法解决问题,考虑清理 Homebrew 的缓存并重新安装:

    brew cleanup
    brew uninstall php@5.6
    brew tap <用户名>/homebrew-php  # 如果之前未添加 tap
    brew install php@5.6

如果以上方法都不能解决你的问题,可能需要更详细地检查你的系统配置或考虑其他安装方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏