def find_or_create_writable_support_binaries_dir!
if File.exist?(PhusionPassenger.support_binaries_dir)
result = directory_writable?(PhusionPassenger.support_binaries_dir)
if result == true
return PhusionPassenger.support_binaries_dir
end
if Process.euid == 0
if result == false
print_installation_error_header
render_template 'installation_utils/support_binaries_dir_not_writable_despite_running_as_root',
:dir => PhusionPassenger.support_binaries_dir,
:myself => myself
else
render_template 'installation_utils/unexpected_filesystem_problem',
:dir => PhusionPassenger.support_binaries_dir,
:exception => result
end
abort
else
return find_or_create_writable_user_support_binaries_dir!
end
else
if Process.euid == 0
mkdir_p_preserve_parent_owner(PhusionPassenger.support_binaries_dir)
return PhusionPassenger.support_binaries_dir
else
return find_or_create_writable_user_support_binaries_dir!
end
end
end