Mac OS X - Advanced Computer(Re)Name via MySQL
Hope this helps someone :) I'm all new to this and I had a blast making it, let me know what you think!
Extended (commented) version:
http://oldgreenhorn.blogspot.com/2009/06/mac-os-x-advanced-computerrename-via.html
mysql_computername.sh -
Save in /private/var/root/Desktop or wherever, just make sure to change appropriate paths.
com.carver.mark.acn.plist -
Save in /Library/LaunchDaemons (mandatory)
Extended (commented) version:
http://oldgreenhorn.blogspot.com/2009/06/mac-os-x-advanced-computerrename-via.html
mysql_computername.sh -
#!/bin/bash # Script: mysql_computername.sh # Version: 1.0 # Description: Rename computers dynamically on system startup. # Variables are pulled from a MySQL database for # easier management. # # Developed by: Mark Carver © 2009 # Email: mark_carver@jsd.k12.ak.us # Website: http://oldgreenhorn.blogspot.com export PATH=${PATH}:/usr/local/mysql/bin mysql_host='localhost' mysql_user='ReadOnlyUser' mysql_password='YoUrPaSsWoRd' mysql_db='database_name' mysql_connection="mysql -s -N -w --connect_timeout=5 -h ${mysql_host} -u ${mysql_user} --password=${mysql_password} ${mysql_db}" i=0 while [ $i -lt 30 ] do if eval "ping -c 1 -q ${mysql_host}"; then internet='connected' break else sleep 10 let i+=1 fi done if [ "${internet}" == 'connected' ]; then m=0 while [ $m -lt 30 ] do if eval "${mysql_connection} -e \"SHOW DATABASES\""; then mysql_status='connected' break else sleep 10 let m+=1 fi done if [ "${mysql_status}" == 'connected' ]; then template=`${mysql_connection} -e "SELECT value FROM settings WHERE attribute='template'"` mac=`ifconfig en0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | tr -d ':' | tr 'a-z' 'A-Z'` #mac="001FF3D0A560" exists=`${mysql_connection} -e "SELECT ethernet FROM computers WHERE ethernet='${mac}'"` if [ "${exists}" != '' ]; then fas=`${mysql_connection} -e "SELECT fas FROM computers WHERE ethernet='${mac}'"` last_name=`${mysql_connection} -e "SELECT last_name FROM users WHERE fas='${fas}'"` first_name=`${mysql_connection} -e "SELECT first_name FROM users WHERE fas='${fas}'"` school=`${mysql_connection} -e "SELECT school FROM computers WHERE fas='${fas}'"` team=`${mysql_connection} -e "SELECT team FROM users WHERE fas='${fas}'"` cart=`${mysql_connection} -e "SELECT cart FROM computers WHERE fas='${fas}'"` slot=`${mysql_connection} -e "SELECT slot FROM computers WHERE fas='${fas}'"` if [ "${cart}" != "" ] && [ "${slot}" != "" ] then fas="${cart}${slot}-${fas}" fi if [ "${last_name}" != "" ] || [ "${first_name}" != "" ]; then lastname_first="- ${last_name}, ${first_name}" else lastname_first="" fi computer_name=`eval echo ${template}` computer_name=`echo ${computer_name} | tr -s " "` local_hostname=`echo ${computer_name} | tr -s "[:punct:]" "-" | tr -c -s '\12\60-\172' "-" | tr 'A-Z' 'a-z' | sed 's/-$//'` scutil --set ComputerName "${computer_name}" scutil --set LocalHostName "${local_hostname}" exit 0 else logger -s "The MAC address: ${mac} does not exist in the database. Will try again next startup/login." exit 0 fi else logger -s "MySQL connection timeout reached. Failed connecting to MySQL database: ${mysql_db} at ${mysql_host}. Will try again next startup/login." fi else logger -s "Host connection timeout reached. Failed connecting to host: ${mysql_host}. Will try again next startup/login." fi
Save in /private/var/root/Desktop or wherever, just make sure to change appropriate paths.
com.carver.mark.acn.plist -
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ServiceIPC</key> <true/> <key>Label</key> <string>com.carver.mark.acn</string> <key>ProgramArguments</key> <array> <string>/private/var/root/Desktop/mysql_computername.sh</string> </array> <key>RunAtLoad</key> <true/> <key>StartOnMount</key> <false/> </dict> </plist>
Save in /Library/LaunchDaemons (mandatory)