zoukankan      html  css  js  c++  java
  • 「问题修复」「cargo」warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)

    1 问题描述

    在使用cargo进行复杂软件安装时, 依赖比较多的库, 需要快速下载, 出现了该问题“Couldn't resolve host name (Could not resolve host: crates)”, 错误日志如下:

     1 $ cargo install mdbook
     2     Updating `git://mirrors.ustc.edu.cn/crates.io-index` index
     3   Installing mdbook v0.4.4
     4   Downloaded byteorder v1.3.4 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
     5   Downloaded inotify-sys v0.1.4 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
     6 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
     7 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
     8 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
     9 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    10 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    11 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    12 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    13 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    14 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    15 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    16 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    17 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    18 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    19 warning: spurious network error (2 tries remaining): [6] Couldn't resolve host name (Could not resolve host: crates)
    20   Downloaded input_buffer v0.3.1 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
    21 。。。// 跳过部分日志
    22 error: failed to compile `mdbook v0.4.4`, intermediate artifacts can be found at `/tmp/cargo-installzrH2PU`
    23 
    24 Caused by:
    25   failed to download from `https://crates-io.proxy.ustclug.org/api/v1/crates/tokio-tungstenite/0.11.0/download`
    26 
    27 Caused by:
    28   [6] Couldn't resolve host name (Could not resolve host: crates)

    看到该问题, 还特意检查了网络, 设置了dns,

    在文件 /etc/resolv.conf 中增加了阿里的dns域名服务器, 问题没有解决;

    nameserver 223.5.5.5
    nameserver 223.6.6.6

    查找资料找到了问题根因和解决办法;

    2 解决办法

    临时规避,禁止并行化下载安装, 命令行输入: CARGO_HTTP_MULTIPLEXING=false cargo install mdbook

    $ CARGO_HTTP_MULTIPLEXING=false cargo install mdbook
    pdating `git://mirrors.ustc.edu.cn/crates.io-index` index
      Installing mdbook v0.4.4
      Downloaded cfg-if v0.1.10 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded bytes v0.5.6 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded futures-io v0.3.8 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded http-body v0.3.1 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded markup5ever_rcdom v0.1.0 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded num-integer v0.1.44 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded phf_shared v0.8.0 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded rand_pcg v0.2.1 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
      Downloaded serde_urlencoded v0.6.1 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
    。。。
    Compiling markup5ever_rcdom v0.1.0
       Compiling ammonia v3.1.0
       Compiling hyper v0.13.9
       Compiling warp v0.2.5
       Compiling mdbook v0.4.4
        Finished release [optimized] target(s) in 3m 01s
      Installing /home/neo/.cargo/bin/mdbook
       Installed package `mdbook v0.4.4` (executable `mdbook`)

    编译时间略长, 也还可以接受。。。

    3 引申阅读

    问题根因分析:

    详见:https://github.com/ustclug/discussions/issues/294

    主要原因如下:

     knight42 commented on Apr 30
    
    我找到这个问题的原因了,是因为我们的 nginx 会根据 client ip 对请求数作限制,默认是 4r/s 即每秒 4 个请求,如果超过的话就会返回 503。而我们的 nginx 配置里有这么一段
    
    error_page 500 502 503 504 =302 $scheme://$proxy_host$uri;
    
    即当上游返回 503 的时候,nginx 会让 client 302 到 $scheme://$proxy_host$uri,而这个时候 nginx 还没开始做 proxy,$proxy_host 应该还是空的,
    所以 client 会看到 nginx 返回的 302 的响应里的 location 是 https:
    ///crates/futures-io/futures-io-0.3.4.crate. 目前我先对 crates-io.proxy.ustclug.org 稍微放开了一下限制 limit_req_zone $binary_remote_addr zone=rust-crates:10m rate=20r/s; limit_req zone=rust-crates burst=150; 同时调整了一下配置,减少了一次 302 跳转,@s977120 你现在可以试试看有没有问题。 不过感觉这个只是临时的 workaround,要彻底解决应该要让 cargo 限制一下并发请求数。

    最终解决方案, 要控制cargo下载时的并发数, 估计要看一下源码,确认如何实现的。当前尝试使用cargo install -j 4 时,问题依旧;

    使用说明如下:

    $ cargo install --help
    cargo-install 
    Install a Rust binary. Default location is $HOME/.cargo/bin
    
    USAGE:
        cargo install [OPTIONS] [--] [crate]...
    
    OPTIONS:
        -q, --quiet                     No output printed to stdout
            --version <VERSION>         Specify a version to install
            --git <URL>                 Git URL to install the specified crate from
            --branch <BRANCH>           Branch to use when installing from git
            --tag <TAG>                 Tag to use when installing from git
            --rev <SHA>                 Specific commit to use when installing from git
            --path <PATH>               Filesystem path to local crate to install
            --list                      list all installed packages and their versions
        -j, --jobs <N>                  Number of parallel jobs, defaults to # of CPUs
        -f, --force                     Force overwriting existing crates or binaries
            --no-track                  Do not save tracking information
            --features <FEATURES>...    Space or comma separated list of features to activate
            --all-features              Activate all available features
            --no-default-features       Do not activate the `default` feature
            --profile <PROFILE-NAME>    Install artifacts with the specified profile
            --debug                     Build in debug mode instead of release mode
            --bin <NAME>...             Install only the specified binary
            --bins                      Install all binaries
            --example <NAME>...         Install only the specified example
            --examples                  Install all examples
            --target <TRIPLE>...        Build for the target triple
            --target-dir <DIRECTORY>    Directory for all generated artifacts
            --root <DIR>                Directory to install packages into
            --index <INDEX>             Registry index to install from
            --registry <REGISTRY>       Registry to use
        -v, --verbose                   Use verbose output (-vv very verbose/build.rs output)
            --color <WHEN>              Coloring: auto, always, never
            --frozen                    Require Cargo.lock and cache are up to date
            --locked                    Require Cargo.lock is up to date
            --offline                   Run without accessing the network
        -Z <FLAG>...                    Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for details
        -h, --help                      Prints help information
    
    ARGS:
        <crate>...    
    
    Run `cargo help install` for more detailed information.
  • 相关阅读:
    Everybody's business is nobody's business
    Randy Pausch 卡内基梅隆大学毕业典礼上的演讲
    如何写好求职信
    NHibernate中DateTime,int,bool空值的处理方法
    数据库分页存储过程(2)
    数据库分页存储过程(7)
    数据库分页存储过程(3)
    数据库分页存储过程(4)
    给webform中的后置cs文件添加版权
    数据库分页存储过程(5)
  • 原文地址:https://www.cnblogs.com/QuLory/p/13992013.html
Copyright © 2011-2022 走看看