erase-installを使ってmacOSの初期化、OS再インストール、OSアップグレードを行う
macOSのデバイスを組織の従業員に貸与する場合、デバイスのトラブルや退職などのタイミングでデバイスを管理者で受け入れ、そのデバイスの購入時期が一定期間以内の場合、廃棄せずに初期化を行い、新たな従業員へデバイスを貸与することがあります。
その際デバイスの管理者は、なるべく組織で許容しているOSおよびバーションにアップグレードしたいことがあります。
また、COVID-19の影響によりリモートで対応することも多い中、何か問題が起きた際にOSの再インストールや、OSのアップデートをエンドユーザーに行ってもらう必要があるかもしれません。
今回はこれら課題を解決する方法を紹介します。
この記事はcorp-engr 情シス Slack(コーポレートエンジニア x 情シス) Advent Calendar 2020の15日目の記事でもあります。
従来のデバイスの初期化およびOS再インストールの課題
多くの場合、初期化およびデータは消さないOS再インストール作業は、
- Intel版
- ⌘ + R
- 現在インストールされているOSの一番新しいOS
- ⌥ + ⌘ + R
- デバイスと互換性があるうちで一番新しいOS
- ⇧ + ⌥ + ⌘ + R
- 工場出荷時のOSバーションまたは工場出荷時のOSバーションがサポートされていない場合はそれに一番近いサポートされているOS
- ⌘ + R
- Silicon版
- 電源ボタン長押し
などでリカバリーモードを介して行います。
または、事前にUSBなどの外部記憶媒体にmacOSのインストーラを作成しておき、起動オプションで外部記憶媒体を指定し、
- ディスクの消去
- OSのインストール
を行います。
(Intel版のみ)ファームウェアのパスワードを設定している場合、リカバリーモードにはファームウェアのパスワードを入れないといけず面倒です。
リカバリーモードの場合、
- FileVaultの暗号化の解除
- ディスクユーティリティでディスクの消去(フォーマット)
- インターネット経由でのOSのインストール
の手順で初期化しますが、OSインストール中にインターネット接続が不安定となるとOSがインストールされず、インターネットリカバリーを行うこととなり、初期化に多くの工数を割かなければいけないこともあります。
また、macOSインストーラを使用した場合、リカバリーモードのように不安定な作業にはならないものの、T2チップを搭載していると、外部起動を事前に有効にしておかなければ使用できません。 新しいOSが出た際には、そのたびにインストーラを作成するのもたいへんです。
従来のOSアップグレードの課題
メジャーバーションアップの場合、[システム環境設定] > [ソフトウェアアップデート]からアップグレードができます。
管理者権限を与えていない場合、インストーラが起動したところでアップグレードできないため、何かしらアップグレードするための方法を用意する必要があります。
それぞれ、エンドユーザーが自発的にアップグレードできます。しかし、ユーザーによってはまったくアップグレードを行わず、管理者が強制的にアップグレードを適用したいこともありますが、それにはスクリプトなどを用意する必要があります。
erase-installについて
erase-installはGraham Pugh氏が開発しているmacOSの初期化およびOSアップグレードが行えるスクリプトです。
大まかな処理としては、以下のようなことを行っています。
- munkiが作成しているinstallinstallmacos.pyをforkしたものをGraham Pugh氏が一部改変したものをダウンロード
-
installinstallmacos.py
を実行し、最新バージョンのOSインストーラをダウンロード - OSインストールを実行
installinstallmacos.py
が特定のOSバーションやBuildの指定、Apple Seed Programを使用できるため、そのサポートや、softwareupdate
のフルインストーラにも対応しています。
Jamf Proがインストールされている場合は、Jamf Helperを使用してエンドユーザーに以下の内容を通知できます。
- ディスクスペースの不足
- OSインストーラのダウンロードの開始
- OSインストーラの実行前の確認ダイアログ
課題の解決方法
事前に現在インストール可能なOS一覧を確認しておき、対応すると良いでしょう。
# 2020-12-15 02:00 JST 現在の結果
curl -s https://raw.githubusercontent.com/grahampugh/erase-install/master/erase-install.sh | sudo bash /dev/stdin --list
(略)
This Mac:
Model Identifier : MacBookPro16,2
Bridge ID : J214kAP
Board ID : Mac-5F9802EFE386AA28
OS Version : 10.15.7
Build ID : 19H2
# ProductID Version Build Post Date Title Notes/Warnings
1 001-15219 10.15.5 19F2200 2020-06-15 macOS Catalina Unsupported macOS version
2 001-68446 10.15.7 19H15 2020-11-11 macOS Catalina
3 001-04366 10.15.4 19E2269 2020-05-04 macOS Catalina Unsupported macOS version
4 061-86291 10.15.3 19D2064 2020-03-23 macOS Catalina Unsupported macOS version
5 041-91758 10.13.6 17G66 2019-10-19 macOS High Sierra Unsupported macOS version
6 001-57224 10.15.7 19H4 2020-10-27 macOS Catalina
7 061-26589 10.14.6 18G103 2019-10-14 macOS Mojave Unsupported macOS version
8 001-51042 10.15.7 19H2 2020-09-24 macOS Catalina
9 001-36735 10.15.6 19G2006 2020-08-06 macOS Catalina Unsupported macOS version
10 001-83532 11.0.1 20B50 2020-11-19 macOS Big Sur
11 041-88800 10.14.4 18E2034 2019-10-23 macOS Mojave Unsupported macOS version
12 041-90855 10.13.5 17F66a 2019-10-23 Install macOS High Sierra Beta Unsupported macOS version
13 061-26578 10.14.5 18F2059 2019-10-14 macOS Mojave Unsupported macOS version
14 001-36801 10.15.6 19G2021 2020-08-12 macOS Catalina Unsupported macOS version
デバイス初期化およびOS再インストールのケース
最新バージョンで初期化を行う場合は、
curl -s https://raw.githubusercontent.com/grahampugh/erase-install/master/erase-install.sh | sudo bash /dev/stdin --erase
OSの再インストールを行う場合は、
curl -s https://raw.githubusercontent.com/grahampugh/erase-install/master/erase-install.sh | sudo bash /dev/stdin --reinstall --sameos
を実行します。実際には現在のメジャーバーションと一致する最新バージョンのOSをインストールしますが、往々にして現在のOSの最新バージョンにするケースが多いためこのようにしています。
もし、指定したバーションにしたい場合は、--os
オプションを使用してください。
これにより、リカバリーモードやOSインストーラを使用せずとも初期化およびOSの再インストールが可能となります。
OSアップグレードのケース
最新バージョンにアップグレードする場合は、
curl -s https://raw.githubusercontent.com/grahampugh/erase-install/master/erase-install.sh | sudo bash /dev/stdin --reinstall
バーションを指定したい場合は、
# パッチバージョンまで指定
curl -s https://raw.githubusercontent.com/grahampugh/erase-install/master/erase-install.sh | sudo bash /dev/stdin --reinstall --os="11.0.1"
# マイナーバージョンまで指定
curl -s https://raw.githubusercontent.com/grahampugh/erase-install/master/erase-install.sh | sudo bash /dev/stdin --reinstall --os="11.0"
を実行します。
これにより、OSのアップグレードが可能です。
Jamf Proを使用したお勧めの設定方法
上記はコマンドを使用しましたが、Jamf Proを使用されている場合、お勧めの設定方法があるので紹介します。
事前にerase-installのリリース一覧からから最新バージョンを選択し、Jamf ProサーバーのScriptにerase-install.sh
を設定しておきます。
初期化用のポリシーをSelf Serviceから実行できるようにする
初期化用のポリシーをSelf Serviceから実行できるようにすることで、エンドユーザーやデバイス管理者がワンボタンでいつでも実行できます。
初期化用のポリシー設定
- [コンピュータ] > [ポリシー]から新規作成に進みます。
- Generalセクションで各値を設定します。
- 表示名:
Erase and reinstall latest OS
- これは例ですが、分かりやすい名前をつけてください。
- カテゴリ:
Admin
- カテゴリの設定は任意です。
- 実行頻度:
Ongoing
- トリガーはなしで、Self Serviceで実行するためOngoingで問題ないです。
- 表示名:
- 次に、スクリプトの項目を選択し、登録したerase-installのスクリプトを追加します。
- パラメータ4とパラメータ5に値を設定します。
- パラメータ4:
--erase
- パラメータ5:
--confirm
- confirmオプションを使用するとJamf Helperを使用してOSインストーラを実行する前に確認ダイアログを表示できます。
- パラメータ4:
- 次に、Scopeセクションで実行を許可するスコープを絞ります。
-
最後に、Self Serviceセクションで「Self Service でポリシーを使用可能にする」を有効にします。
- [保存]してポリシーの登録は完了です。
OSアップグレード用のポリシーを用意する
OSアップグレードのポリシーを用意することで、デバイス管理者が強制的にポリシーを適用したり、Self Serviceを介してエンドユーザーに自由に実行してもらったりできます。
最新バージョンのOSを事前にダウンロードするポリシーの設定
OSインストーラは数GBと少々重たいので、事前にダウンロードするためのポリシーを作成します。
- [コンピュータ] > [ポリシー]から新規作成に進みます。
- Generalセクションで各値を設定します。
- 表示名:
Download latest OS installer
- これは例ですが、分かりやすい名前をつけてください。
- カテゴリ:
OS Update
- カテゴリの設定は任意です。
- 実行頻度:
Ongoing
- トリガーはなしで、Self Serviceで実行するためOngoingで問題ないです。
- 表示名:
- 次に、スクリプトの項目を選択し、登録したerase-installのスクリプトを追加します。
- パラメータには何も設定しません。
- 次に、Scopeセクションで実行を許可するスコープを絞ります。
-
最後に、Self Serviceセクションで「Self Service でポリシーを使用可能にする」を有効にします。
- [保存]してポリシーの登録は完了です。
OSアップグレード用のポリシーの設定
今回はSelf Serviceで実行できるようなポリシーを作成してみます。
- [コンピュータ] > [ポリシー]から新規作成に進みます。
- Generalセクションで各値を設定します。
- 表示名:
Upgrade latest OS
- これは例ですが、分かりやすい名前をつけてください。
- カテゴリ:
OS Update
- カテゴリの設定は任意です。
- 実行頻度:
Ongoing
- トリガーはなしで、Self Serviceで実行するためOngoingで問題ないです。
- 表示名:
- 次に、スクリプトの項目を選択し、登録したerase-installのスクリプトを追加します。
- パラメータ4とパラメータ5に値を設定します。
- パラメータ4:
--reinstall
- パラメータ5:
--confirm
- confirmオプションを使用すると、Jamf Helperを使用してOSインストーラを実行する前に確認ダイアログを表示できます。
- パラメータ4:
- 次に、Scopeセクションで実行を許可するスコープを絞ります。
-
最後に、Self Serviceセクションで「Self Service でポリシーを使用可能にする」を有効にします。
- [保存]してポリシーの登録は完了です。
今回は事前にOSインストーラをダウンロードするポリシーを作成していましたが、--update
オプションを使用すると、もしそのインストーラが古い場合は新しいOSインストーラをダウンロードしてからインストールを実行します。 もし必要でしたらオプションを有効にしてください。
終わりに
erase-installという名前が誤解を生みそうな名前ですが、初期化、OS再インストールおよびOSアップグレードが可能なスクリプトでした。
紹介した以外にもいくつかオプションがあります。詳しくはerase-installのREADME、または
curl -s https://raw.githubusercontent.com/grahampugh/erase-install/master/erase-install.sh | bash /dev/stdin --help
を参照してください。
このスクリプトはOSインストーラのシグネチャの検証をしていないので、理解したうえで使用してください。1
もし、OSアップグレードの際にOSインストーラーのシグネチャの確認をしたい場合や、ACアダプタからの給電がされているかの事前確認などをしたい場合は、macOSUpgradeの使用を検討してみてください。
-
Signature verification of the os installerのIssueを立てました。 ↩