Compare commits
	
		
			11 Commits
		
	
	
		
			9c5dd8b850
			...
			2568c9be39
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2568c9be39 | |||
| 9f740e94e5 | |||
| fa6bc6424f | |||
| d44d256567 | |||
| 4746a31a09 | |||
| 9a5387b931 | |||
| bf7d8707f4 | |||
| 07de221c62 | |||
| f5cb2e0925 | |||
| 7fb7904418 | |||
| f0407edacc | 
							
								
								
									
										297
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										297
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -605,6 +605,26 @@ version = "1.6.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bincode" | ||||||
|  | version = "2.0.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" | ||||||
|  | dependencies = [ | ||||||
|  |  "bincode_derive", | ||||||
|  |  "serde", | ||||||
|  |  "unty", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bincode_derive" | ||||||
|  | version = "2.0.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" | ||||||
|  | dependencies = [ | ||||||
|  |  "virtue", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "bindgen" | name = "bindgen" | ||||||
| version = "0.69.5" | version = "0.69.5" | ||||||
| @ -712,6 +732,38 @@ dependencies = [ | |||||||
|  "serde", |  "serde", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "camino" | ||||||
|  | version = "1.1.9" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "cargo-platform" | ||||||
|  | version = "0.1.9" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "cargo_metadata" | ||||||
|  | version = "0.19.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" | ||||||
|  | dependencies = [ | ||||||
|  |  "camino", | ||||||
|  |  "cargo-platform", | ||||||
|  |  "semver 1.0.24", | ||||||
|  |  "serde", | ||||||
|  |  "serde_json", | ||||||
|  |  "thiserror 2.0.11", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "cc" | name = "cc" | ||||||
| version = "1.2.11" | version = "1.2.11" | ||||||
| @ -833,6 +885,26 @@ version = "0.9.6" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "const_format" | ||||||
|  | version = "0.2.34" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" | ||||||
|  | dependencies = [ | ||||||
|  |  "const_format_proc_macros", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "const_format_proc_macros" | ||||||
|  | version = "0.2.34" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "unicode-xid", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "core-foundation" | name = "core-foundation" | ||||||
| version = "0.9.4" | version = "0.9.4" | ||||||
| @ -1047,7 +1119,6 @@ dependencies = [ | |||||||
|  "detee-shared", |  "detee-shared", | ||||||
|  "ed25519-dalek", |  "ed25519-dalek", | ||||||
|  "env_logger", |  "env_logger", | ||||||
|  "hex", |  | ||||||
|  "hyper", |  "hyper", | ||||||
|  "hyper-rustls", |  "hyper-rustls", | ||||||
|  "lazy_static", |  "lazy_static", | ||||||
| @ -1062,6 +1133,7 @@ dependencies = [ | |||||||
|  "serde", |  "serde", | ||||||
|  "serde_json", |  "serde_json", | ||||||
|  "serde_yaml", |  "serde_yaml", | ||||||
|  |  "shadow-rs", | ||||||
|  "tabled", |  "tabled", | ||||||
|  "thiserror 2.0.11", |  "thiserror 2.0.11", | ||||||
|  "tokio", |  "tokio", | ||||||
| @ -1110,15 +1182,17 @@ dependencies = [ | |||||||
| [[package]] | [[package]] | ||||||
| name = "detee-shared" | name = "detee-shared" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
| source = "git+ssh://git@gitea.detee.cloud/testnet/proto.git?branch=main#3024c00b8e1c93e70902793385b92bc0a8d1f26a" | source = "git+ssh://git@gitea.detee.cloud/testnet/proto.git?branch=feat_dir_support_dtpm_config#20ba749427ac4453a06bc8a8ef3fb8f0ec6bb592" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "base64", |  "bincode", | ||||||
|  "prost", |  "prost", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_yaml", |  "serde_yaml", | ||||||
|  |  "tar", | ||||||
|  "thiserror 2.0.11", |  "thiserror 2.0.11", | ||||||
|  "tonic", |  "tonic", | ||||||
|  "tonic-build", |  "tonic-build", | ||||||
|  |  "zstd", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -1316,6 +1390,18 @@ version = "0.2.9" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" | checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "filetime" | ||||||
|  | version = "0.2.25" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  |  "libc", | ||||||
|  |  "libredox", | ||||||
|  |  "windows-sys 0.59.0", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "fixed-hash" | name = "fixed-hash" | ||||||
| version = "0.8.0" | version = "0.8.0" | ||||||
| @ -1521,6 +1607,19 @@ version = "0.31.1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "git2" | ||||||
|  | version = "0.20.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5220b8ba44c68a9a7f7a7659e864dd73692e417ef0211bea133c7b74e031eeb9" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags", | ||||||
|  |  "libc", | ||||||
|  |  "libgit2-sys", | ||||||
|  |  "log", | ||||||
|  |  "url", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "glob" | name = "glob" | ||||||
| version = "0.3.2" | version = "0.3.2" | ||||||
| @ -1961,6 +2060,12 @@ version = "2.11.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "is_debug" | ||||||
|  | version = "1.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "is_terminal_polyfill" | name = "is_terminal_polyfill" | ||||||
| version = "1.70.1" | version = "1.70.1" | ||||||
| @ -2069,6 +2174,18 @@ version = "0.2.169" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "libgit2-sys" | ||||||
|  | version = "0.18.1+1.9.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e1dcb20f84ffcdd825c7a311ae347cce604a6f084a767dec4a4929829645290e" | ||||||
|  | dependencies = [ | ||||||
|  |  "cc", | ||||||
|  |  "libc", | ||||||
|  |  "libz-sys", | ||||||
|  |  "pkg-config", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "libloading" | name = "libloading" | ||||||
| version = "0.8.6" | version = "0.8.6" | ||||||
| @ -2085,12 +2202,41 @@ version = "0.2.11" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" | checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "libredox" | ||||||
|  | version = "0.1.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags", | ||||||
|  |  "libc", | ||||||
|  |  "redox_syscall", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "libz-sys" | ||||||
|  | version = "1.1.22" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" | ||||||
|  | dependencies = [ | ||||||
|  |  "cc", | ||||||
|  |  "libc", | ||||||
|  |  "pkg-config", | ||||||
|  |  "vcpkg", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "linux-raw-sys" | name = "linux-raw-sys" | ||||||
| version = "0.4.14" | version = "0.4.14" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "linux-raw-sys" | ||||||
|  | version = "0.9.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "litemap" | name = "litemap" | ||||||
| version = "0.7.4" | version = "0.7.4" | ||||||
| @ -2215,6 +2361,15 @@ dependencies = [ | |||||||
|  "libm", |  "libm", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num_threads" | ||||||
|  | version = "0.1.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "object" | name = "object" | ||||||
| version = "0.36.7" | version = "0.36.7" | ||||||
| @ -2682,6 +2837,15 @@ dependencies = [ | |||||||
|  "yasna", |  "yasna", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "redox_syscall" | ||||||
|  | version = "0.5.11" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "regex" | name = "regex" | ||||||
| version = "1.11.1" | version = "1.11.1" | ||||||
| @ -2883,10 +3047,23 @@ dependencies = [ | |||||||
|  "bitflags", |  "bitflags", | ||||||
|  "errno", |  "errno", | ||||||
|  "libc", |  "libc", | ||||||
|  "linux-raw-sys", |  "linux-raw-sys 0.4.14", | ||||||
|  "windows-sys 0.59.0", |  "windows-sys 0.59.0", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rustix" | ||||||
|  | version = "1.0.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags", | ||||||
|  |  "errno", | ||||||
|  |  "libc", | ||||||
|  |  "linux-raw-sys 0.9.4", | ||||||
|  |  "windows-sys 0.52.0", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "rustls" | name = "rustls" | ||||||
| version = "0.23.23" | version = "0.23.23" | ||||||
| @ -3039,6 +3216,9 @@ name = "semver" | |||||||
| version = "1.0.24" | version = "1.0.24" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" | checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "semver-parser" | name = "semver-parser" | ||||||
| @ -3149,6 +3329,21 @@ dependencies = [ | |||||||
|  "cfg-if", |  "cfg-if", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "shadow-rs" | ||||||
|  | version = "1.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "6d5625ed609cf66d7e505e7d487aca815626dc4ebb6c0dd07637ca61a44651a6" | ||||||
|  | dependencies = [ | ||||||
|  |  "cargo_metadata", | ||||||
|  |  "const_format", | ||||||
|  |  "git2", | ||||||
|  |  "is_debug", | ||||||
|  |  "serde_json", | ||||||
|  |  "time", | ||||||
|  |  "tzdb", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "shlex" | name = "shlex" | ||||||
| version = "1.3.0" | version = "1.3.0" | ||||||
| @ -3346,6 +3541,17 @@ version = "1.0.1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tar" | ||||||
|  | version = "0.4.44" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" | ||||||
|  | dependencies = [ | ||||||
|  |  "filetime", | ||||||
|  |  "libc", | ||||||
|  |  "xattr", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "tempfile" | name = "tempfile" | ||||||
| version = "3.17.1" | version = "3.17.1" | ||||||
| @ -3356,7 +3562,7 @@ dependencies = [ | |||||||
|  "fastrand", |  "fastrand", | ||||||
|  "getrandom 0.3.1", |  "getrandom 0.3.1", | ||||||
|  "once_cell", |  "once_cell", | ||||||
|  "rustix", |  "rustix 0.38.42", | ||||||
|  "windows-sys 0.59.0", |  "windows-sys 0.59.0", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| @ -3408,7 +3614,9 @@ checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "deranged", |  "deranged", | ||||||
|  "itoa", |  "itoa", | ||||||
|  |  "libc", | ||||||
|  "num-conv", |  "num-conv", | ||||||
|  |  "num_threads", | ||||||
|  "powerfmt", |  "powerfmt", | ||||||
|  "serde", |  "serde", | ||||||
|  "time-core", |  "time-core", | ||||||
| @ -3592,6 +3800,7 @@ dependencies = [ | |||||||
|  "tower-layer", |  "tower-layer", | ||||||
|  "tower-service", |  "tower-service", | ||||||
|  "tracing", |  "tracing", | ||||||
|  |  "zstd", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -3707,6 +3916,32 @@ version = "1.17.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tz-rs" | ||||||
|  | version = "0.7.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e1450bf2b99397e72070e7935c89facaa80092ac812502200375f1f7d33c71a1" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tzdb" | ||||||
|  | version = "0.7.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0be2ea5956f295449f47c0b825c5e109022ff1a6a53bb4f77682a87c2341fbf5" | ||||||
|  | dependencies = [ | ||||||
|  |  "iana-time-zone", | ||||||
|  |  "tz-rs", | ||||||
|  |  "tzdb_data", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tzdb_data" | ||||||
|  | version = "0.2.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0604b35c1f390a774fdb138cac75a99981078895d24bcab175987440bbff803b" | ||||||
|  | dependencies = [ | ||||||
|  |  "tz-rs", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "ucd-trie" | name = "ucd-trie" | ||||||
| version = "0.1.7" | version = "0.1.7" | ||||||
| @ -3767,6 +4002,12 @@ version = "0.9.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "unty" | ||||||
|  | version = "0.0.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "ureq" | name = "ureq" | ||||||
| version = "3.0.3" | version = "3.0.3" | ||||||
| @ -3851,6 +4092,12 @@ version = "0.9.5" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "virtue" | ||||||
|  | version = "0.0.18" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "wait-timeout" | name = "wait-timeout" | ||||||
| version = "0.2.1" | version = "0.2.1" | ||||||
| @ -3983,7 +4230,7 @@ dependencies = [ | |||||||
|  "either", |  "either", | ||||||
|  "home", |  "home", | ||||||
|  "once_cell", |  "once_cell", | ||||||
|  "rustix", |  "rustix 0.38.42", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -4180,6 +4427,16 @@ dependencies = [ | |||||||
|  "time", |  "time", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "xattr" | ||||||
|  | version = "1.5.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  |  "rustix 1.0.5", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "yasna" | name = "yasna" | ||||||
| version = "0.5.2" | version = "0.5.2" | ||||||
| @ -4296,3 +4553,31 @@ dependencies = [ | |||||||
|  "quote", |  "quote", | ||||||
|  "syn 2.0.91", |  "syn 2.0.91", | ||||||
| ] | ] | ||||||
|  | 
 | ||||||
|  | [[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.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" | ||||||
|  | dependencies = [ | ||||||
|  |  "zstd-sys", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "zstd-sys" | ||||||
|  | version = "2.0.15+zstd.1.5.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" | ||||||
|  | dependencies = [ | ||||||
|  |  "cc", | ||||||
|  |  "pkg-config", | ||||||
|  | ] | ||||||
|  | |||||||
| @ -19,13 +19,12 @@ serde_yaml = "0.9.34" | |||||||
| tabled = "0.17.0" | tabled = "0.17.0" | ||||||
| tokio-stream = "0.1.17" | tokio-stream = "0.1.17" | ||||||
| tokio = { version = "1.42.0", features = ["macros", "rt-multi-thread"] } | tokio = { version = "1.42.0", features = ["macros", "rt-multi-thread"] } | ||||||
| tonic = { version = "0.12" } | tonic = { version = "0.12", features = ["zstd"] } | ||||||
| thiserror = "2.0.9" | thiserror = "2.0.9" | ||||||
| bs58 = "0.5.1" | bs58 = "0.5.1" | ||||||
| chrono = "0.4.39" | chrono = "0.4.39" | ||||||
| reqwest = {version = "0.12.12", features = ["blocking"] } | reqwest = {version = "0.12.12", features = ["blocking"] } | ||||||
| serde_json = "1.0.139" | serde_json = "1.0.139" | ||||||
| hex = "0.4.3" |  | ||||||
| hyper = "1.6.0" | hyper = "1.6.0" | ||||||
| rustls = "0.23.23" | rustls = "0.23.23" | ||||||
| tower = "0.5.2" | tower = "0.5.2" | ||||||
| @ -33,9 +32,11 @@ hyper-rustls = { version = "0.27.5", features = ["http2"] } | |||||||
| openssl = { version = "0.10.71", features = ["vendored"] } | openssl = { version = "0.10.71", features = ["vendored"] } | ||||||
| tokio-retry = "0.3.0" | tokio-retry = "0.3.0" | ||||||
| detee-sgx = { git = "ssh://git@gitea.detee.cloud/testnet/detee-sgx.git", branch = "hratls", features=["hratls", "qvl"] } | detee-sgx = { git = "ssh://git@gitea.detee.cloud/testnet/detee-sgx.git", branch = "hratls", features=["hratls", "qvl"] } | ||||||
|  | shadow-rs = { version = "1.1.1", features = ["metadata"] } | ||||||
| 
 | 
 | ||||||
| detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto.git", branch = "main" } | detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto.git", branch = "feat_dir_support_dtpm_config" } | ||||||
| # detee-shared = { path = "../detee-shared" } | # detee-shared = { path = "../detee-shared" } | ||||||
| 
 | 
 | ||||||
| [build-dependencies] | [build-dependencies] | ||||||
|  | shadow-rs = "1.1.1" | ||||||
| tonic-build = "0.12" | tonic-build = "0.12" | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								build.rs
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										5
									
								
								build.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | use shadow_rs::ShadowBuilder; | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  |     ShadowBuilder::builder().deny_const(Default::default()).build().unwrap(); | ||||||
|  | } | ||||||
| @ -1,15 +1,21 @@ | |||||||
| filesystems: |  | ||||||
|   # - path: /bin/actix-hello-world |  | ||||||
|   #   content: !path "./samples/new_app/binaries/actix-test-app.bin" |  | ||||||
| environments: | environments: | ||||||
|   - name: APP_NAME |   - name: APP_NAME | ||||||
|     value: actix-test |     value: actix-test | ||||||
|   - name: PORT |   - name: PORT | ||||||
|     value: 8080 |     value: 8080 | ||||||
|  | #  - name: STATIC_DIR | ||||||
|  | #    value: "/static/html_doc" | ||||||
| child_processes: | child_processes: | ||||||
|   - path: /bin/actix-app-info |   - path: /bin/actix-static-server | ||||||
|     arguments: ["pg_1_arg_1", "pg_1_arg_2"] |     arguments: [] | ||||||
|     restart: |     restart: | ||||||
|       max_retries: 2 |       max_retries: 2 | ||||||
|       delay_seconds: 2 |       delay_seconds: 2 | ||||||
|       policy: !OnNonZeroExit true |       policy: !OnNonZeroExit true | ||||||
|  | filesystems: | ||||||
|  |   - path: /host | ||||||
|  |     content: !path "./src" | ||||||
|  |   - path: /host | ||||||
|  |     content: !path "./samples" | ||||||
|  | #  - path: /static | ||||||
|  | #    content: !path "./html_doc" | ||||||
| @ -56,11 +56,14 @@ snpguest --help > /dev/null \ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| try_countdown=20; | try_countdown=20; | ||||||
|  | echo -n Trying $server | ||||||
| while [[ $try_countdown -gt 0 ]]; do | while [[ $try_countdown -gt 0 ]]; do | ||||||
|  |   echo -n . | ||||||
|   curl --max-time 1 -k "https://$server" > /dev/null 2>&1 && break |   curl --max-time 1 -k "https://$server" > /dev/null 2>&1 && break | ||||||
|   sleep 1 |   sleep 1 | ||||||
|   ((try_countdown--)) |   ((try_countdown--)) | ||||||
| done | done | ||||||
|  | echo | ||||||
| 
 | 
 | ||||||
| openssl s_client -connect "$server" </dev/null \ | openssl s_client -connect "$server" </dev/null \ | ||||||
|   | sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' > "$server_crt" |   | sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' > "$server_crt" | ||||||
| @ -100,9 +103,9 @@ echo_blue "Verifying AMD signature in attestation report..." | |||||||
| chip_id_hash=$( snpguest display report "$server_report" \ | chip_id_hash=$( snpguest display report "$server_report" \ | ||||||
|   | grep "Chip ID:" -A 4 | tail -3 | tr '\n' ' ' | sed 's/\s//g' \ |   | grep "Chip ID:" -A 4 | tail -3 | tr '\n' ' ' | sed 's/\s//g' \ | ||||||
|   | md5sum | awk '{ print $1 }') |   | md5sum | awk '{ print $1 }') | ||||||
| microcode=$( snpguest display report "$server_report" | | tcb_hash=$(grep -e "Committed TCB" -e "Reported TCB" -A 10 "$server_report" | | ||||||
|     grep "Launch TCB:" -A 6 | grep "Microcode:" | awk '{ print $2 }' ) |   md5sum | awk '{ print $1 }') | ||||||
| vcek_path="${cert_dir}/${chip_id_hash}-${microcode}.vcek.pem" | vcek_path="${cert_dir}/${chip_id_hash}-${tcb_hash}.vcek.pem" | ||||||
| amd_certs_dir="${cert_dir}/amd_certs_${server}" | amd_certs_dir="${cert_dir}/amd_certs_${server}" | ||||||
| mkdir -p "$amd_certs_dir" | mkdir -p "$amd_certs_dir" | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -12,6 +12,8 @@ More information can be found at https://detee.ltd | |||||||
| 
 | 
 | ||||||
| Feel free to browser applications bundles or VM disks available for immediate deployment."#;
 | Feel free to browser applications bundles or VM disks available for immediate deployment."#;
 | ||||||
| 
 | 
 | ||||||
|  | shadow_rs::shadow!(build); | ||||||
|  | 
 | ||||||
| fn main() { | fn main() { | ||||||
|     // TODO: figure if there is a more elegant way to solve this than calling default_provider in main
 |     // TODO: figure if there is a more elegant way to solve this than calling default_provider in main
 | ||||||
|     let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); |     let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); | ||||||
| @ -50,7 +52,7 @@ fn main() { | |||||||
| 
 | 
 | ||||||
| fn clap_cmd() -> Command { | fn clap_cmd() -> Command { | ||||||
|     Command::new("detee-cli") |     Command::new("detee-cli") | ||||||
|         .version("0.0.1") |         .version(build::CLAP_LONG_VERSION) | ||||||
|         .author("https://detee.ltd") |         .author("https://detee.ltd") | ||||||
|         .about(ABOUT) |         .about(ABOUT) | ||||||
|         .arg( |         .arg( | ||||||
| @ -118,8 +120,8 @@ fn clap_cmd() -> Command { | |||||||
|                     .arg( |                     .arg( | ||||||
|                         Arg::new("memory") |                         Arg::new("memory") | ||||||
|                         .long("memory") |                         .long("memory") | ||||||
|                         .default_value("500") |                         .default_value("1000") | ||||||
|                         .value_parser(clap::value_parser!(u32).range(200..4050)) |                         .value_parser(clap::value_parser!(u32).range(1000..8000)) | ||||||
|                         .help("memory in MB") |                         .help("memory in MB") | ||||||
|                     ) |                     ) | ||||||
|                     .arg( |                     .arg( | ||||||
| @ -142,7 +144,7 @@ fn clap_cmd() -> Command { | |||||||
|                         .long("package") |                         .long("package") | ||||||
|                         .help("Enclave package name") |                         .help("Enclave package name") | ||||||
|                         .default_value("base-package") |                         .default_value("base-package") | ||||||
|                         .value_parser(["base-package", "actix-app-info", "go-app-info"]) |                         .value_parser(["base-package", "actix-static-server", "actix-app-info", "go-app-info"]) | ||||||
|                     ) |                     ) | ||||||
|                     .arg( |                     .arg( | ||||||
|                         Arg::new("name") |                         Arg::new("name") | ||||||
| @ -282,7 +284,6 @@ fn clap_cmd() -> Command { | |||||||
|                     .required(true) |                     .required(true) | ||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
|             /* |  | ||||||
|             .subcommand(Command::new("report").about("report a node for poor performance") |             .subcommand(Command::new("report").about("report a node for poor performance") | ||||||
|                 .arg( |                 .arg( | ||||||
|                     Arg::new("pubkey") |                     Arg::new("pubkey") | ||||||
| @ -302,7 +303,6 @@ fn clap_cmd() -> Command { | |||||||
|                     .help("detail the performance issue you experienced") |                     .help("detail the performance issue you experienced") | ||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
|             */ |  | ||||||
|         ) |         ) | ||||||
|         .subcommand(Command::new("vm") |         .subcommand(Command::new("vm") | ||||||
|             .about("virtual machines that run on AMD SEV-SNP nodes") |             .about("virtual machines that run on AMD SEV-SNP nodes") | ||||||
|  | |||||||
| @ -13,6 +13,8 @@ It allows you to: | |||||||
| 
 | 
 | ||||||
| The admin pubkeys are hardcoded in the brain."#;
 | The admin pubkeys are hardcoded in the brain."#;
 | ||||||
| 
 | 
 | ||||||
|  | shadow_rs::shadow!(build); | ||||||
|  | 
 | ||||||
| fn main() { | fn main() { | ||||||
|     let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); |     let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); | ||||||
|     let log_level = match std::env::var("LOG_LEVEL") { |     let log_level = match std::env::var("LOG_LEVEL") { | ||||||
| @ -26,7 +28,7 @@ fn main() { | |||||||
|     env_logger::builder().filter_level(log_level).format_timestamp(None).init(); |     env_logger::builder().filter_level(log_level).format_timestamp(None).init(); | ||||||
| 
 | 
 | ||||||
|     let cmd = Command::new("super-detee-cli") |     let cmd = Command::new("super-detee-cli") | ||||||
|         .version("0.0.1") |         .version(build::CLAP_LONG_VERSION) | ||||||
|         .author("https://detee.ltd") |         .author("https://detee.ltd") | ||||||
|         .about(ABOUT) |         .about(ABOUT) | ||||||
|         .subcommand( |         .subcommand( | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ use crate::config::Config; | |||||||
| use crate::name_generator::random_app_name; | use crate::name_generator::random_app_name; | ||||||
| use crate::sgx::config::{validate_yaml, DeteeCliExt}; | use crate::sgx::config::{validate_yaml, DeteeCliExt}; | ||||||
| use crate::sgx::grpc_brain::{delete_app, list_contracts}; | use crate::sgx::grpc_brain::{delete_app, list_contracts}; | ||||||
| use crate::sgx::grpc_dtpm::{attest_and_send_config, get_config_from_enclave}; | use crate::sgx::grpc_dtpm::{get_config, update_config}; | ||||||
| use crate::sgx::packaging::package_enclave; | use crate::sgx::packaging::package_enclave; | ||||||
| use crate::sgx::utils::{ | use crate::sgx::utils::{ | ||||||
|     deploy_new_app_and_update_config, fetch_config, override_envs_and_args_launch_config, |     deploy_new_app_and_update_config, fetch_config, override_envs_and_args_launch_config, | ||||||
| @ -28,7 +28,7 @@ pub fn handle_app(app_matche: &ArgMatches) { | |||||||
|         Some(("delete", subcom_args)) => cli_print(handle_delete(subcom_args)), |         Some(("delete", subcom_args)) => cli_print(handle_delete(subcom_args)), | ||||||
|         Some(("list", subcom_args)) => cli_print(handle_list(subcom_args)), |         Some(("list", subcom_args)) => cli_print(handle_list(subcom_args)), | ||||||
|         Some(("config", subcom_args)) => handle_config(subcom_args), |         Some(("config", subcom_args)) => handle_config(subcom_args), | ||||||
|         _ => println!("No valid subcommand provided. Use --help for more information."), |         _ => eprintln!("No valid subcommand provided. Use --help for more information."), | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -39,14 +39,16 @@ pub fn handle_app_nodes(matches: &ArgMatches) { | |||||||
|             let ip: String = subcom_args.get_one::<String>("ip").unwrap().clone(); |             let ip: String = subcom_args.get_one::<String>("ip").unwrap().clone(); | ||||||
|             cli_print(inspect_node(ip).map_err(Into::into)); |             cli_print(inspect_node(ip).map_err(Into::into)); | ||||||
|         } |         } | ||||||
|         Some(("report", _)) => { |         Some(("report", subcom_args)) => { | ||||||
|             // let node_pubkey: String = path_subcommand.get_one::<String>("pubkey").unwrap().clone();
 |             let node_pubkey: String = subcom_args.get_one::<String>("pubkey").unwrap().clone(); | ||||||
|             // let contract_uuid: String = path_subcommand.get_one::<String>("contract").unwrap().clone();
 |             let contract_uuid: String = subcom_args.get_one::<String>("contract").unwrap().clone(); | ||||||
|             // let reason: String = path_subcommand.get_one::<String>("reason").unwrap().clone();
 |             let reason: String = subcom_args.get_one::<String>("reason").unwrap().clone(); | ||||||
|             todo!() |             cli_print( | ||||||
|  |                 crate::general::report_node(node_pubkey, contract_uuid, reason).map_err(Into::into), | ||||||
|  |             ) | ||||||
|         } |         } | ||||||
|         _ => { |         _ => { | ||||||
|             println!("Available commands are search, inspec and report. Use --help for more information.") |             eprintln!("Available commands are search, inspec and report. Use --help for more information.") | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -202,7 +204,7 @@ fn handle_config(matches: &ArgMatches) { | |||||||
|         Some(("update", subcom_args)) => cli_print(handle_config_sub_update(subcom_args)), |         Some(("update", subcom_args)) => cli_print(handle_config_sub_update(subcom_args)), | ||||||
|         Some(("get", subcom_args)) => cli_print(handle_config_sub_get(subcom_args)), |         Some(("get", subcom_args)) => cli_print(handle_config_sub_get(subcom_args)), | ||||||
|         _ => { |         _ => { | ||||||
|             println!("No valid config subcommand provided."); |             eprintln!("No valid config subcommand provided."); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -225,7 +227,7 @@ fn handle_config_sub_update( | |||||||
|         (update_matche.get_one::<String>("config"), update_matche.get_one::<String>("uuid")) |         (update_matche.get_one::<String>("config"), update_matche.get_one::<String>("uuid")) | ||||||
|     { |     { | ||||||
|         let loaded_config = validate_yaml(file_path).unwrap(); |         let loaded_config = validate_yaml(file_path).unwrap(); | ||||||
|         match block_on(attest_and_send_config(loaded_config, uuid)) { |         match block_on(update_config(uuid, loaded_config)) { | ||||||
|             Ok(_) => Ok(SimpleOutput::from("App launch config updated successfully")), |             Ok(_) => Ok(SimpleOutput::from("App launch config updated successfully")), | ||||||
|             Err(e) => Err(Box::new(std::io::Error::other(format!( |             Err(e) => Err(Box::new(std::io::Error::other(format!( | ||||||
|                 "Could not attest and update app launch config due to error: {e}" |                 "Could not attest and update app launch config due to error: {e}" | ||||||
| @ -242,7 +244,7 @@ fn handle_config_sub_get( | |||||||
|     if let (Some(file_path_to_save), Some(uuid)) = |     if let (Some(file_path_to_save), Some(uuid)) = | ||||||
|         (get_matche.get_one::<String>("path"), get_matche.get_one::<String>("uuid")) |         (get_matche.get_one::<String>("path"), get_matche.get_one::<String>("uuid")) | ||||||
|     { |     { | ||||||
|         match block_on(get_config_from_enclave(uuid)) { |         match block_on(get_config(uuid)) { | ||||||
|             Ok(config) => { |             Ok(config) => { | ||||||
|                 let config_yaml = serde_yaml::to_string(&config).unwrap(); |                 let config_yaml = serde_yaml::to_string(&config).unwrap(); | ||||||
|                 std::fs::write(file_path_to_save, config_yaml).unwrap(); |                 std::fs::write(file_path_to_save, config_yaml).unwrap(); | ||||||
|  | |||||||
| @ -109,7 +109,7 @@ pub async fn list_contracts(req: ListAppContractsReq) -> Result<Vec<AppContract> | |||||||
|                 app_contracts.push(contract); |                 app_contracts.push(contract); | ||||||
|             } |             } | ||||||
|             Err(e) => { |             Err(e) => { | ||||||
|                 println!("Brain disconnected from register_node: {e}"); |                 eprintln!("Brain disconnected from register_node: {e}"); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,13 +1,22 @@ | |||||||
| use detee_sgx::{prelude::*, HRaTlsConfigBuilder}; | use detee_sgx::{prelude::*, HRaTlsConfigBuilder}; | ||||||
| use detee_shared::common_proto::Empty; | use detee_shared::{ | ||||||
|  |     common_proto::Empty, | ||||||
|  |     sgx::{pb::dtpm_proto::DtpmGetConfigRes, types::dtpm::FileEntry}, | ||||||
|  | }; | ||||||
| use hyper_rustls::HttpsConnectorBuilder; | use hyper_rustls::HttpsConnectorBuilder; | ||||||
| use rustls::ClientConfig; | use rustls::ClientConfig; | ||||||
| use std::sync::{Arc, RwLock}; | use std::sync::{Arc, RwLock}; | ||||||
| use tonic::transport::{Channel, Endpoint}; | use tokio::sync::mpsc; | ||||||
|  | use tokio_stream::wrappers::ReceiverStream; | ||||||
|  | use tonic::{ | ||||||
|  |     codec::CompressionEncoding, | ||||||
|  |     transport::{Channel, Endpoint}, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| use detee_shared::sgx::{ | use detee_shared::sgx::{ | ||||||
|     pb::dtpm_proto::{ |     pb::dtpm_proto::{ | ||||||
|         dtpm_config_manager_client::DtpmConfigManagerClient, DtpmConfigData, DtpmSetConfigReq, |         dtpm_config_manager_client::DtpmConfigManagerClient, DtpmSetConfigReq, | ||||||
|  |         FileEntry as FileEntryPb, | ||||||
|     }, |     }, | ||||||
|     types::dtpm::DtpmConfig, |     types::dtpm::DtpmConfig, | ||||||
| }; | }; | ||||||
| @ -21,34 +30,26 @@ pub enum Error { | |||||||
|     DtpmConnection(#[from] tonic::transport::Error), |     DtpmConnection(#[from] tonic::transport::Error), | ||||||
|     #[error("Received error from DTPM: {}", _0.message())] |     #[error("Received error from DTPM: {}", _0.message())] | ||||||
|     ResponseStatus(#[from] tonic::Status), |     ResponseStatus(#[from] tonic::Status), | ||||||
|     #[error("Hex: {0}")] |  | ||||||
|     HexDecode(#[from] hex::FromHexError), |  | ||||||
|     #[error("Disk access error: {0}")] |     #[error("Disk access error: {0}")] | ||||||
|     DiskAccess(#[from] std::io::Error), |     DiskAccess(#[from] std::io::Error), | ||||||
|     #[error("HRatls: {0}")] |     #[error("HRatls: {0}")] | ||||||
|     SgxHRatls(#[from] detee_sgx::error::SgxError), |     SgxHRatls(#[from] detee_sgx::error::SgxError), | ||||||
|     #[error("DtpmConfig: {0}")] |     #[error("Dtpm: {0}")] | ||||||
|     DtpmConfig(String), |     Dtpm(String), | ||||||
|     #[error(transparent)] |     #[error(transparent)] | ||||||
|     ConfigError(#[from] crate::config::Error), |     ConfigError(#[from] crate::config::Error), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type Result<T> = std::result::Result<T, Error>; | type Result<T> = std::result::Result<T, Error>; | ||||||
| 
 | 
 | ||||||
| pub async fn connect_dtpm_grpc_client( | pub async fn connect_app_dtpm_client(app_uuid: &str) -> Result<DtpmConfigManagerClient<Channel>> { | ||||||
|     hratls_uri: String, |  | ||||||
|     package_mr_enclave: Option<[u8; 32]>, |  | ||||||
| ) -> Result<DtpmConfigManagerClient<Channel>> { |  | ||||||
|     let private_key_pem = Config::get_hratls_private_key()?; |     let private_key_pem = Config::get_hratls_private_key()?; | ||||||
|     let mut mr_signer = [0u8; 32]; |  | ||||||
|     hex::decode_to_slice(Config::get_mrsigner()?, &mut mr_signer)?; |  | ||||||
|     let mr_signers = vec![mr_signer]; |  | ||||||
| 
 | 
 | ||||||
|     let hratls_config = Arc::new(RwLock::new( |     let (hratls_uri, package_mr_enclave) = hratls_url_and_mr_enclave_from_app_id(app_uuid).await?; | ||||||
|         HRaTlsConfig::new() |     log::info!("hratls uri: {}\nmr_enclave: {:?}", &hratls_uri, &package_mr_enclave); | ||||||
|             .allow_instance_measurement(InstanceMeasurement::new().with_mrsigners(mr_signers)) | 
 | ||||||
|             .with_hratls_private_key_pem(private_key_pem), |     let hratls_config = | ||||||
|     )); |         Arc::new(RwLock::new(HRaTlsConfig::new().with_hratls_private_key_pem(private_key_pem))); | ||||||
| 
 | 
 | ||||||
|     if let Some(mr_enclave) = package_mr_enclave { |     if let Some(mr_enclave) = package_mr_enclave { | ||||||
|         hratls_config.write().unwrap().allow_more_instance_measurement( |         hratls_config.write().unwrap().allow_more_instance_measurement( | ||||||
| @ -65,45 +66,60 @@ pub async fn connect_dtpm_grpc_client( | |||||||
| 
 | 
 | ||||||
|     let channel = Endpoint::from_shared(hratls_uri)?.connect_with_connector(connector).await?; |     let channel = Endpoint::from_shared(hratls_uri)?.connect_with_connector(connector).await?; | ||||||
| 
 | 
 | ||||||
|     Ok(DtpmConfigManagerClient::new(channel)) |     Ok(DtpmConfigManagerClient::new(channel).send_compressed(CompressionEncoding::Zstd)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub async fn attest_and_send_config(loaded_config: DtpmConfig, uuid: &str) -> Result<()> { | pub async fn update_config(app_uuid: &str, config: DtpmConfig) -> Result<()> { | ||||||
|     let config_data = Some(DtpmConfigData::from(loaded_config)); |     let dtpm_client = connect_app_dtpm_client(app_uuid).await?; | ||||||
|     let req_data = DtpmSetConfigReq { config_data, ..Default::default() }; |  | ||||||
| 
 | 
 | ||||||
|     log::trace!("Decoded the configuration... {:?}", req_data); |     upload_files_pb(config.filesystems.clone(), &dtpm_client).await?; | ||||||
|  |     let req = DtpmSetConfigReq { config_data: Some(config.into()), ..Default::default() }; | ||||||
|  |     set_config_pb(req, &dtpm_client).await?; | ||||||
|  |     Ok(()) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|     let (hratls_uri, mr_enclave) = hratls_url_and_mr_enclave_from_app_id(uuid).await; | pub async fn get_config(app_uuid: &str) -> Result<DtpmConfig> { | ||||||
|     log::info!("hratls uri: {}\nmr_enclave: {:?}", &hratls_uri, &mr_enclave); |     let dtpm_client = connect_app_dtpm_client(app_uuid).await?; | ||||||
|  |     let config_res = get_config_pb(&dtpm_client).await?; | ||||||
|  |     let config: DtpmConfig = | ||||||
|  |         config_res.config_data.ok_or(Error::Dtpm("config data not found".to_string()))?.into(); | ||||||
|  |     Ok(config) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|     let client = connect_dtpm_grpc_client(hratls_uri, mr_enclave).await?; | pub async fn upload_files_pb( | ||||||
|  |     reqs: Vec<FileEntry>, | ||||||
|  |     client: &DtpmConfigManagerClient<Channel>, | ||||||
|  | ) -> Result<()> { | ||||||
|  |     let (tx, rx) = mpsc::channel(6); | ||||||
|  |     tokio::spawn(async move { | ||||||
|  |         for file in reqs { | ||||||
|  |             let file_pb: FileEntryPb = file.into(); | ||||||
|  |             let _ = tx.send(file_pb).await; | ||||||
|  |         } | ||||||
|  |     }); | ||||||
| 
 | 
 | ||||||
|     let response = client |     let fs_stream = ReceiverStream::new(rx); | ||||||
|         .max_decoding_message_size(10240000) | 
 | ||||||
|         .set_config(tonic::Request::new(req_data)) |     let _ = client.clone().upload_files(tonic::Request::new(fs_stream)).await?; | ||||||
|         .await?; | 
 | ||||||
|  |     Ok(()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | pub(crate) async fn set_config_pb( | ||||||
|  |     req: DtpmSetConfigReq, | ||||||
|  |     client: &DtpmConfigManagerClient<Channel>, | ||||||
|  | ) -> Result<()> { | ||||||
|  |     let response = client.clone().set_config(tonic::Request::new(req)).await?; | ||||||
| 
 | 
 | ||||||
|     log::trace!("Received respose from the server...{:?}", response.into_inner()); |     log::trace!("Received respose from the server...{:?}", response.into_inner()); | ||||||
| 
 | 
 | ||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub async fn get_config_from_enclave(uuid: &str) -> Result<DtpmConfig> { | pub(crate) async fn get_config_pb( | ||||||
|     let (hratls_uri, mr_enclave) = hratls_url_and_mr_enclave_from_app_id(uuid).await; |     client: &DtpmConfigManagerClient<Channel>, | ||||||
|     log::info!("hratls uri: {}\nmr_enclave: {:?}", &hratls_uri, &mr_enclave); | ) -> Result<DtpmGetConfigRes> { | ||||||
| 
 |     let mgr_config_pb = | ||||||
|     let client = connect_dtpm_grpc_client(hratls_uri, None).await?; |         client.clone().get_config(tonic::Request::new(Empty {})).await?.into_inner(); | ||||||
| 
 |     Ok(mgr_config_pb) | ||||||
|     let mgr_config_pb = client |  | ||||||
|         .max_decoding_message_size(10240000) |  | ||||||
|         .get_config(tonic::Request::new(Empty {})) |  | ||||||
|         .await? |  | ||||||
|         .into_inner(); |  | ||||||
| 
 |  | ||||||
|     let config: DtpmConfig = mgr_config_pb |  | ||||||
|         .config_data |  | ||||||
|         .ok_or(Error::DtpmConfig("config data not found".to_string()))? |  | ||||||
|         .into(); |  | ||||||
|     Ok(config) |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -71,24 +71,29 @@ pub struct PackageElement { | |||||||
| pub static PACKAGES_INDEX: LazyLock<PublicIndex> = LazyLock::new(|| { | pub static PACKAGES_INDEX: LazyLock<PublicIndex> = LazyLock::new(|| { | ||||||
|     PublicIndex { |     PublicIndex { | ||||||
|         packages: vec![ |         packages: vec![ | ||||||
|  |             PackageElement{ | ||||||
|  |                 package_name: "actix-static-server".to_string(), | ||||||
|  |                 package_url: "https://registry.detee.ltd/sgx/packages/actix-static-server_package_2025-04-16_21-27-07.tar.gz".to_string(), | ||||||
|  |                 launch_config_url: "https://registry.detee.ltd/sgx/launch_configs/actix-static-server-launch-config_001.yaml".to_string(), | ||||||
|  |                 mr_enclave: [97, 9, 55, 254, 254, 21, 143, 123, 239, 36, 47, 228, 8, 224, 114, 237, 159, 40, 32, 244, 54, 253, 126, 19, 13, 86, 42, 142, 248, 20, 89, 58], | ||||||
|  |             }, | ||||||
|             PackageElement{ |             PackageElement{ | ||||||
|                 package_name: "base-package".to_string(), |                 package_name: "base-package".to_string(), | ||||||
|                 package_url: "https://registry.detee.ltd/sgx/packages/base-package_2025-03-25_13-54-06.tar.gz".to_string(), |                 package_url: "https://registry.detee.ltd/sgx/packages/base_package_2025-04-17_11-01-08.tar.gz".to_string(), | ||||||
|                 launch_config_url: "https://registry.detee.ltd/sgx/launch_configs/base-package-launch-config_001.yaml".to_string(), |                 launch_config_url: "https://registry.detee.ltd/sgx/launch_configs/base-package-launch-config_001.yaml".to_string(), | ||||||
|                 mr_enclave: [47, 58, 112, 8, 157, 109, 224, 80, 78, 225, 47, 55, 103, 53, 71, 234, 97, 11, 16, 22, 231, 77, 113, 52, 203, 97, 136, 109, 178, 240, 128, 169], |                 mr_enclave: [52, 183, 102, 210, 251, 219, 218, 140, 168, 118, 10, 193, 98, 240, 147, 124, 240, 189, 46, 95, 138, 172, 15, 246, 227, 114, 70, 159, 232, 212, 9, 234], | ||||||
|             }, |             }, | ||||||
|             PackageElement{ |             PackageElement{ | ||||||
|                 package_name: "actix-app-info".to_string(), |                 package_name: "actix-app-info".to_string(), | ||||||
|                 package_url: "https://registry.detee.ltd/sgx/packages/actix-app-info_package_2025-03-19_13-49-56.tar.gz".to_string(), |                 package_url: "https://registry.detee.ltd/sgx/packages/actix-app-info_package_2025-04-16_21-59-38.tar.gz".to_string(), | ||||||
|                 launch_config_url: "https://registry.detee.ltd/sgx/launch_configs/actix-app-info-launch-config_001.yaml".to_string(), |                 launch_config_url: "https://registry.detee.ltd/sgx/launch_configs/actix-app-info-launch-config_001.yaml".to_string(), | ||||||
|                 mr_enclave: [ 139, 208, 253, 40, 81, 80, 225, 137, 106, 182, 27, 200, 25, 128, 212, 235, 76, 153, 215, 42, 160, 69, 26, 132, 77, 223, 182, 180, 136, 218, 173, 184 ], |                 mr_enclave: [128, 0, 97, 103, 165, 103, 68, 203, 240, 145, 153, 254, 34, 129, 75, 140, 8, 186, 63, 226, 144, 129, 201, 187, 175, 66, 80, 1, 151, 114, 183, 159], | ||||||
|             }, |             }, | ||||||
|             PackageElement{ |             PackageElement{ | ||||||
|                 package_name: "go-app-info".to_string(), |                 package_name: "go-app-info".to_string(), | ||||||
|                 package_url: "https://registry.detee.ltd/sgx/packages/go-gin-app-info_01_package_2025-03-26_11-30-45.tar.gz".to_string(), |                 package_url: "https://registry.detee.ltd/sgx/packages/go-app-info_package_2025-04-16_21-39-18.tar.gz".to_string(), | ||||||
|                 launch_config_url: "https://registry.detee.ltd/sgx/launch_configs/go-gin-app-info-launch-config_001.yaml".to_string(), |                 launch_config_url: "https://registry.detee.ltd/sgx/launch_configs/go-gin-app-info-launch-config_001.yaml".to_string(), | ||||||
|                 mr_enclave: [239, 153, 28, 180, 45, 214, 226, 253, 140, 243, 34, 120, 146, 198, 75, 43, 205, 229, 33, 160, 62, 22, 244, 123, 213, 37, 186, 93, 177, 8, 129, 170], |                 mr_enclave: [188, 233, 211, 196, 237, 6, 46, 236, 229, 173, 239, 94, 99, 172, 233, 37, 255, 20, 54, 212, 172, 30, 182, 71, 219, 76, 78, 11, 72, 68, 46, 204], | ||||||
| 
 |  | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ pub fn package_enclave( | |||||||
|         format!( |         format!( | ||||||
|             r#"docker run --rm -it -v ./:/app/ \ |             r#"docker run --rm -it -v ./:/app/ \ | ||||||
|         -v {signing_key_path}:/keys/app_signing_key.pem:ro \ |         -v {signing_key_path}:/keys/app_signing_key.pem:ro \ | ||||||
|         noormohammedb/enclave_packager_01:pub_v3 {package_items}"#
 |         noormohammedb/enclave_packager_01:pub_v5 {package_items}"#
 | ||||||
|         ) |         ) | ||||||
|     } else { |     } else { | ||||||
|         format!( |         format!( | ||||||
|  | |||||||
| @ -1,9 +1,12 @@ | |||||||
| use crate::constants::HRATLS_APP_PORT; | use crate::constants::HRATLS_APP_PORT; | ||||||
| use crate::sgx::get_one_contract; | use crate::sgx::get_one_contract; | ||||||
| use crate::sgx::grpc_brain::new_app; | use crate::sgx::grpc_brain::new_app; | ||||||
| use crate::sgx::grpc_dtpm::attest_and_send_config; | use crate::sgx::grpc_dtpm::connect_app_dtpm_client; | ||||||
|  | use crate::sgx::grpc_dtpm::set_config_pb; | ||||||
|  | use crate::sgx::grpc_dtpm::upload_files_pb; | ||||||
| use crate::sgx::package_entry_from_name; | use crate::sgx::package_entry_from_name; | ||||||
| use detee_shared::app_proto::NewAppRes; | use detee_shared::app_proto::NewAppRes; | ||||||
|  | use detee_shared::sgx::pb::dtpm_proto::DtpmSetConfigReq; | ||||||
| use detee_shared::sgx::types::brain::AppDeployConfig; | use detee_shared::sgx::types::brain::AppDeployConfig; | ||||||
| use detee_shared::sgx::types::dtpm::DtpmConfig; | use detee_shared::sgx::types::dtpm::DtpmConfig; | ||||||
| use detee_shared::sgx::types::dtpm::EnvironmentEntry; | use detee_shared::sgx::types::dtpm::EnvironmentEntry; | ||||||
| @ -17,7 +20,7 @@ pub enum Error { | |||||||
|     #[error(transparent)] |     #[error(transparent)] | ||||||
|     Serde(#[from] serde_yaml::Error), |     Serde(#[from] serde_yaml::Error), | ||||||
|     #[error("{0}")] |     #[error("{0}")] | ||||||
|     PublicPackage(std::string::String), |     Package(std::string::String), | ||||||
|     #[error("{0}")] |     #[error("{0}")] | ||||||
|     Brain(#[from] crate::sgx::grpc_brain::Error), |     Brain(#[from] crate::sgx::grpc_brain::Error), | ||||||
|     #[error("{0}")] |     #[error("{0}")] | ||||||
| @ -26,7 +29,9 @@ pub enum Error { | |||||||
|     Deployment(String), |     Deployment(String), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub async fn hratls_url_and_mr_enclave_from_app_id(app_id: &str) -> (String, Option<[u8; 32]>) { | pub async fn hratls_url_and_mr_enclave_from_app_id( | ||||||
|  |     app_id: &str, | ||||||
|  | ) -> Result<(String, Option<[u8; 32]>), crate::sgx::grpc_dtpm::Error> { | ||||||
|     let app_contract = get_one_contract(app_id).await; |     let app_contract = get_one_contract(app_id).await; | ||||||
|     if app_contract.is_err() { |     if app_contract.is_err() { | ||||||
|         eprintln!("Could not find App contract with ID: {}", app_id); |         eprintln!("Could not find App contract with ID: {}", app_id); | ||||||
| @ -44,15 +49,15 @@ pub async fn hratls_url_and_mr_enclave_from_app_id(app_id: &str) -> (String, Opt | |||||||
|         .mapped_ports |         .mapped_ports | ||||||
|         .iter() |         .iter() | ||||||
|         .find(|port| port.app_port == HRATLS_APP_PORT) |         .find(|port| port.app_port == HRATLS_APP_PORT) | ||||||
|         .unwrap() |         .ok_or(crate::sgx::grpc_dtpm::Error::Dtpm("Could not find DTMP port".to_string()))? | ||||||
|         .host_port; |         .host_port; | ||||||
| 
 | 
 | ||||||
|     (format!("https://{public_ip}:{dtpm_port}"), mr_enclave) |     Ok((format!("https://{public_ip}:{dtpm_port}"), mr_enclave)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub async fn fetch_config(package_name: &str) -> Result<DtpmConfig, Error> { | pub async fn fetch_config(package_name: &str) -> Result<DtpmConfig, Error> { | ||||||
|     let index_package_entry = package_entry_from_name(package_name) |     let index_package_entry = package_entry_from_name(package_name) | ||||||
|         .ok_or(Error::PublicPackage("package not found for ".to_string() + package_name))?; |         .ok_or(Error::Package("package not found for ".to_string() + package_name))?; | ||||||
| 
 | 
 | ||||||
|     let launch_config_url = index_package_entry.launch_config_url.clone(); |     let launch_config_url = index_package_entry.launch_config_url.clone(); | ||||||
| 
 | 
 | ||||||
| @ -74,8 +79,7 @@ pub fn calculate_nanolp_for_app( | |||||||
|     let total_units = |     let total_units = | ||||||
|         (vcpus as f64 * 5f64) + (memory_mb as f64 / 200f64) + (disk_size_mb as f64 / 10000f64); |         (vcpus as f64 * 5f64) + (memory_mb as f64 / 200f64) + (disk_size_mb as f64 / 10000f64); | ||||||
|     let locked_nano = (hours as f64 * 60f64 * total_units * node_price as f64) as u64; |     let locked_nano = (hours as f64 * 60f64 * total_units * node_price as f64) as u64; | ||||||
|     // TODO: change all println to eprintln
 |     eprintln!( | ||||||
|     println!( |  | ||||||
|             "Node price: {}/unit/minute. Total Units for hardware requested: {:.4}. Locking {} LP (offering the App for {} hours).", |             "Node price: {}/unit/minute. Total Units for hardware requested: {:.4}. Locking {} LP (offering the App for {} hours).", | ||||||
|             node_price as f64 / 1_000_000_000.0, |             node_price as f64 / 1_000_000_000.0, | ||||||
|             total_units, |             total_units, | ||||||
| @ -127,13 +131,21 @@ pub async fn deploy_new_app_and_update_config( | |||||||
| 
 | 
 | ||||||
|     if new_app_res.error.is_empty() { |     if new_app_res.error.is_empty() { | ||||||
|         if let Some(launch_config) = launch_config { |         if let Some(launch_config) = launch_config { | ||||||
|             println!("Deploying..."); |             eprint!("Deploying..."); | ||||||
|             tokio::time::sleep(tokio::time::Duration::from_millis(2500)).await; |             tokio::time::sleep(tokio::time::Duration::from_millis(2500)).await; | ||||||
|             Retry::spawn(FixedInterval::from_millis(1000).take(10), || { |             let dtpm_client = Retry::spawn(FixedInterval::from_millis(1000).take(30), || { | ||||||
|                 log::debug!("retrying attestation and launch config update"); |                 log::debug!("retrying attestation and launch config update"); | ||||||
|                 attest_and_send_config(launch_config.clone(), &new_app_res.uuid) |                 eprint!("."); | ||||||
|  |                 connect_app_dtpm_client(&new_app_res.uuid) | ||||||
|             }) |             }) | ||||||
|             .await?; |             .await?; | ||||||
|  |             println!(""); | ||||||
|  |             upload_files_pb(launch_config.filesystems.clone(), &dtpm_client).await?; | ||||||
|  | 
 | ||||||
|  |             let config_data = Some(launch_config.into()); | ||||||
|  |             log::trace!("Decoded the configuration... {:?}", config_data); | ||||||
|  |             let req = DtpmSetConfigReq { config_data, ..Default::default() }; | ||||||
|  |             set_config_pb(req, &dtpm_client).await?; | ||||||
|             Ok(new_app_res) |             Ok(new_app_res) | ||||||
|         } else { |         } else { | ||||||
|             Ok(new_app_res) |             Ok(new_app_res) | ||||||
|  | |||||||
| @ -398,32 +398,32 @@ pub fn calculate_nanolp( | |||||||
| 
 | 
 | ||||||
| lazy_static! { | lazy_static! { | ||||||
|     static ref DEFAULT_DTRFS: Dtrfs = Dtrfs { |     static ref DEFAULT_DTRFS: Dtrfs = Dtrfs { | ||||||
|         name: "dtrfs-6.13.8-arch1-1".to_string(), |         name: "dtrfs-6.14.2-arch1-1".to_string(), | ||||||
|         vendor: "ghe0".to_string(), |         vendor: "ghe0".to_string(), | ||||||
|         dtrfs_url: "http://registry.detee.ltd/detee-archtop-6.13.8-arch1-1.cpio.gz".to_string(), |         dtrfs_url: "http://registry.detee.ltd/detee-archtop-6.14.2-arch1-1.cpio.gz".to_string(), | ||||||
|         dtrfs_sha: "b5f408d00e2b93dc594fed3a7f2466a9878802ff1c7ae502247471cd06728a45".to_string(), |         dtrfs_sha: "d207644ee60d54009b6ecdfb720e2ec251cde31774dd249fcc7435aca0377990".to_string(), | ||||||
|         kernel_url: "http://registry.detee.ltd/vmlinuz-linux-6.13.8-arch1-1".to_string(), |         kernel_url: "http://registry.detee.ltd/vmlinuz-linux-6.14.2-arch1-1".to_string(), | ||||||
|         kernel_sha: "e49c8587287b21df7600c04326fd7393524453918c14d67f73757dc769a13542".to_string() |         kernel_sha: "e765e56166ef321b53399b9638584d1279821dbe3d46191c1f66bbaa075e7919".to_string() | ||||||
|     }; |     }; | ||||||
|     static ref DEFAULT_ARCHLINUX: Distro = Distro { |     static ref DEFAULT_ARCHLINUX: Distro = Distro { | ||||||
|         name: "archlinux_2025-02-21".to_string(), |         name: "archlinux_2025-04-03".to_string(), | ||||||
|         vendor: "gheorghe".to_string(), |         vendor: "gheorghe".to_string(), | ||||||
|         template_url: "http://registry.detee.ltd/detee_arch_2025-02-21.fsa".to_string(), |         template_url: "http://registry.detee.ltd/detee_arch_2025-04-03.fsa".to_string(), | ||||||
|         template_sha: "257edbf1e3b949b895c422befc8890c85dfae1ad3d35661010c9aaa173ba9fc4" |         template_sha: "7fdb19d9325c63d246140c984dc3764538f6ea329ed877e947993ea7bc8c2067" | ||||||
|             .to_string() |             .to_string() | ||||||
|     }; |     }; | ||||||
|     static ref DEFAULT_UBUNTU: Distro = Distro { |     static ref DEFAULT_UBUNTU: Distro = Distro { | ||||||
|         name: "ubuntu_2025-02-28".to_string(), |         name: "ubuntu_2025-04-03".to_string(), | ||||||
|         vendor: "gheorghe".to_string(), |         vendor: "gheorghe".to_string(), | ||||||
|         template_url: "http://registry.detee.ltd/detee_ubuntu_2025-02-28.fsa".to_string(), |         template_url: "http://registry.detee.ltd/detee_ubuntu_2025-04-03.fsa".to_string(), | ||||||
|         template_sha: "faa8bd38d02ca9b6ee69d7f5128ed9ccab42bdbfa69f688b9947e8e5c9e5d133" |         template_sha: "324895a7a1788e43253cf9699aa446df1a5519fe072917cedcc4ed356546e34a" | ||||||
|             .to_string() |             .to_string() | ||||||
|     }; |     }; | ||||||
|     static ref DEFAULT_FEDORA: Distro = Distro { |     static ref DEFAULT_FEDORA: Distro = Distro { | ||||||
|         name: "fedora_2025-02-21".to_string(), |         name: "fedora_2025-04-03".to_string(), | ||||||
|         vendor: "gheorghe".to_string(), |         vendor: "gheorghe".to_string(), | ||||||
|         template_url: "http://registry.detee.ltd/detee_fedora_2025-02-21.fsa".to_string(), |         template_url: "http://registry.detee.ltd/detee_fedora_2025-04-03.fsa".to_string(), | ||||||
|         template_sha: "c0fdd08d465939077ef8ed746903005fc190af12cdf70917cc8c6f872da85777" |         template_sha: "75a98c3744552bbf5f8e9c6a271cd0f382e1d9a846f5d577767b39293b8efda9" | ||||||
|             .to_string() |             .to_string() | ||||||
|     }; |     }; | ||||||
|     static ref ALTERNATIVE_INIT: Vec<Dtrfs> = vec![ |     static ref ALTERNATIVE_INIT: Vec<Dtrfs> = vec![ | ||||||
| @ -438,36 +438,36 @@ lazy_static! { | |||||||
|                 .to_string() |                 .to_string() | ||||||
|         }, |         }, | ||||||
|         Dtrfs { |         Dtrfs { | ||||||
|             name: "dtrfs-6.13.6-arch1-1".to_string(), |             name: "dtrfs-6.13.8-arch1-1".to_string(), | ||||||
|             vendor: "ghe0".to_string(), |             vendor: "ghe0".to_string(), | ||||||
|             dtrfs_url: "http://registry.detee.ltd/detee-archtop-6.13.6-arch1-1.cpio.gz".to_string(), |             dtrfs_url: "http://registry.detee.ltd/detee-archtop-6.13.8-arch1-1.cpio.gz".to_string(), | ||||||
|             dtrfs_sha: "de48048fb42fe4054611f14e51ce175ca90645734fe41349642f036b8bca8fcd" |             dtrfs_sha: "b5f408d00e2b93dc594fed3a7f2466a9878802ff1c7ae502247471cd06728a45" | ||||||
|                 .to_string(), |                 .to_string(), | ||||||
|             kernel_url: "http://registry.detee.ltd/vmlinuz-linux-6.13.6-arch1-1".to_string(), |             kernel_url: "http://registry.detee.ltd/vmlinuz-linux-6.13.8-arch1-1".to_string(), | ||||||
|             kernel_sha: "7efaca6c348cd4136afe3ece0beec346da713029347a0d4e71e12a0b91570de7" |             kernel_sha: "e49c8587287b21df7600c04326fd7393524453918c14d67f73757dc769a13542" | ||||||
|                 .to_string() |                 .to_string() | ||||||
|         }, |         }, | ||||||
|     ]; |     ]; | ||||||
|     static ref ALTERNATIVE_DISTROS: Vec<Distro> = vec![ |     static ref ALTERNATIVE_DISTROS: Vec<Distro> = vec![ | ||||||
|         Distro { |         Distro { | ||||||
|             name: "archlinux_2025-01-27".to_string(), |             name: "archlinux_2025-02-21".to_string(), | ||||||
|             vendor: "gheorghe".to_string(), |             vendor: "gheorghe".to_string(), | ||||||
|             template_url: "http://registry.detee.ltd/detee_arch_2025-01-27.fsa".to_string(), |             template_url: "http://registry.detee.ltd/detee_arch_2025-02-21.fsa".to_string(), | ||||||
|             template_sha: "c8cc8ef611380c2d1fbab36e44ccfd8d666e344c7aaefe763f7dd6136b672c97" |             template_sha: "257edbf1e3b949b895c422befc8890c85dfae1ad3d35661010c9aaa173ba9fc4" | ||||||
|                 .to_string() |                 .to_string() | ||||||
|         }, |         }, | ||||||
|         Distro { |         Distro { | ||||||
|             name: "ubuntu_2025-02-21".to_string(), |             name: "ubuntu_2025-02-28".to_string(), | ||||||
|             vendor: "gheorghe".to_string(), |             vendor: "gheorghe".to_string(), | ||||||
|             template_url: "http://registry.detee.ltd/detee_ubuntu_2025-02-21.fsa".to_string(), |             template_url: "http://registry.detee.ltd/detee_ubuntu_2025-02-28.fsa".to_string(), | ||||||
|             template_sha: "180e43c46494c8b5cf2b19067995755ade1bbd80396e1fd5e1c4b164ed2fe8cf" |             template_sha: "faa8bd38d02ca9b6ee69d7f5128ed9ccab42bdbfa69f688b9947e8e5c9e5d133" | ||||||
|                 .to_string() |                 .to_string() | ||||||
|         }, |         }, | ||||||
|         Distro { |         Distro { | ||||||
|             name: "fedora_2025-01-28".to_string(), |             name: "fedora_2025-02-21".to_string(), | ||||||
|             vendor: "gheorghe".to_string(), |             vendor: "gheorghe".to_string(), | ||||||
|             template_url: "http://registry.detee.ltd/detee_fedora_2025-01-28.fsa".to_string(), |             template_url: "http://registry.detee.ltd/detee_fedora_2025-02-21.fsa".to_string(), | ||||||
|             template_sha: "68c5be46d668a12e8ff78692843a922315bd5cd9c2bb53accf2685ec3be1fa31" |             template_sha: "c0fdd08d465939077ef8ed746903005fc190af12cdf70917cc8c6f872da85777" | ||||||
|                 .to_string() |                 .to_string() | ||||||
|         } |         } | ||||||
|     ]; |     ]; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user