欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Apple M1 芯片软件安装异常的解决方法 Rosetta 罗塞塔 我自己亲自做的 有大用 有大大用 有大大大用

1) 安装  # /usr/sbin/softwareupdate --install-rosetta --agree-to-license

2) 如何验证是否安装成功? # /usr/bin/pkgutil --pkgs | grep -i Rosetta   ,,,, 若输出 com.apple.pkg.RosettaUpdateAuto 则说明已安装。

                                                    # arch -x86_64 /usr/bin/true   ,,,,

                                                                                        如果已安装:命令正常执行(无输出)

                                                                                        如果未安装:会提示 "Rosetta is not installed" 或询问你是否要安装  ( arch: posix_spawnp: /usr/bin/true : Bad CPU type is executable  )







拥有 Apple M1 芯片的 Mac 小伙伴们可能会在安装软件的时候遇到一些异常情况,下面佐佐整理了可能会遇到的几个异常情况以及应用闪退的解决办法。希望能帮助小伙伴们解决问题。
安装异常
异常1
提示 

zsh:  killed  执行文件名  

或者  zsh:  bad CPU type in executable:xxx
原因:这是因为电脑上没有安装 Rosetta 2  Rosetta2
解决:打开终端,执行以下命令,安装一下即可解决。
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
异常2
提示 zsh: no such file or directory: Volumes/xxxx/安装
原因:这通常是因为安装了 Oh My Zsh 但是没有更新用户配置环境导致的。
解决:打开终端,执行以下命令,执行完成退出终端,然后再重新运行一下终端让其生效即可。
PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
应用运行闪退
如果遇到应用闪退,出现如下提示:见图二
1.打开 访达 - 应用程序,找到闪退的应用,在应用图标上右键,然后点击「显示简介」。
2.勾选「使用 Rosetta 打开」
如果没有这个选项的的话,打开终端执行以下命令安装一下即可:
/usr/sbin/softwareupdate --install-rosetta --agree-to-license


/usr/sbin/softwareupdate --install-rosetta --agree-to-license

你提供的命令是用于在 macOS(特别是 Apple Silicon 芯片的 Mac,如 M1、M2 等)上安装 Rosetta 2 的一个终端指令。以下是详细说明:

命令解析:

bash    
/usr/sbin/softwareupdate --install-rosetta --agree-to-license    


  1. /usr/sbin/softwareupdate
    macOS 系统自带的软件更新工具,用于安装系统补丁或组件。

  2. --install-rosetta
    明确要求安装 Rosetta 2,这是苹果为 ARM 芯片(M1/M2)提供的兼容层,允许运行老款的 Intel(x86_64)应用。

  3. --agree-to-license
    自动同意 Rosetta 2 的许可协议,跳过安装时的交互确认。


使用场景和注意:

✅ 适用情况

  • 仅适用于 Apple Silicon 芯片的 Mac(如 M1、M2 等),Intel 芯片的 Mac 不需要。

  • 需要管理员权限,通常需搭配 sudo 使用。

⚠️ 注意事项

  • Rosetta 2 通常会在首次打开 Intel 应用时自动安装,此命令用于主动提前安装(比如自动化脚本或批量部署)。


完整命令(推荐):

bash    
sudo /usr/sbin/softwareupdate --install-rosetta --agree-to-license    


(输入后需输密码,但无确认提示,直接静默安装。)


常见问题:

  1. 需要联网吗?
    需要, Rosetta 2 会从苹果服务器下载。

  2. 如何验证是否安装成功?
    运行:

    bash            
    /usr/bin/pkgutil --pkgs | grep Rosetta            

           

    若输出 com.apple.pkg.RosettaUpdateAuto 则说明已安装。

  3. 错误处理

  • 若提示 Not eligible to install Rosetta:你的 Mac 可能是 Intel 芯片,无需安装。

  • 若权限不足,记得加 sudo


如有其他疑问,可以继续追问!




好的!以下是针对在 Apple Silicon 芯片(M1/M2/M3 等)的 Mac 上安装 Rosetta 2 的中文详细说明:


命令如下(在终端中执行):

bash                        
sudo /usr/sbin/softwareupdate --install-rosetta --agree-to-license
       

操作步骤:

  1. 打开 应用程序 → 实用工具 → 终端
    (或通过 Spotlight 搜索 终端)。

  2. 复制粘贴上方命令,按 <kbd>Enter</kbd>

  3. 输入你的 管理员密码(输入时不会显示字符,输完直接按 <kbd>Enter</kbd>)。


