Setup-Your-Macを導入してみた

こんにちは、そしてお久しぶりです。

現在は技術本部でヘルプデスクやその他色々をしているヘルプデスクオペレーターの戸田です。

色々している戸田ですが、Jamfを使って、Macのキッティングの自動化を行っておりました。

その中で最近、改善のために導入した Setup-Your-Mac の導入までの経緯、実際の設定などを書こうと思います。

導入前まではどのような環境だったか

6月にアドウェイズはオフィス移転したのですが、移転前と移転後でキッティング方法が変わりました。

移転前

手動でMacをキッティングしていました。

  • オンプレのActive Directoryを使ってローカルアカウントを作成
  • 手動で必要なソフトをインストール
  • PC名を変更してからJamfにコマンドを送る
  • etc...

という状況下でした。

Macをキッティングして、お渡しするのにだいたい0.5人日かかっていたと思います。

移転後

そのような状況からゼロタッチキッティングを目指し、ある程度自動化をすることができました。

ただそれでも下記の問題点がありました。

  • インストールは自動でできるが、目視でどのくらいインストールができているかがわかりにくい
  • PC名を弊社独自の管理番号に変更して、管理をするために都度Jamf側で変更していた

これらの問題点を改善するために、今回はSetup-Your-Macを使うことになりました。

Setup-Your-Mac について

  • Macのセットアップツール
  • swiftDialog と Jamf Pro Policy カスタム イベントを利用して初期デバイス設定を簡素化し、エンドユーザーが登録後に Mac のセットアップを自己完了できるようにすることを目的としている
  • ソフト配信によく用いられていた、 DEPNotify が約2年更新されていない事を受けて、その代替として誕生した

公式:https://github.com/dan-snelson/Setup-Your-Mac

参考ブログ:https://blog.magichat.jp/n/n1310e131fb6b

利点

Setup-Your-Macを使う利点は下記が挙げられます。

  • 特定の順番でアプリケーションのインストールを行うことが可能
  • 設定次第ではPC番号をJamfに反映させることができる
  • ユーザー目線ではなにがインストールされているか確認ができるので安心できる

考慮点

導入をする際の考慮点は以下の通りです。

  • シェルとJSONを使うため、人によってはハードルが高いと感じられる可能性がある

導入を決定するまでの流れ

上記で説明した問題点の解決が見込める事や、セットアップの進捗がユーザー目線で分かりにくいという課題はなくすべきだ、となり実際に検証をして導入することになりました。

設定に関して

Jamf のセットアップに関して

