Không có tiếng vang ipv4 >> ~ / .curlrc, làm gì?


8

Tôi đã phải đối mặt với một số vấn đề ngày hôm nay khi cố gắng cài đặt trình soạn thảo với lệnh dưới đây:

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

Nó đã cho tôi lỗi này:

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

Tôi googled và tìm thấy lệnh này :

echo ipv4 >> ~/.curlrc

Tôi đã chạy nó và nó đã sửa lỗi và trình soạn thảo được cài đặt tốt.

Nhưng tôi không biết lệnh trên làm gì, có ai có thể giải thích được không?


@Melebius Đã thêm liên kết :)
Prashant Kumar

Câu trả lời:


9

Những gì đang làm là thêm "ipv4" vào tệp "curlrc". Ví dụ bắt đầu với một tệp trống:

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

Về cơ bản, nó buộc curl sử dụng ipv4.


Các nhãn hiệu có này để nói về nó:

IPv6

curl sẽ kết nối với máy chủ có IPv6 khi tra cứu máy chủ trả về địa chỉ IPv6 và quay lại IPv4 nếu kết nối không thành công. Các tùy chọn --ipv4--ipv6có thể chỉ định địa chỉ nào sẽ sử dụng khi cả hai đều khả dụng. Địa chỉ IPv6 cũng có thể được chỉ định trực tiếp trong URL bằng cú pháp


Tôi chỉ chạy lệnh đó, nó hoạt động nên tôi đoán nó là chính xác. Chỉ một câu hỏi, tại sao nhà soạn nhạc của tôi không làm việc ở nơi đầu tiên và tại sao nó hoạt động sau lệnh này. Điều tôi nghĩ có nghĩa là, trước đó curl đã cố gắng sử dụng mạng ipv6, mà thực sự không được cấu hình. Là nó hay cái gì khác?
Prashant Kumar

Tôi sẽ cho rằng đó là có: kết nối đã từ chối vì bạn đã nhận được nó từ ipv6 dự kiến. Chỉnh sửa tập tin này buộc ipv4.
Rinzwind

nhưng như bạn đã nói curl will connect to a server with IPv6 when a host lookup returns an IPv6 address and fall back to IPv4 if the connection failsthì tại sao hệ thống của tôi chỉ đưa ra lỗi thay vì cố gắng truy cập ipv4 nếu nó không tìm thấy ipv6.
Prashant Kumar

1
.curlrcsử dụng tên tùy chọn mà không có hàng đầu -hoặc --.
chepner

5

Một quy ước điển hình trong UNIX là các chương trình (thường) đọc cấu hình khởi động của chúng từ các tệp được xác định trước khác nhau. Đây chỉ là một truyền thống, không phải bất cứ điều gì được xác định bởi POSIX hoặc bất kỳ tiêu chuẩn nào khác. Một chương trình UNIX điển hình, ví dụ như foobarsẽ đọc, theo thứ tự ưu tiên sau:

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

Có thể có một dự phòng /usr/share/nhưng điều đó không phổ biến lắm.

Vì vậy, curlở đây theo quy ước và đọc cấu hình ban đầu của nó ~/.curlrc. Và bằng cách thực hiện echo ipv4 >>~/.curlrc, bạn đã nối chuỗi ipv4vào tệp ~/.curlrc.

Chuỗi ipv4có ý nghĩa đặc biệt curl- curlsẽ sử dụng IPv4 cho độ phân giải máy chủ sau đó. Điều này tương tự với việc sử dụng -4/ ipv4như curllà đối số từ dòng lệnh, nhưng tiết kiệm để ~/.curlrcbiến điều này thành vĩnh viễn.

Như bạn đã thiết lập ipv4ở đó và bây giờ mọi thứ đều phù hợp với bạn, có lẽ bạn đã cấu hình IPv6 và curltrước đây đã sử dụng IPv6 cho độ phân giải máy chủ (thành công), do đó không có dự phòng cho IPv4. Kết nối đến trang không thành công vì không phải tất cả các trang đều có máy chủ web được cấu hình để nghe trên địa chỉ IPv6, vì vậy socket()cuộc gọi sẽ thất bại như chúng ta có thể thấy trong trường hợp này.


1
Tuy nhiên, trong thực tế, /etc/foobar.confsẽ được đọc trước, sau đó ~/.foobarrc, để cái sau có thể ghi đè lên cái trước. Do đó, nếu /etc/foobar.confchứa một dòng ghi frobnitz=0~/.foobarrcfrobnitz=1, giá trị sau chiếm ưu thế
Monty Harder

@MontyHarder Đó chính xác là những gì tôi muốn nói theo thứ tự ưu tiên ...
heemayl

Có, thứ tự ưu tiên, không phải thứ tự đọc.
Monty Harder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.