JamfなしMacOSキッティングに便利なコードセット
社員にMacPCを配布するけど、予算や、使用台数の関係で、Jamfの導入まではできないときに使える、MacPCのキッティングに便利なコードセット作ってみました。
あくまで手作業と組み合わせて使う、簡単なものです。
機能概要
キッティングしたいMacのターミナルに貼り付けて実行するコードのテキスト
Wi-Fi接続、PC名変更、OSソフトウェアアップデート設定、Filevault有効化行う手順を効率化する
シリアル番号、Macアドレス、Filevault回復キーなどをWebhook(GoogleかSlack)でチャットに送付する
使い方例
ローカル管理者権限をつけて、使用者ユーザーのアカウントにログイン
USBメモリに以下の貼り付けコマンドセット①②③と、アプリインストーラーをappフォルダに保存
コマンドセット①
テキストエディタで開き、変数を設定
ターミナルに貼り付ける→以下が実行される
Wi-Fiパスをクリップボードに保存
ターミナルのログテキストの保存を開始
ダウンロードフォルダに、アプリインストーラーをコピー
クリップボードにWi-Fiパスがコピーされているので、Wi-Fiに接続(パスワードをペースト)
コマンドセット②
ターミナルに貼り付ける→以下が実行される
ユーザーパスをクリップボードに保存
システム環境設定の、OSソフトウェアアップデートが開く
OSソフトウェアアップデート画面で自動更新の設定
パスワード入力ウィンドウが出るので、3回連続でパスワード貼り付け→ターミナルでパスワード貼り付け(PC名変更&Filevault有効化)
以下が続けて実行される
softwareupdate -i -aがクリップボードに保存される
ターミナルのテキストの保存を終了
Downloadsフォルダにコピーされたアプリをインストール
コマンドセット③
ターミナルに貼り付ける→以下が実行される
保存されたターミナルのログテキストから、Filevault回復キーを取得
シリアル番号、MacアドレスなどをWebhookでチャットに送付
softwareupdate -i -aがクリップボードに保存される
softwareupdate -i -aを貼り付けてOSソフトウェアアップデート実行(必要に応じて再起動)
ダウンロードフォルダにコピーされたアプリをインストールする。
必要に応じて
使用者ユーザーのアカウントを管理者から通常ユーザーに変更
USBに保存されたターミナルのログテキスト(ユーザー名.txt)を削除
コマンドセット①
#変数設定
webhook_url='webhook_url'
wifi_password='Wi-Fiパスワード'
usb_drive_name=’USBメモリ名’
host_name='PC名(ホスト名)を入力'
user_pass='ユーザーパスワードを入力'
open ~/Downloads/
echo "$wifi_password" | tr -d '\n' | pbcopy
perl -e 'print "Wi-Fiパスをクリップボードにコピーしました\n"'
cp “/Volumes/${usb_drive_name}/app/*” “~/Downloads/”
log_path= “/Volumes/$}usb_drive_name}/${LOGNAME}.txt"
script "$log_path"
コマンドセット②
echo "$user_pass" | tr -d '\n' | pbcopy
open -a "software update"
scutil --set ComputerName "$host_name"
scutil --set LocalHostName "$host_name"
scutil --set HostName "$host_name"
sudo fdesetup enable -user "$LOGNAME"
echo "softwareupdate -i -a" | pbcopy
exit
コマンドセット③
serial_number=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}')
pc_name=$(hostname)
model_name=$(system_profiler SPHardwareDataType | awk '/Model Identifier/ {print $3}')
mac_address_eth=$(ifconfig en0 | awk '/ether/ {print $2}')
mac_address_wifi=$(ifconfig en1 | awk '/ether/ {print $2}')
storage_capacity=$(df -h | awk '/\/$/ {print $2}')
memory_capacity=$(system_profiler SPHardwareDataType | awk '/Memory/ {print $2}')
cpu_name=$(sysctl -n machdep.cpu.brand_string)
recovery_key=$(grep -oE "Recovery\s+key\s*=\s*'[^']+'" $log_path | sed "s/Recovery\s*key\s*=\s* '//; s/'//")
message="シリアル番号: $serial_number\nPC名: $pc_name\n機種名: $model_name\nMACアドレス(イーサネット): $mac_address_eth\nMACアドレス(Wi-Fi): $mac_address_wifi\nストレージ容量: $storage_capacity\nメモリ容量: $memory_capacity\nCPU名: $cpu_name\n$recovery_key"
curl -X POST -H 'Content-type: application/json' --data "{\"text\": \"$message\"}" "$webhook_url"
perl -e 'print "softwareupdate -i -aをクリップボードにコピーしました\n"'
アプリのインストールもコマンドで出来たら便利だろうと思いましたが、予期しない動きをしそうで、そこは手動です。
見つけるまで意外と時間がかかったのは、以下部分でそのままpbcopyをすると、なぜか改行コードが一緒に入りうまく動作しなかったので、改行コードを削除するプロセスを入れています。
echo "$user_pass" | tr -d '\n' | pbcopy