Получить "Интернет не доступен" с SDKMAN
Интернет работает нормально, но я получаю эту ошибку от sdkman:
06:47 $ sdk version
==== INTERNET NOT REACHABLE! ===============================
Some functionality is disabled or only partially available.
If this persists, please enable the offline mode:
$ sdk offline
============================================================
SDKMAN 4.0.35
Кажется, мой DNS разрешается очень медленно. Я могу пинговать, но разрешение занимает ~7 секунд. Может ли это привести к превышению времени ожидания sdkman?
Какие-нибудь мысли? каков следующий шаг к отладке? Спасибо!
9 ответов
Вам нужно установить curl connect timeout
а также curl max time
в файле конфигурации, который расположен по следующему пути:
$YOUR_HOME/.sdkman/etc/config
к следующему:
sdkman_curl_connect_timeout =20
sdkman_curl_max_time =0
Я надеюсь, что это поможет вам
Что ж, мне пришлось изо всех сил заставить SDKMAN разрешить мне загружать пакеты. Я использую корпоративный прокси-сервер и использую CNTLM, чтобы обойти его на моем локальном компьютере.
Мне пришлось отредактировать файл sdkman на моем локальном компьютере после его загрузки.
Скачивание тоже было делом. Для меня сработало добавление -x http://localhost:3128/ в команду curl. Шаги, которые я предпринял для установки Gradle:
- Я скачал установочный скрипт и сохранил его в папке / tmp.
- Скорректировали сценарий установки и добавили дополнительный параметр в команду curl. Теперь я мог видеть, как инструмент загружается и устанавливается в каталоге $HOME/.sdkman.
- После этого мне пришлось запустить sdkman-init.sh
- Затем мне пришлось отредактировать.sdkman/src/sdkman-utils.sh и добавить параметр -x в каждую строку, где вызывается curl.
Это сработало. Не забывайте закрывать терминал и открывать новый после каждого шага.
Исправление было двухэтапным процессом для меня:
- Установите исполняемый бит на
sdkman-init.sh
(chmod +x .sdkman/bin/sdkman-init.sh
) - изменять
~/sdkman/etc/config
, задавать
sdkman_curl_connect_timeout=30
sdkman_curl_max_time=50
И не забудьте перезапустить терминал.
Различные приложения используют разные настройки для установления сетевого подключения.
В моем случае (я получаю доступ к Интернету через прокси, используя Macbook Pro), хотя я установил http и https прокси в Системных настройках-> Сеть-> Дополнительно-> Прокси. Это вступило в силу для браузера (Safari), но не для инструмента командной строки sdkman.
Я должен установить переменные среды http_proxy и https_proxy вручную.
Ниже приведено то, что я установил на свой Macbook Pro.
export http_proxy=http://proxy.abc.com:2500
export https_proxy=https://proxy.abc.com:2500
Тогда SDKMAN работает нормально.
У меня такая же проблема (за корпоративным прокси). В моем случае,
http_proxy
а также была установлена переменная окружения.
Интересно, что большинство дистрибутивов не компилируют openssl с (довольно редкой) поддержкой, и поэтому curl не работает:
curl https://www.google.com
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to proxy.company.com:3128
Решение моей проблемы:
unset https_proxy
После снятия с охраны
https_proxy
, завиток и
sdkman
(потому что они, похоже, используют openssl) оба работают из коробки.
Или 6 лет спустя вы столкнетесь с ошибкой , и проблема будет решена путем обновленияcurl
.
Шаги для анализа:
# Find the SDK website URL:
cat ~/.sdkman/bin/sdkman-init.sh | grep -i api
# Run curl
curl -vvv https://api.sdkman.io/2
Если это показывает что-то вродеInternal SSL engine error encountered during the SSL handshake
вам нужно обновить curl, например, в MacOS, используя brew:brew upgrade curl
Я столкнулся с этой проблемой. Проблема была в том, что мой интернет-провайдер блокировал его. Вы можете решить эту проблему, используя другой Интернет или VPN.
Похоже, это работает сейчас... может быть, проблема на стороне сервера? Или, может быть, проблема с сетью на моей стороне. Во всяком случае, следующий кризис...:)