見出し画像

ようこそ Setup Your Mac

先日のブログで当社エンジニア中尾が紹介した Setup Your Mac の具体的な設定、使い方について書きたいと思います。

Setup Your Mac は、 swiftDialogJamf Pro ポリシーのカスタムトリガーを活用して自動デバイス登録後の構成、キッティングを簡素化し、エンドユーザが登録後に Mac のセットアップをユーザ自身で完了できるようにすることを目的としています。

ツールが生まれた理由

Jamf Proで自動デバイス登録後の各種ソフトの配信に DEPNotify をよく使用されていると思います。ですが、DEPNotify はメンテナンスがほぼ2年間ぐらい行われておらず。また、Jamf ProのProduct Issue(PI100009 - PI-004775)もあり、特定の環境下で ポリシーは「登録完了」のトリガーで動作しない問題もあり、 Dan K. Snelson さんは Setup Your Mac プロジェクトをはじめました。

注意点
Setup Your Mac のコア機能がニーズを満たしている場合、コードを書く必要はありません。ただし、本番環境に実装する前に、ユースケースに合わせてスクリプト内で既存の設定をカスタマイズしたり、JSON を読み取ったり編集したりする等の手作業が必要となりいます。

Setup Your Mac を試してみましょう

実装する前に、検証端末でSetup Your Macの運用を試すには、下記の方法で検証してみてください。
1. ターミナルアプリを開く
2. 次のコマンドにて、Setup Your Mac の最新バージョンをダウンロードしてください。

curl -o ~/Downloads/Setup-Your-Mac-via-Dialog-reference.bash https://raw.githubusercontent.com/dan-snelson/Setup-Your-Mac/main/Setup-Your-Mac-via-Dialog.bash

スクリプトは Setup-Your-Mac-via-Dialog-reference.bash としてダウンロードフォルダーに保存されます。

3. Setup Your Mac スクリプトをrootで実行します。

sudo bash ~/Downloads/Setup-Your-Mac-via-Dialog-reference.bash

最初の実行でswiftDialogのインストールが行います。
その後 Setup Your Mac が起動します。

覚えておきたいこと
・Debug Mode はデフォルトで「verbose」になっています。Setup Your Mac 画面の左下隅にも表示されます。
・Debug Mode は「true」、または「verbose」に設定されている場合、Jamf Pro ポリシーは実行されません。
・実行後、普段は完了後のアクションは走りますが、Debug Mode でポップアップ上で「completionActionOption」で設定されたアクシオンの表示のみとなります。

Verbose Debug Mode で実行後の画面とポップアップ

もちろんログも取れています。
デフォルトで /var/log/org.churchofjesuschrist.log 名で保存されます。
ターミナルアプリから実行するとログの項目はそちらにも表示されます。

デフォルトの 「ようこそ」ダイアログ

「ようこそ」ダイアログとは、ユーザに最初に表示される画面の事です。

デフォルトでようこそメッセージとユーザ情報を入力する形で現れます。

「ようこそ」ダイアログの入力フィールドは、一つの welcomeJSON 変数によって制御され、必要に応じてフィールドの追加、変更、または削除できます。
(スクリプトのソース コードは非常に長いので、このブログ投稿をこれ以上長くしない為に、使用しているコード スニペットに関する GitHub リンクを追加しました。コードを確認しながらブログ投稿と進めてください。)

「Configuration」のところで、実行したい Jamf Pro ポリシーの種類を選択することはできます。(上記の写真を参考にしてください)
例:「Required」の場合、業務で必要なソフトのインストールまた設定だけを行います。

「ようこそ」ダイアログのコード スニペット (現在478-526ラインの間)
こちらの welcomeJSON 内にあるものを日本語に変更すると、エラーが発生しますので、ご注意ください。

ユーザ入力の処理はスクリプトの後半で処理され、追加のカスタマイズが必要になる可能性が高いため、本番環境にデプロイする前に徹底的にテストする必要があります。(特にコード内で「UNTESTED, UNSUPPORTED "YOYO" EXAMPLE」書いてあるところです。)
ユーザ入力の処理の辺り (現在2517-2759ラインの間)

