Що робить “echo ipv4 >> ~ / .curlrc”?


8

Сьогодні я зіткнувся з деякою проблемою при спробі встановити композитор за допомогою команди нижче:

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

Я запустив це, і це вирішило проблему, і композитор встановив просто чудово.

Але я не знаю, що робить вищевказана команда, хтось може це пояснити?


@Melebius Додано посилання :)
Прашант Кумар,

Відповіді:


9

Додайте "ipv4" у файл "curlrc". Приклад, починаючи з порожнього файлу:

$ touch 1
$ more 1
$ echo ipv4 >> 1
$ more 1
ipv4

В основному це змушує curl використовувати ipv4.


Керівництво це сказати про це:

IPv6

curl підключиться до сервера з IPv6, коли пошук хосту поверне адресу IPv6 і повернеться до IPv4, якщо з'єднання не вдалося. Параметри --ipv4та --ipv6параметри можуть визначати, яку адресу використовувати, коли вони доступні. Адреси IPv6 також можна вказати безпосередньо в URL-адресах за допомогою синтаксису


Я виконував лише цю команду, вона працювала, тому я гадаю, що це правильно. Лише одне питання, чому мій композитор не працював на першому місці і чому він працював після цієї команди. Що я думаю, означає, що раніше curl намагався використовувати мережу ipv6, яка насправді не налаштована. Це чи щось інше?
Прашант Кумар

Я б припустив, що це було так: з'єднання відмовилося beciause, де ви отримали його від очікуваного ipv6. Це редагування файлу примушує ipv4.
Rinzwind

але, як ви сказали 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.
Прашант Кумар

1
.curlrcвикористовує назви опцій без провідних -або --.
чепнер

5

Типовою умовою в UNIX є те, що програми (зазвичай) зчитують конфігурацію запуску з різних заздалегідь заданих файлів. Це просто традиція, не що-небудь визначене POSIX або будь-яким іншим стандартом. Типова програма UNIX, наприклад foobar, читатиметься у наступному порядку пріоритетності:

~/.foobarrc  ## User specific configuration parameters
/etc/foobarrc  ## Global parameters, depending on taste
               ## `/etc/foobar/*(.conf)' might be chosen too 

Можливо, є резерв, /usr/share/але це не дуже часто.

Отже, curlтут дотримуючись конвенції та читаючи її початкову конфігурацію з ~/.curlrc. І тим самим echo ipv4 >>~/.curlrcви додали рядок ipv4до файлу ~/.curlrc.

Рядок ipv4має особливе значення curl- curlвикористовуватиме IPv4 для вирішення хосту тоді. Це аналогічно використанню аргументу -4/ ipv4як curlв командному рядку, але збереження ~/.curlrcробить це постійним.

Як ви ipv4там curlувійшли, і тепер все працює для вас, імовірно, у вас налаштований IPv6, і раніше ви використовували IPv6 для (успішного) дозволу хоста, так що жодного резервного IPv4. Підключення до сайту не вдалося, оскільки не на всіх сайтах налаштовані веб-сервери для прослуховування на IPv6-адресах, тому socket()виклик не вдасться, як ми бачимо в цьому випадку.


1
На практиці, однак, /etc/foobar.confчитається спочатку, потім ~/.foobarrc, щоб останній міг перекрити перший. Таким чином, якщо /etc/foobar.confміститься рядок, який говорить frobnitz=0і ~/.foobarrcмає frobnitz=1, останнє значення переважає
Monty Harder

@MontyHarder Це саме те, що я мав на увазі наказом пріоритету ...
heemayl

Так, порядок пріоритетності, а не порядок читання.
Monty Harder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.