Installomatorでサポートされていないアプリケーションをインストールする
これまで、管理下にあるmacOSに最新バーションのアプリケーションをインストールするスクリプトである、Installomatorに関していくつか記事を投稿してきました。
今回はこれまで紹介してきた内容を応用して、Installomatorでサポートされていないアプリケーションをインストールする方法を紹介します。
Installomatorに存在しないアプリケーションをインストールしたい
Installomatorを使用していると、組織内で使用しているアプリケーションが用意されていない場合があります。
- InstallomatorのリポジトリにIssueを立てる
- InstallomatorのリポジトリにPull Requestを送る
- MacAdminsの#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のポリシーで設定する場合は以下の通りです。
さらに、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でも設定できます。
このように、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に関するロジックを独自に変更することで実現ができるでしょう。