ユーザ情報を入力する必要なければ、「video」また「false」に設定することも可能です。「video」の場合、ユーザに対象videoが表示されます。「false」の場合は、すぐインストールが始まります。
※これらの設定をJamf Pro経由でスクリプトパラメータとして設定します。
テスト用の場合、コード内で以下のいずれかに変更することでテストできます。

welcomeDialog="${6:-"userInput"}"
welcomeDialog="${6:-"video"}"
welcomeDialog="${6:-"false"}"

デフォルトの 「Setup Your Mac」ダイアログ

「ようこそ」ダイアログ後に「Setup Your Mac」ダイアログが現れます。

実行される Jamf Pro ポリシーのリストは、4 つの JSON 変数のいずれかによって制御されます。
・Required
・Recommended
・Complete
・Catch-all
※ 「ようこそ」ダイアログを表示しない場合、或いはユーザ情報の入力を目指さない時「Catch-all」のオプションは自動的に走ります。
コード内で現在721-1285ラインの間です。

上記に記載されてあの4つのJSON 変数ごとに、次を指定します。
listitem:
 リストに表示されるテキスト
icon: 表示するアイコンのハッシュ
progresstext: プログレスバーの下に表示されるテキスト
trigger: Jamf Pro ポリシー のカスタム イベント名
validation:
 ・{absolute path}(例:"/Applications/Microsoft Teams.app/Contents/Info.plist")
 ・Local (Setup Your Mac スクリプト内のにある検証用スクリプト、例: "filevault"。現在1771-1801ラインの間)
 ・Remote (別途スクリプトを使って Jamf Pro ポリシー経由による検証)
 ・None (検証を必要としないトリガーの場合、例: recon)

説明をより分かりやすくする為に、変更した「Required」のコードスニペットを入れておきます。

"Required" )
  policyJSON='
  {
    "steps": [
      {
        "listitem": "Rosetta",
        "icon": "8bac19160fabb0c8e7bac97b37b51d2ac8f38b7100b6357642d9505645d37b52",
        "progresstext": "Rosetta enables a Mac with Apple silicon to use apps built for a Mac with an Intel processor.",
        "trigger_list": [
          {
            "trigger": "sym-rosetta",
            "validation": "None"
          },
          {
            "trigger": "rosetta",
            "validation": "Local"
          }
        ]
      },
      {
        "listitem": "FileVault Disk Encryption",
        "icon": "f9ba35bd55488783456d64ec73372f029560531ca10dfa0e8154a46d7732b913",
        "progresstext": "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac.",
        "trigger_list": [
          {
            "trigger": "sym-filevault2",
            "validation": "None"
          },
          {
            "trigger": "filevault",
            "validation": "Local"
          }
        ]   
      },
      {
        "listitem": "Google Chrome",
        "icon": "c8f42f4c1ad3906610633f4e24701b65eb1885a724936dd0064316264b6a496a",
        "progresstext": "Google Chrome is a browser that combines a minimal design with sophisticated technology to make the Web faster.",
        "trigger_list": [
          {
            "trigger": "sym-googlechrome",
            "validation": "/Applications/Google Chrome.app/Contents/Info.plist"
          }
        ]
      },
      {
        "listitem": "Slack",
        "icon": "dea00783f8cd1028456b3b872747268751cf349a0db226fea5465c55450d26d8",
        "progresstext": "Slack is an instant messaging program",
        "trigger_list": [
          {
            "trigger": "sym-slack",
            "validation": "/Applications/Slack.app/Contents/Info.plist"
          }
        ]
      },
      {
        "listitem": "Computer Inventory",
        "icon": "90958d0e1f8f8287a86a1198d21cded84eeea44886df2b3357d909fe2e6f1296",
        "progresstext": "A listing of your Mac’s apps and settings — its inventory — is sent automatically to the Jamf Pro server daily.",
        "trigger_list": [
          {
            "trigger": "recon",
            "validation": "None"
          }
        ]
      }
    ]
  }
  '
;;

スクリプトのカスタマイズ

必要に応じ Jamf Pro ポリシーにカスタム イベントを追加後に、お気に入りのエディタにて実行したい環境に合わせて ~/Downloads/Setup-Your-Mac-via-Dialog-reference.bash を変更しましょう。

カスタマイズ化でき、変更可能な箇所:
1.「ようこそ」ダイアログ
 ・タイトル、メッセージ、バナー画像、バナー テキスト、キャプション、ビデオ ID およびアイコン (日本語化可能)
 ・welcomeJSON
2.「Setup Your Mac」ダイアログ
 ・タイトル、メッセージ、オーバーレイ アイコン、バナー画像、バナー テキスト、ヘルプ メッセージ、インフォボックス、アイコン (日本語化可能)
 ・設定と機能
 ・実行するポリシー
  ・setupYourMacPolicyArrayIconPrefixUrl (アイコンをホストするサーバの完全修飾ドメイン名。Jamf のクラウド サービス接続: アイコン サービスを参照してください。)
  ・JSON 変数 (Required、Recommended、Complete、Catch-all)
3. 「失敗」ダイアログ
 ・タイトル、メッセージ、アイコン (日本語化可能)
 ・設定と機能
4.「finalise」関数

「ようこそ」ダイアログを日本語化してみました。
Setup Your Macの実行は失敗した場合、「失敗」ダイアログが最後に表示されます。

Jamf Proでの構築

Setup Your Macコードの変更後に、Jamf Proのサーバで以下を参考に設定してみてください。

カスタマイズしたスクリプトのアップロード

  1. カスタマイズしたスクリプトを Jamf Pro サーバに追加します

  2. オプション > Parameter Labels に次を指定します。

    • パラメータ 4:ログの場所 [ /var/log/org.magichat.log ] (組織のクライアント側でログのデフォルト場所)

    • パラメータ 5:デバッグモード [ verbose (default) | true | false ]

    • パラメータ 6:ようこそダイアログ [ userInput (default) | video | false ]

    • パラメータ 7:完了後のアクション [ wait | sleep (with seconds) | Shut Down | Shut Down Attended | Shut Down Confirm | Restart | Restart Attended (default) | Restart Confirm | Log Out | Log Out Attended | Log Out Confirm ]

    • パラメータ 8:必要最低限のOSビルド [ disabled (default) | 22D ] (macOS 13.2.x の場合は「22D」を使用)

    • パラメータ 9:古い OSでの対策 [ /System/Library/CoreServices/Software Update.app (default) | jamfselfservice://content?entity=policy&id=117&action=view ](OSのアップグレード用の Jamf Pro Self Service ポリシー ID等)

  3. 保存

以下の二つのスクショを参考にしてください。

Setup Your Mac用のポリシー作成

  1. 新規ポリシーの作成

    • 表示名: Enrollment: Setup Your Mac等 

    • 実行頻度:Ongoing

  2. Scriptsペイロードでアップロードしたスクリプトを追加する

  3. パラメータ値の入力 (以下の写真を参考にしてください。)

  4. Scopeを設定する

  5. 「Self Service でポリシーを使用可能にする」にチェックを入れる

    • 必要に応じてアイコン、表示名、説明を設定する

  6. 保存

パラメータ値の入力です。

これで Setup Your Mac のセットアップは完了となります。
ユーザは Self Service 経由ですぐ使えるようになります。

まとめ

最初は少し難しいように思えるかもしれませんが、コードを検証し試してみて思ったことは、Setup Your Mac は DEP Notify の代わりになる素晴らしいツールだと言うことです。
Setup Your Mac は自動デバイス登録後の構成を支援し、端末保持者にパーフェクトなユーザ 体験を提供することが出来ます。

最後に、発明者 Dan K. Snelson さんのMovieをご覧ください。
Setup Your Mac のワークフローを通しで見ることが出来ます。

以上、 エンジニアのメリンダが担当いたしました。
最後まで読んでいただき、ありがとうございました。

ご参考

Dan K. Snelsonのブログポスト
Setup Your Macのリポジトリ
Setup Your Macのスクリプト
swiftDialogのリポジトリ

新しい記事の情報をツイッターで報告しておりますので是非@magichat2011もフォローして下さい!