pixi
pixi copied to clipboard
Putting credentials in `[mirrors]` for private channels
I was originally going to put this as a comment on #2177, but I think it might be it's own issue. Not sure if bug, feature request or if I missed something in the docs.
At my workplace, we have a private conda channel on Artifactory which uses basic HTTP (user + password) auth.
I can connect to the channel with
https://majp%40ramboll.com:********@artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools
by putting it in pyproject.toml under [tool.pixi.workspace.channels], like so:
# pyproject.toml
[tool.pixi.workspace]
channels = [
"conda-forge",
"https://majp%40ramboll.com:********@artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools",
]
This has the following drawbacks:
- The credentials are part of the version control history (git) for anyone to see
- I could put them in a
.gitignore'd config file, but that would require me to do the same for all projects, of which I have many (10-15 projects).
As a solution, I thought I'd try to use mirrors to redirect requests for artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools to the basic auth form of the channel URL.
According to the docs:
The implementation will look for the mirror key (a URL) in the mirrors section of the configuration file and replace the original URL with the mirror URL.
So as I understand it, pixi will simply recognize that I'm trying to send a request to that channel and replace the URL. Here's my attempt of (ab)using this to store my credentials in a single place:
# pyproject.toml
[tool.pixi.workspace]
channels = [
"conda-forge",
"https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools",
]
# ~/.pixi/config.toml
default-channels = [
"conda-forge",
"https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools",
]
[mirrors]
"https://conda.anaconda.org/conda-forge" = ["https://prefix.dev/conda-forge"]
# Redirect to use the URL that includes my credentials
"https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools" = [
"https://majp%40ramboll.com:********@artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools"
]
However, this causes a 401 Not authorized, regardless of whether I try to install something global or project-specific.
Note also that in #2177, I highlighted that using another credential store (keyring or rattler-build creds) doesn't work.
You should not have to put basic auth credentials in channel urls. You should be able to use the unauthenticated url in the toml file and then use pixi auth to authenticate separately.
Something along the lines of:
pixi auth --username [email protected] --password **** https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools
You should not have to put basic auth credentials in channel urls. You should be able to use the unauthenticated url in the toml file and then use
pixi authto authenticate separately.Something along the lines of:pixi auth --username [email protected] --password **** https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools
Also tried this (see last part of comment https://github.com/prefix-dev/pixi/issues/2177#issuecomment-2392872040). Same results.
Here's the full debug output for reference:
Click to expand
DEBUG pixi_config: Loading config from /etc/pixi/config.toml
DEBUG pixi_config: Loading config from /home/majp/.config/pixi/config.toml
DEBUG pixi_config: Loading config from /home/majp/.pixi/config.toml
INFO pixi_config: Loaded config from: /home/majp/.pixi/config.toml
DEBUG pixi_config: Loading config from /etc/pixi/config.toml
DEBUG pixi_config: Loading config from /home/majp/.config/pixi/config.toml
DEBUG pixi_config: Loading config from /home/majp/.pixi/config.toml
INFO pixi_config: Loaded config from: /home/majp/.pixi/config.toml
DEBUG pixi_config: Loading config from /home/majp/.pixi/manifests/.pixi/config.toml
DEBUG pixi_config: Failed to load local config: /home/majp/.pixi/manifests/.pixi/config.toml (error: no file was found at /home/majp/.pixi/manifests/.pixi/config.toml)
DEBUG pixi::global::project::manifest: Added environment logutils to toml document
DEBUG pixi::global::project::manifest: Added dependency logutils="*" to toml document for environment logutils
DEBUG pixi::global::install: Not all specs in the manifest are present in the environment
INFO pixi_utils::reqwest: Using mirrors: {Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("conda.anaconda.org")), port: None, path: "/conda-forge", query: None, fragment: None }: [Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("prefix.dev")), port: None, path: "/conda-forge", query: None, fragment: None }]}
DEBUG pixi_utils::reqwest: Using s3_config: {}
INFO rattler_networking::s3_middleware: Creating S3 middleware using {}
DEBUG pixi_utils::reqwest: s3_middleware: S3Middleware { s3: S3 { auth_storage: AuthenticationStorage { backends: [KeyringAuthenticationStorage { store_key: "rattler" }, FileStorage { path: "/home/majp/.rattler/credentials.json", cache: RwLock { data: FileStorageCache { content: {"artifactory.ramboll.com": BasicHTTP { username: "majp%40ramboll.com", password: "********" }, "artifactory.ramboll.com/artifactory/api/conda/": BasicHTTP { username: "majp%40ramboll.com", password: "********" }} }, poisoned: false, .. } }, NetRcStorage { machines: {} }], cache: Mutex { data: {}, poisoned: false, .. } }, config: {}, expiration: 300s } }
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rattler_repodata_gateway::gateway::sharded_subdir::tokio::index: fetching fresh shard index
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: keyring: creating entry with service rattler, user artifactory.ramboll.com, and no target
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: keyring: created entry SsCredential { attributes: {"username": "artifactory.ramboll.com", "service": "rattler", "target": "default", "application": "rust-keyring"}, label: "artifactory.ramboll.com@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: keyring: get password from entry SsCredential { attributes: {"username": "artifactory.ramboll.com", "service": "rattler", "target": "default", "application": "rust-keyring"}, label: "artifactory.ramboll.com@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: reqwest::connect: starting new connection: https://artifactory.ramboll.com/
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: creating entry with service rattler, user prefix.dev, and no target
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: created entry SsCredential { attributes: {"username": "prefix.dev", "target": "default", "service": "rattler", "application": "rust-keyring"}, label: "prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: get password from entry SsCredential { attributes: {"username": "prefix.dev", "target": "default", "service": "rattler", "application": "rust-keyring"}, label: "prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: creating entry with service rattler, user *.prefix.dev, and no target
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: created entry SsCredential { attributes: {"service": "rattler", "username": "*.prefix.dev", "target": "default", "application": "rust-keyring"}, label: "*.prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: get password from entry SsCredential { attributes: {"service": "rattler", "username": "*.prefix.dev", "target": "default", "application": "rust-keyring"}, label: "*.prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: creating entry with service rattler, user *.dev, and no target
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: created entry SsCredential { attributes: {"username": "*.dev", "target": "default", "application": "rust-keyring", "service": "rattler"}, label: "*.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: keyring: get password from entry SsCredential { attributes: {"username": "*.dev", "target": "default", "application": "rust-keyring", "service": "rattler"}, label: "*.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: reqwest::connect: starting new connection: https://prefix.dev/
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rattler_repodata_gateway::gateway::sharded_subdir::tokio::index: fetching fresh shard index
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: reqwest::connect: starting new connection: https://artifactory.ramboll.com/
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: creating entry with service rattler, user prefix.dev, and no target
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: created entry SsCredential { attributes: {"application": "rust-keyring", "target": "default", "service": "rattler", "username": "prefix.dev"}, label: "prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: get password from entry SsCredential { attributes: {"application": "rust-keyring", "target": "default", "service": "rattler", "username": "prefix.dev"}, label: "prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: creating entry with service rattler, user *.prefix.dev, and no target
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: created entry SsCredential { attributes: {"application": "rust-keyring", "target": "default", "username": "*.prefix.dev", "service": "rattler"}, label: "*.prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: get password from entry SsCredential { attributes: {"application": "rust-keyring", "target": "default", "username": "*.prefix.dev", "service": "rattler"}, label: "*.prefix.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: creating entry with service rattler, user *.dev, and no target
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: created entry SsCredential { attributes: {"service": "rattler", "username": "*.dev", "application": "rust-keyring", "target": "default"}, label: "*.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: keyring: get password from entry SsCredential { attributes: {"service": "rattler", "username": "*.dev", "application": "rust-keyring", "target": "default"}, label: "*.dev@rattler:default (keyring v3.6.2)", target: Some("default") }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: reqwest::connect: starting new connection: https://prefix.dev/
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: hyper_util::client::legacy::connect::http: connecting to 108.141.12.92:443
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: hyper_util::client::legacy::connect::http: connecting to 108.141.12.92:443
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::connect::http: connecting to 34.90.252.205:443
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::connect::http: connecting to 34.90.252.205:443
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: hyper_util::client::legacy::connect::http: connected to 108.141.12.92:443
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: No cached session for DnsName("artifactory.ramboll.com")
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: Not resuming any session
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::connect::http: connected to 34.90.252.205:443
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: No cached session for DnsName("prefix.dev")
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: Not resuming any session
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: hyper_util::client::legacy::connect::http: connected to 108.141.12.92:443
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: No cached session for DnsName("artifactory.ramboll.com")
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: Not resuming any session
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::connect::http: connected to 34.90.252.205:443
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: No cached session for DnsName("prefix.dev")
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: Not resuming any session
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: ALPN protocol is Some(b"http/1.1")
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: Using ciphersuite TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::tls12: ECDHE curve is EcParameters { curve_type: NamedCurve, named_group: X25519 }
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::tls12: Server DNS name is DnsName("artifactory.ramboll.com")
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: ALPN protocol is Some(b"http/1.1")
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::hs: Using ciphersuite TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::tls12: ECDHE curve is EcParameters { curve_type: NamedCurve, named_group: X25519 }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rustls::client::tls12: Server DNS name is DnsName("artifactory.ramboll.com")
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: Using ciphersuite TLS13_AES_128_GCM_SHA256
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: rustls::client::tls13: Not resuming
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: rustls::client::tls13: TLS1.3 encrypted extensions: [Protocols([ProtocolName(6832)])]
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: ALPN protocol is Some(b"h2")
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: h2::client: binding client connection
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: h2::client: client connection bound
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: h2::codec::framed_write: send frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::pool: pooling idle connection for ("https", prefix.dev)
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=WindowUpdate { stream_id: StreamId(0), size_increment: 5177345 }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::pool: reuse idle connection for ("https", prefix.dev)
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Headers { stream_id: StreamId(1), flags: (0x5: END_HEADERS | END_STREAM) }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Headers { stream_id: StreamId(3), flags: (0x5: END_HEADERS | END_STREAM) }
DEBUG rustls::client::hs: Using ciphersuite TLS13_AES_128_GCM_SHA256
DEBUG rustls::client::tls13: Not resuming
DEBUG rustls::client::tls13: TLS1.3 encrypted extensions: [Protocols([ProtocolName(6832)])]
DEBUG rustls::client::hs: ALPN protocol is Some(b"h2")
DEBUG h2::client: binding client connection
DEBUG h2::client: client connection bound
DEBUG h2::codec::framed_write: send frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
DEBUG Connection{peer=Client}: h2::codec::framed_write: send frame=GoAway { error_code: NO_ERROR, last_stream_id: StreamId(0) }
DEBUG Connection{peer=Client}: h2::proto::connection: Connection::poll; connection error error=GoAway(b"", NO_ERROR, Library)
DEBUG Connection{peer=Client}: rustls::common_state: Sending warning alert CloseNotify
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Settings { flags: (0x0), header_table_size: 4096, max_concurrent_streams: 250, initial_window_size: 1048576, max_frame_size: 1048576, max_header_list_size: 1048896 }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Settings { flags: (0x1: ACK) }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=WindowUpdate { stream_id: StreamId(0), size_increment: 983041 }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Settings { flags: (0x1: ACK) }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::proto::settings: received settings ACK; applying Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Headers { stream_id: StreamId(3), flags: (0x5: END_HEADERS | END_STREAM) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: reqwest::async_impl::client: redirecting 'https://prefix.dev/conda-forge/linux-64/repodata_shards.msgpack.zst' to 'https://packages.prefix.dev/conda-forge/linux-64/repodata_shards.msgpack.zst?verify=1744614437-yVzYTOTbP6dS3ni50evGvuXBm5QIQzTHxdwhekfZP9Q%3D'
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: reqwest::connect: starting new connection: https://packages.prefix.dev/
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::connect::http: connecting to 172.67.72.103:443
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Headers { stream_id: StreamId(1), flags: (0x5: END_HEADERS | END_STREAM) }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: reqwest::async_impl::client: redirecting 'https://prefix.dev/conda-forge/noarch/repodata_shards.msgpack.zst' to 'https://packages.prefix.dev/conda-forge/noarch/repodata_shards.msgpack.zst?verify=1744614437-Jz%2Fmno68osf8DPkiCogxXOsSY0ECeZUS%2BBuy7eMH%2BxE%3D'
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: reqwest::connect: starting new connection: https://packages.prefix.dev/
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::connect::http: connected to 172.67.72.103:443
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: No cached session for DnsName("packages.prefix.dev")
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: Not resuming any session
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: Using ciphersuite TLS13_AES_256_GCM_SHA384
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::tls13: Not resuming
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::tls13: TLS1.3 encrypted extensions: [ServerNameAck, Protocols([ProtocolName(6832)])]
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rustls::client::hs: ALPN protocol is Some(b"h2")
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: h2::client: binding client connection
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: h2::client: client connection bound
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: h2::codec::framed_write: send frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::pool: pooling idle connection for ("https", packages.prefix.dev)
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=WindowUpdate { stream_id: StreamId(0), size_increment: 5177345 }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: hyper_util::client::legacy::pool: reuse idle connection for ("https", packages.prefix.dev)
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Headers { stream_id: StreamId(1), flags: (0x5: END_HEADERS | END_STREAM) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Headers { stream_id: StreamId(3), flags: (0x5: END_HEADERS | END_STREAM) }
DEBUG hyper_util::client::legacy::connect::http: connecting to 172.67.72.103:443
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Settings { flags: (0x0), max_concurrent_streams: 100, initial_window_size: 65536, max_frame_size: 16777215 }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Settings { flags: (0x1: ACK) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=WindowUpdate { stream_id: StreamId(0), size_increment: 2147418112 }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Settings { flags: (0x1: ACK) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::proto::settings: received settings ACK; applying Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
DEBUG hyper_util::client::legacy::connect::http: connected to 172.67.72.103:443
DEBUG rustls::client::hs: Resuming session
DEBUG rustls::client::hs: Using ciphersuite TLS13_AES_256_GCM_SHA384
DEBUG rustls::client::tls13: Resuming using PSK
DEBUG rustls::client::tls13: TLS1.3 encrypted extensions: [Protocols([ProtocolName(6832)])]
DEBUG rustls::client::hs: ALPN protocol is Some(b"h2")
DEBUG h2::client: binding client connection
DEBUG h2::client: client connection bound
DEBUG h2::codec::framed_write: send frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
DEBUG Connection{peer=Client}: h2::codec::framed_write: send frame=GoAway { error_code: NO_ERROR, last_stream_id: StreamId(0) }
DEBUG Connection{peer=Client}: h2::proto::connection: Connection::poll; connection error error=GoAway(b"", NO_ERROR, Library)
DEBUG Connection{peer=Client}: rustls::common_state: Sending warning alert CloseNotify
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Headers { stream_id: StreamId(1), flags: (0x4: END_HEADERS) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}: rattler_repodata_gateway::gateway::sharded_subdir::tokio::index: shard index cache has become stale
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Headers { stream_id: StreamId(3), flags: (0x4: END_HEADERS) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=NoArch channel=https://conda.anaconda.org/conda-forge/}: rattler_repodata_gateway::gateway::sharded_subdir::tokio::index: shard index cache has become stale
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(3) }
DEBUG get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: hyper_util::client::legacy::pool: pooling idle connection for ("https", artifactory.ramboll.com)
INFO get_or_create_subdir{platform=NoArch channel=https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/}: rattler_repodata_gateway::gateway: error=HTTP status client error (401 Unauthorized) for url (https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/noarch/repodata_shards.msgpack.zst)
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Reset { stream_id: StreamId(3), error_code: CANCEL }
DEBUG get_or_create_subdir{platform=Linux64 channel=https://conda.anaconda.org/conda-forge/}:Connection{peer=Client}: h2::codec::framed_write: send frame=Reset { stream_id: StreamId(1), error_code: CANCEL }
DEBUG rustls::common_state: Sending warning alert CloseNotify
DEBUG rustls::common_state: Sending warning alert CloseNotify
Error: × Couldn't install logutils
╰─▶ HTTP status client error (401 Unauthorized) for url (https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/noarch/
repodata_shards.msgpack.zst)
As you can see from
FileStorage { path: "/home/majp/.rattler/credentials.json", cache: RwLock { data: FileStorageCache { content: {"artifactory.ramboll.com": BasicHTTP { username: "majp%40ramboll.com", password: "********" }, "artifactory.ramboll.com/artifactory/api/conda/": BasicHTTP { username: "majp%40ramboll.com", password: "********" }} }, poisoned: false, .. } }, NetRcStorage { machines: {} }], cache: Mutex { data: {}, poisoned: false, .. } }, config: {}, expiration: 300s } }
it does use /home/majp/.rattler/credentials.json (which is the file updated by pixi auth login)
Can you check if you can curl that url with your credentials:https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/noarch/repodata_shards.msgpack.zst
It could be that that file is not found on the artifactory server and it returns a 401 instead of a 404?
If thats the case try adding the following to your config:
[repodata-config."https://artifactory.ramboll.com"]
disable-sharded = true
Yup, getting a 404 Not found with curl.
I set disable-sharded to true, and tried again. Didn't work at first. But for good measure I did
pixi auth login --username [email protected] --password ******** https://artifactory.ramboll.com
again and now it works. Many thanks for the help @baszalmstra :-)
Just to clarify, does this now also work if you remove the disable-sharded part?
Glad you asked - yes it does work if I comment out the disable-sharded part. I tested pixi global install with a package off the private channel that I've never installed, just to make sure it isn't using something that was cached. The connection to the channel seems to actually work. Mysterious...
So the thing you changed is only the hostname you passed to pixi auth login?
Yes, it was unsuccessfull with artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools but works with https://artifactory.ramboll.com
Note that the https:// was missing in the first (unsuccessful) URL, but I can see in ~/.rattler/credentials.json that the https:// is stripped.
Here is the working credentials.json:
# ~/.rattler/credentials.json
{
"artifactory.ramboll.com": {
"BasicHTTP": {
"username": "[email protected]",
"password": "********"
}
},
"artifactory.ramboll.com/artifactory/api/conda/": {
"BasicHTTP": {
"username": "majp%40ramboll.com",
"password": "********"
}
}
}
Note also the URL-escaped username for the api/conda one. That one has worked with rattler-build for a long time. I use it for building python+pyo3 stuff if that info helps.
Some more testing with ~/.rattler/credentials.json:
Test 1: "Original" credentials, default sharding
disable-sharded commented out in ~/.pixi/config.toml and with this in ~/.rattler/config.json:
{
"artifactory.ramboll.com/artifactory/api/conda/": {
"BasicHTTP": {
"username": "majp%40ramboll.com",
"password": "********"
}
}
}
pixi global update
Error: × HTTP status client error (401 Unauthorized) for url (https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/linux-
│ 64/repodata_shards.msgpack.zst)
Same behaviour if I use [email protected] instead of majp%40ramboll.com.
Test 2: Original credentials, sharding disabled
disable-sharded = true, same credentials as Test 1:
pixi global update
Error: × HTTP status client error (401 Unauthorized) for url (https://artifactory.ramboll.com/artifactory/api/conda/renopexconda-pytools/linux-
│ 64/repodata.json.zst)
Same behaviour if I use [email protected] instead of majp%40ramboll.com.
Test 3: Removing credentials.json, then logging in with pixi auth login
disable-shardedcommented out- Removed
~/.rattler/credentials.jsoncompletely, then ran
pixi auth login --username [email protected] --password ******** https://artifactory.ramboll.com
which results in this credentials.json:
{
"artifactory.ramboll.com": {
"BasicHTTP": {
"username": "[email protected]",
"password": "********"
}
}
}
pixi global update
✔ Environment pyrosap was already up-to-date.
Test 4: As Test 3, but with disable-sharded = true
pixi global update
✔ Environment pyrosap was already up-to-date.
Conclusion
Seems to be the URL in credentials.json that was wrong. I can't trigger any errors if I delete it and log in with pixi auth login. Adding the api/conda part to the URL makes the errors show again.
Hope that info helps :)
Im closing this issue for now.