“ 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

ฉัน googled และพบคำสั่งนี้ :

echo ipv4 >> ~/.curlrc

ฉันวิ่งมันและแก้ไขปัญหาและติดตั้งเรียบเรียง

แต่ฉันไม่รู้ว่าคำสั่งข้างต้นทำอะไรได้บ้างใครช่วยอธิบายได้บ้าง


@Melebius เพิ่มการเชื่อมโยง :)
Prashant Kumar

คำตอบ:


9

อะไรคือการเพิ่ม "ipv4" ลงในไฟล์ "curlrc" ตัวอย่างเริ่มต้นด้วยไฟล์ว่างเปล่า:

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

โดยพื้นฐานแล้วมันบังคับให้ขดเพื่อใช้ ipv4


คู่มือนี้มีการพูดเกี่ยวกับมัน

IPv6

curl จะเชื่อมต่อกับเซิร์ฟเวอร์ที่มี IPv6 เมื่อการค้นหาโฮสต์ส่งคืนที่อยู่ IPv6 และถอยกลับไปเป็น IPv4 หากการเชื่อมต่อล้มเหลว --ipv4และ--ipv6ตัวเลือกสามารถระบุที่อยู่ที่จะใช้เมื่อทั้งสองมีอยู่ ที่อยู่ IPv6 ยังสามารถระบุได้โดยตรงใน URL โดยใช้ไวยากรณ์


ฉันรันคำสั่งนั้นเท่านั้นมันทำงานได้ดังนั้นฉันจึงเดาว่าถูกต้อง มีเพียงคำถามเดียวว่าทำไมนักแต่งเพลงของฉันจึงไม่ทำงานตั้งแต่แรกและทำไมมันถึงทำงานได้ตามคำสั่งนี้ ซึ่งฉันคิดว่าหมายความว่า curl ก่อนหน้านี้พยายามใช้เครือข่าย ipv6 ซึ่งไม่ได้กำหนดค่าจริง มันเป็นหรืออย่างอื่น?
Prashant Kumar

ฉันจะสมมติว่าเป็นใช่: การเชื่อมต่อถูกปฏิเสธเนื่องจากคุณได้รับจาก 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
Prashant Kumar

1
.curlrcใช้ชื่อตัวเลือกโดยไม่ต้องนำหรือ- --
chepner

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และตอนนี้ทุกอย่างใช้ได้ผลสำหรับคุณสมมุติว่าคุณมีการกำหนดค่า IPv6 และcurlก่อนหน้านี้เคยใช้การแก้ปัญหาโฮสต์ IPv6 สำหรับ (สำเร็จ) ดังนั้นจึงไม่มีทางเลือกอื่นสำหรับ IPv4 การเชื่อมต่อไปยังเว็บไซต์ล้มเหลวเนื่องจากบางเว็บไซต์ไม่ได้กำหนดค่าเซิร์ฟเวอร์เว็บให้ฟังที่อยู่ IPv6 ดังนั้นการsocket()โทรจะล้มเหลวอย่างที่เราเห็นในกรณีนี้


1
อย่างไรก็ตามในทางปฏิบัติ/etc/foobar.confจะอ่านก่อนจากนั้น~/.foobarrcจึงสามารถแทนที่แบบเดิมได้ ดังนั้นหาก/etc/foobar.confมีบรรทัดที่ระบุว่าfrobnitz=0และ~/.foobarrcมีfrobnitz=1ค่าหลังจะมีค่า
Monty Harder

@MontyHarder นั่นคือสิ่งที่ผมหมายถึงลำดับความสำคัญ ...
heemayl

ใช่ลำดับความสำคัญไม่ใช่ลำดับของการอ่าน
Monty Harder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.