diff --git a/Makefile b/Makefile index 2d760c496..c2c9cf49e 100644 --- a/Makefile +++ b/Makefile @@ -54,6 +54,8 @@ PHONY += test ci.test test.shell ci.test: test.pep8 test.pylint test.unit test.robot test: test.pep8 test.pylint test.unit test.robot test.shell test.shell: + $(Q)shellcheck -x -s dash \ + dockerfiles/docker-entrypoint.sh $(Q)shellcheck -x -s bash \ utils/brand.env \ ./manage \ diff --git a/dockerfiles/docker-entrypoint.sh b/dockerfiles/docker-entrypoint.sh index 1d8edad13..d5c4d5fea 100755 --- a/dockerfiles/docker-entrypoint.sh +++ b/dockerfiles/docker-entrypoint.sh @@ -1,62 +1,66 @@ #!/bin/sh help() { - printf "Command line:\n\n" - printf " -h Display this help\n" - printf " -d Dry run to update the configuration files.\n" - printf " -f Always update on the configuration files (existing files are renamed with the .old suffix)\n" - printf " Without this option, the new configuration files are copied with the .new suffix\n" - printf "\nEnvironment variables:\n\n" - printf " INSTANCE_NAME settings.yml : general.instance_name\n" - printf " AUTOCOMPLETE settings.yml : search.autocomplete\n" - printf " BASE_URL settings.yml : server.base_url\n" - printf " MORTY_URL settings.yml : result_proxy.url\n" - printf " MORTY_KEY settings.yml : result_proxy.key\n" - printf " BIND_ADDRESS uwsgi bind to the specified TCP socket using HTTP protocol. Default value: \"${DEFAULT_BIND_ADDRESS}\"\n" - printf "\nVolume:\n\n" - printf " /etc/searx the docker entry point copies settings.yml and uwsgi.ini in this directory (see the -f command line option)\n" - echo - exit 0 + cat </dev/null) -printf 'searx version %s\n\n' "${SEARX_VERSION}" +export BIND_ADDRESS="${BIND_ADDRESS:-${DEFAULT_BIND_ADDRESS}}" # Parse command line FORCE_CONF_UPDATE=0 DRY_RUN=0 + while getopts "fdh" option do case $option in - f) - FORCE_CONF_UPDATE=1 - ;; - d) - DRY_RUN=1 - ;; - h) - help + + f) FORCE_CONF_UPDATE=1 ;; + d) DRY_RUN=1 ;; + + h) + help + exit 0 + ;; + *) + echo "unknow option ${option}" + exit 42 + ;; esac done +get_searx_version(){ + su searx -c \ + 'python3 -c "import six; import searx.version; six.print_(searx.version.VERSION_STRING)"' \ + 2>/dev/null +} + +SEARX_VERSION="$(get_searx_version)" +export SEARX_VERSION +echo "searx version ${SEARX_VERSION}" + # helpers to update the configuration files patch_uwsgi_settings() { CONF="$1" - - # Nothing } patch_searx_settings() { @@ -74,10 +78,11 @@ patch_searx_settings() { "${CONF}" # Morty configuration - if [ ! -z "${MORTY_KEY}" -a ! -z "${MORTY_URL}" ]; then - sed -i -e "s/image_proxy : False/image_proxy : True/g" \ - "${CONF}" - cat >> "${CONF}" <<-EOF + + if [ -n "${MORTY_KEY}" ] && [ -n "${MORTY_URL}" ]; then + sed -i -e "s/image_proxy : False/image_proxy : True/g" \ + "${CONF}" + cat >> "${CONF}" <<-EOF # Morty configuration result_proxy: @@ -96,35 +101,35 @@ update_conf() { PATCH_REF_CONF="$4" if [ -f "${CONF}" ]; then - if [ "${REF_CONF}" -nt "${CONF}" ]; then - # There is a new version - if [ $FORCE_CONF_UPDATE -ne 0 ]; then - # Replace the current configuration - printf '⚠️ Automaticaly update %s to the new version\n' "${CONF}" - if [ ! -f "${OLD_CONF}" ]; then - printf 'The previous configuration is saved to %s\n' "${OLD_CONF}" - mv "${CONF}" "${OLD_CONF}" - fi - cp "${REF_CONF}" "${CONF}" - $PATCH_REF_CONF "${CONF}" - else - # Keep the current configuration - printf '⚠️ Check new version %s to make sure searx is working properly\n' "${NEW_CONF}" - cp "${REF_CONF}" "${NEW_CONF}" - $PATCH_REF_CONF "${NEW_CONF}" - fi - else - printf 'Use existing %s\n' "${CONF}" - fi + if [ "${REF_CONF}" -nt "${CONF}" ]; then + # There is a new version + if [ "$FORCE_CONF_UPDATE" -ne 0 ]; then + # Replace the current configuration + printf '⚠️ Automaticaly update %s to the new version\n' "${CONF}" + if [ ! -f "${OLD_CONF}" ]; then + printf 'The previous configuration is saved to %s\n' "${OLD_CONF}" + mv "${CONF}" "${OLD_CONF}" + fi + cp "${REF_CONF}" "${CONF}" + $PATCH_REF_CONF "${CONF}" + else + # Keep the current configuration + printf '⚠️ Check new version %s to make sure searx is working properly\n' "${NEW_CONF}" + cp "${REF_CONF}" "${NEW_CONF}" + $PATCH_REF_CONF "${NEW_CONF}" + fi + else + printf 'Use existing %s\n' "${CONF}" + fi else - printf 'Create %s\n' "${CONF}" - cp "${REF_CONF}" "${CONF}" - $PATCH_REF_CONF "${CONF}" + printf 'Create %s\n' "${CONF}" + cp "${REF_CONF}" "${CONF}" + $PATCH_REF_CONF "${CONF}" fi } # make sure there are uwsgi settings -update_conf ${FORCE_CONF_UPDATE} "${UWSGI_SETTINGS_PATH}" "/usr/local/searx/dockerfiles/uwsgi.ini" "patch_uwsgi_settings" +update_conf "${FORCE_CONF_UPDATE}" "${UWSGI_SETTINGS_PATH}" "/usr/local/searx/dockerfiles/uwsgi.ini" "patch_uwsgi_settings" # make sure there are searx settings update_conf "${FORCE_CONF_UPDATE}" "${SEARX_SETTINGS_PATH}" "/usr/local/searx/searx/settings.yml" "patch_searx_settings" @@ -135,7 +140,6 @@ if [ $DRY_RUN -eq 1 ]; then exit fi -# touch /var/run/uwsgi-logrotate chown -R searx:searx /var/log/uwsgi /var/run/uwsgi-logrotate unset MORTY_KEY diff --git a/docs/admin/installation-docker.rst b/docs/admin/installation-docker.rst index 120c9cb08..7e40546c6 100644 --- a/docs/admin/installation-docker.rst +++ b/docs/admin/installation-docker.rst @@ -39,7 +39,7 @@ Command line docker run --rm -it searxng/searxng -h -.. program-output:: ../dockerfiles/docker-entrypoint.sh help +.. program-output:: ../dockerfiles/docker-entrypoint.sh -h Build the image