cargo-bins / cargo-binstall

Binary installation for rust projects
GNU General Public License v3.0
1.58k stars 54 forks source link

Cargo Binstall breaks with Safing Portmaster running #1698

Open RayJW opened 5 months ago

RayJW commented 5 months ago

So, I'm first reporting this issue here, because I think it's a problem with Binstall rather than Portmaster. All other applications work fine, and I tried disabling all Portmaster options for Binstall. On top of that, Portmaster isn't reporting any blocked connections, so I think it's some weird behaviour with DNS resolving in Binstall because the error is a rate limit rather than only a timeout or a resolve failure.

I've confirmed this issue on a Fedora 40 machine and an Ubuntu 22.04 machine on Binstall version 1.6.6. Both immediately start to work once Portmaster is disabled. Here is a log from trying to install the onefetch create with Binstall.

❯ cargo-binstall onefetch --verbose
DEBUG using (/home/user/.local/share/cargo) as cargo home
DEBUG Using install path: /home/user/.local/share/cargo/bin
 WARN Failed to retrieve token from `gh auth token` err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
 WARN Failed to read git credential file
 INFO resolve: Resolving package: 'onefetch'
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}: Downloading from: 'https://index.crates.io/config.json'
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:do_send_request{self=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) request=Request { method: GET, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/config.json", query: None, fragment: None }, headers: {} } url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/config.json", query: None, fragment: None }}: Using system DNS resolver configuration
DEBUG get_target_from_rustc()=Some("x86_64-unknown-linux-gnu")
DEBUG Running `/usr/lib64/x86_64-linux-gnu/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG Running `/lib/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG Running `/lib64/x86_64-linux-gnu/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG `/lib64/ld-linux-x86-64.so.2 --version`: status=exit status: 0, stdout='ld.so (Ubuntu GLIBC 2.35-0ubuntu3.7) stable release version 2.35.
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
', stderr=''
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}: Downloading from: 'https://index.crates.io/on/ef/onefetch'
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}: Fetching crate from: https://static.crates.io/crates/onefetch/2.21.0/download and extracting Cargo.toml from it
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}:and_visit_tar{self=Download { client: Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }), url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, data_verifier: Some(PhantomData<&mut dyn binstalk_downloader::download::DataVerifier>) } fmt=Tgz}: Downloading from: 'https://static.crates.io/crates/onefetch/2.21.0/download'
 INFO resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}:and_visit_tar{self=Download { client: Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }), url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, data_verifier: Some(PhantomData<&mut dyn binstalk_downloader::download::DataVerifier>) } fmt=Tgz}:do_send_request{self=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) request=Request { method: GET, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, headers: {} } url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }}: Received timeout error from reqwest. Delay future request by 200ms
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2587, tv_nsec: 937954728 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}:and_visit_tar{self=Download { client: Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 87819346 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }), url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, data_verifier: Some(PhantomData<&mut dyn binstalk_downloader::download::DataVerifier>) } fmt=Tgz}:do_send_request{self=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 2588, tv_nsec: 198124737 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {"static.crates.io": Instant { tv_sec: 2619, tv_nsec: 432118961 }}, poisoned: false, .. } } }) request=Request { method: GET, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, headers: {} } url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }}: server-side rate limit exceeded; sleeping.
NobodyXu commented 5 months ago

It receives timeout error when fetching https://static.crates.io/crates/onefetch/2.21.0/download, which is strange, because static.crates.io usually does not fail like this.

It doesn't look like a dns thing, rather it's related to the tcp connection between binstall and static.crates.io server

I suspect there's two possible causes:

@RayJW I suggest you re-running the command, to see that if you could reproduce that (reliably)

RayJW commented 5 months ago

I was able to reproduce this issue for days over multiple packages, different networks, and different machines. I think is definitely Binstall related since turning off Portmaster results in immediate success.

NobodyXu commented 5 months ago

Thanks, I suspect that it could be an issue related to reqwest or hyper.

I suggest you to try if you could reproducing this problem, by using

reqwest = { version = "0.12.4", features = [
    "http2",
    "stream",
    "zstd",
    "gzip",
    "brotli",
    "deflate",
    "rustls-tls",
    "rustls-tls-webpki-roots",
    "rustls-tls-native-roots",
], default-features = false }

hickory-resolver = { version = "0.24.0", features = [
    "dnssec-ring",
    "dns-over-rustls",
    "dns-over-https-rustls",
    "dns-over-quic",
    "dns-over-h3",
]
] }

[target."cfg(windows)".dependencies]
default-net = { version = "0.22.0", }
ipconfig = { version = "0.3.2", default-features = false }

For hickory-dns, we have some custom workarounds on windows.

Honestly, I don't think this is a hickory-dns issue, I think it's a reqwest or hyper issue and I think you can reproduce it without hickory-dns

RayJW commented 5 months ago

I built the binary with the options you mentioned added to the binstalk-downloader Cargo.toml. I did however leave the optional = true in hickory-resolver because it wouldn't compile otherwise.

However the outcome looks mostly the same to me.

❯ ./target/release/cargo-binstall onefetch --verbose
DEBUG using (/home/user/.local/share/cargo) as cargo home
DEBUG Using install path: /home/user/.local/share/cargo/bin
 INFO resolve: Resolving package: 'onefetch'
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}: Downloading from: 'https://index.crates.io/config.json'
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:do_send_request{self=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) request=Request { method: GET, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/config.json", query: None, fragment: None }, headers: {} } url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/config.json", query: None, fragment: None }}: Using system DNS resolver configuration
DEBUG get_target_from_rustc()=Some("x86_64-unknown-linux-gnu")
DEBUG Running `/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG Running `/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG Running `/usr/lib64/x86_64-linux-gnu/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG Running `/lib64/x86_64-linux-gnu/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG `/lib64/ld-linux-x86-64.so.2 --version`: status=exit status: 0, stdout='ld.so (GNU libc) stable release version 2.39.
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
', stderr=''
DEBUG Running `/lib/ld-linux-x86-64.so.2 --version`: err=Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}: Downloading from: 'https://index.crates.io/on/ef/onefetch'
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}: Fetching crate from: https://static.crates.io/crates/onefetch/2.21.0/download and extracting Cargo.toml from it
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}:and_visit_tar{self=Download { client: Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }), url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, data_verifier: Some(PhantomData<&mut dyn binstalk_downloader::download::DataVerifier>) } fmt=Tgz}: Downloading from: 'https://static.crates.io/crates/onefetch/2.21.0/download'
 INFO resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}:and_visit_tar{self=Download { client: Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }), url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, data_verifier: Some(PhantomData<&mut dyn binstalk_downloader::download::DataVerifier>) } fmt=Tgz}:do_send_request{self=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) request=Request { method: GET, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, headers: {} } url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }}: Received timeout error from reqwest. Delay future request by 200ms
DEBUG resolve:fetch_crate_matched{self=SparseRegistry { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("index.crates.io")), port: None, path: "/", query: None, fragment: None }, dl_template: OnceCell { value: None } } client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 468511283 }, state: Ready { rem: 1 } }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" version_req=VersionReq { comparators: [] }}:parse_manifest{client=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }) crate_name="onefetch" crate_url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None } version="2.21.0" cksum="a04da6eadacb92accc1c94a4641ea5f75b7f5aa0f11d33112f3e2fd04884d01d"}:and_visit_tar{self=Download { client: Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1845, tv_nsec: 783376059 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {}, poisoned: false, .. } } }), url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, data_verifier: Some(PhantomData<&mut dyn binstalk_downloader::download::DataVerifier>) } fmt=Tgz}:do_send_request{self=Client(Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, service: DelayRequest { inner: Mutex { data: Inner { client: Client { accepts: Accepts { gzip: true, brotli: true, zstd: true, deflate: true }, proxies: [Proxy(System({}), None)], referer: true, default_headers: {"accept": "*/*", "user-agent": "cargo-binstall/1.6.6"} }, num_request: 1, per: 10ms, until: Instant { tv_sec: 1846, tv_nsec: 747710565 }, state: Limited }, poisoned: false, .. }, hosts_to_delay: Mutex { data: {"static.crates.io": Instant { tv_sec: 1906, tv_nsec: 953534854 }}, poisoned: false, .. } } }) request=Request { method: GET, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, headers: {} } url=Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }}: server-side rate limit exceeded; sleeping.
NobodyXu commented 5 months ago

sorry we have some misunderstanding, I'm suggesting that this could be a hyper/reqwest bug, and @RayJW I recommended you to create a new crate, with the reqwest dependency:

reqwest = { version = "0.12.4", features = [
    "http2",
    "stream",
    "zstd",
    "gzip",
    "brotli",
    "deflate",
    "rustls-tls",
    "rustls-tls-webpki-roots",
    "rustls-tls-native-roots",
], default-features = false }

and then use reqwest directly to download from https://static.crates.io/crates/onefetch/2.21.0/download , to see if you can reproduce this error.

The features I enabled is same as the default feature set of cargo-binstall.

RayJW commented 5 months ago

sorry we have some misunderstanding, I'm suggesting that this could be a hyper/reqwest bug, and @RayJW I recommended you to create a new crate, with the reqwest dependency:

Sorry, currently my development experience with Rust is rather limited, and I use Binstall mostly to download CLI tools that are distributed with Cargo. Could you perhaps give me some more guidance what exactly you would want me to do?

NobodyXu commented 5 months ago

@RayJW I've put up a cargo-script for you:

Please post the result of it here, I suspect there will be errors from reqwest

#!/usr/bin/env cargo +nightly -Zscript
---
[dependencies]
reqwest = { version = "0.12.4", features = [
    "http2",
    "stream",
    "zstd",
    "gzip",
    "brotli",
    "deflate",
    "rustls-tls",
    "rustls-tls-webpki-roots",
    "rustls-tls-native-roots",
], default-features = false }
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
---

#[tokio::main]
async fn main() {
    reqwest::get("https://static.crates.io/crates/onefetch/2.21.0/download")
        .await
        .unwrap()
        .error_for_status()
        .unwrap()
        .bytes()
        .await
        .unwrap();
}
RayJW commented 5 months ago

@NobodyXu I did have to add the -S option to the Shebang, otherwise it won't run extra flags.

It seems that actually works fine, the output looks like this:

warning: `package.edition` is unspecified, defaulting to `2021`
    Updating crates.io index
     Locking 141 packages to latest compatible versions
      Adding addr2line v0.21.0 (latest: v0.22.0)
      Adding gimli v0.28.1 (latest: v0.29.0)
      Adding hyper-rustls v0.26.0 (latest: v0.27.1)
      Adding object v0.32.2 (latest: v0.35.0)
      Adding rustls v0.22.4 (latest: v0.23.5)
      Adding sync_wrapper v0.1.2 (latest: v1.0.1)
      Adding tokio-rustls v0.25.0 (latest: v0.26.0)
      Adding wasi v0.11.0+wasi-snapshot-preview1 (latest: v0.13.0+wasi-0.2.0)
      Adding windows-sys v0.48.0 (latest: v0.52.0)
      Adding windows-targets v0.48.5 (latest: v0.52.5)
      Adding windows_aarch64_gnullvm v0.48.5 (latest: v0.52.5)
      Adding windows_aarch64_msvc v0.48.5 (latest: v0.52.5)
      Adding windows_i686_gnu v0.48.5 (latest: v0.52.5)
      Adding windows_i686_msvc v0.48.5 (latest: v0.52.5)
      Adding windows_x86_64_gnu v0.48.5 (latest: v0.52.5)
      Adding windows_x86_64_gnullvm v0.48.5 (latest: v0.52.5)
      Adding windows_x86_64_msvc v0.48.5 (latest: v0.52.5)
  Downloaded serde v1.0.202
  Downloaded 1 crate (77.7 KB) in 0.15s
   Compiling libc v0.2.154
   Compiling once_cell v1.19.0
   Compiling proc-macro2 v1.0.82
   Compiling unicode-ident v1.0.12
   Compiling pin-project-lite v0.2.14
   Compiling bytes v1.6.0
   Compiling futures-core v0.3.30
   Compiling cfg-if v1.0.0
   Compiling log v0.4.21
   Compiling itoa v1.0.11
   Compiling autocfg v1.3.0
   Compiling rustls-pki-types v1.7.0
   Compiling pkg-config v0.3.30
   Compiling fnv v1.0.7
   Compiling futures-task v0.3.30
   Compiling pin-utils v0.1.0
   Compiling httparse v1.8.0
   Compiling futures-sink v0.3.30
   Compiling spin v0.9.8
   Compiling hashbrown v0.14.5
   Compiling equivalent v1.0.1
   Compiling untrusted v0.9.0
   Compiling tinyvec_macros v0.1.1
   Compiling futures-util v0.3.30
   Compiling rustls v0.22.4
   Compiling try-lock v0.2.5
   Compiling crc32fast v1.4.0
   Compiling tracing-core v0.1.32
   Compiling alloc-no-stdlib v2.0.4
   Compiling zstd-safe v7.1.0
   Compiling tinyvec v1.6.0
   Compiling slab v0.4.9
   Compiling want v0.3.1
   Compiling futures-channel v0.3.30
   Compiling alloc-stdlib v0.2.2
   Compiling subtle v2.5.0
   Compiling smallvec v1.13.2
   Compiling tower-layer v0.3.2
   Compiling serde v1.0.202
   Compiling adler v1.0.2
   Compiling tower-service v0.3.2
   Compiling zeroize v1.7.0
   Compiling percent-encoding v2.3.1
   Compiling http v1.1.0
   Compiling brotli-decompressor v4.0.0
   Compiling miniz_oxide v0.7.2
   Compiling base64 v0.22.1
   Compiling unicode-bidi v0.3.15
   Compiling ryu v1.0.18
   Compiling memchr v2.7.2
   Compiling form_urlencoded v1.2.1
   Compiling openssl-probe v0.1.5
   Compiling tracing v0.1.40
   Compiling indexmap v2.2.6
   Compiling webpki-roots v0.26.1
   Compiling ipnet v2.9.0
   Compiling sync_wrapper v0.1.2
   Compiling quote v1.0.36
   Compiling jobserver v0.1.31
   Compiling mio v0.8.11
   Compiling socket2 v0.5.7
   Compiling num_cpus v1.16.0
   Compiling getrandom v0.2.15
   Compiling unicode-normalization v0.1.23
   Compiling flate2 v1.0.30
   Compiling syn v2.0.63
   Compiling cc v1.0.97
   Compiling rustls-pemfile v2.1.2
   Compiling mime v0.3.17
   Compiling http-body v1.0.0
   Compiling rustls-native-certs v0.7.0
   Compiling brotli v6.0.0
   Compiling http-body-util v0.1.1
   Compiling idna v0.5.0
   Compiling url v2.5.0
   Compiling ring v0.17.8
   Compiling zstd-sys v2.0.10+zstd.1.5.6
   Compiling serde_urlencoded v0.7.1
   Compiling tokio-macros v2.2.0
   Compiling pin-project-internal v1.1.5
   Compiling tokio v1.37.0
   Compiling pin-project v1.1.5
   Compiling rustls-webpki v0.102.3
   Compiling zstd v0.13.1
   Compiling tokio-util v0.7.11
   Compiling tower v0.4.13
   Compiling async-compression v0.4.10
   Compiling tokio-rustls v0.25.0
   Compiling h2 v0.4.4
   Compiling hyper v1.3.1
   Compiling hyper-util v0.1.3
   Compiling hyper-rustls v0.26.0
   Compiling reqwest v0.12.4
   Compiling reqwest v0.0.0 (/home/user/)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 25.35s
     Running `/home/user/.local/share/cargo/target/f6/8b7471f0481ce8/debug/reqwest`
NobodyXu commented 5 months ago

Thanks, so the error didn't occur.

I wonder if the reqwest options we set in binstalk-downloader makes any difference, would update the script and post it here tomorrow.

RayJW commented 5 months ago

I wonder if the reqwest options we set in binstalk-downloader makes any difference

So, I did change the script to the following:

#!/usr/bin/env -S cargo +nightly -Zscript
---
[dependencies]
reqwest = { version = "0.12.4", features = [
    "http2",
    "stream",
    "zstd",
    "gzip",
    "brotli",
    "deflate",
], default-features = false }
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
---

#[tokio::main]
async fn main() {
    reqwest::get("https://static.crates.io/crates/onefetch/2.21.0/download")
        .await
        .unwrap()
        .error_for_status()
        .unwrap()
        .bytes()
        .await
        .unwrap();
}

which changes the output to this:

warning: `package.edition` is unspecified, defaulting to `2021`
   Compiling reqwest v0.12.4
   Compiling reqwest v0.0.0 (/home/user/)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.45s
     Running `/home/user/.local/share/cargo/target/f6/8b7471f0481ce8/debug/reqwest`
thread 'main' panicked at /home/user/.local/share/cargo/target/f6/8b7471f0481ce8/reqwest.rs:19:10:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("static.crates.io")), port: None, path: "/crates/onefetch/2.21.0/download", query: None, fragment: None }, source: Error { kind: Connect, source: Some("invalid URL, scheme is not http") } }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

However, the output looks the same when I disable Portmaster, so maybe this isn't the problem after all.

passcod commented 5 months ago

Yeah, that change just disabled HTTPS support entirely.