Очень часто, особенно в случае с рабочими машинами, доступ в интернет довольно жестко ограничен и почти все протоколы за исключением HTTP(S) заблокированы. Именно с такой проблемой я и столкнулся пытаясь собрать Rust. Все дело в том, что кроме основного модуля кодовой базы, который можно загрузить по HTTPS, у проекта есть два дополнительных подмодуля, для которых жестко заданна работа через протокол Git. В результате, в процессе сборки, я столкнулся с ошибкой:
-1170ffba3ac5191930b40c897d4569a9d8a296a3 src/libuv
-3a57b672f89adcb2d2d06adc564dc15ca4e276d6 src/llvm
configure: git: submodule update
fatal: unable to connect to github.com:
github.com[0: 207.97.227.239]: errno=Connection timed out
Поиск в интернете показал следующее. Информация о подмодулях хранится в файле .gitmodules, соответственно информация о протокле загрузки может быть легко исправлена:
path = src/llvm
url = https://github.com/brson/llvm.git
[submodule "src/libuv"]
path = src/libuv
url = https://github.com/graydon/libuv.git
Но тут может возникнуть следующая ошибка:
Unable to find current revision in submodule path 'src/llvm'
Которая говорит о том, что директория src/llvm уже была создана и Git не знает что делать дальше. Эта ошибка лечится простым удалением директории, которая смущает Git.
После этого, аналогичная проблема возникает с LLVM (директория src/llvm) в подмодулях clang и compiler-rt и решается так же.