これまで、管理下にあるmacOSに最新バーションのアプリケーションをインストールするスクリプトである、Installomatorに関していくつか記事を投稿してきました。

今回はこれまで紹介してきた内容を応用して、Installomatorでサポートされていないアプリケーションをインストールする方法を紹介します。

Installomatorに存在しないアプリケーションをインストールしたい

Installomatorを使用していると、組織内で使用しているアプリケーションが用意されていない場合があります。

上記を実施することで対応できますが、要望や修正がすぐには反映されないこともあります。

直接Installomatorのスクリプトを改変したものを使用する方法もありますが、その場合はInstallomatorのアップデートがあるたびに改変箇所を意識して修正する必要があり、メンテナンスがたいへんになります。

そこで、valuesfromargumentsという特殊なラベル使用すると、Installomatorに存在しないアプリケーションをインストールできます。

具体例として、執筆時点でInstallomatorに存在しない、Okta Verify1をインストールする場合を考えてみます。

コマンドで実行する場合は以下の通りです。

$ ./Installomator.sh valuesfromarguments \
    DEBUG=0 \
    name="Okta Verify" \
    type="pkg" \
    downloadURL="https://ここにサブドメイン.okta.com/api/v1/artifacts/OKTA_VERIFY_MACOS/download?releaseChannel=GA" \
    expectedTeamID="B7F62B65BN"

また、Jamf Proのポリシーで設定する場合は以下の通りです。

InstallomatorでOkta VerifyをJamf Proのポリシーでインストールするための設定例

さらに、appNewVersionを指定することで、インストールされているバージョンとの差異がない場合はアーカイブをダウンロードすることなく、スクリプトを早期に終了できます。

$ ./Installomator.sh valuesfromarguments \
    DEBUG=0 \
    name="Okta Verify" \
    type="pkg" \
    downloadURL="https://ここにサブドメイン.okta.com/api/v1/artifacts/OKTA_VERIFY_MACOS/download?releaseChannel=GA" \
    expectedTeamID="B7F62B65BN" \
    'appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk \'{print $2}\' | sed \'s/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/\' )'

Installomatorのスクリプト内部では引数の値をeval関数に渡しているため、curlなどのコマンドの結果の代入処理自体を文字列で渡すことで、実行時に評価されている点がおもしろい点です。

もちろんJamf Proでも設定できます。

InstallomatorでOkta VerifyをJamf ProのポリシーでappNewVersionを考慮してインストールするための設定例

このように、valuesfromargumentsを使用することで、Installomatorに存在しないアプリケーションをインストールできます。

Installomatorのラベルのパラメータを特定したい

アプリケーションのパラメータを自分で特定するのが難しい場合、Installomatorのリポジトリに用意されれいるbuildLabelユーティリティスクリプトが使用できます。

こちらも同じくOkta Verifyで試してみましょう。

$ ./utils/buildLabel.sh "https://ここにサブドメイン.okta.com/api/v1/artifacts/OKTA_VERIFY_MACOS/download?releaseChannel=GA"

()

**********

Labels should be named in small caps, numbers 0-9, "-", and "_". No other characters allowed.

appNewVersion is often difficult to find. Can sometimes be found in the filename, sometimes as part of the download redirects, but also on a web page. See redirect and archivePath above if link contains information about this. That is a good place to start

oktaverify92705105aab9f92)
    name="OktaVerify-9.27.0-5105-aab9f92"
    type="pkg"
    packageID="com.okta.mobile"
    downloadURL="https://ここにサブドメイン.okta.com/api/v1/artifacts/OKTA_VERIFY_MACOS/download?releaseChannel=GA"
    appNewVersion=""
    expectedTeamID="B7F62B65BN"
    ;;

Above should be saved in a file with exact same name as label, and given extension ".sh".
Put this file in folder "fragments/labels".

上記のように、utils/buildLabel.shスクリプトにアーカイブURLを指定して実行することで、実際にアーカイブファイルをダウンロードすることにより、パラメータをある程度特定できます。 ちなみに、このスクリプトはmacOSのみに存在するバイナリを内部で呼び出しているため、LinuxやWSLでは期待通りに動作しません。

ラベルが壊れている場合に一時的に対処したい

Installomatorは、コミュニティがメンテナンスしているため、アーカイブ先の仕様変更などにすぐには追従できないことがあります。

しかし、このような場合でも、ラベルの値を上書きして一時的に対処できます。

具体例として、執筆時点でInstallomatorのラベルで最新バーションを参照していない、Company Portalをインストールできるmicrosoftcompanyportalラベルで考えてみます。

$ ./Installomator.sh microsoftcompanyportal \
    DEBUG=0 \
    downloadURL="https://go.microsoft.com/fwlink/?linkid=853070"

このように、ラベル内で定義されているパラメータを引数で渡すことで、ラベルのパラメータを上書きしてインストールできます。

終わりに

Installomatorでサポートされていないアプリケーションをインストールする方法を紹介しました。

この方法はあくまで、一時的な対応策に過ぎません。 ぜひ皆さんも本家のInstallomatorのリポジトリにIssueを立てたり、Pull Requestを送ったりして、Installomatorの改善に貢献していただければと思います。

この記事が皆さんのお役に立てば幸いです。

ちなみに、署名していないアプリケーションはインストールする方法はないのか?という声も聞こえてきそうですが、Installomatorではセキュリティ上のリスクがあるため、サポートされていません。2 しかし、どうしてもインストールしたい場合は、署名されていないアプリケーションをインストールするリスクを正しく理解して、installAppWithPath関数内のTeamIDに関するロジックを独自に変更することで実現ができるでしょう。

  1. Okta Verifyは、Oktaの自テナントのドメインを含むURLからアプリケーションのアーカイブを取得するため、Installomatorに用意されるかは不透明な状態です。 

  2. セキュリティ上の懸念からTeamIDを要求することに決定したことがコメントされています。