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?
command-line
ip
curl
Prashant Kumar
quelle
quelle
Antworten:
Fügen Sie der Datei "curlrc" "ipv4" hinzu. Beispiel beginnend mit einer leeren Datei:
Grundsätzlich zwingt es Curl, IPv4 zu verwenden.
Das Handbuch hat folgendes zu sagen:
quelle
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
warum hat mein System nur einen Fehler ausgegeben, anstatt zu versuchen, selbst auf ipv4 zuzugreifen, wenn es das ipv6 nicht gefunden hat..curlrc
verwendet Optionsnamen ohne das führende-
oder--
.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
foobar
würde z. B. in der folgenden Rangfolge lesen:Es könnte einen Fallback geben,
/usr/share/
aber das ist nicht sehr häufig.Befolgen Sie
curl
hier also die Konvention und lesen Sie die Erstkonfiguration von~/.curlrc
. Auf diese Weiseecho ipv4 >>~/.curlrc
haben Sie die Zeichenfolgeipv4
an die Datei angehängt~/.curlrc
.Die Zeichenfolge
ipv4
hat eine besondere Bedeutung fürcurl
-curl
verwendet dann IPv4 für die Hostauflösung. Dies ist analog zur Verwendung des Arguments von-4
/ipv4
as übercurl
die Befehlszeile, aber das Speichern, um~/.curlrc
dies dauerhaft zu machen.Da Sie dort festgelegt
ipv4
haben und jetzt alles für Sie funktioniert, haben Sie vermutlich IPv6 konfiguriert und habencurl
zuvor IPv6 für die (erfolgreiche) Hostauflösung verwendet, sodass Sie nicht auf IPv4 zurückgreifen müssen. Die Verbindung zur Site schlugsocket()
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.quelle
/etc/foobar.conf
würde man dann aber zuerst lesen~/.foobarrc
, damit letzteres das erstere überschreiben kann. Wenn also/etc/foobar.conf
eine Zeile enthalten ist, die besagtfrobnitz=0
und~/.foobarrc
hatfrobnitz=1
, hat der letztere Wert Vorrang