セットアップに関しては、こちらが参考になると思います。(実際参考にしてました。

blog.magichat.jp

実際に弊社では下記のように設定しました。

セルフサービスに表示をする設定

  • デバックモードをfalse
  • 古いOSでの対策
    • /System/Library/CoreServices/Software Update.app
  • slackのWebhookを追加
    • Webhookを追加するだけでSlackに通知がいく

アプリをインストールする設定

弊社では、基本的にInstallomatorでインストールを行ってます。

Setup-Your-Mac用に設定している点は下記のみになります。

  • トリガーをカスタムに設定して、イベント名を設定する
    • JSONのポリシー時に使用する

Installomatorに関しては、こちらのブログが参考になります。

kenchan0130.github.io

スクリプトに関して

今回は、実際に弊社用にカスタマイズした点を紹介しようと思います。

下記が実際に変更した項目になります。

  • 時間の見積もり無効
  • 設定画面のメッセージの変更
  • ヘルプメッセージ
  • 非表示設定
  • ポリシーに関して
  • キッティング失敗時の文章
  • セットアップ完了時の文章

時間の見積もり無効

122行目

configurationDownloadEstimation="false" 

設定画面のメッセージの変更

488行目

#welcomeTitle="Happy $( date +'%A' ), ${loggedInUserFirstname}!  \nWelcome to your new ${modelName}"welcomeTitle="Welcome Adways!!"

505行目

welcomeBannerText="Happy $( date +'%A' ), ${loggedInUserFirstname}!  \nWelcome to your new ${modelName}";

↓

welcomeBannerText="Welcome Adways!!";

491行目

welcomeMessage="Please enter the **required** information for your ${modelName}, select your preferred **Configuration** then click **Continue** to start applying settings to your new Mac. \n\nOnce completed, the **Wait** button will be enabled and you‘ll be able to review the results before restarting your ${modelName}. \n\nIf you need assistance, please contact the ${supportTeamName}: ${supportTeamPhone} and mention ${supportKB}. \n\n---"welcomeMessage="Macの資産番号(PCの裏面にシールが貼ってあります)を入力し、[Continue]をクリックすると、設定の適用とソフトウェアのインストールを開始します。 \n\n完了後、画面でセットアップの結果を確認できます。また、右下のボタンが有効になり、Macを再起動することになります。 \n\nサポートが必要な場合は、ヘルプデスクにお問い合わせください"

ヘルプメッセージ

654行目

title="Setting up ${loggedInUserFirstname}‘s ${modelName}"
message="Please wait while the following apps are installed …"
if [[ -n "${brandingBanner}" ]]; then
    bannerImage="${brandingBanner}"
else
    bannerImage="https://img.freepik.com/free-photo/yellow-watercolor-paper_95678-446.jpg"
fi
if [[ "${brandingBannerDisplayText}" == "true" ]] ; then bannerText="Setting up ${loggedInUserFirstname}‘s ${modelName}";
else bannerText=""; fi

helpmessage="If you need assistance, please contact the ${supportTeamName}:  \n- **Telephone:** ${supportTeamPhone}  \n- **Email:** ${supportTeamEmail}  ${supportTeamHelpKB}  \n\n**Computer Information:**  \n- **Operating System:**  ${macOSproductVersion} (${macOSbuildVersion})  \n- **Serial Number:** ${serialNumber}  \n- **Dialog:** ${dialogVersion}  \n- **Started:** ${timestamp}"
infobox="Analyzing input …" # Customize at "Update Setup Your Mac's infobox"title="Setting up ${loggedInUserFirstname}‘s ${modelName}"
# message="Please wait while the following apps are installed …"
message="アプリをインストール中です しばらくお待ち下さい"
if [[ -n "${brandingBanner}" ]]; then
    bannerImage="${brandingBanner}"
else
    bannerImage="https://img.freepik.com/free-photo/yellow-watercolor-paper_95678-446.jpg"
fi
if [[ "${brandingBannerDisplayText}" == "true" ]] ; then bannerText="${modelName} をセットアップ中";
else bannerText=""; fi

#helpmessage="If you need assistance, please contact the ${supportTeamName}:  \n- **Telephone:** ${supportTeamPhone}  \n- **Email:** ${supportTeamEmail}  ${supportTeamHelpKB}  \n\n**Computer Information:**  \n- **Operating System:**  ${macOSproductVersion} (${macOSbuildVersion})  \n- **Serial Number:** ${serialNumber}  \n- **Dialog:** ${dialogVersion}  \n- **Started:** ${timestamp}"
helpmessage="何かお困りの場合は、インフラストラクチャーDiv第2Unitまでご連絡ください  \n\n**Computer Information:**  \n- **Operating System:**  ${macOSproductVersion} (${macOSbuildVersion})  \n- **Serial Number:** ${serialNumber}  \n- **Dialog:** ${dialogVersion}  \n- **Started:** ${timestamp}"
infobox="Analyzing input …" # Customize at "Update Setup Your Mac's infobox"

非表示設定

62行目

# These control which user input boxes are added to the first page of Setup Your Mac. If you do not want to ask about a value, set it to any other value
promptForUsername="true"
prefillUsername="true"          # prefills the currently logged in user's username
promptForComputerName="true"
promptForAssetTag="true"
promptForRoom="true"
promptForBuilding="true"
promptForDepartment="true"
promptForConfiguration="true"   # Removes the Configuration dropdown entirely and uses the "Catch-all (i.e., used when `welcomeDialog` is set to `video` or `false`)" policyJSON# These control which user input boxes are added to the first page of Setup Your Mac. If you do not want to ask about a value, set it to any other value
promptForUsername="true"
prefillUsername="true"          # prefills the currently logged in user's username
promptForComputerName="true"
promptForAssetTag="false"
promptForRoom="false"
promptForBuilding="false"
promptForDepartment="false"
promptForConfiguration="false"   # Removes the Configuration dropdown entirely and uses the "Catch-all (i.e., used when `welcomeDialog` is set to `video` or `false`)" policyJSON

必要最低限のみを表示するようにしました。

promptForConfiguration="false" にすると、自身でpolicyJSONを書かなければなりませんが、自社の環境にあったセットアップをすることが多い為、大半の方はFalseにするのではないでしょうか。

ポリシーに関して

アプリのインストールに関して、実際に今回設定したpolicyJSONの一部を紹介します。

{
    "listitem": "Slack",
    "icon": "xxxxxxxxxxx",
    "progresstext": "Slackをインストール中です。",
    "trigger_list": [
        {
            "trigger": "slack",
            "validation": "/Applications/Slack.app/Contents/Info.plist"
        }
    ]
},

これはSlackをインストールするためのポリシーになります。

今回は、iconとvalidationについて詳しく記載します。

icon:インストール中に表示するためのアイコン
  1. Jamfのselfserviceにアイコンを登録する
  2. 登録したアイコンをエディターにドラッグアンドドロップをする
  3. アイコンの値が表示される
  4. 3で表示された情報をIconに記載する

といった流れになります。下記リンクは参考になったサイトになります。

https://vimeo.com/772998915

validation:選択肢すでに入っていた場合、スキップをする
  1. インストールしたいアプリを実際に自分の端末にインストールする
  2. インストールされたアプリを右クリックして、「パッケージの内容を表示」を選択する
  3. 表示されたフォルダの中に、ファイルがあるので検査で存在しているかチェックするためのファイルを決める
  4. そこまでのpathをJSONに記載する

といったことができます。

チェックしないこともでき、その場合は「"validation": "None"」と記載するだけです。

キッティング失敗時の文章

1541行目

dialogUpdateSetupYourMac "progresstext: Failures detected. Please click Continue for troubleshooting information."

↓

dialogUpdateSetupYourMac "progresstext: キッティングに失敗しました。「Continue」を押してください"

1570行目

dialogUpdateFailure "message: A failure has been detected, ${loggedInUserFirstname}. \n\nPlease complete the following steps:\n1. Reboot and login to your ${modelName}  \n2. Login to Self Service  \n3. Re-run any failed policy listed below  \n\nThe following failed:  \n${jamfProPolicyNameFailures}  \n\n\n\nIf you need assistance, please contact the ${supportTeamName},  \n${supportTeamPhone}${supportTeamErrorKB}. "

↓

dialogUpdateFailure "message: 下記手順を試してください。\n 1. 再起動をして、ログインしてください \n2. Adways Helpdeskを起動してください \n\n3. もう一度再実行をしてください \n\n 失敗したポリシー:  \n${jamfProPolicyNameFailures}  \n\nそれでも失敗した場合は、こちらの画像をスクショをして頂きつつ下記にご連絡ください \n\n交換の場合Slackの#おしえて_インフラにて${supportTeamName}宛にご連絡ください \n\n入社の場合、インフラチームまたは人事にご連絡ください"

セットアップ完了時の文章

dialogUpdateSetupYourMac "progresstext: Complete! Please ${progressTextCompletionAction}enjoy your new ${modelName}, ${loggedInUserFirstname}!"

↓

dialogUpdateSetupYourMac "progresstext: セットアップが完了しました!!"

完成系

画面はこんな形になりました。

起動画面

インストール中の画面

通知

まとめ

Setup-Your-MacはDepNotifyに変わる素晴らしいツールだと思います。

実際に利点だと感じていた点は実感でき、改善したい点は改善できたかと思います。

まだまだ便利にできるところはあるので、引き続き課題解決に向けて頑張っていきます。

最後までお読み頂きありがとうございました!