* [meta-virtualization][PATCH] Add Eclipse Ankaios container orchestrator recipe
@ 2026-07-08 12:11 kaloyan.rusev
2026-07-21 2:40 ` Bruce Ashfield
0 siblings, 1 reply; 2+ messages in thread
From: kaloyan.rusev @ 2026-07-08 12:11 UTC (permalink / raw)
To: meta-virtualization; +Cc: Kaloyan Rusev
From: Kaloyan Rusev <kaloyan.rusev@elektrobit.com>
Eclipse Ankaios (https://eclipse-ankaios.github.io/ankaios/latest/) is a lightweight workload orchestrator for embedded and automotive systems (part of the Eclipse SDV initiative). It manages OCI containers across one or more nodes through a central server and per-node agents, providing a declarative desired-state model with a small resource footprint. Workloads are described in a manifest and reconciled by the server, while the CLI is used to apply state and inspect the cluster.
The recipe splits the output into ank-server, ank-agent and ank (CLI) packages, with a meta package pulling them together, and ship default configuration plus systemd units and sysvinit scripts gated on the corresponding DISTRO_FEATURES.
Thanks a lot for your time!
Signed-off-by: Kaloyan Rusev <kaloyan.rusev@elektrobit.com>
---
recipes-containers/ankaios/ankaios-crates.inc | 740 ++++++++++++++++++
recipes-containers/ankaios/ankaios_git.bb | 110 +++
recipes-containers/ankaios/files/ank-agent | 95 +++
.../ankaios/files/ank-agent.conf | 49 ++
.../ankaios/files/ank-agent.service | 10 +
recipes-containers/ankaios/files/ank-server | 95 +++
.../ankaios/files/ank-server.conf | 40 +
.../ankaios/files/ank-server.service | 10 +
recipes-containers/ankaios/files/ank.conf | 54 ++
recipes-containers/ankaios/files/state.yaml | 13 +
10 files changed, 1216 insertions(+)
create mode 100644 recipes-containers/ankaios/ankaios-crates.inc
create mode 100644 recipes-containers/ankaios/ankaios_git.bb
create mode 100644 recipes-containers/ankaios/files/ank-agent
create mode 100644 recipes-containers/ankaios/files/ank-agent.conf
create mode 100644 recipes-containers/ankaios/files/ank-agent.service
create mode 100644 recipes-containers/ankaios/files/ank-server
create mode 100644 recipes-containers/ankaios/files/ank-server.conf
create mode 100644 recipes-containers/ankaios/files/ank-server.service
create mode 100644 recipes-containers/ankaios/files/ank.conf
create mode 100644 recipes-containers/ankaios/files/state.yaml
diff --git a/recipes-containers/ankaios/ankaios-crates.inc b/recipes-containers/ankaios/ankaios-crates.inc
new file mode 100644
index 00000000..cffef0ce
--- /dev/null
+++ b/recipes-containers/ankaios/ankaios-crates.inc
@@ -0,0 +1,740 @@
+# Autogenerated with 'bitbake -c update_crates ankaios'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/ahash/0.8.12 \
+ crate://crates.io/aho-corasick/1.1.4 \
+ crate://crates.io/allocator-api2/0.2.21 \
+ crate://crates.io/android_system_properties/0.1.5 \
+ crate://crates.io/anstream/1.0.0 \
+ crate://crates.io/anstyle/1.0.14 \
+ crate://crates.io/anstyle-parse/1.0.0 \
+ crate://crates.io/anstyle-query/1.1.5 \
+ crate://crates.io/anstyle-wincon/3.0.11 \
+ crate://crates.io/anyhow/1.0.102 \
+ crate://crates.io/asn1-rs/0.7.1 \
+ crate://crates.io/asn1-rs-derive/0.6.0 \
+ crate://crates.io/asn1-rs-impl/0.2.0 \
+ crate://crates.io/async-trait/0.1.89 \
+ crate://crates.io/atomic-waker/1.1.2 \
+ crate://crates.io/autocfg/1.5.0 \
+ crate://crates.io/axum/0.8.9 \
+ crate://crates.io/axum-core/0.5.6 \
+ crate://crates.io/base64/0.22.1 \
+ crate://crates.io/bit-set/0.8.0 \
+ crate://crates.io/bit-vec/0.8.0 \
+ crate://crates.io/bitflags/2.11.1 \
+ crate://crates.io/block-buffer/0.10.4 \
+ crate://crates.io/borrow-or-share/0.2.4 \
+ crate://crates.io/bumpalo/3.20.2 \
+ crate://crates.io/bytecount/0.6.9 \
+ crate://crates.io/bytes/1.11.1 \
+ crate://crates.io/cc/1.2.61 \
+ crate://crates.io/cfg-if/1.0.4 \
+ crate://crates.io/cfg_aliases/0.2.1 \
+ crate://crates.io/chacha20/0.10.0 \
+ crate://crates.io/chrono/0.4.44 \
+ crate://crates.io/clap/4.6.1 \
+ crate://crates.io/clap_builder/4.6.0 \
+ crate://crates.io/clap_complete/4.6.2 \
+ crate://crates.io/clap_derive/4.6.1 \
+ crate://crates.io/clap_lex/1.1.0 \
+ crate://crates.io/colorchoice/1.0.5 \
+ crate://crates.io/convert_case/0.10.0 \
+ crate://crates.io/core-foundation-sys/0.8.7 \
+ crate://crates.io/cpufeatures/0.2.17 \
+ crate://crates.io/cpufeatures/0.3.0 \
+ crate://crates.io/crossterm/0.29.0 \
+ crate://crates.io/crossterm_winapi/0.9.1 \
+ crate://crates.io/crypto-common/0.1.7 \
+ crate://crates.io/darling/0.20.11 \
+ crate://crates.io/darling_core/0.20.11 \
+ crate://crates.io/darling_macro/0.20.11 \
+ crate://crates.io/data-encoding/2.11.0 \
+ crate://crates.io/der-parser/10.0.0 \
+ crate://crates.io/deranged/0.5.8 \
+ crate://crates.io/derive_builder/0.20.2 \
+ crate://crates.io/derive_builder_core/0.20.2 \
+ crate://crates.io/derive_builder_macro/0.20.2 \
+ crate://crates.io/derive_more/2.1.1 \
+ crate://crates.io/derive_more-impl/2.1.1 \
+ crate://crates.io/difflib/0.4.0 \
+ crate://crates.io/digest/0.10.7 \
+ crate://crates.io/displaydoc/0.2.5 \
+ crate://crates.io/document-features/0.2.12 \
+ crate://crates.io/downcast/0.11.0 \
+ crate://crates.io/dyn-clone/1.0.20 \
+ crate://crates.io/either/1.15.0 \
+ crate://crates.io/email_address/0.2.9 \
+ crate://crates.io/env/1.0.1 \
+ crate://crates.io/env_filter/1.0.1 \
+ crate://crates.io/env_logger/0.11.10 \
+ crate://crates.io/equivalent/1.0.2 \
+ crate://crates.io/errno/0.3.14 \
+ crate://crates.io/fancy-regex/0.17.0 \
+ crate://crates.io/fastrand/2.4.1 \
+ crate://crates.io/find-msvc-tools/0.1.9 \
+ crate://crates.io/fixedbitset/0.5.7 \
+ crate://crates.io/float-cmp/0.9.0 \
+ crate://crates.io/fluent-uri/0.4.1 \
+ crate://crates.io/fnv/1.0.7 \
+ crate://crates.io/foldhash/0.1.5 \
+ crate://crates.io/foldhash/0.2.0 \
+ crate://crates.io/fraction/0.15.4 \
+ crate://crates.io/fragile/2.1.0 \
+ crate://crates.io/futures-channel/0.3.32 \
+ crate://crates.io/futures-core/0.3.32 \
+ crate://crates.io/futures-macro/0.3.32 \
+ crate://crates.io/futures-sink/0.3.32 \
+ crate://crates.io/futures-task/0.3.32 \
+ crate://crates.io/futures-util/0.3.32 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/getrandom/0.2.17 \
+ crate://crates.io/getrandom/0.3.4 \
+ crate://crates.io/getrandom/0.4.2 \
+ crate://crates.io/h2/0.4.13 \
+ crate://crates.io/handlebars/6.4.0 \
+ crate://crates.io/hashbrown/0.15.5 \
+ crate://crates.io/hashbrown/0.16.1 \
+ crate://crates.io/hashbrown/0.17.0 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/heck/0.5.0 \
+ crate://crates.io/hex/0.4.3 \
+ crate://crates.io/http/1.4.0 \
+ crate://crates.io/http-body/1.0.1 \
+ crate://crates.io/http-body-util/0.1.3 \
+ crate://crates.io/httparse/1.10.1 \
+ crate://crates.io/httpdate/1.0.3 \
+ crate://crates.io/hyper/1.9.0 \
+ crate://crates.io/hyper-timeout/0.5.2 \
+ crate://crates.io/hyper-util/0.1.20 \
+ crate://crates.io/iana-time-zone/0.1.65 \
+ crate://crates.io/iana-time-zone-haiku/0.1.2 \
+ crate://crates.io/icu_collections/2.2.0 \
+ crate://crates.io/icu_locale_core/2.2.0 \
+ crate://crates.io/icu_normalizer/2.2.0 \
+ crate://crates.io/icu_normalizer_data/2.2.0 \
+ crate://crates.io/icu_properties/2.2.0 \
+ crate://crates.io/icu_properties_data/2.2.0 \
+ crate://crates.io/icu_provider/2.2.0 \
+ crate://crates.io/id-arena/2.3.0 \
+ crate://crates.io/ident_case/1.0.1 \
+ crate://crates.io/idna/1.1.0 \
+ crate://crates.io/idna_adapter/1.2.1 \
+ crate://crates.io/indexmap/2.14.0 \
+ crate://crates.io/is_executable/1.0.5 \
+ crate://crates.io/is_terminal_polyfill/1.70.2 \
+ crate://crates.io/itertools/0.10.5 \
+ crate://crates.io/itertools/0.14.0 \
+ crate://crates.io/itoa/1.0.18 \
+ crate://crates.io/jiff/0.2.24 \
+ crate://crates.io/jiff-static/0.2.24 \
+ crate://crates.io/js-sys/0.3.95 \
+ crate://crates.io/jsonschema/0.44.1 \
+ crate://crates.io/lazy_static/1.5.0 \
+ crate://crates.io/leb128fmt/0.1.0 \
+ crate://crates.io/libc/0.2.186 \
+ crate://crates.io/linux-raw-sys/0.12.1 \
+ crate://crates.io/litemap/0.8.2 \
+ crate://crates.io/litrs/1.0.0 \
+ crate://crates.io/lock_api/0.4.14 \
+ crate://crates.io/log/0.4.29 \
+ crate://crates.io/matchit/0.8.4 \
+ crate://crates.io/memchr/2.8.0 \
+ crate://crates.io/mime/0.3.17 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/mio/1.2.0 \
+ crate://crates.io/mockall/0.11.4 \
+ crate://crates.io/mockall_derive/0.11.4 \
+ crate://crates.io/mockall_double/0.3.1 \
+ crate://crates.io/multimap/0.10.1 \
+ crate://crates.io/nix/0.31.2 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/normalize-line-endings/0.3.0 \
+ crate://crates.io/ntapi/0.4.3 \
+ crate://crates.io/num/0.4.3 \
+ crate://crates.io/num-bigint/0.4.6 \
+ crate://crates.io/num-cmp/0.1.0 \
+ crate://crates.io/num-complex/0.4.6 \
+ crate://crates.io/num-conv/0.2.1 \
+ crate://crates.io/num-integer/0.1.46 \
+ crate://crates.io/num-iter/0.1.45 \
+ crate://crates.io/num-modular/0.6.1 \
+ crate://crates.io/num-order/1.2.0 \
+ crate://crates.io/num-rational/0.4.2 \
+ crate://crates.io/num-traits/0.2.19 \
+ crate://crates.io/num_threads/0.1.7 \
+ crate://crates.io/objc2-core-foundation/0.3.2 \
+ crate://crates.io/objc2-io-kit/0.3.2 \
+ crate://crates.io/oid-registry/0.8.1 \
+ crate://crates.io/once_cell/1.21.4 \
+ crate://crates.io/once_cell_polyfill/1.70.2 \
+ crate://crates.io/outref/0.5.2 \
+ crate://crates.io/papergrid/0.13.0 \
+ crate://crates.io/parking_lot/0.12.5 \
+ crate://crates.io/parking_lot_core/0.9.12 \
+ crate://crates.io/percent-encoding/2.3.2 \
+ crate://crates.io/pest/2.8.6 \
+ crate://crates.io/pest_derive/2.8.6 \
+ crate://crates.io/pest_generator/2.8.6 \
+ crate://crates.io/pest_meta/2.8.6 \
+ crate://crates.io/petgraph/0.8.3 \
+ crate://crates.io/pin-project/1.1.11 \
+ crate://crates.io/pin-project-internal/1.1.11 \
+ crate://crates.io/pin-project-lite/0.2.17 \
+ crate://crates.io/portable-atomic/1.13.1 \
+ crate://crates.io/portable-atomic-util/0.2.7 \
+ crate://crates.io/potential_utf/0.1.5 \
+ crate://crates.io/powerfmt/0.2.0 \
+ crate://crates.io/ppv-lite86/0.2.21 \
+ crate://crates.io/predicates/2.1.5 \
+ crate://crates.io/predicates-core/1.0.10 \
+ crate://crates.io/predicates-tree/1.0.13 \
+ crate://crates.io/prettyplease/0.2.37 \
+ crate://crates.io/proc-macro-error-attr2/2.0.0 \
+ crate://crates.io/proc-macro-error2/2.0.1 \
+ crate://crates.io/proc-macro2/1.0.106 \
+ crate://crates.io/prost/0.14.3 \
+ crate://crates.io/prost-build/0.14.3 \
+ crate://crates.io/prost-derive/0.14.3 \
+ crate://crates.io/prost-types/0.14.3 \
+ crate://crates.io/pulldown-cmark/0.13.3 \
+ crate://crates.io/pulldown-cmark-to-cmark/22.0.0 \
+ crate://crates.io/quote/1.0.45 \
+ crate://crates.io/r-efi/5.3.0 \
+ crate://crates.io/r-efi/6.0.0 \
+ crate://crates.io/rand/0.9.4 \
+ crate://crates.io/rand/0.10.1 \
+ crate://crates.io/rand_chacha/0.9.0 \
+ crate://crates.io/rand_core/0.9.5 \
+ crate://crates.io/rand_core/0.10.1 \
+ crate://crates.io/redox_syscall/0.5.18 \
+ crate://crates.io/ref-cast/1.0.25 \
+ crate://crates.io/ref-cast-impl/1.0.25 \
+ crate://crates.io/referencing/0.44.1 \
+ crate://crates.io/regex/1.12.3 \
+ crate://crates.io/regex-automata/0.4.14 \
+ crate://crates.io/regex-syntax/0.8.10 \
+ crate://crates.io/ring/0.17.14 \
+ crate://crates.io/rustc_version/0.4.1 \
+ crate://crates.io/rusticata-macros/4.1.0 \
+ crate://crates.io/rustix/1.1.4 \
+ crate://crates.io/rustls/0.23.39 \
+ crate://crates.io/rustls-pki-types/1.14.1 \
+ crate://crates.io/rustls-webpki/0.103.13 \
+ crate://crates.io/rustversion/1.0.22 \
+ crate://crates.io/ryu/1.0.23 \
+ crate://crates.io/schemars/1.2.1 \
+ crate://crates.io/schemars_derive/1.2.1 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/semver/1.0.28 \
+ crate://crates.io/serde/1.0.228 \
+ crate://crates.io/serde_core/1.0.228 \
+ crate://crates.io/serde_derive/1.0.228 \
+ crate://crates.io/serde_derive_internals/0.29.1 \
+ crate://crates.io/serde_json/1.0.149 \
+ crate://crates.io/serde_spanned/1.1.1 \
+ crate://crates.io/serde_yaml/0.9.34+deprecated \
+ crate://crates.io/sha2/0.10.9 \
+ crate://crates.io/sha256/1.6.0 \
+ crate://crates.io/shlex/1.3.0 \
+ crate://crates.io/signal-hook/0.3.18 \
+ crate://crates.io/signal-hook-mio/0.2.5 \
+ crate://crates.io/signal-hook-registry/1.4.8 \
+ crate://crates.io/slab/0.4.12 \
+ crate://crates.io/smallvec/1.15.1 \
+ crate://crates.io/socket2/0.6.3 \
+ crate://crates.io/stable_deref_trait/1.2.1 \
+ crate://crates.io/strsim/0.11.1 \
+ crate://crates.io/subtle/2.6.1 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.117 \
+ crate://crates.io/sync_wrapper/1.0.2 \
+ crate://crates.io/synstructure/0.13.2 \
+ crate://crates.io/sysinfo/0.38.4 \
+ crate://crates.io/tabled/0.17.0 \
+ crate://crates.io/tabled_derive/0.9.0 \
+ crate://crates.io/tempfile/3.27.0 \
+ crate://crates.io/termtree/0.5.1 \
+ crate://crates.io/thiserror/1.0.69 \
+ crate://crates.io/thiserror/2.0.18 \
+ crate://crates.io/thiserror-impl/1.0.69 \
+ crate://crates.io/thiserror-impl/2.0.18 \
+ crate://crates.io/time/0.3.47 \
+ crate://crates.io/time-core/0.1.8 \
+ crate://crates.io/time-macros/0.2.27 \
+ crate://crates.io/tinystr/0.8.3 \
+ crate://crates.io/tokio/1.52.1 \
+ crate://crates.io/tokio-macros/2.7.0 \
+ crate://crates.io/tokio-rustls/0.26.4 \
+ crate://crates.io/tokio-stream/0.1.18 \
+ crate://crates.io/tokio-util/0.7.18 \
+ crate://crates.io/toml/0.9.12+spec-1.1.0 \
+ crate://crates.io/toml_datetime/0.7.5+spec-1.1.0 \
+ crate://crates.io/toml_parser/1.1.2+spec-1.1.0 \
+ crate://crates.io/toml_writer/1.1.1+spec-1.1.0 \
+ crate://crates.io/tonic/0.14.5 \
+ crate://crates.io/tonic-build/0.14.5 \
+ crate://crates.io/tonic-prost/0.14.5 \
+ crate://crates.io/tonic-prost-build/0.14.5 \
+ crate://crates.io/tower/0.5.3 \
+ crate://crates.io/tower-layer/0.3.3 \
+ crate://crates.io/tower-service/0.3.3 \
+ crate://crates.io/tracing/0.1.44 \
+ crate://crates.io/tracing-attributes/0.1.31 \
+ crate://crates.io/tracing-core/0.1.36 \
+ crate://crates.io/try-lock/0.2.5 \
+ crate://crates.io/typenum/1.20.0 \
+ crate://crates.io/ucd-trie/0.1.7 \
+ crate://crates.io/umask/2.1.0 \
+ crate://crates.io/unicase/2.9.0 \
+ crate://crates.io/unicode-general-category/1.1.0 \
+ crate://crates.io/unicode-ident/1.0.24 \
+ crate://crates.io/unicode-segmentation/1.13.2 \
+ crate://crates.io/unicode-width/0.2.2 \
+ crate://crates.io/unicode-xid/0.2.6 \
+ crate://crates.io/unsafe-libyaml/0.2.11 \
+ crate://crates.io/untrusted/0.9.0 \
+ crate://crates.io/utf8_iter/1.0.4 \
+ crate://crates.io/utf8parse/0.2.2 \
+ crate://crates.io/uuid/1.23.1 \
+ crate://crates.io/uuid-simd/0.8.0 \
+ crate://crates.io/version_check/0.9.5 \
+ crate://crates.io/vsimd/0.8.0 \
+ crate://crates.io/want/0.3.1 \
+ crate://crates.io/wasi/0.11.1+wasi-snapshot-preview1 \
+ crate://crates.io/wasip2/1.0.3+wasi-0.2.9 \
+ crate://crates.io/wasip3/0.4.0+wasi-0.3.0-rc-2026-01-06 \
+ crate://crates.io/wasm-bindgen/0.2.118 \
+ crate://crates.io/wasm-bindgen-macro/0.2.118 \
+ crate://crates.io/wasm-bindgen-macro-support/0.2.118 \
+ crate://crates.io/wasm-bindgen-shared/0.2.118 \
+ crate://crates.io/wasm-encoder/0.244.0 \
+ crate://crates.io/wasm-metadata/0.244.0 \
+ crate://crates.io/wasmparser/0.244.0 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows/0.62.2 \
+ crate://crates.io/windows-collections/0.3.2 \
+ crate://crates.io/windows-core/0.62.2 \
+ crate://crates.io/windows-future/0.3.2 \
+ crate://crates.io/windows-implement/0.60.2 \
+ crate://crates.io/windows-interface/0.59.3 \
+ crate://crates.io/windows-link/0.2.1 \
+ crate://crates.io/windows-numerics/0.3.1 \
+ crate://crates.io/windows-result/0.4.1 \
+ crate://crates.io/windows-strings/0.5.1 \
+ crate://crates.io/windows-sys/0.52.0 \
+ crate://crates.io/windows-sys/0.60.2 \
+ crate://crates.io/windows-sys/0.61.2 \
+ crate://crates.io/windows-targets/0.52.6 \
+ crate://crates.io/windows-targets/0.53.5 \
+ crate://crates.io/windows-threading/0.2.1 \
+ crate://crates.io/windows_aarch64_gnullvm/0.52.6 \
+ crate://crates.io/windows_aarch64_gnullvm/0.53.1 \
+ crate://crates.io/windows_aarch64_msvc/0.52.6 \
+ crate://crates.io/windows_aarch64_msvc/0.53.1 \
+ crate://crates.io/windows_i686_gnu/0.52.6 \
+ crate://crates.io/windows_i686_gnu/0.53.1 \
+ crate://crates.io/windows_i686_gnullvm/0.52.6 \
+ crate://crates.io/windows_i686_gnullvm/0.53.1 \
+ crate://crates.io/windows_i686_msvc/0.52.6 \
+ crate://crates.io/windows_i686_msvc/0.53.1 \
+ crate://crates.io/windows_x86_64_gnu/0.52.6 \
+ crate://crates.io/windows_x86_64_gnu/0.53.1 \
+ crate://crates.io/windows_x86_64_gnullvm/0.52.6 \
+ crate://crates.io/windows_x86_64_gnullvm/0.53.1 \
+ crate://crates.io/windows_x86_64_msvc/0.52.6 \
+ crate://crates.io/windows_x86_64_msvc/0.53.1 \
+ crate://crates.io/winnow/0.7.15 \
+ crate://crates.io/winnow/1.0.2 \
+ crate://crates.io/wit-bindgen/0.51.0 \
+ crate://crates.io/wit-bindgen/0.57.1 \
+ crate://crates.io/wit-bindgen-core/0.51.0 \
+ crate://crates.io/wit-bindgen-rust/0.51.0 \
+ crate://crates.io/wit-bindgen-rust-macro/0.51.0 \
+ crate://crates.io/wit-component/0.244.0 \
+ crate://crates.io/wit-parser/0.244.0 \
+ crate://crates.io/writeable/0.6.3 \
+ crate://crates.io/x509-parser/0.18.1 \
+ crate://crates.io/yoke/0.8.2 \
+ crate://crates.io/yoke-derive/0.8.2 \
+ crate://crates.io/zerocopy/0.8.48 \
+ crate://crates.io/zerocopy-derive/0.8.48 \
+ crate://crates.io/zerofrom/0.1.7 \
+ crate://crates.io/zerofrom-derive/0.1.7 \
+ crate://crates.io/zeroize/1.8.2 \
+ crate://crates.io/zerotrie/0.2.4 \
+ crate://crates.io/zerovec/0.11.6 \
+ crate://crates.io/zerovec-derive/0.11.3 \
+ crate://crates.io/zmij/1.0.21 \
+"
+
+SRC_URI[ahash-0.8.12.sha256sum] = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
+SRC_URI[aho-corasick-1.1.4.sha256sum] = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
+SRC_URI[allocator-api2-0.2.21.sha256sum] = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
+SRC_URI[android_system_properties-0.1.5.sha256sum] = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+SRC_URI[anstream-1.0.0.sha256sum] = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
+SRC_URI[anstyle-1.0.14.sha256sum] = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
+SRC_URI[anstyle-parse-1.0.0.sha256sum] = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
+SRC_URI[anstyle-query-1.1.5.sha256sum] = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
+SRC_URI[anstyle-wincon-3.0.11.sha256sum] = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
+SRC_URI[anyhow-1.0.102.sha256sum] = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+SRC_URI[asn1-rs-0.7.1.sha256sum] = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60"
+SRC_URI[asn1-rs-derive-0.6.0.sha256sum] = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c"
+SRC_URI[asn1-rs-impl-0.2.0.sha256sum] = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"
+SRC_URI[async-trait-0.1.89.sha256sum] = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
+SRC_URI[atomic-waker-1.1.2.sha256sum] = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+SRC_URI[autocfg-1.5.0.sha256sum] = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+SRC_URI[axum-0.8.9.sha256sum] = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90"
+SRC_URI[axum-core-0.5.6.sha256sum] = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
+SRC_URI[base64-0.22.1.sha256sum] = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+SRC_URI[bit-set-0.8.0.sha256sum] = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
+SRC_URI[bit-vec-0.8.0.sha256sum] = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+SRC_URI[bitflags-2.11.1.sha256sum] = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
+SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+SRC_URI[borrow-or-share-0.2.4.sha256sum] = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c"
+SRC_URI[bumpalo-3.20.2.sha256sum] = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+SRC_URI[bytecount-0.6.9.sha256sum] = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
+SRC_URI[bytes-1.11.1.sha256sum] = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
+SRC_URI[cc-1.2.61.sha256sum] = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d"
+SRC_URI[cfg-if-1.0.4.sha256sum] = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+SRC_URI[cfg_aliases-0.2.1.sha256sum] = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+SRC_URI[chacha20-0.10.0.sha256sum] = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"
+SRC_URI[chrono-0.4.44.sha256sum] = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+SRC_URI[clap-4.6.1.sha256sum] = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
+SRC_URI[clap_builder-4.6.0.sha256sum] = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
+SRC_URI[clap_complete-4.6.2.sha256sum] = "3ff7a1dccbdd8b078c2bdebff47e404615151534d5043da397ec50286816f9cb"
+SRC_URI[clap_derive-4.6.1.sha256sum] = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
+SRC_URI[clap_lex-1.1.0.sha256sum] = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
+SRC_URI[colorchoice-1.0.5.sha256sum] = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
+SRC_URI[convert_case-0.10.0.sha256sum] = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
+SRC_URI[core-foundation-sys-0.8.7.sha256sum] = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+SRC_URI[cpufeatures-0.2.17.sha256sum] = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+SRC_URI[cpufeatures-0.3.0.sha256sum] = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
+SRC_URI[crossterm-0.29.0.sha256sum] = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
+SRC_URI[crossterm_winapi-0.9.1.sha256sum] = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+SRC_URI[crypto-common-0.1.7.sha256sum] = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
+SRC_URI[darling-0.20.11.sha256sum] = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
+SRC_URI[darling_core-0.20.11.sha256sum] = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
+SRC_URI[darling_macro-0.20.11.sha256sum] = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
+SRC_URI[data-encoding-2.11.0.sha256sum] = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
+SRC_URI[der-parser-10.0.0.sha256sum] = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6"
+SRC_URI[deranged-0.5.8.sha256sum] = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
+SRC_URI[derive_builder-0.20.2.sha256sum] = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
+SRC_URI[derive_builder_core-0.20.2.sha256sum] = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
+SRC_URI[derive_builder_macro-0.20.2.sha256sum] = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
+SRC_URI[derive_more-2.1.1.sha256sum] = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
+SRC_URI[derive_more-impl-2.1.1.sha256sum] = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
+SRC_URI[difflib-0.4.0.sha256sum] = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+SRC_URI[displaydoc-0.2.5.sha256sum] = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+SRC_URI[document-features-0.2.12.sha256sum] = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
+SRC_URI[downcast-0.11.0.sha256sum] = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1"
+SRC_URI[dyn-clone-1.0.20.sha256sum] = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+SRC_URI[either-1.15.0.sha256sum] = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+SRC_URI[email_address-0.2.9.sha256sum] = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449"
+SRC_URI[env-1.0.1.sha256sum] = "bc95de49ad098572c02d3fbf368c9a020bfff5ae78483685b77f51d8a7e9486d"
+SRC_URI[env_filter-1.0.1.sha256sum] = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef"
+SRC_URI[env_logger-0.11.10.sha256sum] = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a"
+SRC_URI[equivalent-1.0.2.sha256sum] = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+SRC_URI[errno-0.3.14.sha256sum] = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+SRC_URI[fancy-regex-0.17.0.sha256sum] = "72cf461f865c862bb7dc573f643dd6a2b6842f7c30b07882b56bd148cc2761b8"
+SRC_URI[fastrand-2.4.1.sha256sum] = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
+SRC_URI[find-msvc-tools-0.1.9.sha256sum] = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+SRC_URI[fixedbitset-0.5.7.sha256sum] = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
+SRC_URI[float-cmp-0.9.0.sha256sum] = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+SRC_URI[fluent-uri-0.4.1.sha256sum] = "bc74ac4d8359ae70623506d512209619e5cf8f347124910440dbc221714b328e"
+SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+SRC_URI[foldhash-0.1.5.sha256sum] = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+SRC_URI[foldhash-0.2.0.sha256sum] = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+SRC_URI[fraction-0.15.4.sha256sum] = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872"
+SRC_URI[fragile-2.1.0.sha256sum] = "8878864ba14bb86e818a412bfd6f18f9eabd4ec0f008a28e8f7eb61db532fcf9"
+SRC_URI[futures-channel-0.3.32.sha256sum] = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
+SRC_URI[futures-core-0.3.32.sha256sum] = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+SRC_URI[futures-macro-0.3.32.sha256sum] = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
+SRC_URI[futures-sink-0.3.32.sha256sum] = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
+SRC_URI[futures-task-0.3.32.sha256sum] = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+SRC_URI[futures-util-0.3.32.sha256sum] = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.17.sha256sum] = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
+SRC_URI[getrandom-0.3.4.sha256sum] = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+SRC_URI[getrandom-0.4.2.sha256sum] = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
+SRC_URI[h2-0.4.13.sha256sum] = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
+SRC_URI[handlebars-6.4.0.sha256sum] = "9b3f9296c208515b87bd915a2f5d1163d4b3f863ba83337d7713cf478055948e"
+SRC_URI[hashbrown-0.15.5.sha256sum] = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+SRC_URI[hashbrown-0.16.1.sha256sum] = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+SRC_URI[hashbrown-0.17.0.sha256sum] = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[heck-0.5.0.sha256sum] = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+SRC_URI[http-1.4.0.sha256sum] = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
+SRC_URI[http-body-1.0.1.sha256sum] = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+SRC_URI[http-body-util-0.1.3.sha256sum] = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
+SRC_URI[httparse-1.10.1.sha256sum] = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+SRC_URI[httpdate-1.0.3.sha256sum] = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+SRC_URI[hyper-1.9.0.sha256sum] = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
+SRC_URI[hyper-timeout-0.5.2.sha256sum] = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0"
+SRC_URI[hyper-util-0.1.20.sha256sum] = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
+SRC_URI[iana-time-zone-0.1.65.sha256sum] = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
+SRC_URI[iana-time-zone-haiku-0.1.2.sha256sum] = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+SRC_URI[icu_collections-2.2.0.sha256sum] = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
+SRC_URI[icu_locale_core-2.2.0.sha256sum] = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
+SRC_URI[icu_normalizer-2.2.0.sha256sum] = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
+SRC_URI[icu_normalizer_data-2.2.0.sha256sum] = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
+SRC_URI[icu_properties-2.2.0.sha256sum] = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
+SRC_URI[icu_properties_data-2.2.0.sha256sum] = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
+SRC_URI[icu_provider-2.2.0.sha256sum] = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
+SRC_URI[id-arena-2.3.0.sha256sum] = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
+SRC_URI[ident_case-1.0.1.sha256sum] = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+SRC_URI[idna-1.1.0.sha256sum] = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+SRC_URI[idna_adapter-1.2.1.sha256sum] = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+SRC_URI[indexmap-2.14.0.sha256sum] = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
+SRC_URI[is_executable-1.0.5.sha256sum] = "baabb8b4867b26294d818bf3f651a454b6901431711abb96e296245888d6e8c4"
+SRC_URI[is_terminal_polyfill-1.70.2.sha256sum] = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
+SRC_URI[itertools-0.10.5.sha256sum] = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+SRC_URI[itertools-0.14.0.sha256sum] = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
+SRC_URI[itoa-1.0.18.sha256sum] = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+SRC_URI[jiff-0.2.24.sha256sum] = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d"
+SRC_URI[jiff-static-0.2.24.sha256sum] = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7"
+SRC_URI[js-sys-0.3.95.sha256sum] = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
+SRC_URI[jsonschema-0.44.1.sha256sum] = "f98b64a413c93a1b413dfbaf973b78d271648b9cae50b10302ad88af78991672"
+SRC_URI[lazy_static-1.5.0.sha256sum] = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+SRC_URI[leb128fmt-0.1.0.sha256sum] = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
+SRC_URI[libc-0.2.186.sha256sum] = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+SRC_URI[linux-raw-sys-0.12.1.sha256sum] = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
+SRC_URI[litemap-0.8.2.sha256sum] = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
+SRC_URI[litrs-1.0.0.sha256sum] = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
+SRC_URI[lock_api-0.4.14.sha256sum] = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+SRC_URI[log-0.4.29.sha256sum] = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+SRC_URI[matchit-0.8.4.sha256sum] = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
+SRC_URI[memchr-2.8.0.sha256sum] = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+SRC_URI[mime-0.3.17.sha256sum] = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[mio-1.2.0.sha256sum] = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
+SRC_URI[mockall-0.11.4.sha256sum] = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96"
+SRC_URI[mockall_derive-0.11.4.sha256sum] = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb"
+SRC_URI[mockall_double-0.3.1.sha256sum] = "f1ca96e5ac35256ae3e13536edd39b172b88f41615e1d7b653c8ad24524113e8"
+SRC_URI[multimap-0.10.1.sha256sum] = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
+SRC_URI[nix-0.31.2.sha256sum] = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[normalize-line-endings-0.3.0.sha256sum] = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+SRC_URI[ntapi-0.4.3.sha256sum] = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae"
+SRC_URI[num-0.4.3.sha256sum] = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
+SRC_URI[num-bigint-0.4.6.sha256sum] = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
+SRC_URI[num-cmp-0.1.0.sha256sum] = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa"
+SRC_URI[num-complex-0.4.6.sha256sum] = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
+SRC_URI[num-conv-0.2.1.sha256sum] = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
+SRC_URI[num-integer-0.1.46.sha256sum] = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+SRC_URI[num-iter-0.1.45.sha256sum] = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
+SRC_URI[num-modular-0.6.1.sha256sum] = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f"
+SRC_URI[num-order-1.2.0.sha256sum] = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6"
+SRC_URI[num-rational-0.4.2.sha256sum] = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
+SRC_URI[num-traits-0.2.19.sha256sum] = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+SRC_URI[num_threads-0.1.7.sha256sum] = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
+SRC_URI[objc2-core-foundation-0.3.2.sha256sum] = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
+SRC_URI[objc2-io-kit-0.3.2.sha256sum] = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
+SRC_URI[oid-registry-0.8.1.sha256sum] = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7"
+SRC_URI[once_cell-1.21.4.sha256sum] = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+SRC_URI[once_cell_polyfill-1.70.2.sha256sum] = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
+SRC_URI[outref-0.5.2.sha256sum] = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
+SRC_URI[papergrid-0.13.0.sha256sum] = "d2b0f8def1f117e13c895f3eda65a7b5650688da29d6ad04635f61bc7b92eebd"
+SRC_URI[parking_lot-0.12.5.sha256sum] = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+SRC_URI[parking_lot_core-0.9.12.sha256sum] = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+SRC_URI[percent-encoding-2.3.2.sha256sum] = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+SRC_URI[pest-2.8.6.sha256sum] = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662"
+SRC_URI[pest_derive-2.8.6.sha256sum] = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77"
+SRC_URI[pest_generator-2.8.6.sha256sum] = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f"
+SRC_URI[pest_meta-2.8.6.sha256sum] = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220"
+SRC_URI[petgraph-0.8.3.sha256sum] = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
+SRC_URI[pin-project-1.1.11.sha256sum] = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517"
+SRC_URI[pin-project-internal-1.1.11.sha256sum] = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6"
+SRC_URI[pin-project-lite-0.2.17.sha256sum] = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+SRC_URI[portable-atomic-1.13.1.sha256sum] = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
+SRC_URI[portable-atomic-util-0.2.7.sha256sum] = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
+SRC_URI[potential_utf-0.1.5.sha256sum] = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
+SRC_URI[powerfmt-0.2.0.sha256sum] = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+SRC_URI[ppv-lite86-0.2.21.sha256sum] = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+SRC_URI[predicates-2.1.5.sha256sum] = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd"
+SRC_URI[predicates-core-1.0.10.sha256sum] = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144"
+SRC_URI[predicates-tree-1.0.13.sha256sum] = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2"
+SRC_URI[prettyplease-0.2.37.sha256sum] = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+SRC_URI[proc-macro-error-attr2-2.0.0.sha256sum] = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
+SRC_URI[proc-macro-error2-2.0.1.sha256sum] = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
+SRC_URI[proc-macro2-1.0.106.sha256sum] = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
+SRC_URI[prost-0.14.3.sha256sum] = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
+SRC_URI[prost-build-0.14.3.sha256sum] = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7"
+SRC_URI[prost-derive-0.14.3.sha256sum] = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"
+SRC_URI[prost-types-0.14.3.sha256sum] = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7"
+SRC_URI[pulldown-cmark-0.13.3.sha256sum] = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad"
+SRC_URI[pulldown-cmark-to-cmark-22.0.0.sha256sum] = "50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90"
+SRC_URI[quote-1.0.45.sha256sum] = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+SRC_URI[r-efi-5.3.0.sha256sum] = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+SRC_URI[r-efi-6.0.0.sha256sum] = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+SRC_URI[rand-0.9.4.sha256sum] = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
+SRC_URI[rand-0.10.1.sha256sum] = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
+SRC_URI[rand_chacha-0.9.0.sha256sum] = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+SRC_URI[rand_core-0.9.5.sha256sum] = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
+SRC_URI[rand_core-0.10.1.sha256sum] = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
+SRC_URI[redox_syscall-0.5.18.sha256sum] = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+SRC_URI[ref-cast-1.0.25.sha256sum] = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
+SRC_URI[ref-cast-impl-1.0.25.sha256sum] = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
+SRC_URI[referencing-0.44.1.sha256sum] = "22952642836711d7a730d23a4dfb0d732e75a85e4c4f5704266d9c8fac278ff1"
+SRC_URI[regex-1.12.3.sha256sum] = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
+SRC_URI[regex-automata-0.4.14.sha256sum] = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
+SRC_URI[regex-syntax-0.8.10.sha256sum] = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
+SRC_URI[ring-0.17.14.sha256sum] = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
+SRC_URI[rustc_version-0.4.1.sha256sum] = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+SRC_URI[rusticata-macros-4.1.0.sha256sum] = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
+SRC_URI[rustix-1.1.4.sha256sum] = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
+SRC_URI[rustls-0.23.39.sha256sum] = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e"
+SRC_URI[rustls-pki-types-1.14.1.sha256sum] = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9"
+SRC_URI[rustls-webpki-0.103.13.sha256sum] = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
+SRC_URI[rustversion-1.0.22.sha256sum] = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+SRC_URI[ryu-1.0.23.sha256sum] = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
+SRC_URI[schemars-1.2.1.sha256sum] = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc"
+SRC_URI[schemars_derive-1.2.1.sha256sum] = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[semver-1.0.28.sha256sum] = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
+SRC_URI[serde-1.0.228.sha256sum] = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+SRC_URI[serde_core-1.0.228.sha256sum] = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+SRC_URI[serde_derive-1.0.228.sha256sum] = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+SRC_URI[serde_derive_internals-0.29.1.sha256sum] = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
+SRC_URI[serde_json-1.0.149.sha256sum] = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+SRC_URI[serde_spanned-1.1.1.sha256sum] = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
+SRC_URI[serde_yaml-0.9.34+deprecated.sha256sum] = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
+SRC_URI[sha2-0.10.9.sha256sum] = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+SRC_URI[sha256-1.6.0.sha256sum] = "f880fc8562bdeb709793f00eb42a2ad0e672c4f883bbe59122b926eca935c8f6"
+SRC_URI[shlex-1.3.0.sha256sum] = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+SRC_URI[signal-hook-0.3.18.sha256sum] = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
+SRC_URI[signal-hook-mio-0.2.5.sha256sum] = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc"
+SRC_URI[signal-hook-registry-1.4.8.sha256sum] = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
+SRC_URI[slab-0.4.12.sha256sum] = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+SRC_URI[smallvec-1.15.1.sha256sum] = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+SRC_URI[socket2-0.6.3.sha256sum] = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
+SRC_URI[stable_deref_trait-1.2.1.sha256sum] = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+SRC_URI[strsim-0.11.1.sha256sum] = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+SRC_URI[subtle-2.6.1.sha256sum] = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.117.sha256sum] = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+SRC_URI[sync_wrapper-1.0.2.sha256sum] = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+SRC_URI[synstructure-0.13.2.sha256sum] = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+SRC_URI[sysinfo-0.38.4.sha256sum] = "92ab6a2f8bfe508deb3c6406578252e491d299cbbf3bc0529ecc3313aee4a52f"
+SRC_URI[tabled-0.17.0.sha256sum] = "c6709222f3973137427ce50559cd564dc187a95b9cfe01613d2f4e93610e510a"
+SRC_URI[tabled_derive-0.9.0.sha256sum] = "931be476627d4c54070a1f3a9739ccbfec9b36b39815106a20cce2243bbcefe1"
+SRC_URI[tempfile-3.27.0.sha256sum] = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
+SRC_URI[termtree-0.5.1.sha256sum] = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683"
+SRC_URI[thiserror-1.0.69.sha256sum] = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+SRC_URI[thiserror-2.0.18.sha256sum] = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
+SRC_URI[thiserror-impl-1.0.69.sha256sum] = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+SRC_URI[thiserror-impl-2.0.18.sha256sum] = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
+SRC_URI[time-0.3.47.sha256sum] = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
+SRC_URI[time-core-0.1.8.sha256sum] = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
+SRC_URI[time-macros-0.2.27.sha256sum] = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
+SRC_URI[tinystr-0.8.3.sha256sum] = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
+SRC_URI[tokio-1.52.1.sha256sum] = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"
+SRC_URI[tokio-macros-2.7.0.sha256sum] = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
+SRC_URI[tokio-rustls-0.26.4.sha256sum] = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
+SRC_URI[tokio-stream-0.1.18.sha256sum] = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
+SRC_URI[tokio-util-0.7.18.sha256sum] = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
+SRC_URI[toml-0.9.12+spec-1.1.0.sha256sum] = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
+SRC_URI[toml_datetime-0.7.5+spec-1.1.0.sha256sum] = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
+SRC_URI[toml_parser-1.1.2+spec-1.1.0.sha256sum] = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
+SRC_URI[toml_writer-1.1.1+spec-1.1.0.sha256sum] = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
+SRC_URI[tonic-0.14.5.sha256sum] = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec"
+SRC_URI[tonic-build-0.14.5.sha256sum] = "1882ac3bf5ef12877d7ed57aad87e75154c11931c2ba7e6cde5e22d63522c734"
+SRC_URI[tonic-prost-0.14.5.sha256sum] = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309"
+SRC_URI[tonic-prost-build-0.14.5.sha256sum] = "f3144df636917574672e93d0f56d7edec49f90305749c668df5101751bb8f95a"
+SRC_URI[tower-0.5.3.sha256sum] = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
+SRC_URI[tower-layer-0.3.3.sha256sum] = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+SRC_URI[tower-service-0.3.3.sha256sum] = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+SRC_URI[tracing-0.1.44.sha256sum] = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
+SRC_URI[tracing-attributes-0.1.31.sha256sum] = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
+SRC_URI[tracing-core-0.1.36.sha256sum] = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
+SRC_URI[try-lock-0.2.5.sha256sum] = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+SRC_URI[typenum-1.20.0.sha256sum] = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de"
+SRC_URI[ucd-trie-0.1.7.sha256sum] = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+SRC_URI[umask-2.1.0.sha256sum] = "ec9a46c2549e35c054e0ffe281a3a6ec0007793db4df106604d37ed3f4d73d1c"
+SRC_URI[unicase-2.9.0.sha256sum] = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
+SRC_URI[unicode-general-category-1.1.0.sha256sum] = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f"
+SRC_URI[unicode-ident-1.0.24.sha256sum] = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+SRC_URI[unicode-segmentation-1.13.2.sha256sum] = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
+SRC_URI[unicode-width-0.2.2.sha256sum] = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+SRC_URI[unicode-xid-0.2.6.sha256sum] = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+SRC_URI[unsafe-libyaml-0.2.11.sha256sum] = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
+SRC_URI[untrusted-0.9.0.sha256sum] = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+SRC_URI[utf8_iter-1.0.4.sha256sum] = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+SRC_URI[utf8parse-0.2.2.sha256sum] = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+SRC_URI[uuid-1.23.1.sha256sum] = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
+SRC_URI[uuid-simd-0.8.0.sha256sum] = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8"
+SRC_URI[version_check-0.9.5.sha256sum] = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+SRC_URI[vsimd-0.8.0.sha256sum] = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
+SRC_URI[want-0.3.1.sha256sum] = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+SRC_URI[wasi-0.11.1+wasi-snapshot-preview1.sha256sum] = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+SRC_URI[wasip2-1.0.3+wasi-0.2.9.sha256sum] = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
+SRC_URI[wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06.sha256sum] = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
+SRC_URI[wasm-bindgen-0.2.118.sha256sum] = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"
+SRC_URI[wasm-bindgen-macro-0.2.118.sha256sum] = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"
+SRC_URI[wasm-bindgen-macro-support-0.2.118.sha256sum] = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"
+SRC_URI[wasm-bindgen-shared-0.2.118.sha256sum] = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"
+SRC_URI[wasm-encoder-0.244.0.sha256sum] = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
+SRC_URI[wasm-metadata-0.244.0.sha256sum] = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
+SRC_URI[wasmparser-0.244.0.sha256sum] = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-0.62.2.sha256sum] = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
+SRC_URI[windows-collections-0.3.2.sha256sum] = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
+SRC_URI[windows-core-0.62.2.sha256sum] = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+SRC_URI[windows-future-0.3.2.sha256sum] = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
+SRC_URI[windows-implement-0.60.2.sha256sum] = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+SRC_URI[windows-interface-0.59.3.sha256sum] = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+SRC_URI[windows-link-0.2.1.sha256sum] = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+SRC_URI[windows-numerics-0.3.1.sha256sum] = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
+SRC_URI[windows-result-0.4.1.sha256sum] = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+SRC_URI[windows-strings-0.5.1.sha256sum] = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+SRC_URI[windows-sys-0.52.0.sha256sum] = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+SRC_URI[windows-sys-0.60.2.sha256sum] = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+SRC_URI[windows-sys-0.61.2.sha256sum] = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+SRC_URI[windows-targets-0.52.6.sha256sum] = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+SRC_URI[windows-targets-0.53.5.sha256sum] = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
+SRC_URI[windows-threading-0.2.1.sha256sum] = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
+SRC_URI[windows_aarch64_gnullvm-0.52.6.sha256sum] = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+SRC_URI[windows_aarch64_gnullvm-0.53.1.sha256sum] = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
+SRC_URI[windows_aarch64_msvc-0.52.6.sha256sum] = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+SRC_URI[windows_aarch64_msvc-0.53.1.sha256sum] = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
+SRC_URI[windows_i686_gnu-0.52.6.sha256sum] = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+SRC_URI[windows_i686_gnu-0.53.1.sha256sum] = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
+SRC_URI[windows_i686_gnullvm-0.52.6.sha256sum] = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+SRC_URI[windows_i686_gnullvm-0.53.1.sha256sum] = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
+SRC_URI[windows_i686_msvc-0.52.6.sha256sum] = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+SRC_URI[windows_i686_msvc-0.53.1.sha256sum] = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
+SRC_URI[windows_x86_64_gnu-0.52.6.sha256sum] = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+SRC_URI[windows_x86_64_gnu-0.53.1.sha256sum] = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
+SRC_URI[windows_x86_64_gnullvm-0.52.6.sha256sum] = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+SRC_URI[windows_x86_64_gnullvm-0.53.1.sha256sum] = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
+SRC_URI[windows_x86_64_msvc-0.52.6.sha256sum] = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+SRC_URI[windows_x86_64_msvc-0.53.1.sha256sum] = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
+SRC_URI[winnow-0.7.15.sha256sum] = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
+SRC_URI[winnow-1.0.2.sha256sum] = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0"
+SRC_URI[wit-bindgen-0.51.0.sha256sum] = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
+SRC_URI[wit-bindgen-0.57.1.sha256sum] = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
+SRC_URI[wit-bindgen-core-0.51.0.sha256sum] = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
+SRC_URI[wit-bindgen-rust-0.51.0.sha256sum] = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
+SRC_URI[wit-bindgen-rust-macro-0.51.0.sha256sum] = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
+SRC_URI[wit-component-0.244.0.sha256sum] = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
+SRC_URI[wit-parser-0.244.0.sha256sum] = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
+SRC_URI[writeable-0.6.3.sha256sum] = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
+SRC_URI[x509-parser-0.18.1.sha256sum] = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202"
+SRC_URI[yoke-0.8.2.sha256sum] = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
+SRC_URI[yoke-derive-0.8.2.sha256sum] = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
+SRC_URI[zerocopy-0.8.48.sha256sum] = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
+SRC_URI[zerocopy-derive-0.8.48.sha256sum] = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
+SRC_URI[zerofrom-0.1.7.sha256sum] = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df"
+SRC_URI[zerofrom-derive-0.1.7.sha256sum] = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
+SRC_URI[zeroize-1.8.2.sha256sum] = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
+SRC_URI[zerotrie-0.2.4.sha256sum] = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
+SRC_URI[zerovec-0.11.6.sha256sum] = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
+SRC_URI[zerovec-derive-0.11.3.sha256sum] = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
+SRC_URI[zmij-1.0.21.sha256sum] = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
diff --git a/recipes-containers/ankaios/ankaios_git.bb b/recipes-containers/ankaios/ankaios_git.bb
new file mode 100644
index 00000000..38b19d5e
--- /dev/null
+++ b/recipes-containers/ankaios/ankaios_git.bb
@@ -0,0 +1,110 @@
+SUMMARY = "Eclipse Ankaios: Lightweight container orchestrator for embedded Linux"
+DESCRIPTION = "Eclipse Ankaios is a lightweight container runtime for embedded Linux systems. This recipe builds Ankaios from source using vendored Rust crates."
+HOMEPAGE = "https://eclipse-ankaios.github.io/ankaios/latest/"
+BUGTRACKER = "https://github.com/eclipse-ankaios/ankaios/issues"
+
+SECTION = "base"
+
+CVE_PRODUCT = "eclipse:ankaios"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+# Build dependencies
+DEPENDS += "protobuf-native"
+
+PV = "1.0.1"
+
+SRC_URI = "\
+ git://github.com/eclipse-ankaios/ankaios.git;protocol=https;branch=release-1.0 \
+ file://state.yaml \
+ file://ank.conf \
+ file://ank-server.conf \
+ file://ank-agent.conf \
+ file://ank-server.service \
+ file://ank-agent.service \
+ file://ank-server;subdir=init-scripts \
+ file://ank-agent;subdir=init-scripts \
+"
+
+# v1.0.1 tag commit
+SRCREV = "cde70616706b58fd03e4de3f7423addaffa58720"
+
+require ${BPN}-crates.inc
+
+# Add "cargo-update-recipe-crates" to generate the crates.inc file automatically
+inherit cargo systemd update-rc.d
+
+# Package split:
+# - ank-server: server binary + server config + systemd unit
+# - ank-agent: agent binary + agent config + systemd unit
+# - ank: CLI binary ("ank")
+# - ankaios (${PN}): meta package pulling server+agent+cli
+PACKAGE_BEFORE_PN = "ank ank-agent ank-server"
+
+ALLOW_EMPTY:${PN} = "1"
+
+FILES:ank += "${bindir}/ank \
+ ${sysconfdir}/ankaios/ank.conf \
+"
+
+FILES:ank-agent += "\
+ ${bindir}/ank-agent \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_system_unitdir}/ank-agent.service', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '${sysconfdir}/init.d/ank-agent', '', d)} \
+ ${sysconfdir}/ankaios/ank-agent.conf \
+"
+
+FILES:ank-server += "\
+ ${bindir}/ank-server \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_system_unitdir}/ank-server.service', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '${sysconfdir}/init.d/ank-server', '', d)} \
+ ${sysconfdir}/ankaios/state.yaml \
+ ${sysconfdir}/ankaios/ank-server.conf \
+"
+
+RDEPENDS:${PN} = "ank ank-agent ank-server"
+
+CONFFILES:ank = "${sysconfdir}/ankaios/ank.conf"
+CONFFILES:ank-server = "${sysconfdir}/ankaios/state.yaml ${sysconfdir}/ankaios/ank-server.conf"
+CONFFILES:ank-agent = "${sysconfdir}/ankaios/ank-agent.conf"
+
+# Install/enable systemd units when systemd is enabled
+SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'ank-server ank-agent', '', d)}"
+SYSTEMD_SERVICE:ank-server = "ank-server.service"
+SYSTEMD_SERVICE:ank-agent = "ank-agent.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+INITSCRIPT_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'ank-server ank-agent', '', d)}"
+INITSCRIPT_NAME:ank-server = "ank-server"
+INITSCRIPT_PARAMS:ank-server = "start 70 2 3 4 5 . stop 30 0 1 6 ."
+INITSCRIPT_NAME:ank-agent = "ank-agent"
+INITSCRIPT_PARAMS:ank-agent = "start 71 2 3 4 5 . stop 29 0 1 6 ."
+
+do_install() {
+ # Install binaries
+ install -d ${D}${bindir}
+ install -m 0755 ${B}/target/${CARGO_TARGET_SUBDIR}/ank-server ${D}${bindir}/
+ install -m 0755 ${B}/target/${CARGO_TARGET_SUBDIR}/ank-agent ${D}${bindir}/
+ install -m 0755 ${B}/target/${CARGO_TARGET_SUBDIR}/ank ${D}${bindir}/
+
+ # Install configuration directory
+ install -d ${D}${sysconfdir}/ankaios
+ install -m 0644 ${UNPACKDIR}/state.yaml ${D}${sysconfdir}/ankaios/
+ install -m 0644 ${UNPACKDIR}/ank.conf ${D}${sysconfdir}/ankaios/
+ install -m 0644 ${UNPACKDIR}/ank-server.conf ${D}${sysconfdir}/ankaios/
+ install -m 0644 ${UNPACKDIR}/ank-agent.conf ${D}${sysconfdir}/ankaios/
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${UNPACKDIR}/ank-server.service ${D}${systemd_system_unitdir}/
+ install -m 0644 ${UNPACKDIR}/ank-agent.service ${D}${systemd_system_unitdir}/
+ fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${UNPACKDIR}/init-scripts/ank-server ${D}${sysconfdir}/init.d/ank-server
+ install -m 0755 ${UNPACKDIR}/init-scripts/ank-agent ${D}${sysconfdir}/init.d/ank-agent
+ fi
+
+}
diff --git a/recipes-containers/ankaios/files/ank-agent b/recipes-containers/ankaios/files/ank-agent
new file mode 100644
index 00000000..b01b9046
--- /dev/null
+++ b/recipes-containers/ankaios/files/ank-agent
@@ -0,0 +1,95 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: ank-agent
+# Required-Start: $remote_fs $network $syslog
+# Required-Stop: $remote_fs $network $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Ankaios agent
+### END INIT INFO
+
+set -e
+
+NAME="ank-agent"
+DAEMON="/usr/bin/ank-agent"
+PIDFILE="/run/${NAME}.pid"
+
+[ -r "/etc/default/${NAME}" ] && . "/etc/default/${NAME}"
+
+RUST_LOG="${RUST_LOG:-info}"
+LOGFILE="${LOGFILE:-/var/log/${NAME}.log}"
+
+is_running() {
+ [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE" 2>/dev/null)" 2>/dev/null
+}
+
+do_start() {
+ if [ ! -x "$DAEMON" ]; then
+ echo "$DAEMON not installed"
+ return 5
+ fi
+
+ if is_running; then
+ echo "$NAME already running"
+ return 0
+ fi
+
+ export RUST_LOG
+ mkdir -p "$(dirname "$PIDFILE")" "$(dirname "$LOGFILE")"
+
+ start-stop-daemon -S -b -m -p "$PIDFILE" -x /bin/sh -- -c "exec \"$DAEMON\" >>\"$LOGFILE\" 2>&1"
+}
+
+do_stop() {
+ if ! [ -f "$PIDFILE" ]; then
+ return 0
+ fi
+
+ start-stop-daemon -K -p "$PIDFILE" -x "$DAEMON" -s TERM || true
+
+ for _i in 1 2 3 4 5; do
+ if is_running; then
+ sleep 1
+ else
+ break
+ fi
+ done
+
+ if is_running; then
+ start-stop-daemon -K -p "$PIDFILE" -x "$DAEMON" -s KILL || true
+ fi
+
+ rm -f "$PIDFILE"
+}
+
+do_status() {
+ if is_running; then
+ echo "$NAME running"
+ return 0
+ fi
+
+ echo "$NAME not running"
+ return 3
+}
+
+case "$1" in
+ start)
+ do_start
+ ;;
+ stop)
+ do_stop
+ ;;
+ restart|force-reload)
+ do_stop
+ do_start
+ ;;
+ status)
+ do_status
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload|status}"
+ exit 2
+ ;;
+esac
+
+exit 0
diff --git a/recipes-containers/ankaios/files/ank-agent.conf b/recipes-containers/ankaios/files/ank-agent.conf
new file mode 100644
index 00000000..fb91d4ab
--- /dev/null
+++ b/recipes-containers/ankaios/files/ank-agent.conf
@@ -0,0 +1,49 @@
+# This is the configuration file for an Ankaios agent.
+# This configuration file is formatted in the TOML language.
+
+# The format version of the configuration file to ensure compatibility.
+version = 'v1'
+
+# The name to use for the registration with the server.
+# Every agent has to register with a unique name.
+# Agent name shall contain only regular upper and lowercase characters
+# (a-z and A-Z), numbers and the symbols "-" and "_".
+name = 'agent_A'
+
+# The server url.
+# server_url = 'https://127.0.0.1:25551'
+
+# An existing path where to manage the fifo files.
+# The default path is '/tmp/ankaios/'.
+# run_folder = '/tmp/ankaios/'
+
+# The flag to disable TLS communication with the server.
+# If set to 'true', then the agent shall not use TLS.
+insecure = true
+
+# The path to the ca certificate pem file.
+# ca_pem = '/etc/ankaios/certs/ca.pem'
+
+# The path to agent certificate pem file.
+# crt_pem = '/etc/ankaios/certs/ank-agent.pem'
+
+# The path to agent key pem file.
+# key_pem = '/etc/ankaios/certs/ank-agent-key.pem'
+
+# The content of the ca certificate pem file.
+# You can either provide ca_pem or ca_pem_content, but not both
+# ca_pem_content = '''-----BEGIN CERTIFICATE-----
+# ...
+# -----END CERTIFICATE-----'''
+
+# The content of the agent certificate pem file.
+# You can either provide crt_pem or crt_pem_content, but not both
+# crt_pem_content = '''-----BEGIN CERTIFICATE-----
+# ...
+# -----END CERTIFICATE-----'''
+
+# The content of the agent key pem file.
+# You can either provide key_pem or key_pem_content, but not both
+# key_pem_content = '''-----BEGIN PRIVATE KEY-----
+# ...
+# -----END PRIVATE KEY-----'''
diff --git a/recipes-containers/ankaios/files/ank-agent.service b/recipes-containers/ankaios/files/ank-agent.service
new file mode 100644
index 00000000..6bce3590
--- /dev/null
+++ b/recipes-containers/ankaios/files/ank-agent.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Ankaios agent
+After=network.target
+
+[Service]
+Environment="RUST_LOG=info"
+ExecStart=/usr/bin/ank-agent
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-containers/ankaios/files/ank-server b/recipes-containers/ankaios/files/ank-server
new file mode 100644
index 00000000..1d241cf5
--- /dev/null
+++ b/recipes-containers/ankaios/files/ank-server
@@ -0,0 +1,95 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: ank-server
+# Required-Start: $remote_fs $network $syslog
+# Required-Stop: $remote_fs $network $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Ankaios server
+### END INIT INFO
+
+set -e
+
+NAME="ank-server"
+DAEMON="/usr/bin/ank-server"
+PIDFILE="/run/${NAME}.pid"
+
+[ -r "/etc/default/${NAME}" ] && . "/etc/default/${NAME}"
+
+RUST_LOG="${RUST_LOG:-info}"
+LOGFILE="${LOGFILE:-/var/log/${NAME}.log}"
+
+is_running() {
+ [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE" 2>/dev/null)" 2>/dev/null
+}
+
+do_start() {
+ if [ ! -x "$DAEMON" ]; then
+ echo "$DAEMON not installed"
+ return 5
+ fi
+
+ if is_running; then
+ echo "$NAME already running"
+ return 0
+ fi
+
+ export RUST_LOG
+ mkdir -p "$(dirname "$PIDFILE")" "$(dirname "$LOGFILE")"
+
+ start-stop-daemon -S -b -m -p "$PIDFILE" -x /bin/sh -- -c "exec \"$DAEMON\" >>\"$LOGFILE\" 2>&1"
+}
+
+do_stop() {
+ if ! [ -f "$PIDFILE" ]; then
+ return 0
+ fi
+
+ start-stop-daemon -K -p "$PIDFILE" -x "$DAEMON" -s TERM || true
+
+ for _i in 1 2 3 4 5; do
+ if is_running; then
+ sleep 1
+ else
+ break
+ fi
+ done
+
+ if is_running; then
+ start-stop-daemon -K -p "$PIDFILE" -x "$DAEMON" -s KILL || true
+ fi
+
+ rm -f "$PIDFILE"
+}
+
+do_status() {
+ if is_running; then
+ echo "$NAME running"
+ return 0
+ fi
+
+ echo "$NAME not running"
+ return 3
+}
+
+case "$1" in
+ start)
+ do_start
+ ;;
+ stop)
+ do_stop
+ ;;
+ restart|force-reload)
+ do_stop
+ do_start
+ ;;
+ status)
+ do_status
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload|status}"
+ exit 2
+ ;;
+esac
+
+exit 0
diff --git a/recipes-containers/ankaios/files/ank-server.conf b/recipes-containers/ankaios/files/ank-server.conf
new file mode 100644
index 00000000..a7d3b5e8
--- /dev/null
+++ b/recipes-containers/ankaios/files/ank-server.conf
@@ -0,0 +1,40 @@
+# This is the configuration file for an Ankaios server.
+# This configuration file is formatted in the TOML language.
+
+# The format version of the configuration file to ensure compatibility.
+version = 'v1'
+
+# The path to the startup configuration manifest file.
+# By default, no startup configuration manifest is used.
+startup_manifest = '/etc/ankaios/state.yaml'
+
+# The address, including the port, to which the server should listen.
+# address = '127.0.0.1:25551'
+
+# The flag to disable TLS communication between
+# the Ankaios server, agents and the ank CLI.
+# If set to 'true' and the certificates are not provided, then the server shall not use TLS.
+insecure = true
+
+# The path to ca certificate pem file.
+# ca_pem = '/etc/ankaios/certs/ca.pem'
+# The path to server certificate pem file.
+# crt_pem = '/etc/ankaios/certs/ank-server.pem'
+# The path to server key pem file.
+# key_pem = '/etc/ankaios/certs/ank-server-key.pem'
+
+# The content of the ca certificate pem file.
+# You can either provide ca_pem or ca_pem_content, but not both.
+# ca_pem_content = '''-----BEGIN CERTIFICATE-----
+# ...
+# -----END CERTIFICATE-----'''
+# The content of the server certificate pem file.
+# You can either provide crt_pem or crt_pem_content, but not both.
+# crt_pem_content = '''-----BEGIN CERTIFICATE-----
+# ...
+# -----END CERTIFICATE-----'''
+# The content of the server key pem file.
+# You can either provide key_pem or key_pem_content, but not both.
+# key_pem_content = '''-----BEGIN PRIVATE KEY-----
+# ...
+# -----END PRIVATE KEY-----'''
diff --git a/recipes-containers/ankaios/files/ank-server.service b/recipes-containers/ankaios/files/ank-server.service
new file mode 100644
index 00000000..97ae3d5b
--- /dev/null
+++ b/recipes-containers/ankaios/files/ank-server.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Ankaios server
+After=network.target
+
+[Service]
+Environment="RUST_LOG=info"
+ExecStart=/usr/bin/ank-server
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-containers/ankaios/files/ank.conf b/recipes-containers/ankaios/files/ank.conf
new file mode 100644
index 00000000..ec925131
--- /dev/null
+++ b/recipes-containers/ankaios/files/ank.conf
@@ -0,0 +1,54 @@
+# This is the configuration file for the ank CLI.
+# This configuration file is formatted in the TOML language.
+
+# The format version of the configuration file to ensure compatibility.
+version = 'v1'
+
+# The timeout in milliseconds to wait for a response from the ank-server.
+# response_timeout = 3000 # milliseconds
+
+# The flag to enable verbose output.
+# verbose = false
+
+# The flag to disable all output.
+# quiet = false
+
+# The flag that enables waiting for workloads to be created/deleted.
+# no_wait = false
+
+[default]
+# The URL to Ankaios server.
+# If started in insecure mode then the HTTP protocol shall be used,
+# otherwise the HTTPS protocol shall be used.
+# server_url = 'https://127.0.0.1:25551'
+
+# The flag to disable TLS communication with the server.
+# If set to 'true', then the CLI shall not use TLS.
+insecure = true
+
+# The path to the ca certificate pem file.
+# ca_pem = '/etc/ankaios/certs/ca.pem'
+
+# The path to CLI certificate pem file.
+# crt_pem = '/home/ankaios/.config/ankaios/ank.pem'
+
+# The path to CLI key pem file.
+# key_pem = '/home/ankaios/.config/ankaios/ank-key.pem'
+
+# The content of the ca certificate pem file.
+# You can either provide ca_pem or ca_pem_content, but not both.
+# ca_pem_content = '''-----BEGIN CERTIFICATE-----
+# ...
+# -----END CERTIFICATE-----'''
+
+# The content of the CLI certificate pem file.
+# You can either provide crt_pem or crt_pem_content, but not both.
+# crt_pem_content = '''-----BEGIN CERTIFICATE-----
+# ...
+# -----END CERTIFICATE-----'''
+
+# The content of the CLI key pem file.
+# You can either provide key_pem or key_pem_content, but not both.
+# key_pem_content = '''-----BEGIN PRIVATE KEY-----
+# ...
+# -----END PRIVATE KEY-----'''
diff --git a/recipes-containers/ankaios/files/state.yaml b/recipes-containers/ankaios/files/state.yaml
new file mode 100644
index 00000000..29953970
--- /dev/null
+++ b/recipes-containers/ankaios/files/state.yaml
@@ -0,0 +1,13 @@
+# Per default no workload is started. Adapt the file according to your needs.
+apiVersion: v1
+workloads:
+# nginx:
+# runtime: podman
+# agent: agent_A
+# restartPolicy: NEVER
+# tags:
+# owner: Ankaios team
+# runtimeConfig: |
+# image: docker.io/nginx:latest
+# commandOptions: ["-p", "8081:80"]
+
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [meta-virtualization][PATCH] Add Eclipse Ankaios container orchestrator recipe
2026-07-08 12:11 [meta-virtualization][PATCH] Add Eclipse Ankaios container orchestrator recipe kaloyan.rusev
@ 2026-07-21 2:40 ` Bruce Ashfield
0 siblings, 0 replies; 2+ messages in thread
From: Bruce Ashfield @ 2026-07-21 2:40 UTC (permalink / raw)
To: kaloyan.rusev, meta-virtualization
Hi Kaloyan,
Thanks for the Ankaios recipe. Reviewed against the meta-virt layer
conventions and against what we generally ask for when a new orchestrator
lands. Overall content is good: sensible package split (ank / ank-agent /
ank-server + meta), correct FILES/CONFFILES gating on the systemd vs
sysvinit DISTRO_FEATURES, LIC_FILES_CHKSUM points at the in-source
LICENSE (not a template), SRCREV pinned to the v1.0.1 tag. No blocking
issues on the mechanics.
There are three structural asks and a handful of polish notes below.
Structural — please address in a v2
-----------------------------------
1. Missing COMPATIBLE_HOST and no container-runtime coupling in RDEPENDS
Convention in the layer for anything that orchestrates containers:
set COMPATIBLE_HOST to exclude architectures we can't build for
(the k3s/cri-o pattern is "^(?!(qemu)?mips).*"), and RDEPEND on
the actual runtime the agent invokes. Right now the meta-package
ships binaries with no runtime, so `apt install ankaios` on the
target gives you the tools but no way to start a workload.
Ankaios' upstream docs mention podman + Kata Containers as the
supported runtimes. Which one the recipe should require (or
RRECOMMEND) is a decision for the recipe. Whichever you pick will
also bring the seccomp DISTRO_FEATURE requirement transitively —
Ankaios itself doesn't use seccomp (nothing in the 740-crate list
references libseccomp/seccompiler/apparmor), so there's no need to
set REQUIRED_DISTRO_FEATURES = "seccomp" on ankaios directly.
2. Testability in QEMU — required for maintenance in this layer
For meta-virt to accept and maintain a new recipe, we need to be
able to boot it in QEMU and exercise the primary use case
end-to-end. Not a synthetic build-only test. Something like the
crosvm-image-minimal + README-crosvm.md pattern we merged recently:
* A minimal image recipe that lands ankaios + the chosen runtime
+ a small default state.yaml exercising a hello-world workload
* A README alongside the recipe describing the QEMU boot invocation,
the expected `ank get workloads` output, and how to tear down.
* MACHINE = "qemux86-64" as the reference target.
The current recipe is a component-only recipe with no test image
and no how-to-boot documentation. We can't accept that as-is
because the moment upstream breaks something we won't have a
reproducer.
3. License audit for the 740 vendored crates
The recipe declares LICENSE = "Apache-2.0" — that's the upstream
Ankaios project's own license, but with 740 vendored Rust crates
the actual license mix is almost certainly wider (MIT/BSD/ISC
commonly show up in the Rust ecosystem). Please run a real audit
this round rather than deferring — one of:
* `cargo license` or `cargo-deny` against the Cargo.lock,
aggregate the SPDX identifiers, expand LICENSE to the union.
* Or the `oe-go-mod-fetcher` license-scan machinery we use for
Go recipes has a Rust-side equivalent; check if any of your
tooling can consume Cargo.lock.
I've been sweeping this cleanup across the layer's other Rust
recipes (crosvm, netavark, aardvark-dns, podlet, fuse-overlayfs)
as a follow-up, but it's easier for you to do it once upfront than
for us to do it later without knowledge of the vendored graph.
Polish (fold into v2 or address per your judgment)
--------------------------------------------------
* `SECTION = "base"` is unusual for an orchestrator — other recipes
in the layer use `console/utils`, `virtualization/tools`, or
leave it unset.
* Recipe comment says "Add cargo-update-recipe-crates to generate
the crates.inc file automatically" but the inherit line only has
`cargo systemd update-rc.d`. Add cargo-update-recipe-crates so
`bitbake -c update_crates ankaios` works for future maintenance.
* Systemd units are minimalist: no reference to the /etc/ankaios/
config file that the recipe installs, no Restart=on-failure. If
ank-server/ank-agent default to reading /etc/ankaios/*.conf, the
unit should either ExecStart with the path or you should confirm
the default location matches. Otherwise the config file is
orphaned.
* SYSTEMD_AUTO_ENABLE = "enable" is global to the recipe. Cleaner
per-package (SYSTEMD_AUTO_ENABLE:ank-server = "enable", etc.) so
a downstream can toggle one without the other.
* The sysvinit scripts source /etc/default/${NAME} but no template
is installed. A one-line stub with RUST_LOG=info commented out
would spare users from having to create the file from scratch.
I'll hold the recipe until v2 with the structural items addressed.
Happy to review a v2 when you send it.
Bruce
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-21 2:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-08 12:11 [meta-virtualization][PATCH] Add Eclipse Ankaios container orchestrator recipe kaloyan.rusev
2026-07-21 2:40 ` Bruce Ashfield
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.