参数说明:

参数作用
sudo                        获取管理员权限(必需)
--install-rosetta                        安装 Rosetta 2
--agree-to-license                        自动同意许可协议(避免手动确认)

注意事项:

  1. 仅限 Apple Silicon 机型
    Intel 芯片的 Mac 无需安装。

  2. 无需重启
    安装后可直接运行 Intel 应用(首次打开时会自动转换)。

  3. 网络要求
    需联网下载约 500MB 的组件(速度取决于网络)。


验证是否安装成功:

bash                        
/usr/bin/pgrep oahd && echo "Rosetta 2 已安装"
       

若终端显示 Rosetta 2 已安装 即表示成功。


常见问题:

❓ 为何要装 Rosetta?
→ 让 Apple Silicon 芯片的 Mac 兼容老版 Intel 应用(如部分未更新的专业软件)。

❓ 安装后如何使用?
→ 无需额外操作!直接双击打开 Intel 应用,系统会自动调用 Rosetta。

❓ 会降低性能吗?
→ Rosetta 转译的 Intel 应用可能比原生 Apple Silicon 应用稍慢,但优化良好(如微信、Adobe 系列)。

💡 提示:建议优先下载 原生 Apple Silicon 版本 的应用(性能更佳)。




判断 rosetta 2 有没有安装

在 macOS(特别是 Apple Silicon 设备,如 M1/M2 Mac)上,你可以通过以下方法检查 Rosetta 2 是否已经安装


方法 1:使用 pkgutil 检查(推荐)

运行以下命令检测是否安装了 Rosetta 2 的安装包:

bash    
/usr/bin/pkgutil --pkgs | grep -i "Rosetta"    


可能的输出:

  • 如果已安装:会显示 com.apple.pkg.RosettaUpdateAuto

  • 如果未安装:无输出


方法 2:直接尝试运行 x86 命令

Rosetta 2 的主要作用是运行 Intel(x86_64)程序,如果未安装,此命令会触发 Rosetta 安装提示。

bash    
arch -x86_64 /usr/bin/true    


可能的输出:

  • 如果已安装:命令正常执行(无输出)

  • 如果未安装:会提示 "Rosetta is not installed" 或询问你是否要安装  ( arch: posix_spawnp: /usr/bin/true : Bad CPU type is executable  )


方法 3:检查 Rosetta 进程

运行一个 Intel 程序(如 bash),然后检查是否有 osx-update(Rosetta 关联进程)在运行:

bash    
pgrep -f "Rosetta"    


可能的输出:

  • 如果已安装 + 正在使用:会显示进程 ID

  • 如果完全未使用:无输出


方法 4:查看系统日志

系统日志中可能会有 Rosetta 相关的记录:

bash    
log show --predicate 'eventMessage contains "Rosetta"' --last 30d    


如果看到 "Rosetta installed" 或类似记录,说明曾经安装过。


总结判断

✅ 确认已安装

  • 方法 1(pkgutil)有 com.apple.pkg.RosettaUpdateAuto 输出

  • 方法 2(arch -x86_64)能正常执行

❌ 未安装

  • pkgutil 无输出,且 arch -x86_64 提示需要安装


手动安装(如果未安装)

如果上述方法表明未安装,可以手动安装:

bash    
sudo softwareupdate --install-rosetta --agree-to-license    


(需要管理员权限)


如果仍有疑问,可以进一步测试特定的 Intel 应用是否会触发 Rosetta 安装提示。


要判断 macOS 系统(特别是 Apple Silicon 芯片的 Mac)是否已安装 Rosetta 2,可以使用以下方法:

方法一:通过终端命令检查(推荐)

bash                
/usr/bin/pgrep oahd > /dev/null && echo "Rosetta 2 已安装" || echo "Rosetta 2 未安装"

命令说明

  • pgrep oahd:检查 Rosetta 的核心进程 oahd 是否在运行

  • 如果已安装会显示:Rosetta 2 已安装

  • 如果未安装会显示:Rosetta 2 未安装


方法二:检查安装目录文件

bash                
[ -f "/Library/Apple/System/Library/LaunchDaemons/com.apple.oahd.plist" ] \
&& echo "已安装" || echo "未安装"

原理
Rosetta 2 安装后会创建此配置文件,存在即表示已安装。


方法三:尝试运行转译命令(终极验证)

