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側の問題であることが示唆されています。 ↩