管理下にあるmacOSのデバイスにおいて、

  • 最新バーションのアプリケーションをインストールしたい
  • アプリケーションを常に最新バージョンのアップデートしたい

という要件を実現したいことがあります。

Volume Purchase(旧VPP)を使用することで、App Storeのアプリケーションであればある程度実現できますが、サードパーティ製のアプリケーションでこれを実現するのが難しい状態でした。

今回は、Jamf ProInstallomatorを使用して、常に最新バージョンのアプリケーションを配布する方法を紹介します。

最新バージョンのアプリケーションを配布する際の問題点

今まで最新バージョンのアプリケーションを配布するためには、アプリケーションの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のしくみを解説すると、以下のような処理が行われます。

  1. インターネット上にホスティングされている最新版のアプリケーションのURLを特定
  2. アプリケーションやインストーラをダウンロード
  3. ダウンロードしてきたアプリケーションやインストーラの署名および公証の確認
  4. ダウンロードしてきたアプリケーションやインストーラを解凍・展開
  5. インストールの実行
  6. 必要があればインストールが終わった旨の通知

インターネット上にホスティングされているアプリケーションやインストーラは偽物など、安全ではない可能性があります。 Jamf Proのエージェントなど、管理者特権で実行する場合は特に注意が必要です。 この問題に対処するために、署名および公証を確認しています。

InstallomatorをJamf Proに組み込む

Installomatorスクリプトの取得

InstallomatorのGitHubリポジトリInstallomator.shが対象のスクリプトです。

デフォルトがdevブランチ、つまり開発中のブランチであるため、安定版が必要な場合はリリース一覧より、任意のリリースバーションのソースコードからInstallomator.shを取得してください。

Jamf ProにInstallomatorを設定

これらの設定はJamf Proにログインして行ってください。

スクリプトの登録

  1. [設定] > [コンピュータの管理] > [スクリプト]から新規スクリプトを作成に進みます。

    • カテゴリの設定は必須ではありませんが、このスクリプトを分類するのに使用できます。以下の画像では例として「Applications」を指定しています。

    Installomatorの新規スクリプト作成の一般セクションの設定

  2. 次に、ScriptセクションにGitHubからコピーしてきたInstallomator.shを貼り付けます。

    Installomatorの新規スクリプト作成のスクリプトセクションの設定

  3. DEBUG=1DEBUG=0に変更します。

    • DEBUG1のままにすると、一見動いているように見受けられますが、実際はアプリケーションがインストールされませんのでご注意ください。

    InstallomatorのDEBUG設定の変更

  4. 最後に、Optionsセクションのパラメータ4にアプリケーション(のラベル)名を指定することがわかるような名前を入力してください。

    • これは設定しなくても動作しますが、ポリシー側で使用する際にわかりやすくなるので設定しています。以下の画像では例としてapplication labalという名前を設定しています。

    Installomatorの新規スクリプト作成のオプションセクションの設定

  5. [保存]してスクリプトの登録は完了です。

ポリシーの設定

今回は例として、zoomのアプリケーションをSelf Serviceからインストールできるようにするポリシーを作成してみます。

  1. [コンピュータ] > [ポリシー]から新規ポリシーを作成に進みます。

    ポリシーの作成

  2. 表示名にZoom、Self Serviceから常に実行できるように実行頻度をOngoingに指定します。

    Installomatorを使用したZoomポリシーのオプションセクションのGeneral設定

  3. スクリプトの項目を選択し、登録したInstallomatorのスクリプトを追加します。

    Installomatorを使用したZoomポリシーのオプションセクションのスクリプト設定

  4. スクリプト登録で設定したパラメータ名(パラメータ4)にzoomを設定します。

    Installomatorを使用したZoomポリシーのオプションセクションのスクリプトのパラメータ設定

  5. 今回は例として全コンピュータに配布することにしてみます。ScopeセクションからターゲットコンピュータをAll Computersに設定します。

  6. 最後に、Self Serviceで使用できるようにするため、Self Servieセクションでポリシーを使用可能にします。

    • アイコンを設定しておくとエンドユーザーに認知してもらい易くなるので設定しておくと良いでしょう。

    Installomatorを使用したZoomポリシーのSelf Serviceセクションの設定

  7. [保存]してポリシーの登録は完了です。

その他の機能

通知機能

InstallomatorにはJamf Proのエージェントと一緒にインストールされているManagement Actionを使用して、通知センターにインストールの完了を通知するための機能が存在しています。

デフォルトで通知するようになっており、通知をOFFにできます。 もし、通知をOFFにしたい場合は、スクリプト内のNOTIFY変数にsilentを設定してください。

InstallomatorのNOTIFY変数の場所

特定のプロセスが起動中の場合の処理方法の変更

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チャンネルにて、アプリケーションを用意してほしい旨のリクエストを出してみてください!

  1. Jamf Pro 10.25.0より、Self Service経由でインストールしたApp Storeのアプリケーションを自動で更新する機能がリリースされました。 

  2. Volume Purchaseを介したアップデートは、対象のアプリケーションがmacOSのデバイス上で起動している場合、アップデートが行われない仕様です。 

  3. Mac Appstore apps not installing | Jamf NationMDMClientError:72 | Jamf Nationvpp redownload call timed out <mdmclienterror:72> | Jamf Nationなどでいくつか報告が上がっています。Jamf Proの問題ではなくApple側の問題であることが示唆されています。