bash                
arch -x86_64 /usr/bin/true 2> /dev/null \
&& echo "Rosetta 2 已安装" || echo "Rosetta 2 未安装"

原理
强制以 Intel 模式运行系统命令,成功执行说明转译层已就绪。


附加说明:

  1. Apple Silicon 专属
    这些检查仅在 M1/M2/M3 等 ARM 芯片的 Mac 上有意义,Intel 芯片 Mac 无需安装。

  2. 安装后无需重启
    即使命令显示已安装,首次打开 Intel 应用时仍可能有短暂转译过程。

  3. 验证效果

    bash                        
    # 组合验证(输出详细状态)
    if /usr/bin/pgrep oahd &> /dev/null; then
      echo "✅ Rosetta 2 已安装且进程运行中"
    elif [ -f "/Library/Apple/System/Library/LaunchDaemons/com.apple.oahd.plist" ]; then
      echo "⚠️  已安装但进程未启动(首次运行Intel应用后将激活)"
    else
      echo "❌ 未检测到安装"
    fi
           

建议优先使用 方法一,简单直接且结果明确。若从未运行过 Intel 应用,使用方法二或三更可靠。



/usr/bin/pkgutil --pkgs | grep -i Rosetta  详解


命令详解:/usr/bin/pkgutil --pkgs | grep -i Rosetta

此命令用于在 macOS 系统中检查是否安装了与 Rosetta(苹果的二进制转译工具)相关的软件包。以下是逐层解析:


1. 命令拆解

bash
/usr/bin/pkgutil --pkgs | grep -i Rosetta
  • /usr/bin/pkgutil
    macOS 系统自带的包管理工具,用于查询已安装的软件包(.pkg 格式)。

  • --pkgs 选项
    列出所有已安装软件包的 标识符(Bundle Identifiers)
    示例输出:

    text
    com.apple.pkg.XcodeSystemResources
    com.google.pkg.Keystone
    com.apple.pkg.RosettaUpdateAuto  # 与Rosetta相关的包
  • |(管道)
    将 pkgutil 的输出传递给下一个命令 grep

  • grep -i Rosetta
    在输入中不区分大小写-i 选项)地搜索关键词 Rosetta


2. 作用说明

  • 核心目的:检查系统是否安装了 Rosetta 或其更新组件。

  • 典型场景

    • 在 Apple Silicon (M1/M2/M3) Mac 上验证 Rosetta 2 的安装状态。

    • 调试需要 Rosetta 转译的 Intel 应用兼容性问题。

  • 输出结果

    • 若找到相关包(如 com.apple.pkg.RosettaUpdateAuto),则输出该包标识符,表明 Rosetta 已安装。

    • 若无输出,表示 Rosetta 未安装。


3. Rosetta 相关包说明

在 macOS 中,Rosetta 通常以以下包形式存在:

包标识符说明
com.apple.pkg.RosettaRosetta 基础组件(旧版系统)
com.apple.pkg.RosettaUpdateAutoRosetta 自动更新组件(常见)

4. 实际使用示例

bash
$ /usr/bin/pkgutil --pkgs | grep -i Rosetta
com.apple.pkg.RosettaUpdateAuto  # 输出此行表示已安装

若需进一步验证,可查看包详情:

bash
$ pkgutil --info com.apple.pkg.RosettaUpdateAuto
package-id: com.apple.pkg.RosettaUpdateAuto
version: 1.0.0.0.1.1612798899
volume: /
location: /
install-time: 1633024874

5. 补充:其他检测 Rosetta 的方法

  • 检查转译进程

    bash
    sysctl -n sysctl.proc_translated  # 输出 1 表示当前进程运行在 Rosetta 下
  • 检查 Rosetta 守护进程

    bash
    pgrep -q oahd && echo "Rosetta 已安装"  # oahd 是 Rosetta 的守护进程

6. 安装 Rosetta

若未安装,可通过以下命令安装:

bash
softwareupdate --install-rosetta

注意:Rosetta 仅在 Apple Silicon Mac 上可用,Intel Mac 无需安装。


总结

  • 命令用途:快速检查 macOS 是否安装了 Rosetta 组件。

  • 关键输出:存在 com.apple.pkg.RosettaUpdateAuto 等包标识符即表示已安装。

  • 适用系统:Apple Silicon 芯片的 macOS(Big Sur 及以上)。


arch -x86_64 /usr/bin/true  详解

命令详解:arch -x86_64 /usr/bin/true

