🏵️
Jamf ProからRosetta 2をインストールする
初期設定時
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にそのものズバリなスクリプトが投稿されていたので使わせてもらいました。
#!/bin/bash
# Installs Rosetta as needed on Apple Silicon Macs.
exitcode=0
# Determine OS version
# Save current IFS state
OLDIFS=$IFS
IFS='.' read osvers_major osvers_minor osvers_dot_version <<< "$(/usr/bin/sw_vers -productVersion)"
# restore IFS to previous state
IFS=$OLDIFS
# Check to see if the Mac is reporting itself as running macOS 11
if [[ ${osvers_major} -ge 11 ]]; then
# Check to see if the Mac needs Rosetta installed by testing the processor
processor=$(/usr/sbin/sysctl -n machdep.cpu.brand_string | grep -o "Intel")
if [[ -n "$processor" ]]; then
echo "$processor processor installed. No need to install Rosetta."
else
# Check Rosetta LaunchDaemon. If no LaunchDaemon is found,
# perform a non-interactive install of Rosetta.
if [[ ! -f "/Library/Apple/System/Library/LaunchDaemons/com.apple.oahd.plist" ]]; then
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
if [[ $? -eq 0 ]]; then
echo "Rosetta has been successfully installed."
else
echo "Rosetta installation failed!"
exitcode=1
fi
else
echo "Rosetta is already installed. Nothing to do."
fi
fi
else
echo "Mac is running macOS $osvers_major.$osvers_minor.$osvers_dot_version."
echo "No need to install Rosetta on this version of macOS."
fi
exit $exitcodeho "Unknown Architecture"
fi
このスクリプトを、JAMF-Enrollment-Kickstartのpkgをインストールするポリシーのスクリプト ペイロードで、優先順位をBeforeにして登録します。
macOSアップデート時
macOS Big Surをアップデートすると、Rosetta 2が消えてしまうという仕様があるそうです。
先ほどのスクリプトが投稿されていた同じトピック内に、アーキテクチャがarm64でかつRosetta 2がインストールされていないmacを識別するための拡張属性がポストされていました。
#!/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"
fi
echo "<result>$result</result>"
この拡張属性がmissing
になるMacに対して、先ほどのスクリプトを実行すればRosetta2が再びインストールされます。
Discussion