diff --git a/Cargo.lock b/Cargo.lock index 0b59344b..4f9b43b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -73,6 +73,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aho-corasick" version = "1.1.3" @@ -82,6 +88,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "ambient-authority" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -276,11 +288,17 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + [[package]] name = "base64" version = "0.21.7" @@ -341,11 +359,84 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" + +[[package]] +name = "cap-primitives" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc15faeed2223d8b8e8cc1857f5861935a06d06713c4ac106b722ae9ce3c369" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes 2.0.4", + "ipnet", + "maybe-owned", + "rustix 0.38.44", + "windows-sys 0.59.0", + "winx", +] + +[[package]] +name = "cap-std" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3dbd3e8e8d093d6ccb4b512264869e1281cdb032f7940bd50b2894f96f25609" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes 2.0.4", + "rustix 0.38.44", +] + +[[package]] +name = "cap-std-ext" +version = "4.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b6312927ec94cf0d277f2aa42ab5fe92b8c1a4c1fa81f119c302bd5b0b46790" +dependencies = [ + "cap-primitives", + "cap-tempfile", + "libc", + "rustix 0.38.44", +] + +[[package]] +name = "cap-tempfile" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffa1c0edc4958d742bab2e903e52f93ccee482072680e08d6ce0784873e65b1" +dependencies = [ + "cap-std", + "rand 0.8.5", + "rustix 0.38.44", + "uuid", +] + [[package]] name = "cc" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] [[package]] name = "cfg-if" @@ -433,6 +524,38 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", +] + +[[package]] +name = "containers-image-proxy" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b4ec45d60513c498a40c69d89447d8bf91bbd17f71a32aa285b39e4dc03294" +dependencies = [ + "cap-std-ext", + "fn-error-context", + "futures-util", + "oci-spec", + "rustix 0.38.44", + "semver", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -456,8 +579,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5458d2e7e757f352484485c5f66285c81fe2676fd78e08b1ed76fdd6e72b61" dependencies = [ "serde", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", ] [[package]] @@ -469,6 +592,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-channel" version = "0.5.13" @@ -494,6 +626,41 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.94", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.94", +] + [[package]] name = "derivative" version = "2.2.0" @@ -505,6 +672,37 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.94", +] + [[package]] name = "digest" version = "0.10.7" @@ -547,6 +745,12 @@ dependencies = [ "syn 2.0.94", ] +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "encoding_rs" version = "0.8.34" @@ -617,12 +821,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -669,6 +873,17 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "flate2" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +dependencies = [ + "crc32fast", + "libz-sys", + "miniz_oxide 0.8.5", +] + [[package]] name = "fn-error-context" version = "0.2.1" @@ -710,6 +925,17 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs-set-times" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2e6123af26f0f2c51cc66869137080199406754903cc926a7690401ce09cb4" +dependencies = [ + "io-lifetimes 2.0.4", + "rustix 0.38.44", + "windows-sys 0.59.0", +] + [[package]] name = "futures" version = "0.3.31" @@ -860,18 +1086,140 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "getset" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded738faa0e88d3abc9d1a13cb11adc2073c400969eeb8793cf7132589959fc" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "gimli" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.6.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + [[package]] name = "glob" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gvariant" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd8ea59586b3b91a49369121fb626b8afaa094baef5ea5569adec2d679b5460e" +dependencies = [ + "gvariant-macro", + "memchr", + "ref-cast", +] + +[[package]] +name = "gvariant-macro" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d6c33b3796d2656c765308a4b70b5f3176123c82174b96db351aeef549b9f1" +dependencies = [ + "syn 1.0.109", +] + [[package]] name = "h2" version = "0.3.26" @@ -1236,6 +1584,12 @@ dependencies = [ "syn 2.0.94", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.0.3" @@ -1265,6 +1619,20 @@ checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width", + "web-time", ] [[package]] @@ -1285,6 +1653,16 @@ dependencies = [ "smallvec", ] +[[package]] +name = "io-extras" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2285ddfe3054097ef4b2fe909ef8c3bcd1ea52a8f0d274416caebeef39f04a65" +dependencies = [ + "io-lifetimes 2.0.4", + "windows-sys 0.59.0", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -1296,6 +1674,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "io-lifetimes" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983" + [[package]] name = "ipnet" version = "2.9.0" @@ -1310,9 +1694,18 @@ checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] [[package]] name = "js-sys" @@ -1379,6 +1772,17 @@ dependencies = [ "uuid", ] +[[package]] +name = "libz-sys" +version = "1.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -1419,6 +1823,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + [[package]] name = "memchr" version = "2.7.4" @@ -1464,6 +1874,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "1.0.1" @@ -1564,12 +1983,65 @@ dependencies = [ ] [[package]] -name = "object" -version = "0.36.1" +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +dependencies = [ + "memchr", +] + +[[package]] +name = "oci-spec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da406e58efe2eb5986a6139626d611ce426e5324a824133d76367c765cf0b882" +dependencies = [ + "derive_builder", + "getset", + "regex", + "serde", + "serde_json", + "strum 0.26.3", + "strum_macros 0.26.4", + "thiserror 2.0.9", +] + +[[package]] +name = "ocidir" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "296a7c4945df5df933582eefaad6d90d16f3e7162f42e6837985bce745d3b5af" +dependencies = [ + "camino", + "cap-std-ext", + "chrono", + "flate2", + "hex", + "oci-spec", + "olpc-cjson", + "openssl", + "serde", + "serde_json", + "tar", + "thiserror 1.0.69", +] + +[[package]] +name = "olpc-cjson" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "696183c9b5fe81a7715d074fd632e8bd46f4ccc0231a3ed7fc580a80de5f7083" dependencies = [ - "memchr", + "serde", + "serde_json", + "unicode-normalization", ] [[package]] @@ -1643,6 +2115,78 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "ostree" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe85ce8e273f4524322c5d8dabee16b6e4426c67017d03a19e743f92a34ad70" +dependencies = [ + "base64 0.20.0", + "bitflags 1.3.2", + "gio", + "glib", + "hex", + "libc", + "once_cell", + "ostree-sys", + "thiserror 1.0.69", +] + +[[package]] +name = "ostree-ext" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3749ad9f089cd49975c43d4e510888f7063a7b2339265f15f165a0b8b2268a5c" +dependencies = [ + "anyhow", + "camino", + "cap-std-ext", + "chrono", + "clap", + "containers-image-proxy", + "flate2", + "fn-error-context", + "futures-util", + "gvariant", + "hex", + "indexmap", + "indicatif", + "io-lifetimes 2.0.4", + "libc", + "libsystemd", + "ocidir", + "olpc-cjson", + "once_cell", + "openssl", + "ostree", + "pin-project", + "regex", + "rustix 0.38.44", + "serde", + "serde_json", + "tar", + "tempfile", + "terminal_size", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "ostree-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93abffc3eb7fb90f449e4c476b8b747df1872945803a14c33bbee580ec1ed8c1" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "parking" version = "2.2.0" @@ -1678,6 +2222,26 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -1712,6 +2276,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1728,6 +2298,62 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "proc-macro2" version = "1.0.92" @@ -1878,6 +2504,26 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "regex" version = "1.11.1" @@ -1913,7 +2559,7 @@ version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -1961,7 +2607,7 @@ checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", - "io-lifetimes", + "io-lifetimes 1.0.11", "libc", "linux-raw-sys 0.3.8", "windows-sys 0.48.0", @@ -1969,15 +2615,17 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ "bitflags 2.6.0", "errno", + "itoa", "libc", "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -1986,7 +2634,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64", + "base64 0.21.7", ] [[package]] @@ -2051,6 +2699,12 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" + [[package]] name = "serde" version = "1.0.217" @@ -2211,6 +2865,12 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + [[package]] name = "strum_macros" version = "0.24.3" @@ -2224,6 +2884,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.94", +] + [[package]] name = "subtle" version = "2.6.1" @@ -2290,6 +2963,36 @@ dependencies = [ "libc", ] +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tempfile" version = "3.12.0" @@ -2299,10 +3002,20 @@ dependencies = [ "cfg-if", "fastrand 2.1.0", "once_cell", - "rustix 0.38.34", + "rustix 0.38.44", "windows-sys 0.59.0", ] +[[package]] +name = "terminal_size" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +dependencies = [ + "rustix 0.38.44", + "windows-sys 0.48.0", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -2353,6 +3066,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.42.0" @@ -2367,9 +3095,21 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "socket2 0.5.7", + "tokio-macros", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "tokio-native-tls" version = "0.3.1" @@ -2380,6 +3120,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + [[package]] name = "tokio-util" version = "0.7.11" @@ -2395,21 +3147,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.15" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.16", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] @@ -2422,20 +3174,20 @@ checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] name = "toml_edit" -version = "0.22.16" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.26", + "winnow", ] [[package]] @@ -2520,6 +3272,21 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "url" version = "2.5.4" @@ -2566,6 +3333,7 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ + "getrandom 0.2.15", "serde", ] @@ -2575,6 +3343,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.9.4" @@ -2696,6 +3470,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2884,15 +3668,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winnow" -version = "0.6.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28" -dependencies = [ - "memchr", -] - [[package]] name = "winreg" version = "0.50.0" @@ -2903,6 +3678,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "winx" +version = "0.36.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d" +dependencies = [ + "bitflags 2.6.0", + "windows-sys 0.59.0", +] + [[package]] name = "wit-bindgen-rt" version = "0.33.0" @@ -2924,6 +3709,17 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +[[package]] +name = "xattr" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" +dependencies = [ + "libc", + "linux-raw-sys 0.4.14", + "rustix 0.38.44", +] + [[package]] name = "yoke" version = "0.7.5" @@ -2993,7 +3789,7 @@ version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a64de32c103d3a845f37adf0f46397d6346c8d48028e218db44dcde981733880" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "regex", @@ -3101,8 +3897,10 @@ dependencies = [ "maplit", "mockito", "num-traits", + "oci-spec", "once_cell", "ordered-float", + "ostree-ext", "prometheus", "proptest", "rand 0.9.0", @@ -3120,6 +3918,34 @@ dependencies = [ "zbus", ] +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.14+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +dependencies = [ + "cc", + "pkg-config", +] + [[package]] name = "zvariant" version = "3.9.0" @@ -3140,7 +3966,7 @@ version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "155247a5d1ab55e335421c104ccd95d64f17cebbd02f50cdbc1c33385f9c4d81" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", diff --git a/Cargo.toml b/Cargo.toml index 06ad9244..5f1f30a1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,8 +32,10 @@ libsystemd = "0.7" log = "0.4" maplit = "1.0" num-traits = "0.2" +oci-spec = "0.7.1" once_cell = ">= 1.19, < 1.30" ordered-float = { version = "4.5", features = ["serde"] } +ostree-ext = "0.15.3" prometheus = { version = "0.13", default-features = false } rand = ">=0.9, < 0.10" regex = "1.11" diff --git a/src/rpm_ostree/cli_status.rs b/src/rpm_ostree/cli_status.rs index 1be93e37..e6320d50 100644 --- a/src/rpm_ostree/cli_status.rs +++ b/src/rpm_ostree/cli_status.rs @@ -2,12 +2,13 @@ use super::actor::{RpmOstreeClient, StatusCache}; use super::Release; -use anyhow::{anyhow, ensure, Context, Result}; +use anyhow::{anyhow, bail, ensure, Context, Result}; use filetime::FileTime; use log::trace; +use ostree_ext::container::OstreeImageReference; use prometheus::IntCounter; use serde::Deserialize; -use std::collections::BTreeSet; +use std::collections::{BTreeSet, HashMap}; use std::fs; use std::rc::Rc; @@ -61,9 +62,9 @@ pub struct Status { pub struct Deployment { booted: bool, container_image_reference: Option, + custom_origin: Option, base_checksum: Option, - #[serde(rename = "base-commit-meta")] - base_metadata: BaseCommitMeta, + base_commit_meta: HashMap, checksum: String, // NOTE(lucab): missing field means "not staged". #[serde(default)] @@ -71,11 +72,11 @@ pub struct Deployment { version: String, } -/// Metadata from base commit (only fields relevant to zincati). +/// Custom origin fields #[derive(Clone, Debug, Deserialize)] -struct BaseCommitMeta { - #[serde(rename = "fedora-coreos.stream")] - stream: Option, +pub struct CustomOrigin { + pub url: String, + pub description: String, } impl Deployment { @@ -90,30 +91,63 @@ impl Deployment { /// Return the deployment base revision. pub fn base_revision(&self) -> String { - self.base_checksum + self.container_image_reference .clone() + .or(self.base_checksum.clone()) .unwrap_or_else(|| self.checksum.clone()) } + + /// return the custom origin fields + pub fn custom_origin(&self) -> Option { + self.custom_origin.clone() + } + + /// return the deployed container image reference + pub fn container_image_reference(&self) -> Option { + self.container_image_reference + .as_ref() + .and_then(|s| s.as_str().try_into().ok()) + } } /// Parse the booted deployment from status object. pub fn parse_booted(status: &Status) -> Result { let status = booted_status(status)?; - if let Some(img) = status.container_image_reference.as_ref() { - let msg = format!("Automatic updates disabled; booted into container image {img}"); - crate::utils::notify_ready(); - crate::utils::update_unit_status(&msg); - return Err(anyhow::Error::new(SystemInoperable(msg))); - } Ok(status.into_release()) } fn fedora_coreos_stream_from_deployment(deploy: &Deployment) -> Result { - let stream = deploy - .base_metadata - .stream - .as_ref() - .ok_or_else(|| anyhow!("Missing `fedora-coreos.stream` in commit metadata"))?; + let stream = if deploy.container_image_reference.is_some() { + // This is the edge case where we spoofed the origin file to make it looks like a container + // native deployment but it's still pure ostree. + // here, the base commit meta deserialize nicely and we don't need the "unstringify" operation. + if let Some(stream) = deploy.base_commit_meta.get("fedora-coreos.stream") { + serde_json::from_value(stream.clone())? + + // in the OCI case, base commit meta is an escaped JSON string of + // an OCI ImageManifest. Deserialize it properly. + } else if let Some(serde_json::Value::String(inner)) = + deploy.base_commit_meta.get("ostree.manifest") + { + let manifest: oci_spec::image::ImageManifest = serde_json::from_str(inner)?; + let stream = manifest + .annotations() + .clone() + .and_then(|a| a.get("fedora-coreos.stream").cloned()); + stream.ok_or_else(|| { + anyhow!("Missing `fedora-coreos.stream` in base image manifest annotations") + })? + } else { + bail!("Cannot deserialize ostree base image manifest") + } + } else { + // In the regular OSTree case, just fetch "fedora-coreos.stream" + let stream = deploy + .base_commit_meta + .get("fedora-coreos.stream") + .ok_or_else(|| anyhow!("Missing `fedora-coreos.stream` in commit metadata"))?; + serde_json::from_value(stream.clone())? + }; ensure!(!stream.is_empty(), "empty stream value"); Ok(stream.to_string()) } @@ -234,6 +268,8 @@ pub fn invoke_cli_status(booted_only: bool) -> Result { #[cfg(test)] mod tests { + use ostree_ext::container::SignatureSource; + use super::*; fn mock_status(path: &str) -> Result { @@ -258,6 +294,11 @@ mod tests { let deployments = parse_local_deployments(&status, true); assert_eq!(deployments.len(), 1); } + { + let status = mock_status("tests/fixtures/rpm-ostree-oci-status.json").unwrap(); + let deployments = parse_local_deployments(&status, false); + assert_eq!(deployments.len(), 1); + } } #[test] @@ -267,4 +308,32 @@ mod tests { let stream = fedora_coreos_stream_from_deployment(&booted).unwrap(); assert_eq!(stream, "testing-devel"); } + + #[test] + fn mock_booted_oci_deployment() { + let status = mock_status("tests/fixtures/rpm-ostree-oci-status.json").unwrap(); + let booted = booted_status(&status).unwrap(); + let stream = fedora_coreos_stream_from_deployment(&booted).unwrap(); + assert_eq!(stream, "testing"); + let img_ref = booted.container_image_reference(); + assert!(img_ref.is_some()); + let img_ref = img_ref.unwrap(); + assert_eq!( + img_ref.sigverify, + SignatureSource::OstreeRemote("fedora".to_string()) + ); + assert_eq!(img_ref.imgref.name, "quay.io/fedora/fedora-coreos@sha256:c4a15145a232d882ccf2ed32d22c06c01a7cf62317eb966a98340ae4bd56dfa6".to_string()); + + let custom_origin = booted.custom_origin(); + assert!(custom_origin.is_some()); + let custom_origin = custom_origin.unwrap(); + assert_eq!( + custom_origin.url, + "quay.io/fedora/fedora-coreos@sha256:c4a15145a232d882ccf2ed32d22c06c01a7cf62317eb966a98340ae4bd56dfa6" + ); + assert_eq!( + custom_origin.description, + "Fedora CoreOS Testing stream through OCI images" + ); + } } diff --git a/tests/fixtures/rpm-ostree-oci-status.json b/tests/fixtures/rpm-ostree-oci-status.json new file mode 100644 index 00000000..0ca78da7 --- /dev/null +++ b/tests/fixtures/rpm-ostree-oci-status.json @@ -0,0 +1,42 @@ +{ + "deployments" : [ + { + "unlocked" : "none", + "requested-local-packages" : [], + "base-commit-meta" : { + "ostree.importer.version" : "0.15.3", + "ostree.tar-filtered" : { }, + "ostree.manifest" : "{\"schemaVersion\":2,\"config\":{\"mediaType\":\"application/vnd.oci.image.config.v1+json\",\"digest\":\"sha256:4863073af59a028054731969d5fba6ab1d27c4a8b9d1dabb51bd4421e3c35996\",\"size\":8812},\"layers\":[{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:466cd9c8c01b308ab3ba61343af6e46a5b898713b08d71415899d6f533903492\",\"size\":1541370},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:9e9d4c4cc91e472a458e049c26eeed8771c9f621a22977c6254f3c216a95894a\",\"size\":54196970,\"annotations\":{\"ostree.components\":\"containerd\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:981a071da17cf24618ee64219bbd9e8825108fc1bade2dc633b84828ba2db476\",\"size\":40754337,\"annotations\":{\"ostree.components\":\"llvm18-libs\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:7b283136d6c1b3e2deac25e9d772db4f17e73e8a86f25068ae507561d76f6390\",\"size\":33851011,\"annotations\":{\"ostree.components\":\"moby-engine\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:34605c4d33fb9f76c221713266de6718d4b0539199f834a722c3a3bd8e5529ab\",\"size\":66136828,\"annotations\":{\"ostree.components\":\"kernel-modules\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:ec37ae0cf72911d288a34cc279689e00849f0bb5cc791e8fdc331d180c42a2af\",\"size\":19908622,\"annotations\":{\"ostree.components\":\"podman\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:d1918c425a40ef45b6341d4c10a995f02d208bdf1805c5ef275fdd749640154d\",\"size\":40123366,\"annotations\":{\"ostree.components\":\"kernel-modules-core\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:11581772b3aaf319ec55a255a868668ee575d1f7647ec2c7d46bba74ab7f36ad\",\"size\":41343078,\"annotations\":{\"ostree.components\":\"linux-firmware\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:be7b499d203798de8b25193dfcb0fa4d1b6e5ab6a2c4e87fec2e9553dd2752bf\",\"size\":39813516,\"annotations\":{\"ostree.components\":\"nvidia-gpu-firmware\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:10d062e6c4069170d3465c7314a1c17de9729ab5bd4fbb37dceac7d8b2989604\",\"size\":15215097,\"annotations\":{\"ostree.components\":\"libicu\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:4681ba5da8eb1fb163f8cb58c7f2cd7b38da34f0681fae5cfe2bc7b52a7649f6\",\"size\":9615176,\"annotations\":{\"ostree.components\":\"rpm\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:3e16f16c1f868d1f0ce2fcf77a0d1878c48aadb7c21b25839fd404c47a987c5f\",\"size\":18443148,\"annotations\":{\"ostree.components\":\"kernel-core\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:2fedcee3c17093ba94899083d1b43f69c117615ae37fbaca8a63bbbc25027958\",\"size\":11019215,\"annotations\":{\"ostree.components\":\"skopeo\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:a99f70cd5870b25d34dbcd63371770dd2e81a4ad2114620397c1f9dcd9624cbc\",\"size\":9866444,\"annotations\":{\"ostree.components\":\"docker-cli\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:c2b4d238e054df8bef6c326b32076929230a407e2cb802bfb584019e20415dc1\",\"size\":8486116,\"annotations\":{\"ostree.components\":\"ignition\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:c6b543b5bd072118399a12f281ce0cc61238d93b31721d9ad0a210e96af35f64\",\"size\":25194750,\"annotations\":{\"ostree.components\":\"amd-gpu-firmware\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:bee67bcc7f7e7caea514ade9ae026fa23ee8abe041511000a45a5604f2e80fdd\",\"size\":9860213,\"annotations\":{\"ostree.components\":\"git-core\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:8e9b61c66198d266e92abb150268b3178d921d471e2cbaee77a0010a37f0e800\",\"size\":7404318,\"annotations\":{\"ostree.components\":\"samba-client-libs\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:b7b14f7672a7872589a73420e11b2401eaf04f93aa9200f800861629fc5bee9c\",\"size\":5933793,\"annotations\":{\"ostree.components\":\"systemd\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:3e034a46b70ead2b0fd8a6237ccccee79277f774702ba77de5e87e08f4b11767\",\"size\":6376749,\"annotations\":{\"ostree.components\":\"rpm-ostree\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:1d882695d0bb059113b73e482c783ff30c7424a5dbc93ebe108b2d13fb18a4bf\",\"size\":6198878,\"annotations\":{\"ostree.components\":\"bootc\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:42a2f0607bdceff8aa49da4d9e35014a8153d2834c0ada82ecdf26cac5c8493d\",\"size\":5000388,\"annotations\":{\"ostree.components\":\"glib2\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:b2d293a51f8ed7e787aa5881e7aa31662c717a7e1667294817d1cefc45b0f652\",\"size\":2745167,\"annotations\":{\"ostree.components\":\"systemd-udev\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:4d2e00ce2c308667cbb90a7e458737dc13759d15c71e9a396a6ca8cc7f4f94af\",\"size\":4498173,\"annotations\":{\"ostree.components\":\"coreos-installer\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:2a33a781ebf3d7e8cfbc249f671c9e6b50e8ab620911aa588ff32754eff35838\",\"size\":4170832,\"annotations\":{\"ostree.components\":\"runc\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:423d272a819dfbc982094df00f7be8b75b8ac62279715502b7ea9bcf503881d8\",\"size\":4212878,\"annotations\":{\"ostree.components\":\"toolbox\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:41573c7486d4f68eaf4a565ac0a94636e540e0391cfd7bc17276f63e78e74eec\",\"size\":4672868,\"annotations\":{\"ostree.components\":\"netavark\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:2398fec23e673bd68ea9c9b228c0a929c62e6668bda52986fb7196dfdaee8925\",\"size\":3574574,\"annotations\":{\"ostree.components\":\"coreutils-common\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:0da29f758dcf5f845a47ab5dc63f3923561af7cb529ce4ac786cf5971a062c1a\",\"size\":4505981,\"annotations\":{\"ostree.components\":\"nmstate\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:b399f7bc70195362f8e2ce2096a57bde305cc03df014716bfb19e88b0c2f3ebe\",\"size\":2782331,\"annotations\":{\"ostree.components\":\"NetworkManager-team,WALinuxAgent-udev,afterburn-dracut,alternatives,audit-rules,authselect,bsdtar,bzip2,bzip2-libs,clevis,clevis-dracut,clevis-luks,clevis-systemd,cloud-utils-growpart,composefs-libs,console-login-helper-messages,console-login-helper-messages-issuegen,console-login-helper-messages-motdgen,console-login-helper-messages-profile,container-selinux,containers-common,criu-libs,crun-wasm,cyrus-sasl-gssapi,dbus-common,device-mapper-event,device-mapper-event-libs,dracut-squash,efibootmgr,elfutils-default-yama-scope,fedora-gpg-keys,fedora-release-common,fedora-release-identity-coreos,file,filesystem,flatpak-session-helper,fstrm,fuse-sshfs,fuse3,gettext-envsubst,google-compute-engine-guest-configs-udev,hostname,inih,ipcalc,iptables-legacy,iptables-legacy-libs,iptables-services,iptables-utils,irqbalance,jansson,jose,json-c,keyutils-libs,kpartx,libacl,libaio,libassuan,libattr,libbasicobjects,libbsd,libcap-ng,libcbor,libcollection,libcom_err,libdaemon,libdhash,libeconf,libffi,libgudev,libipa_hbac,libkcapi,libkcapi-hasher,libkcapi-hmaccalc,libluksmeta,libmaxminddb,libmd,libmnl,libndp,libnet,libnfnetlink,libnsl2,libpath_utils,libpkgconf,libpsl,libref_array,libss,libsss_certmap,libsss_idmap,libsss_nss_idmap,libsss_sudo,libtalloc,libtasn1,libtdb,libteam,libtevent,libtool-ltdl,libutempter,libuuid,libverto,libwbclient,lmdb-libs,logrotate,luksmeta,mokutil,nano-default-editor,npth,nss-altfiles,numactl-libs,os-prober,passim-libs,pciutils-libs,pcre2-syntax,pkgconf,pkgconf-m4,pkgconf-pkg-config,protobuf-c,publicsuffix-list-dafsa,rpcbind,rpm-ostree-libs,rpm-plugin-selinux,samba-common,selinux-policy,selinux-policy-targeted,setup,shadow-utils-subid,slirp4netns,snappy,sssd-krb5,sssd-ldap,sssd-nfs-idmap,stalld,vim-data,which,xxhash-libs,yajl,zchunk-libs\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:a3bdedd9a2af04e7a90ccd94701b0bf33cd43c67fecc74301b57a6c06bf5b01d\",\"size\":6259428,\"annotations\":{\"ostree.components\":\"glibc,glibc-gconv-extra\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:b70c8c0e583280696cddfc2a971ffec48f107c2da60ceb6b58048971e6897857\",\"size\":1560116,\"annotations\":{\"ostree.components\":\"glibc-common,libldb,libsmbclient,samba-common-libs,systemd-pam,systemd-resolved\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:ca0fc061134500bda387cc52b1c3795add53c550848ddb48ee82e1e108da6538\",\"size\":1550452,\"annotations\":{\"ostree.components\":\"systemd-container,systemd-libs\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:e8d74030a3f265fa5d4f95599ffc64d0c3e03f66fc845c10efbb7d2db671ee8e\",\"size\":52412299,\"annotations\":{\"ostree.components\":\"NetworkManager-libnm,afterburn,btrfs-progs,coreutils,fwupd,grub2-tools,hwdata,intel-gpu-firmware,microcode_ctl,openssl-libs,qed-firmware\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:3ee5a16b03e5a52bf6251b40813de03f0083aff4b779dfcebc73f087bf72b02a\",\"size\":2790214,\"annotations\":{\"ostree.components\":\"authselect-libs,composefs,expat,iproute-tc,iputils,jq,libibverbs,libmodulemd,policycoreutils,polkit,polkit-libs,teamd,xz\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:d80a2624f5543aa59e56b7a1a66ead7a605b925ed5c823479ed1ed7d75d38836\",\"size\":1544708,\"annotations\":{\"ostree.components\":\"cryptsetup,e2fsprogs-libs,fmt,gettext-runtime,libnghttp2,librepo,libselinux,libselinux-utils,libtextstyle,libxcrypt,openldap,xz-libs,zlib-ng-compat\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:94a1381dff949ae7e4221711fbdd5d81a674975335a94b916e1880a34137afe2\",\"size\":1924569,\"annotations\":{\"ostree.components\":\"NetworkManager-cloud-setup,NetworkManager-tui,audit,audit-libs,c-ares,iptables-nft,libcap,libnvme,libsolv,libtirpc,libxmlb,pam-libs,pciutils\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:a13108d05edf3c0bec53130a67f0c2b873e8adbd3ad94f1763fa2e3c664d9830\",\"size\":3349687,\"annotations\":{\"ostree.components\":\"bind-utils,crun,curl,dracut,dracut-network,libblkid,libcurl-minimal,libfdisk,libmount,libnfsidmap,nfs-utils-coreos,tzdata,util-linux-core\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:e66da556a497b6aaa05eb8bc86d3b2c760c518db9d6ec0e191606205ac064cc2\",\"size\":2129771,\"annotations\":{\"ostree.components\":\"amd-ucode-firmware,crypto-policies,elfutils-libelf,elfutils-libs,kexec-tools,libsmartcols,linux-firmware-whence,openssh,sssd-ad,sssd-client,sssd-common-pac,sssd-ipa,sssd-krb5-common\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:682e793282ff665c5645e727c43a8e89159ba0479b72fb8513d5b8d3cbcc2010\",\"size\":2435991,\"annotations\":{\"ostree.components\":\"libdnf5-cli,libgcc,openssl,ostree,ostree-libs,passt,passt-selinux,rpm-libs\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:c9380ad83ff4542903ddbb11ae007e377c66ec69942d92045b33e29662dbbcd7\",\"size\":13969532,\"annotations\":{\"ostree.components\":\"NetworkManager,coreos-installer-bootinfra,cryptsetup-libs,device-mapper-persistent-data,e2fsprogs,gettext-libs,iproute,iptables-libs,libxml2,nvme-cli,pam,sqlite-libs,xfsprogs\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:b3aaa205f4c5833bdefec16533c3adf0d1b3bd6f729f1adfc30b08d12968ce68\",\"size\":13788767,\"annotations\":{\"ostree.components\":\"clevis-pin-tpm2,diffutils,findutils,kbd-misc,libunistring,nano,rpm-sequoia,sg3_utils,shared-mime-info,sudo,tar,tpm2-tss,zstd\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:9d3e586bb34de324909e806d2fc99a85bff30a19f5fa735681208261def04813\",\"size\":22299971,\"annotations\":{\"ostree.components\":\"aardvark-dns,bind-libs,cyrus-sasl-lib,dnf5,gnutls,grub2-common,grub2-pc-modules,grub2-tools-minimal,libdnf5,libstdc++,lld18-libs,openssh-clients,openssh-server,shadow-utils,sssd-common,util-linux,vim-minimal\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:c39284b11b6ace91c78e441366079beba97af8176756ead16be2d5a350ba7c0f\",\"size\":14644512,\"annotations\":{\"ostree.components\":\"bash,duktape,file-libs,gnupg2,jemalloc,kbd,kbd-legacy,libzstd,lzo,procps-ng,slang,squashfs-tools,tini-static,tpm2-tools,userspace-rcu,wireguard-tools,zincati\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:71edf1664c3fe458133c0385dcb1bdaf10fdc99d1a671b03173419867944b3e6\",\"size\":5383085,\"annotations\":{\"ostree.components\":\"adcli,cpio,cracklib,dbus-libs,fuse3-libs,gawk,gdbm,gdbm-libs,gmp,gpgme,grep,isns-utils-libs,keyutils,libini_config,libnetfilter_conntrack,libsepol,libyaml,lsof,lua-libs,makedumpfile,mpfr,net-tools,pigz,popt,sed,zram-generator\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:331c479ffa32bb37168326a0c2035f6f9a4dae7049643b2a19a0fc221f774048\",\"size\":4758892,\"annotations\":{\"ostree.components\":\"acl,attr,avahi-libs,catatonit,gdisk,gzip,iscsi-initiator-utils,json-glib,libevent,libgusb,libjcat,libpcap,libpwquality,libseccomp,libslirp,lz4-libs,nettle,newt,oniguruma,psmisc,readline,rsync,sdbus-cpp,sg3_utils-libs,socat,spdlog\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:69c27174fb85112f448d1b9ad9894249e671a4d5044eaf27e28666a8b19d33fc\",\"size\":5134611,\"annotations\":{\"ostree.components\":\"bash-completion,bubblewrap,chrony,conmon,dnsmasq,dosfstools,fuse-overlayfs,iscsi-initiator-utils-iscsiuio,kmod,kmod-libs,less,libedit,libfido2,libgpg-error,libidn2,libksba,libnl3,libnl3-cli,libsemanage,libusb1,ncurses,ncurses-base,ncurses-libs,nftables,ssh-key-dir,tpm2-tss-fapi\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:96eb1ef6910d4b16326488cbcd4a899d12364c323e12eb4f9c35adc690fd7426\",\"size\":3248217,\"annotations\":{\"ostree.components\":\"cifs-utils,dbus-broker,device-mapper,device-mapper-libs,device-mapper-multipath,device-mapper-multipath-libs,efivar-libs,ethtool,kdump-utils,libarchive,libbpf,libjose,libnftnl,libuv,mdadm,p11-kit-trust,pcre2\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:772387a49542b44a43e86e19caf5a8c2f2629160b9067ce35e09a3de2afc4715\",\"size\":8650636,\"annotations\":{\"ostree.components\":\"bootupd,ca-certificates,criu,krb5-libs,libgcrypt,lvm2,lvm2-libs,p11-kit,wasmedge-rt\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:bff92eb69522296adc98872683a33fb8934b5ced11d7a34cc285ca582a9348f7\",\"size\":111067947,\"annotations\":{\"ostree.components\":\"initramfs,rpmostree-unpackaged-content\"}},{\"mediaType\":\"application/vnd.oci.image.layer.v1.tar+gzip\",\"digest\":\"sha256:9dad063a624b62064bf25dbbc2e802e472d636056f661f2a0be73efd8a4da98b\",\"size\":2341,\"annotations\":{\"ostree.components\":\"\"}}],\"annotations\":{\"org.opencontainers.image.revision\":\"2c413b560b1ca85a445cbe1933c25b060cf6c1d6\",\"org.opencontainers.image.version\":\"41.20250105.2.0\",\"ostree.commit\":\"059032a82cb2d0b9455b43ce5dfdc2ae62cbda96ec2cbc99416617a0d0241b8a\",\"rpmostree.inputhash\":\"0f8ffe578d91082e8b539775df61a179a2c0143e7a325969bd65529e617cc627\",\"coreos-assembler.image-config-checksum\":\"7785d2c62ec40bdf6ca4f25477f4ca121f98482efb0846ee1980f74d4c741663\",\"ostree.bootable\":\"true\",\"org.opencontainers.image.source\":\"https://github.com/coreos/fedora-coreos-config\",\"ostree.final-diffid\":\"sha256:12787d84fa137cd5649a9005efe98ec9d05ea46245fdc50aecb7dd007f2035b1\",\"ostree.linux\":\"6.12.7-200.fc41.x86_64\",\"fedora-coreos.stream\":\"testing\",\"coreos-assembler.image-input-checksum\":\"6f7d94de4393d0e07a5a69397b9da913c449fb827cbd64a3388abb159fd12dc5\",\"containers.bootc\":\"1\"}}", + "ostree.manifest-digest" : "sha256:c4a15145a232d882ccf2ed32d22c06c01a7cf62317eb966a98340ae4bd56dfa6", + "ostree.container.image-config" : "{\"created\":\"2025-01-06T19:46:25Z\",\"architecture\":\"amd64\",\"os\":\"linux\",\"config\":{\"Cmd\":[\"/usr/bin/bash\"],\"Labels\":{\"ostree.linux\":\"6.12.7-200.fc41.x86_64\",\"org.opencontainers.image.version\":\"41.20250105.2.0\",\"coreos-assembler.image-config-checksum\":\"7785d2c62ec40bdf6ca4f25477f4ca121f98482efb0846ee1980f74d4c741663\",\"fedora-coreos.stream\":\"testing\",\"ostree.final-diffid\":\"sha256:12787d84fa137cd5649a9005efe98ec9d05ea46245fdc50aecb7dd007f2035b1\",\"coreos-assembler.image-input-checksum\":\"6f7d94de4393d0e07a5a69397b9da913c449fb827cbd64a3388abb159fd12dc5\",\"rpmostree.inputhash\":\"0f8ffe578d91082e8b539775df61a179a2c0143e7a325969bd65529e617cc627\",\"ostree.commit\":\"059032a82cb2d0b9455b43ce5dfdc2ae62cbda96ec2cbc99416617a0d0241b8a\",\"ostree.bootable\":\"true\",\"containers.bootc\":\"1\",\"org.opencontainers.image.revision\":\"2c413b560b1ca85a445cbe1933c25b060cf6c1d6\",\"org.opencontainers.image.source\":\"https://github.com/coreos/fedora-coreos-config\"}},\"rootfs\":{\"type\":\"layers\",\"diff_ids\":[\"sha256:03ea77a0f2304bba48fe869bcc4f06629fbe2d735ea1ad5b420ccdc0a98fd026\",\"sha256:00c4a94561293758d3efd2b5e7f99c71114c02841adee74ce750f7b7a83ee2f4\",\"sha256:89082379ef521d2221c394c676241826f7057da258a3d37a22634bdeb7bb91ff\",\"sha256:11b17813bc4e2409edff9098aba0b2b3e0326ea65cba2921e145de2e03262f47\",\"sha256:9a83e8fb8d324d2c0ffaed9f1a3efaf3330ccdd8cc42788660be6b70a58c377e\",\"sha256:7f2a1ecab41a3d1bf460012ef1cfcfcee2305dce4039089b99b41aba9506ed51\",\"sha256:cd9b5d28f5caebaebff0c5a13824dc13eecbc227fed57210d8114ddd101801da\",\"sha256:7f9cb74d8a70652febfac627c51c74dadd1fbcd0e6dfd82ed98368a6804121b9\",\"sha256:221a17e21dd9925fa3199df00a1bbf065f7f71e6f25a556a9a6ad5cca6fec50b\",\"sha256:4acad7694e32ac27526ca49fff3a1f15eb8d890fadfec17090fd777a3b23e3d7\",\"sha256:647223531f6c844a881ac77aa8f9010609c20247ea021ff115dd78fb8db8597e\",\"sha256:3b409c71d2e3bd86f816afcd2f04bb2b1873f8d60e4f6e281bb2f45f00705f95\",\"sha256:6a4b5a21b1244f1067f97bd5f3fe988e90542216aafd5a67c8e97266d3e4b4fa\",\"sha256:d756b2dd286af080fd4c46e47c02f31c23b1d6c9080452b3742a28fd6034cdfc\",\"sha256:43726de68aebe2ff965f4f698c213da14d1ee9af085cb61fccd37aca68547b54\",\"sha256:38b3799ba2c17460bd38dd4774f2c063070b0adb36d8be19a055364b051be27b\",\"sha256:6fbf0ef01289c9bf9d5ce420c69efef03c97085eae10364c679aeed50c46bd8e\",\"sha256:c14c12b76f004e700d7a87ca935f6bc979bd9aa7e4d0a012fb9be42a4cc104c1\",\"sha256:711261988a219915086a34fc75a8705858047705a7283d587f69469afc8acd03\",\"sha256:4e0c3b4f05f1169634e9bbd8b77dde22478ad7ffd3f983c5be266983910814eb\",\"sha256:1a6db3e7cf65215e3ca15572d5cc007b172f2befb07c50d9ec03481be86ba284\",\"sha256:4af78e5998add29f0e94555144560fb6d596edb9041dc665a9c0ce524169982e\",\"sha256:de63ee0b345b77f4addd9fda0eedb65dd0c8f2170aa437d39f42e36a7216e457\",\"sha256:9c56b6b0332280c881f79205515d1d28b18610be79f74994a384ab4e76e9c15f\",\"sha256:9bae1fdf5409c2f94208328b6cad802827591b0a262f4fb8282beb9f4197f865\",\"sha256:8b5fb0ddb1863145f6d459bf7e9d291e54e59e493bcbc8053491cada985892fd\",\"sha256:7fddfc1148c63f36d8bb57fd4d1241a2c505cfc9ce6290b14fc2fb68cbbff52e\",\"sha256:5744bd1355ae2855b0eb92013d259943d5f42c8c0113dbc8b75d0bbf0f98b71c\",\"sha256:785fa3b07125801eb2f6ee2b9ae8b9229357073b49d49010edf994832043a843\",\"sha256:49c72662eb696f9394f45173d344e7d0d4ae54b8e4b7a68bbc0350beaa2afec7\",\"sha256:a91d941a95462e194046aa4b9dffc4a685e5d24b918df7ff791bc02a4d316687\",\"sha256:6192f9387c8eab3a0f92010bfd1f5dbb606e4b24b6df430624a3b8023f089847\",\"sha256:bc0e302a71bda9bdd8f38e33b8425c0c236ab8c82d916a3ead16dfc7f84c88ef\",\"sha256:da812c8ff846365fa1eb0047c1cf9aeb7eaf6080e794148a1138fb3a235bf7d1\",\"sha256:048c2c275a6b9a67f1730fee3382902cf7fd42f472720671e0deda95a18ba616\",\"sha256:04903e262958313a28264a61798fd6cee8e3fa211b607dd0c9040a6b7fd06d28\",\"sha256:0cc82553bd0a446c12cbb724cce5080770156a5493fe918702b74454183f01b5\",\"sha256:9a78976c993dcd964d4a740476bf5372989bd8f10be9b64338a88083b117fd7f\",\"sha256:648a4efb2418fc5f2af0e79f3871e1df9de9418501a3b87859da081fbc0d620e\",\"sha256:deab50d8d3488fe152d4e93063426beb6815fd2f550f9684473f2e4b7ebfdf4f\",\"sha256:3ebbb21c2dcdc53472ed2d061bcbc70c9425abd62d09f37a0153e4d8857bdacc\",\"sha256:4469a84828ae49c373c898bc4a764fddd149ae47757ea94e4f3de863acfe78b5\",\"sha256:2a80c41c3f71db4fedee8cafaa0401cbde497c33512b99446328f58fb6afa5ac\",\"sha256:a8d3b696bc84582e4f97f5411452d3add83500586adc81bff38bc3facad0da1d\",\"sha256:ec8433d1403864caf20b813cb85fc9d06667b31cdf2e9dd67f927c208be3f602\",\"sha256:66619a1c05b0f8766600a6d31ca91f770a5c062c8a6e326d54b0aea4f9e12f56\",\"sha256:64a2000a2e2cafef15c5480172148144343fd977f7d1de39108c839f41e083cb\",\"sha256:dc3e00b8dbe8fa1139fed7ef9c94b190be95ac9f8bd4e61e4e250f2f50cfbef5\",\"sha256:a3adebd0b592957c1a6105c8880b66fcea5e742509eefe72e2f8610681d0e09f\",\"sha256:9abe75d0a85b75adab306d65e0cc66ae94bc8bbf107b56a737467f3405bdfe86\",\"sha256:12787d84fa137cd5649a9005efe98ec9d05ea46245fdc50aecb7dd007f2035b1\"]},\"history\":[{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"ostree export of commit 059032a82cb2d0b9455b43ce5dfdc2ae62cbda96ec2cbc99416617a0d0241b8a\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"containerd-1.7.24-3.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"llvm18-libs-18.1.8-4.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"moby-engine-27.3.1-2.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"kernel-modules-6.12.7-200.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"podman-5:5.3.1-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"kernel-modules-core-6.12.7-200.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"linux-firmware-20241210-1.fc41.noarch\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"nvidia-gpu-firmware-20241210-1.fc41.noarch\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"libicu-74.2-2.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"rpm-4.20.0-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"kernel-core-6.12.7-200.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"skopeo-1:1.17.0-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"docker-cli-27.3.1-2.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"ignition-2.20.0-2.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"amd-gpu-firmware-20241210-1.fc41.noarch\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"git-core-2.47.1-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"samba-client-libs-2:4.21.2-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"systemd-256.10-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"rpm-ostree-2024.9-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"bootc-1.1.2-2.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"glib2-2.82.2-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"systemd-udev-256.10-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"coreos-installer-0.23.0-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"runc-2:1.2.3-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"toolbox-0.1.1-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"netavark-2:1.13.1-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"coreutils-common-9.5-11.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"nmstate-2.2.39-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"136 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"glibc-gconv-extra-2.40-17.fc41.x86_64 and glibc-2.40-17.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"6 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"systemd-libs-256.10-1.fc41.x86_64 and systemd-container-256.10-1.fc41.x86_64\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"11 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"13 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"13 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"13 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"13 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"13 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"8 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"13 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"13 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"17 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"17 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"26 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"26 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"26 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"17 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"9 components\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"initramfs (kernel 6.12.7-200.fc41.x86_64) and rpmostree-unpackaged-content\"},{\"created\":\"2025-01-06T19:47:49Z\",\"created_by\":\"Reserved for new packages\"}]}" + }, + "base-removals" : [], + "custom-origin" : [ + "quay.io/fedora/fedora-coreos@sha256:c4a15145a232d882ccf2ed32d22c06c01a7cf62317eb966a98340ae4bd56dfa6", + "Fedora CoreOS Testing stream through OCI images" + ], + "pinned" : false, + "osname" : "fedora-coreos", + "base-remote-replacements" : { }, + "regenerate-initramfs" : false, + "checksum" : "93d0341726aec2fc96b2a956ee1486105f959305507b80e38c689e2abeb7a7e6", + "container-image-reference-digest" : "sha256:c4a15145a232d882ccf2ed32d22c06c01a7cf62317eb966a98340ae4bd56dfa6", + "requested-base-local-replacements" : [], + "id" : "fedora-coreos-93d0341726aec2fc96b2a956ee1486105f959305507b80e38c689e2abeb7a7e6.0", + "version" : "41.20250105.2.0", + "requested-local-fileoverride-packages" : [], + "requested-base-removals" : [], + "requested-packages" : [], + "serial" : 0, + "timestamp" : 1736192785, + "staged" : false, + "booted" : true, + "container-image-reference" : "ostree-remote-image:fedora:registry:quay.io/fedora/fedora-coreos@sha256:c4a15145a232d882ccf2ed32d22c06c01a7cf62317eb966a98340ae4bd56dfa6", + "packages" : [], + "base-local-replacements" : [] + } + ], + "transaction" : null, + "cached-update" : null, + "update-driver" : null +}