Сегодня я столкнулся с некоторой проблемой при попытке установить composer с помощью следующей команды:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Это дало мне эту ошибку:
curl: (7) Failed to connect to getcomposer.org port 443: Network is unreachable
Я погуглил и нашел эту команду :
echo ipv4 >> ~/.curlrc
Я запустил это, и это решило проблему, и композитор установил просто отлично.
Но я не знаю, что делает вышеприведенная команда, кто-нибудь может это объяснить?
command-line
ip
curl
Прашант Кумар
источник
источник
Ответы:
Что делает, это добавляет "ipv4" в файл "curlrc". Пример, начинающийся с пустого файла:
В основном это заставляет curl использовать ipv4.
В руководстве есть что сказать об этом:
источник
curl will connect to a server with IPv6 when a host lookup returns an IPv6 address and fall back to IPv4 if the connection fails
почему моя система просто выдавала ошибку, вместо этого пытаясь самостоятельно получить доступ к ipv4, если она не нашла ipv6..curlrc
использует имена опций без начального-
или--
.Типичное соглашение в UNIX состоит в том, что программы (обычно) читают свою конфигурацию запуска из различных предопределенных файлов. Это просто традиция, а не что-либо определенное POSIX или любым другим стандартом. Типичная программа UNIX, например,
foobar
будет читать в следующем порядке приоритета:Там может быть запасной вариант,
/usr/share/
но это не очень распространено.Итак,
curl
здесь следуем соглашению и читаем его исходную конфигурацию из~/.curlrc
. И тем самымecho ipv4 >>~/.curlrc
вы добавили строкуipv4
в файл~/.curlrc
.Строка
ipv4
имеет особое значение дляcurl
-curl
будет использовать IPv4 для разрешения хоста. Это аналогично использованию аргумента-4
/ipv4
ascurl
из командной строки, но сохранение~/.curlrc
этого параметра делает его постоянным.Поскольку вы установили
ipv4
там и теперь все работает для вас, вероятно, у вас настроен IPv6, иcurl
ранее вы использовали IPv6 для (успешного) разрешения хоста, поэтому нет возврата к IPv4. Соединение с сайтом было неудачным, потому что не на всех сайтах настроены веб-серверы для прослушивания IPv6-адресов, поэтомуsocket()
вызов не будет выполнен, как мы видим в этом случае.источник
/etc/foobar.conf
сначала следует прочитать,~/.foobarrc
чтобы последний мог переопределить первый. Таким образом, если/etc/foobar.conf
содержит строку, которая говоритfrobnitz=0
, и~/.foobarrc
имеетfrobnitz=1
, последнее значение преобладает