🏵️

Jamf ProからRosetta 2をインストールする

2 min read

初期設定時

macOS デバイスの初期設定にJAMF-Enrollment-Kickstartを使っているのですが、一番初めにインストールするdaemonが.pkgで配布されており、これがM1搭載のMacでは正しく動作しませんでした。

Rosetta2をインストールすれば解決するのですが、このpkgより先にインストールする必要があり、またこのpkgのインストールはJAMF-Enrollment-Kickstartが完了するまで何度も実行されます。
CPUのアーキテクチャやRosetta 2のインストールの有無によって初期設定のためのポリシーを分けるのはスマートではないので、pkgファイルをインストールするポリシーを実行する前に

  • CPUのアーキテクチャを判別する
  • Rosetta2が既にインストールされていないかを調べる
  • アーキテクチャがarm64で、Rosetta 2がインストールされていない場合はRosetta2をインストールする

というスクリプトを実行しようと考えました。
自分で書こうと思っていたのですが、Jamf Nationにそのものズバリなスクリプトが投稿されていたので使わせてもらいました。

https://www.jamf.com/jamf-nation/discussions/37357/deploy-rosetta-on-m1-machines-before-everything-else#:~:text=%23!/bin/bash arch%3D%24(/usr/bin/arch) if [ "%24arch" %3D%3D "arm64" ]%3B then echo "Apple Silicon - Installing Rosetta" /usr/sbin/softwareupdate --install-rosetta --agree-to-license elif [ "%24arch" %3D%3D "i386" ]%3B then echo "Intel - Skipping Rosetta" else echo "Unknown Architecture" fi
#!/bin/bash
arch=$(/usr/bin/arch)
if [ "$arch" == "arm64" ]; then
    echo "Apple Silicon - Installing Rosetta"
    /usr/sbin/softwareupdate --install-rosetta --agree-to-license
elif [ "$arch" == "i386" ]; then
    echo "Intel - Skipping Rosetta"
else
    echo "Unknown Architecture"
fi

このスクリプトを、JAMF-Enrollment-Kickstartのpkgをインストールするポリシーのスクリプト ペイロードで、優先順位をBeforeにして登録します。

macOSアップデート時

macOS Big Surをアップデートすると、Rosetta 2が消えてしまうという仕様があるそうです。
先ほどのスクリプトが投稿されていた同じトピック内に、アーキテクチャがarm64でかつRosetta 2がインストールされていないmacを識別するための拡張属性がポストされていました。

https://www.jamf.com/jamf-nation/discussions/37357/deploy-rosetta-on-m1-machines-before-everything-else#:~:text=%23!/bin/bash ​ %3A << DOC,result>%24result</result>"
#!/bin/bash: << DOC
EA to determine whether Rosetta is installed. 
Possible results:
"installed"    - arm64 Mac - Rosetta is installed
"missing"      - arm64 Mac - Rosetta is not installed
"ineligible" - Intel Mac - Rosetta cannot be installed
DOC# is this an ARM Mac?
arch=$(/usr/bin/arch)
if [ "$arch" == "arm64" ]; then
    # is rosetta 2 installed?
    if [[ -f "/Library/Apple/System/Library/LaunchDaemons/com.apple.oahd.plist" ]]; then
        result="installed"
    else
        result="missing"
    fi
else
    result="ineligible"
fiecho "<result>$result</result>"

この拡張属性がmissingになるMacに対して、先ほどのスクリプトを実行すればRosetta2が再びインストールされます。