You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ошибка с установочным скриптом init.sh в среде bash 5
При запуске скрипта init.sh в среде BASH 5.1.8 (AlmaLinux 9.4, kernel 5.14.0-427.40.1) выполнение доходит до стадии
init.sh -> вызов функции install_zitadel -> вызов функции wait_api -> цикл while true -> вызов функции curl
и впадает в бесконечную рекурсию, т.к. в функции curl снова вызывается функция curl.
В выдаче на экран пишется строка "Waiting for Zitadel to become ready ", а ожидаемых (повторяемых) строк ". " и заключительной строки " done" не выдаётся.
К сравнению в среде BASH 4.2.46 (CentOS 7.9, kernel 3.10.0-1160) такой ошибки нет.
В чём причина ошибки и два метода устранения
Причина достаточно простая:
Происходит бесконечная рекурсия вызова переопределённой функции curl, содержащей вызов curl.
1-ый метод устранения ошибки:
Переименовать функцию curl в curlmod, т.е. в несовпадающее имя функции с командой curl.
А затем заменить все вызовы функции curl в тексте скрипта init.sh в следующих функциях:
wait_api
set_custom_login_text
create_new_project
create_new_application
update_settings
create_user_roles
find_admin_user
grant_user_role
create_service_user
create_service_user_secret
detele_admin_service_user
на вызов функции curlmod().
Фактически везде, кроме функции check_curl (там это не требуется, см. 2-ой метод), то ошибка пропадает.
2-ой метод устранения ошибки:
Переписать функцию curl таким образом, чтобы не происходила бесконечная рекурсия.
Более элегантное решение :) Кстати, в функции check_curl именно так и сделано.
Предлагаемый вариант функции curl:
curl() {
if [ "$SELF_SIGNED_CERT}" == "true" ]; then
command curl --cacert "./certs/zitadel.${DOMAIN}.crt" "$@"
else
command curl "$@"
fi
}
Вызов команды "command curl" проигнорирует переопределение функции curl и вызовет команду curl,
которую сможет найти в $PATH.
Почему не стоит использовать переопределение CURL с помощью команды $(which curl)?
Например, для команды $(which ls) в обоих рассматриваемых операционных системах возвращаемое значение:
> LS=$(which ls); echo $LS
alias ls='ls --color=auto' /usr/bin/ls
Т.е. в значение переменной CURL попадёт не только путь до команды curl, но и переопределение alias, а
в нём могут быть свои "особенности".
После применения метода 1 или 2 - работа скрипта init.sh происходит без ошибок.
The text was updated successfully, but these errors were encountered:
Ошибка с установочным скриптом init.sh в среде bash 5
При запуске скрипта init.sh в среде BASH 5.1.8 (AlmaLinux 9.4, kernel 5.14.0-427.40.1) выполнение доходит до стадии
init.sh -> вызов функции install_zitadel -> вызов функции wait_api -> цикл while true -> вызов функции curl
и впадает в бесконечную рекурсию, т.к. в функции curl снова вызывается функция curl.
В выдаче на экран пишется строка "Waiting for Zitadel to become ready ", а ожидаемых (повторяемых) строк ". " и заключительной строки " done" не выдаётся.
К сравнению в среде BASH 4.2.46 (CentOS 7.9, kernel 3.10.0-1160) такой ошибки нет.
В чём причина ошибки и два метода устранения
Причина достаточно простая:
Происходит бесконечная рекурсия вызова переопределённой функции curl, содержащей вызов curl.
1-ый метод устранения ошибки:
Переименовать функцию curl в curlmod, т.е. в несовпадающее имя функции с командой curl.
А затем заменить все вызовы функции curl в тексте скрипта init.sh в следующих функциях:
wait_api
set_custom_login_text
create_new_project
create_new_application
update_settings
create_user_roles
find_admin_user
grant_user_role
create_service_user
create_service_user_secret
detele_admin_service_user
на вызов функции curlmod().
Фактически везде, кроме функции check_curl (там это не требуется, см. 2-ой метод), то ошибка пропадает.
2-ой метод устранения ошибки:
Переписать функцию curl таким образом, чтобы не происходила бесконечная рекурсия.
Более элегантное решение :) Кстати, в функции check_curl именно так и сделано.
Предлагаемый вариант функции curl:
Вызов команды "command curl" проигнорирует переопределение функции curl и вызовет команду curl,
которую сможет найти в $PATH.
Почему не стоит использовать переопределение CURL с помощью команды $(which curl)?
Например, для команды $(which ls) в обоих рассматриваемых операционных системах возвращаемое значение:
Т.е. в значение переменной CURL попадёт не только путь до команды curl, но и переопределение alias, а
в нём могут быть свои "особенности".
После применения метода 1 или 2 - работа скрипта init.sh происходит без ошибок.
The text was updated successfully, but these errors were encountered: