Casper Multicast Questions

Smack2k
New Contributor

Hey all,

Hoping someone can help me along here...

Trying to use Casper's Multicast Utility, but having a hard time finding any good details on its use and best practices. Does anyone know where I can find this or any options you feel are good?

Things like:

Data Rate?
Port?
Multicast TTL?
Loop Suspend?
DNS Service Discovery?
Client Data Rate?

Want to make sure I am heading into this OK from the start...

Any help is greatly appreciated!

2 REPLIES 2

JRM
Contributor

A lot of these details are going to be custom to your network, and possibly differ from segment to segment. For the most part if you are working on a 1GB connection the defaults set by the application should work alright.

Some things to lookout for though:
* Ensure all of your linked devices, to non managed switches are linked at 1GB. Often sleeping devices, like PC's and Printers will receive the multicast traffic, and since they can't keep up - will cause you issues imaging.

* Printers often come with IP-Multicasting turned on. We have had experiences where they subscribe to every multicast session on a switch, even a managed one. This can cause you grive missing packets during imaging and making the printer unusable until the multicast stops.

The "Loop Suspend" is likely the setting of the most use. It will loop through the image x number of times and then stop. This is great if you want to start an image cycle and let it run overnight or into the evening, but have it stopped before anyone comes in the next morning. A setting of 0 will loop indefinitely.

Since I netboot and image from the same netboot server I've customized JAMF's script somewhat. I also added some wait times, so every computer has a chance to get the script before the link might be saturated by the multicast traffic. It also has some additional logging, and opens a console window of the log - and copies it to the Imaged drive after completion.

target="" server=ipconfig netbootoption shadow_mount_path | sed 's/.@//;s//.//' # CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 1 AND, IF SO, ASSIGN TO "target" if [ "$1" != "" ] && [ "$target" == "" ];then target=$1 fi # CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 4 AND, IF SO, ASSIGN TO "server" if [ "$4" != "" ] && [ "$server" == "" ]; then server=$4 fi waittimer () { echo "Waiting... 5 minutes remaining." >> "/var/log/ASR.log" sleep 60 echo "Waiting... 4 minutes remaining." >> "/var/log/ASR.log" sleep 60 echo "Waiting... 3 minutes remaining." >> "/var/log/ASR.log" sleep 60 echo "Waiting... 2 minutes remaining." >> "/var/log/ASR.log" sleep 60 echo "Waiting... 1 minutes remaining." >> "/var/log/ASR.log" sleep 30 echo "Waiting... 30 seconds remaining." >> "/var/log/ASR.log" sleep 15 echo "Waiting... 15 seconds remaining." >> "/var/log/ASR.log" sleep 5 echo "Waiting... 10 seconds remaining." >> "/var/log/ASR.log" sleep 5 echo "Waiting... 5 seconds remaining." >> "/var/log/ASR.log" sleep 2 echo "Waiting... 3 seconds remaining." >> "/var/log/ASR.log" sleep 1 echo "Waiting... 2 seconds remaining." >> "/var/log/ASR.log" sleep 1 echo "Waiting... 1 seconds remaining." >> "/var/log/ASR.log" sleep 1 echo Waiting... Done. } if [ "$target" == "" ]; then logger -s -t "RESTORE" ""$0" - Error: There is no value defined for the target parameter." exit 1 fi if [ "$server" == "" ]; then logger -s -t "RESTORE" ""$0" - Error: There is no value defined for the server parameter." exit 1 fi devEntry=$(/usr/sbin/diskutil info "$target" | /usr/bin/grep "Device Node" | /usr/bin/awk '{print $3}') logger -s -t "RESTORE" ""$0" - The dev entry for the disk to be restored: $devEntry" originalName=$(/usr/sbin/diskutil info "$target" | /usr/bin/grep "Volume Name" | /usr/bin/grep -o '[^:]$' | /usr/bin/tr -s " " | /usr/bin/sed 's/^[ ]//g') logger -s -t "RESTORE" ""$0" - The disk name: $originalName will be retained upon restoring." logger -s -t "RESTORE" ""$0" - Initiating restore process and waiting for connection..." /usr/sbin/diskutil unmount $devEntry echo Starting ASR at: `date` > "/var/log/ASR.log" open /private/var/log/ASR.log waittimer /usr/sbin/asr restore -source asr://$server -target "$devEntry" -erase -noprompt -timeout 0 -puppetstrings -noverify --verbose >> "/var/log/ASR.log" ASR_Result=echo $? echo ASR completed with exit code: $ASR_Result >> "/var/log/ASR.log" echo Completed ASR at: `date` >> "/var/log/ASR.log" killall Console /usr/sbin/diskutil mount $devEntry /usr/sbin/diskutil rename $devEntry "$originalName" originalName_Mountpoint="$(/usr/sbin/diskutil info "$devEntry" | /usr/bin/grep "Mount Point" | /usr/bin/grep -o '[^:]$' | /usr/bin/tr -s " " | /usr/bin/sed 's/^[ ]//g')" echo Update_dyld_shared_cache: `date` >> "/var/log/ASR.log" /usr/bin/update_dyld_shared_cache -root "$originalName_Mountpoint" -force >> "/var/log/ASR.log" echo Copy ASR.log: `date` >> "/var/log/ASR.log" echo cp "/var/log/ASR.log" "$originalName_Mountpoint/private/var/log/ASR.log" cp "/var/log/ASR.log" "$originalName_Mountpoint/private/var/log/ASR.log" logger -s -t "RESTORE" ""$0" script Ended: `date`" exit 0;

AndyBeaver
Contributor II

@JRM - I am getting ready to dive into this as well, thank you for the info.