create_diskimage 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. autoload -Uz log_debug log_error log_info log_status log_group log_output
  2. local -r _usage="Usage: %B${0}%b <source> <volume name> <output_name>
  3. Create macOS disk image <volume name> <output_name> with contents of <source>"
  4. if (( ! # )) {
  5. log_error 'Called without arguments.'
  6. log_output ${_usage}
  7. return 2
  8. }
  9. local source=${1}
  10. local volume_name=${2}
  11. local output_name=${3}
  12. log_group "Create macOS disk image"
  13. local _hdiutil_flags
  14. if (( _loglevel < 1 )) _hdiutil_flags='-quiet'
  15. trap "hdiutil detach ${_hdiutil_flags} /Volumes/${output_name}; rm temp.dmg; log_group return 2" ERR
  16. hdiutil create ${_hdiutil_flags} \
  17. -volname "${volume_name}" \
  18. -srcfolder ${source} \
  19. -ov \
  20. -fs APFS \
  21. -format UDRW \
  22. temp.dmg
  23. hdiutil attach ${_hdiutil_flags} \
  24. -noverify \
  25. -readwrite \
  26. -mountpoint /Volumes/${output_name} \
  27. temp.dmg
  28. log_info "Waiting 2 seconds to ensure mounted volume is available..."
  29. sleep 2
  30. log_status "Done"
  31. log_info "Setting up disk volume..."
  32. log_status "Volume icon"
  33. SetFile -c icnC /Volumes/${output_name}/.VolumeIcon.icns
  34. log_status "Icon positions"
  35. osascript package.applescript ${output_name}
  36. log_status "File permissions"
  37. chmod -Rf go-w /Volumes/${output_name}
  38. SetFile -a C /Volumes/${output_name}
  39. rm -rf -- /Volumes/${output_name}/.fseventsd(N)
  40. log_info "Converting disk image..."
  41. hdiutil detach ${_hdiutil_flags} /Volumes/${output_name}
  42. hdiutil convert ${_hdiutil_flags} \
  43. -format ULMO \
  44. -ov \
  45. -o ${output_name}.dmg temp.dmg
  46. rm temp.dmg
  47. trap '' ERR
  48. log_group
  49. return 0