Jamf ProとInstallomatorで常に最新のアプリケーションを配布する
管理下にあるmacOSのデバイスにおいて、
- 最新バーションのアプリケーションをインストールしたい
 - アプリケーションを常に最新バージョンのアップデートしたい
 
という要件を実現したいことがあります。
Volume Purchase(旧VPP)を使用することで、App Storeのアプリケーションであればある程度実現できますが、サードパーティ製のアプリケーションでこれを実現するのが難しい状態でした。
今回は、Jamf ProとInstallomatorを使用して、常に最新バージョンのアプリケーションを配布する方法を紹介します。
- 最新バージョンのアプリケーションを配布する際の問題点
 - Installomatorとは
 - Installomatorのしくみ
 - InstallomatorをJamf Proに組み込む
 - その他の機能
 - 注意点
 - 終わりに
 
最新バージョンのアプリケーションを配布する際の問題点
今まで最新バージョンのアプリケーションを配布するためには、アプリケーションのpkg(pkg化されていないアプリケーションはpkg化)ファイル、またはJamf Composerで作成したdmgファイルをJamf Proにアップロードして、アップロードしたファイルをアサインした専用のポリシーを作成していました。
しかし、これでは対象のアプリケーションが更新された場合、管理者は新たなバーションのアプリケーションのpkgファイルをJamf Proにアップデートして配布するという運用が必要でした。 この運用はアプリケーションが少ないと回りますが、アプリケーションの数が増えてくると段々と運用を圧迫し最新バージョンがインストールされず、不具合や最悪の場合、脆弱性を突かれる可能性があります。
アプリケーションがApp Storeにも存在する場合は、Volume Purchaseに寄せることで、最新バージョンのインストールおよび自動アップデートが可能です。1 しかし、Volume Purchaseのインストール、およびアップデート2の信頼性が低い状態が続いているという問題があります。3
Installomatorとは
Installomatorは、Briegel氏が開発しているzsh製のスクリプトです。macOS Catalina(10.15)からデフォルトシェルがbashからzshに変更となったため、zshで書かれています。
インストール/アップデートしたいアプリケーション名を指定すると、常に最新バージョンのアプリケーションがインストールされます。これにより最新版のアプリケーションを配布するためにpkgなどのファイルのアップロード都度行うなどの運用の手間を軽減できます。
このスクリプトは公証の確認を行っているため、macOSは10.14.4以降である必要があります。
Installomatorのしくみ
ざっくりとInstallomatorのしくみを解説すると、以下のような処理が行われます。
- インターネット上にホスティングされている最新版のアプリケーションのURLを特定
 - アプリケーションやインストーラをダウンロード
 - ダウンロードしてきたアプリケーションやインストーラの署名および公証の確認
 - ダウンロードしてきたアプリケーションやインストーラを解凍・展開
 - インストールの実行
 - 必要があればインストールが終わった旨の通知
 
インターネット上にホスティングされているアプリケーションやインストーラは偽物など、安全ではない可能性があります。 Jamf Proのエージェントなど、管理者特権で実行する場合は特に注意が必要です。 この問題に対処するために、署名および公証を確認しています。
InstallomatorをJamf Proに組み込む
Installomatorスクリプトの取得
InstallomatorのGitHubリポジトリのInstallomator.shが対象のスクリプトです。
デフォルトがdevブランチ、つまり開発中のブランチであるため、安定版が必要な場合はリリース一覧より、任意のリリースバーションのソースコードからInstallomator.shを取得してください。
Jamf ProにInstallomatorを設定
これらの設定はJamf Proにログインして行ってください。
スクリプトの登録
-  
[設定] > [コンピュータの管理] > [スクリプト]から新規スクリプトを作成に進みます。
- カテゴリの設定は必須ではありませんが、このスクリプトを分類するのに使用できます。以下の画像では例として「Applications」を指定しています。
 
 -  
次に、ScriptセクションにGitHubから取得してきた
Installomator.shを貼り付けます。 -  
DEBUG=1をDEBUG=0に変更します。-  
DEBUGを1のままにすると、一見動いているように見受けられますが、実際はアプリケーションがインストールされませんのでご注意ください。 
 -  
 -  
