Was macht "echo ipv4 >> ~ / .curlrc"?

8

Ich hatte heute ein Problem, als ich versuchte, Composer mit dem folgenden Befehl zu installieren:

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Es gab mir diesen Fehler:

curl: (7) Failed to connect to getcomposer.org port 443: Network is unreachable

Ich habe gegoogelt und diesen Befehl gefunden :

echo ipv4 >> ~/.curlrc

Ich habe dies ausgeführt und es hat das Problem behoben und der Composer wurde einwandfrei installiert.

Aber ich weiß nicht, was der obige Befehl bewirkt. Kann es jemand erklären?

Prashant Kumar
quelle
@Melebius Link hinzugefügt :)
Prashant Kumar

Antworten:

9

Fügen Sie der Datei "curlrc" "ipv4" hinzu. Beispiel beginnend mit einer leeren Datei:

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

Grundsätzlich zwingt es Curl, IPv4 zu verwenden.


Das Handbuch hat folgendes zu sagen:

IPv6

curl stellt eine Verbindung zu einem Server mit IPv6 her, wenn eine Hostsuche eine IPv6-Adresse zurückgibt, und greift auf IPv4 zurück, wenn die Verbindung fehlschlägt. Die Optionen --ipv4und --ipv6können angeben, welche Adresse verwendet werden soll, wenn beide verfügbar sind. IPv6-Adressen können mithilfe der Syntax auch direkt in URLs angegeben werden

Rinzwind
quelle
Ich habe nur diesen Befehl ausgeführt, er hat funktioniert, also denke ich, dass er korrekt ist. Nur eine Frage, warum mein Komponist nicht an erster Stelle arbeitete und warum es nach diesem Befehl funktionierte. Was meiner Meinung nach bedeutet, dass Curl früher versucht hat, ein IPv6-Netzwerk zu verwenden, das eigentlich nicht konfiguriert ist. Ist es oder etwas anderes?
Prashant Kumar
Ich würde annehmen, dass es ja war: Verbindung abgelehnt, weil Sie es von erwarteten IPv6 erhalten haben. Diese Bearbeitung der Datei erzwingt ipv4.
Rinzwind
Aber wie Sie sagten, curl will connect to a server with IPv6 when a host lookup returns an IPv6 address and fall back to IPv4 if the connection failswarum hat mein System nur einen Fehler ausgegeben, anstatt zu versuchen, selbst auf ipv4 zuzugreifen, wenn es das ipv6 nicht gefunden hat.
Prashant Kumar
1
.curlrcverwendet Optionsnamen ohne das führende -oder --.
Chepner
5

Eine typische Konvention unter UNIX ist, dass Programme (normalerweise) ihre Startkonfiguration aus verschiedenen vordefinierten Dateien lesen. Dies ist lediglich eine Tradition, nichts, was durch POSIX oder einen anderen Standard definiert wird. Ein typisches UNIX-Programm foobarwürde z. B. in der folgenden Rangfolge lesen:

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

Es könnte einen Fallback geben, /usr/share/aber das ist nicht sehr häufig.

Befolgen Sie curlhier also die Konvention und lesen Sie die Erstkonfiguration von ~/.curlrc. Auf diese Weise echo ipv4 >>~/.curlrchaben Sie die Zeichenfolge ipv4an die Datei angehängt ~/.curlrc.

Die Zeichenfolge ipv4hat eine besondere Bedeutung für curl- curlverwendet dann IPv4 für die Hostauflösung. Dies ist analog zur Verwendung des Arguments von -4/ ipv4as über curldie Befehlszeile, aber das Speichern, um ~/.curlrcdies dauerhaft zu machen.

Da Sie dort festgelegt ipv4haben und jetzt alles für Sie funktioniert, haben Sie vermutlich IPv6 konfiguriert und haben curlzuvor IPv6 für die (erfolgreiche) Hostauflösung verwendet, sodass Sie nicht auf IPv4 zurückgreifen müssen. Die Verbindung zur Site schlug socket()fehl, da nicht alle Sites ihre Webserver so konfiguriert haben, dass sie IPv6-Adressen abhören. Daher würde der Aufruf fehlschlagen, wie wir in diesem Fall sehen können.

heemayl
quelle
1
In der Praxis /etc/foobar.confwürde man dann aber zuerst lesen ~/.foobarrc, damit letzteres das erstere überschreiben kann. Wenn also /etc/foobar.confeine Zeile enthalten ist, die besagt frobnitz=0und ~/.foobarrchat frobnitz=1, hat der letztere Wert Vorrang
Monty Harder
@MontyHarder Genau das habe ich mit Rangfolge gemeint ...
heemayl
Ja, Rangfolge, nicht Lesereihenfolge.
Monty Harder