Skip to content

Commit f04b8b0

Browse files
authored
install: Add fallback to OTP unzip (#1780)
1 parent 697467a commit f04b8b0

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

Diff for: install.sh

+23-4
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,16 @@ main() {
105105
otp_dir="$root_dir/installs/otp/$otp_version"
106106
elixir_dir="${root_dir}/installs/elixir/${elixir_version}-otp-${elixir_otp_release}"
107107

108-
install_otp &
109-
install_elixir &
110-
wait
108+
if unzip_available; then
109+
install_otp &
110+
install_elixir &
111+
wait
112+
else
113+
# if unzip is missing (e.g. official docker ubuntu image), install otp and elixir
114+
# serially because we unzip elixir using OTP zip:extract/2.
115+
install_otp
116+
install_elixir
117+
fi
111118

112119
printf "checking OTP... "
113120
export PATH="$otp_dir/bin:$PATH"
@@ -253,7 +260,15 @@ install_elixir() {
253260
echo "unpacking $elixir_zip to $elixir_dir..."
254261
rm -rf "${elixir_dir}"
255262
mkdir -p "${elixir_dir}"
256-
unzip -q "${tmp_dir}/${elixir_zip}" -d "${elixir_dir}"
263+
264+
if unzip_available; then
265+
unzip -q "${tmp_dir}/${elixir_zip}" -d "${elixir_dir}"
266+
else
267+
"${otp_dir}/bin/erl" -noshell -eval \
268+
'[Zip,Dir] = init:get_plain_arguments(), {ok,_} = zip:unzip(Zip, [{cwd, Dir}]), halt().' \
269+
-- "${tmp_dir}/${elixir_zip}" "${elixir_dir}"
270+
fi
271+
257272
rm "${tmp_dir}/${elixir_zip}"
258273
fi
259274
}
@@ -265,4 +280,8 @@ download() {
265280
curl --retry 3 -fsSLo "$output" "$url"
266281
}
267282

283+
unzip_available() {
284+
which unzip >/dev/null 2>&1
285+
}
286+
268287
main "$@"

0 commit comments

Comments
 (0)