1 unstable release
0.3.0 | Jan 13, 2024 |
---|
#199 in Caching
43KB
862 lines
rattler-server: resolve conda envs on the fly
rattler-server
is a single-purpose tool to resolve conda environments with a HTTP endpoint.
The tool uses crates from the lower-level rattler
libraries.
If you want to learn more, join our Discord!.
Features:
- Written in Rust, memory safe and fast!
- Uses axum for async, parallel request execution
- Fast caching with libsolv and configurable cache lifetime
- Uses the same package resolve algorithms as
mamba
The CLI interface
If you clone this repository, you can run rattler-server
by using
# run rattler-server on default port 3000
cargo run
# or to run on another port (3322)
cargo run -- -p 3322
The full help text is as follows:
Usage: rattler-server [OPTIONS]
Options:
-p <PORT>
The port at which the server should listen [env: RATTLER_SERVER_PORT=] [default: 3000]
-c <CONCURRENT_REPODATA_DOWNLOADS_PER_REQUEST>
The amount of concurrent downloads of repodata.json files, during a single request. JSON downloads are very CPU-intensive, because they require parsing huge JSON bodies [env: RATTLER_SERVER_PORT_CONCURRENT_DOWNLOADS=] [default: 1]
-r <REPODATA_CACHE_EXPIRATION_SECONDS>
The amount of seconds after which a cached repodata.json expires, defaults to 30 minutes [env: RATTLER_SERVER_CACHE_EXPIRATION_SECONDS=] [default: 1800]
-h, --help
Print help
The endpoints
It has a single endpoint (/solve
) that accepts HTTP POST requests with the following JSON content:
{
"specs": [
"cudnn",
"tensorflow-gpu"
],
"virtual_packages": ["__glibc=2.5=0", "__cuda=11=0"],
"channels": [
"conda-forge"
],
"platform": "linux-64"
}
If successful, the server will reply a HTTP 200 Response with the solved, topologically sorted dependencies for that environment as JSON, e.g.:
{
"packages": [
{
"name": "_libgcc_mutex",
"version": "0.1",
"build": "conda_forge",
"build_number": 0,
"subdir": "linux-64",
"md5": "d7c89558ba9fa0495403155b64376d81",
"sha256": "fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726",
"size": 2562,
"depends": [],
"constrains": [],
"license": "None",
"timestamp": 1578324546067,
"fn": "_libgcc_mutex-0.1-conda_forge.tar.bz2",
"url": "https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2",
"channel": "https://conda.anaconda.org/conda-forge/"
},
{
"name": "libgomp",
"version": "12.2.0",
"build": "h65d4601_19",
"build_number": 19,
"subdir": "linux-64",
"md5": "cedcee7c064c01c403f962c9e8d3c373",
"sha256": "81a76d20cfdee9fe0728b93ef057ba93494fd1450d42bc3717af4e468235661e",
"size": 466188,
"depends": [
"_libgcc_mutex 0.1 conda_forge"
],
"constrains": [],
"license": "GPL-3.0-only WITH GCC-exception-3.1",
"license_family": "GPL",
"timestamp": 1666519598453,
"fn": "libgomp-12.2.0-h65d4601_19.tar.bz2",
"url": "https://conda.anaconda.org/conda-forge/linux-64/libgomp-12.2.0-h65d4601_19.tar.bz2",
"channel": "https://conda.anaconda.org/conda-forge/"
},
// ... and many more
]
}
If you ask for an unsolvable environment (e.g. by using an old __glibc=1.0=0
virtual package), a HTTP 409 response with the following content is returned:
{
"error_kind": "solver",
"message": "no solution found for the specified dependencies",
"additional_info": [
"nothing provides __glibc >=2.17,<3.0.a0 needed by cudnn-8.2.0.53-h86fa8c9_0"
]
}
Dependencies
~27–43MB
~705K SLoC