最後に、Optionsセクションの
パラメータ4にアプリケーション(のラベル)名を指定することがわかるような名前を入力してください。- これは設定しなくても動作しますが、ポリシー側で使用する際にわかりやすくなるので設定しています。以下の画像では例として
application labalという名前を設定しています。 
 - これは設定しなくても動作しますが、ポリシー側で使用する際にわかりやすくなるので設定しています。以下の画像では例として
 -  
[保存]してスクリプトの登録は完了です。
 
ポリシーの設定
今回は例として、zoomのアプリケーションをSelf Serviceからインストールできるようにするポリシーを作成してみます。
-  
[コンピュータ] > [ポリシー]から新規ポリシーを作成に進みます。
 -  
表示名にZoom、Self Serviceから常に実行できるように実行頻度をOngoingに指定します。
 -  
スクリプトの項目を選択し、登録したInstallomatorのスクリプトを追加します。
 -  
スクリプト登録で設定したパラメータ名(パラメータ4)にzoomを設定します。
 -  
今回は例として全コンピュータに配布することにしてみます。ScopeセクションからターゲットコンピュータをAll Computersに設定します。
 -  
最後に、Self Serviceで使用できるようにするため、Self Servieセクションでポリシーを使用可能にします。
- アイコンを設定しておくとエンドユーザーに認知してもらい易くなるので設定しておくと良いでしょう。
 
 -  
[保存]してポリシーの登録は完了です。
 
その他の機能
通知機能
InstallomatorにはJamf Proのエージェントと一緒にインストールされているManagement Actionを使用して、通知センターにインストールの完了を通知するための機能が存在しています。
デフォルトで通知するようになっており、通知をOFFにできます。 もし、通知をOFFにしたい場合は、スクリプト内のNOTIFY変数にsilentを設定してください。
特定のプロセスが起動中の場合の処理方法の変更
Installomatorのソースコードを見ると、いくつかのアプリケーションにblockingProcessesが定義されています。 ここにプロセス名が定義されている場合、インストールの挙動をいくつか選択できます。
| オプション | 挙動 | 
|---|---|
| ignore |  blockingProcessesに定義されているプロセスが見つかっても、インストールを実行する |  
| silent_fail |  blockingProcessesに定義されているプロセスが見つかった場合、スクリプトが異常終了する |  
| prompt_user |  blockingProcessesに定義されているプロセスが見つかった場合、ユーザーダイアログを表示して、Not Nowを選択した場合はスクリプトが異常終了する |  
| kill |  blockingProcessesに定義されているプロセスが見つかった場合、対象のプロセスを強制終了してインストールを実行する |  
注意点
Installomatorではいくつかのアプリケーションの最新バージョンを特定するために、GitHub APIを使用しています。 APIトークンを使用しない呼び出し方をしているため、同一IPで1時間に60リスエストの制限があります。
GitHub APIトークンサポートのissueを挙げていますので、もし必要だと感じられましたら、賛同のコメントやリアクションまたはPull Requestをお待ちしています!
終わりに
今回は、Jamf ProとInstallomatorを使用して、常に最新バージョンのアプリケーションを配布する方法を紹介しました。
Installomatorには、組織内で使用しているアプリケーションが用意されていない場合があります。 その際は、GitHubのリポジトリにPull Requsetを送るか、MacAdminsのSlackの#installomatorチャンネルにて、アプリケーションを用意してほしい旨のリクエストを出してみてください!
-  
Jamf Pro 10.25.0より、Self Service経由でインストールしたApp Storeのアプリケーションを自動で更新する機能がリリースされました。 ↩
 -  
Volume Purchaseを介したアップデートは、対象のアプリケーションがmacOSのデバイス上で起動している場合、アップデートが行われない仕様です。 ↩
 -  
Mac Appstore apps not installing | Jamf NationやMDMClientError:72 | Jamf Nation、vpp redownload call timed out <mdmclienterror:72> | Jamf Nationなどでいくつか報告が上がっています。Jamf Proの問題ではなくApple側の問題であることが示唆されています。 ↩
 
 