此命令用于在 Apple Silicon (M1/M2/M3) Mac 上验证 Rosetta 2 转译环境的可用性。以下是逐层解析:


1. 命令拆解

bash
arch -x86_64 /usr/bin/true
  • arch
    macOS 的系统命令,用于指定程序的运行架构。

  • -x86_64 选项
    强制命令以 Intel x86_64 架构模式运行(通过 Rosetta 2 转译)。

  • /usr/bin/true
    Unix 基础命令:不做任何操作,直接返回成功退出状态(exit 0)。(一个简单的Unix命令,总是成功退出!)


2. 核心作用

  • 验证 Rosetta 2 是否正常工作

    • 在 Apple Silicon Mac 上执行此命令时,系统会尝试通过 Rosetta 2 转译层运行 Intel 架构的 true 命令。

    • 如果命令执行成功(无错误),证明 Rosetta 2 已正确安装且可用。

  • 诊断兼容性问题

    • 若出现 Bad CPU type in executable 等错误,表明 Rosetta 2 未安装或损坏。


3. 执行流程

  1. 系统调用 arch 命令,请求以 x86_64 架构运行程序。

  2. macOS 激活 Rosetta 2 转译层(若未运行则自动启动)。

  3. Rosetta 2 加载 Intel 版本的 /usr/bin/true(实际路径:/usr/libexec/rosetta/oahd 会处理转译)。

  4. 命令执行后立即退出,返回状态码 0(成功)。


4. 实际使用场景

▶ 验证 Rosetta 2 安装
bash
# 在 Apple Silicon Mac 上执行:
$ arch -x86_64 /usr/bin/true
$ echo $?        # 检查退出状态码
0               # 输出 0 表示成功(Rosetta 可用)
▶ 错误示例(未安装 Rosetta)
bash
$ arch -x86_64 /usr/bin/true
zsh: bad CPU type in executable: /usr/bin/true
▶ 与原生 ARM 模式对比
bash
# 原生 ARM 模式(Apple Silicon 直接运行):
$ arch -arm64 /usr/bin/true  # 显式指定 ARM 架构
$ file $(which true)         # 查看文件架构
/usr/bin/true: Mach-O 64-bit executable arm64  # ARM 原生版本

5. 技术细节

  • Rosetta 2 的触发机制
    当尝试运行 Intel 二进制文件时,系统自动调用 Rosetta 2。使用 arch -x86_64 是显式请求转译。

  • true 命令的特殊性
    作为最简单的 Unix 命令(仅返回退出码 0),它是最安全的 Rosetta 测试工具:

    • 不修改系统状态

    • 无输出干扰

    • 执行速度快(毫秒级)

  • 系统路径说明
    Apple Silicon 的 macOS 中:

    • /usr/bin/true 是通用二进制文件(同时包含 ARM64 和 x86_64 代码)

    • 当通过 arch -x86_64 调用时,系统自动加载 x86_64 代码段并由 Rosetta 2 处理


6. 扩展应用

▶ 测试任意命令的转译兼容性
bash
# 测试 x86_64 模式下的命令(例如 Homebrew)
arch -x86_64 /bin/bash -c "echo 'Hello from Intel mode'"
▶ 在脚本中动态切换架构
bash
#!/bin/zsh

# 如果当前是 ARM 环境且需要 Intel 兼容模式
if [[ $(uname -m) == "arm64" ]]; then
    exec arch -x86_64 "$0" "$@"  # 重新以 x86 模式执行当前脚本
fi

# 后续代码会在 Rosetta 转译环境下运行
brew install intel-only-package

7. 常见问题排查

  • 问题:命令执行报错

    bash
    arch: posix_spawnp: /usr/bin/true: Bad CPU type in executable

    解决方案:安装 Rosetta 2

    bash
    softwareupdate --install-rosetta --agree-to-license
  • 问题:性能延迟
    首次执行时会加载 Rosetta 2 服务(约 1-2 秒),后续执行无延迟。


总结

项目说明
命令本质通过 Rosetta 2 运行一个空操作(true)来验证转译环境
核心用途诊断 Apple Silicon Mac 的 Intel 兼容性
成功标志无输出 + 退出码 0
失败标志Bad CPU type in executable 错误
替代方案file $(which ls) | grep x86_64 或 pgrep -q oahd(检查进程)
适用系统macOS Big Sur (11.0) 及以上(Apple Silicon 机型)

通过这个简单命令,可快速确认系统是否准备好运行 Intel 架构的 Unix 程序。



普通分类: