mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-14 23:34:08 +00:00
c6b05ff393
Suggestion by GitHub's macOS image maintainer is to kill XProtectBehaviourService when "Resource busy" error occurs on macOS 13 runners.
85 lines
1.8 KiB
Plaintext
85 lines
1.8 KiB
Plaintext
autoload -Uz log_debug log_error log_info log_status log_group log_output log_warning
|
|
|
|
local -r _usage="Usage: %B${0}%b <source> <volume name> <output_name>
|
|
|
|
Create macOS disk image <volume name> <output_name> with contents of <source>"
|
|
|
|
if (( ! # )) {
|
|
log_error 'Called without arguments.'
|
|
log_output ${_usage}
|
|
return 2
|
|
}
|
|
|
|
local source=${1}
|
|
local volume_name=${2}
|
|
local output_name=${3}
|
|
|
|
log_group "Create macOS disk image"
|
|
|
|
trap "safe_hdiutil detach /Volumes/${output_name}; rm temp.dmg; log_group; return 2" ERR
|
|
|
|
safe_hdiutil() {
|
|
local _status=0
|
|
local -r -a _backoff=(2 5 10 15 30)
|
|
|
|
for i ({1..5}) {
|
|
hdiutil ${@} && _status=0 || _status=1
|
|
|
|
if (( _status )) {
|
|
log_warning "Unable to run 'hdiutil ${@}' (attempt #${i}). Retrying."
|
|
if (( ${+CI} )) sudo pkill -9 XProtect >/dev/null || true
|
|
sleep ${_backoff[${i}]}
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
|
|
if (( _status )) {
|
|
log_error "Unable to run 'hdiutil ${@}'. Aborting"
|
|
log_group
|
|
return 2
|
|
}
|
|
}
|
|
|
|
safe_hdiutil create \
|
|
-volname "${volume_name}" \
|
|
-srcfolder ${source} \
|
|
-ov \
|
|
-fs HFS+ \
|
|
-format UDRW \
|
|
temp.dmg
|
|
safe_hdiutil attach \
|
|
-noverify \
|
|
-readwrite \
|
|
-mountpoint /Volumes/${output_name} \
|
|
temp.dmg
|
|
|
|
log_info "Waiting 2 seconds to ensure mounted volume is available..."
|
|
sleep 2
|
|
log_status "Done"
|
|
log_info "Setting up disk volume..."
|
|
log_status "Volume icon"
|
|
SetFile -c icnC /Volumes/${output_name}/.VolumeIcon.icns
|
|
log_status "Icon positions"
|
|
osascript package.applescript ${output_name}
|
|
log_status "File permissions"
|
|
chmod -Rf go-w /Volumes/${output_name}
|
|
SetFile -a C /Volumes/${output_name}
|
|
rm -rf -- /Volumes/${output_name}/.fseventsd(N)
|
|
log_info "Converting disk image..."
|
|
|
|
safe_hdiutil detach /Volumes/${output_name}
|
|
|
|
safe_hdiutil convert \
|
|
-format ULFO \
|
|
-ov \
|
|
-o ${output_name}.dmg temp.dmg
|
|
|
|
rm temp.dmg
|
|
|
|
trap '' ERR
|
|
|
|
log_group
|
|
|
|
return 0
|