「echo ipv4 >>〜/ .curlrc」は何をしますか?


8

以下のコマンドを使用してcomposerをインストールしようとしたときに、今日いくつかの問題に直面していました:

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がリンクを追加しました:)
Prashant Kumar

回答:


9

何がファイル "curlrc"に "ipv4"を追加することです。空のファイルから始める例:

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

基本的には、curlにipv4の使用を強制します。


マニュアルでは、これはそれについて言いたいことがあります。

IPv6

curlは、ホストルックアップがIPv6アドレスを返すときにIPv6を使用してサーバーに接続し、接続が失敗した場合はIPv4にフォールバックします。オプションの両方が使用可能なときに使用するアドレスを指定することができます。IPv6アドレスは、構文を使用してURLで直接指定することもできます--ipv4--ipv6


私はそのコマンドのみを実行しました、それはうまくいったので、それは正しいと思います。質問が1つだけあります。なぜ私の作曲家が最初から機能しなかったのか、なぜこのコマンドの後に機能したのかです。つまり、以前のcurlは実際には構成されていないipv6ネットワークを使用しようとしていました。それか何か?
Prashant Kumar

私はそれがイエスだったと思います:予想されるIPv6から取得したため、接続が拒否されました。このファイルの編集により、ipv4が強制されます。
Rinzwind 2017年

しかし、あなたが言ったように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、なぜそれが私のシステムがipv6を見つけられなかった場合に、それ自体がipv4にアクセスしようとする代わりにエラーを出したのか。
Prashant Kumar

1
.curlrc先頭に-orがないオプション名を使用します--
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へのフォールバックはありません。すべてのサイトのWebサーバーがIPv6アドレスをリッスンするように構成されているわけではないため、サイトへの接続は失敗しましたsocket()


1
ただし、実際には、/etc/foobar.conf最初に読み取られ、次に読み取られる~/.foobarrcため、後者が前者をオーバーライドできます。したがってあれば/etc/foobar.conf言う行が含まれfrobnitz=0、そして~/.foobarrc持ってfrobnitz=1、後者の値勝っ
モンティハーダー

@MontyHarderそれはまさに私が優先順位によって意味したものです...
heemayl

はい、優先順位であり、読む順序ではありません。
モンティハーダー2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.