From b92513609b5f89e0799075ec66400c5b1cd5f5d8 Mon Sep 17 00:00:00 2001 From: Andrew Gunnerson Date: Wed, 30 Aug 2023 18:54:29 -0400 Subject: [PATCH] Move main avbroot code to a workspace member Signed-off-by: Andrew Gunnerson --- .gitignore | 2 +- Cargo.toml | 80 +----------------- avbroot/Cargo.toml | 76 +++++++++++++++++ build.rs => avbroot/build.rs | 0 .../protobuf}/ota_metadata.proto | 0 .../protobuf}/update_metadata.proto | 0 {src => avbroot/src}/boot.rs | 0 {src => avbroot/src}/cli/args.rs | 0 {src => avbroot/src}/cli/avb.rs | 0 {src => avbroot/src}/cli/boot.rs | 0 {src => avbroot/src}/cli/completion.rs | 0 {src => avbroot/src}/cli/key.rs | 0 {src => avbroot/src}/cli/mod.rs | 0 {src => avbroot/src}/cli/ota.rs | 0 {src => avbroot/src}/cli/ramdisk.rs | 0 {src => avbroot/src}/crypto.rs | 0 {src => avbroot/src}/format/avb.rs | 0 {src => avbroot/src}/format/bootimage.rs | 0 {src => avbroot/src}/format/compression.rs | 0 {src => avbroot/src}/format/cpio.rs | 0 {src => avbroot/src}/format/mod.rs | 0 {src => avbroot/src}/format/ota.rs | 0 {src => avbroot/src}/format/padding.rs | 0 {src => avbroot/src}/format/payload.rs | 0 {src => avbroot/src}/lib.rs | 0 {src => avbroot/src}/main.rs | 0 {src => avbroot/src}/protobuf.rs | 0 {src => avbroot/src}/stream.rs | 0 {src => avbroot/src}/util.rs | 0 {tests => avbroot/tests}/avb.rs | 4 +- {tests => avbroot/tests}/bootimage.rs | 4 +- {tests => avbroot/tests}/compression.rs | 0 {tests => avbroot/tests}/data/boot_v0.img | Bin {tests => avbroot/tests}/data/boot_v1.img | Bin {tests => avbroot/tests}/data/boot_v2.img | Bin {tests => avbroot/tests}/data/boot_v3.img | Bin {tests => avbroot/tests}/data/boot_v4.img | Bin {tests => avbroot/tests}/data/boot_v4_vts.img | Bin .../tests}/data/vbmeta_appended.img | Bin {tests => avbroot/tests}/data/vbmeta_root.img | Bin {tests => avbroot/tests}/data/vendor_v3.img | Bin {tests => avbroot/tests}/data/vendor_v4.img | Bin e2e/Cargo.toml | 2 +- xtask/src/version.rs | 1 - 44 files changed, 85 insertions(+), 84 deletions(-) create mode 100644 avbroot/Cargo.toml rename build.rs => avbroot/build.rs (100%) rename {protobuf => avbroot/protobuf}/ota_metadata.proto (100%) rename {protobuf => avbroot/protobuf}/update_metadata.proto (100%) rename {src => avbroot/src}/boot.rs (100%) rename {src => avbroot/src}/cli/args.rs (100%) rename {src => avbroot/src}/cli/avb.rs (100%) rename {src => avbroot/src}/cli/boot.rs (100%) rename {src => avbroot/src}/cli/completion.rs (100%) rename {src => avbroot/src}/cli/key.rs (100%) rename {src => avbroot/src}/cli/mod.rs (100%) rename {src => avbroot/src}/cli/ota.rs (100%) rename {src => avbroot/src}/cli/ramdisk.rs (100%) rename {src => avbroot/src}/crypto.rs (100%) rename {src => avbroot/src}/format/avb.rs (100%) rename {src => avbroot/src}/format/bootimage.rs (100%) rename {src => avbroot/src}/format/compression.rs (100%) rename {src => avbroot/src}/format/cpio.rs (100%) rename {src => avbroot/src}/format/mod.rs (100%) rename {src => avbroot/src}/format/ota.rs (100%) rename {src => avbroot/src}/format/padding.rs (100%) rename {src => avbroot/src}/format/payload.rs (100%) rename {src => avbroot/src}/lib.rs (100%) rename {src => avbroot/src}/main.rs (100%) rename {src => avbroot/src}/protobuf.rs (100%) rename {src => avbroot/src}/stream.rs (100%) rename {src => avbroot/src}/util.rs (100%) rename {tests => avbroot/tests}/avb.rs (96%) rename {tests => avbroot/tests}/bootimage.rs (97%) rename {tests => avbroot/tests}/compression.rs (100%) rename {tests => avbroot/tests}/data/boot_v0.img (100%) rename {tests => avbroot/tests}/data/boot_v1.img (100%) rename {tests => avbroot/tests}/data/boot_v2.img (100%) rename {tests => avbroot/tests}/data/boot_v3.img (100%) rename {tests => avbroot/tests}/data/boot_v4.img (100%) rename {tests => avbroot/tests}/data/boot_v4_vts.img (100%) rename {tests => avbroot/tests}/data/vbmeta_appended.img (100%) rename {tests => avbroot/tests}/data/vbmeta_root.img (100%) rename {tests => avbroot/tests}/data/vendor_v3.img (100%) rename {tests => avbroot/tests}/data/vendor_v4.img (100%) diff --git a/.gitignore b/.gitignore index c199a49..6b7f969 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,4 @@ *.patched # We do want the test images -!/tests/data/*.img +!/avbroot/tests/data/*.img diff --git a/Cargo.toml b/Cargo.toml index 4da40a8..f15138d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,81 +1,7 @@ -[package] -name = "avbroot" -version = "0.1.0" -license = "GPL-3.0-only" -edition = "2021" -repository = "https://github.com/chenxiaolong/avbroot" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.75" -base64 = "0.21.3" -byteorder = "1.4.3" -clap = { version = "4.4.1", features = ["derive"] } -clap_complete = "4.4.0" -cms = { version = "0.2.2", features = ["std"] } -const-oid = "0.9.5" -ctrlc = "3.4.0" -flate2 = "1.0.27" -hex = "0.4.3" -lz4_flex = "0.11.1" -memchr = "2.6.0" -num-bigint-dig = "0.8.4" -num-traits = "0.2.16" -phf = { version = "0.11.2", features = ["macros"] } -pkcs8 = { version = "0.10.2", features = ["encryption", "pem"] } -quick-protobuf = "0.8.1" -rand = "0.8.5" -rayon = "1.7.0" -regex = { version = "1.9.4", default-features = false, features = ["perf", "std"] } -# We use ring instead of sha2 for sha256 digest computation of large files -# because sha2 is significantly slower on older x86_64 CPUs without the SHA-NI -# instructions. sha2 is still used for signing purposes. -# https://github.com/RustCrypto/hashes/issues/327 -ring = "0.16.20" -rpassword = "7.2.0" -rsa = { version = "0.9.2", features = ["sha1", "sha2"] } -serde = { version = "1.0.188", features = ["derive"] } -sha1 = "0.10.5" -sha2 = "0.10.7" -tempfile = "3.8.0" -thiserror = "1.0.47" -toml_edit = { version = "0.19.14", features = ["serde"] } -topological-sort = "0.2.2" -x509-cert = { version = "0.2.4", features = ["builder"] } -xz2 = "0.1.7" - -# There's an upstream bug that causes an infinite loop in the write::BzDecoder -# destructor if the decoder is fed invalid data. While this never happens during -# normal operation, it is possible to run into this by running `ota extract` -# against a `--stripped` OTA file. -# https://github.com/alexcrichton/bzip2-rs/pull/99 -[dependencies.bzip2] -git = "https://github.com/jongiddy/bzip2-rs" -rev = "2aefcb4d3634de1df226c73d93f758d65228bb8c" - -# https://github.com/zip-rs/zip/pull/383 -[dependencies.zip] -git = "https://github.com/chenxiaolong/zip" -rev = "989101f9384b9e94e36e6e9e0f51908fdf98bde6" -default-features = false -features = ["deflate"] - -[target.'cfg(unix)'.dependencies] -rustix = { version = "0.38.9", default-features = false, features = ["process"] } - -[build-dependencies] -# Disable the clap feature since it pulls in an ancient version of clap. -pb-rs = { version = "0.10.0", default-features = false } - -[dev-dependencies] -assert_matches = "1.5.0" - -[features] -static = ["bzip2/static", "xz2/static"] - [workspace] -members = ["e2e", "xtask"] +default-members = ["avbroot"] +members = ["avbroot", "e2e", "xtask"] +resolver = "2" [workspace.package] version = "0.1.0" diff --git a/avbroot/Cargo.toml b/avbroot/Cargo.toml new file mode 100644 index 0000000..dd18fee --- /dev/null +++ b/avbroot/Cargo.toml @@ -0,0 +1,76 @@ +[package] +name = "avbroot" +version.workspace = true +license.workspace = true +edition.workspace = true +repository.workspace = true +publish = false + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.75" +base64 = "0.21.3" +byteorder = "1.4.3" +clap = { version = "4.4.1", features = ["derive"] } +clap_complete = "4.4.0" +cms = { version = "0.2.2", features = ["std"] } +const-oid = "0.9.5" +ctrlc = "3.4.0" +flate2 = "1.0.27" +hex = "0.4.3" +lz4_flex = "0.11.1" +memchr = "2.6.0" +num-bigint-dig = "0.8.4" +num-traits = "0.2.16" +phf = { version = "0.11.2", features = ["macros"] } +pkcs8 = { version = "0.10.2", features = ["encryption", "pem"] } +quick-protobuf = "0.8.1" +rand = "0.8.5" +rayon = "1.7.0" +regex = { version = "1.9.4", default-features = false, features = ["perf", "std"] } +# We use ring instead of sha2 for sha256 digest computation of large files +# because sha2 is significantly slower on older x86_64 CPUs without the SHA-NI +# instructions. sha2 is still used for signing purposes. +# https://github.com/RustCrypto/hashes/issues/327 +ring = "0.16.20" +rpassword = "7.2.0" +rsa = { version = "0.9.2", features = ["sha1", "sha2"] } +serde = { version = "1.0.188", features = ["derive"] } +sha1 = "0.10.5" +sha2 = "0.10.7" +tempfile = "3.8.0" +thiserror = "1.0.47" +toml_edit = { version = "0.19.14", features = ["serde"] } +topological-sort = "0.2.2" +x509-cert = { version = "0.2.4", features = ["builder"] } +xz2 = "0.1.7" + +# There's an upstream bug that causes an infinite loop in the write::BzDecoder +# destructor if the decoder is fed invalid data. While this never happens during +# normal operation, it is possible to run into this by running `ota extract` +# against a `--stripped` OTA file. +# https://github.com/alexcrichton/bzip2-rs/pull/99 +[dependencies.bzip2] +git = "https://github.com/jongiddy/bzip2-rs" +rev = "2aefcb4d3634de1df226c73d93f758d65228bb8c" + +# https://github.com/zip-rs/zip/pull/383 +[dependencies.zip] +git = "https://github.com/chenxiaolong/zip" +rev = "989101f9384b9e94e36e6e9e0f51908fdf98bde6" +default-features = false +features = ["deflate"] + +[target.'cfg(unix)'.dependencies] +rustix = { version = "0.38.9", default-features = false, features = ["process"] } + +[build-dependencies] +# Disable the clap feature since it pulls in an ancient version of clap. +pb-rs = { version = "0.10.0", default-features = false } + +[dev-dependencies] +assert_matches = "1.5.0" + +[features] +static = ["bzip2/static", "xz2/static"] diff --git a/build.rs b/avbroot/build.rs similarity index 100% rename from build.rs rename to avbroot/build.rs diff --git a/protobuf/ota_metadata.proto b/avbroot/protobuf/ota_metadata.proto similarity index 100% rename from protobuf/ota_metadata.proto rename to avbroot/protobuf/ota_metadata.proto diff --git a/protobuf/update_metadata.proto b/avbroot/protobuf/update_metadata.proto similarity index 100% rename from protobuf/update_metadata.proto rename to avbroot/protobuf/update_metadata.proto diff --git a/src/boot.rs b/avbroot/src/boot.rs similarity index 100% rename from src/boot.rs rename to avbroot/src/boot.rs diff --git a/src/cli/args.rs b/avbroot/src/cli/args.rs similarity index 100% rename from src/cli/args.rs rename to avbroot/src/cli/args.rs diff --git a/src/cli/avb.rs b/avbroot/src/cli/avb.rs similarity index 100% rename from src/cli/avb.rs rename to avbroot/src/cli/avb.rs diff --git a/src/cli/boot.rs b/avbroot/src/cli/boot.rs similarity index 100% rename from src/cli/boot.rs rename to avbroot/src/cli/boot.rs diff --git a/src/cli/completion.rs b/avbroot/src/cli/completion.rs similarity index 100% rename from src/cli/completion.rs rename to avbroot/src/cli/completion.rs diff --git a/src/cli/key.rs b/avbroot/src/cli/key.rs similarity index 100% rename from src/cli/key.rs rename to avbroot/src/cli/key.rs diff --git a/src/cli/mod.rs b/avbroot/src/cli/mod.rs similarity index 100% rename from src/cli/mod.rs rename to avbroot/src/cli/mod.rs diff --git a/src/cli/ota.rs b/avbroot/src/cli/ota.rs similarity index 100% rename from src/cli/ota.rs rename to avbroot/src/cli/ota.rs diff --git a/src/cli/ramdisk.rs b/avbroot/src/cli/ramdisk.rs similarity index 100% rename from src/cli/ramdisk.rs rename to avbroot/src/cli/ramdisk.rs diff --git a/src/crypto.rs b/avbroot/src/crypto.rs similarity index 100% rename from src/crypto.rs rename to avbroot/src/crypto.rs diff --git a/src/format/avb.rs b/avbroot/src/format/avb.rs similarity index 100% rename from src/format/avb.rs rename to avbroot/src/format/avb.rs diff --git a/src/format/bootimage.rs b/avbroot/src/format/bootimage.rs similarity index 100% rename from src/format/bootimage.rs rename to avbroot/src/format/bootimage.rs diff --git a/src/format/compression.rs b/avbroot/src/format/compression.rs similarity index 100% rename from src/format/compression.rs rename to avbroot/src/format/compression.rs diff --git a/src/format/cpio.rs b/avbroot/src/format/cpio.rs similarity index 100% rename from src/format/cpio.rs rename to avbroot/src/format/cpio.rs diff --git a/src/format/mod.rs b/avbroot/src/format/mod.rs similarity index 100% rename from src/format/mod.rs rename to avbroot/src/format/mod.rs diff --git a/src/format/ota.rs b/avbroot/src/format/ota.rs similarity index 100% rename from src/format/ota.rs rename to avbroot/src/format/ota.rs diff --git a/src/format/padding.rs b/avbroot/src/format/padding.rs similarity index 100% rename from src/format/padding.rs rename to avbroot/src/format/padding.rs diff --git a/src/format/payload.rs b/avbroot/src/format/payload.rs similarity index 100% rename from src/format/payload.rs rename to avbroot/src/format/payload.rs diff --git a/src/lib.rs b/avbroot/src/lib.rs similarity index 100% rename from src/lib.rs rename to avbroot/src/lib.rs diff --git a/src/main.rs b/avbroot/src/main.rs similarity index 100% rename from src/main.rs rename to avbroot/src/main.rs diff --git a/src/protobuf.rs b/avbroot/src/protobuf.rs similarity index 100% rename from src/protobuf.rs rename to avbroot/src/protobuf.rs diff --git a/src/stream.rs b/avbroot/src/stream.rs similarity index 100% rename from src/stream.rs rename to avbroot/src/stream.rs diff --git a/src/util.rs b/avbroot/src/util.rs similarity index 100% rename from src/util.rs rename to avbroot/src/util.rs diff --git a/tests/avb.rs b/avbroot/tests/avb.rs similarity index 96% rename from tests/avb.rs rename to avbroot/tests/avb.rs index 7d3af98..64d5921 100644 --- a/tests/avb.rs +++ b/avbroot/tests/avb.rs @@ -13,11 +13,11 @@ use avbroot::{self, format::avb}; fn get_test_key() -> RsaPrivateKey { let data = include_str!(concat!( - env!("CARGO_MANIFEST_DIR"), + env!("CARGO_WORKSPACE_DIR"), "/e2e/keys/TEST_KEY_DO_NOT_USE_avb.key", )); let passphrase = include_str!(concat!( - env!("CARGO_MANIFEST_DIR"), + env!("CARGO_WORKSPACE_DIR"), "/e2e/keys/TEST_KEY_DO_NOT_USE_avb.passphrase", )); diff --git a/tests/bootimage.rs b/avbroot/tests/bootimage.rs similarity index 97% rename from tests/bootimage.rs rename to avbroot/tests/bootimage.rs index 54c5fd0..a32baf2 100644 --- a/tests/bootimage.rs +++ b/avbroot/tests/bootimage.rs @@ -15,11 +15,11 @@ use rsa::RsaPrivateKey; fn get_test_key() -> RsaPrivateKey { let data = include_str!(concat!( - env!("CARGO_MANIFEST_DIR"), + env!("CARGO_WORKSPACE_DIR"), "/e2e/keys/TEST_KEY_DO_NOT_USE_avb.key", )); let passphrase = include_str!(concat!( - env!("CARGO_MANIFEST_DIR"), + env!("CARGO_WORKSPACE_DIR"), "/e2e/keys/TEST_KEY_DO_NOT_USE_avb.passphrase", )); diff --git a/tests/compression.rs b/avbroot/tests/compression.rs similarity index 100% rename from tests/compression.rs rename to avbroot/tests/compression.rs diff --git a/tests/data/boot_v0.img b/avbroot/tests/data/boot_v0.img similarity index 100% rename from tests/data/boot_v0.img rename to avbroot/tests/data/boot_v0.img diff --git a/tests/data/boot_v1.img b/avbroot/tests/data/boot_v1.img similarity index 100% rename from tests/data/boot_v1.img rename to avbroot/tests/data/boot_v1.img diff --git a/tests/data/boot_v2.img b/avbroot/tests/data/boot_v2.img similarity index 100% rename from tests/data/boot_v2.img rename to avbroot/tests/data/boot_v2.img diff --git a/tests/data/boot_v3.img b/avbroot/tests/data/boot_v3.img similarity index 100% rename from tests/data/boot_v3.img rename to avbroot/tests/data/boot_v3.img diff --git a/tests/data/boot_v4.img b/avbroot/tests/data/boot_v4.img similarity index 100% rename from tests/data/boot_v4.img rename to avbroot/tests/data/boot_v4.img diff --git a/tests/data/boot_v4_vts.img b/avbroot/tests/data/boot_v4_vts.img similarity index 100% rename from tests/data/boot_v4_vts.img rename to avbroot/tests/data/boot_v4_vts.img diff --git a/tests/data/vbmeta_appended.img b/avbroot/tests/data/vbmeta_appended.img similarity index 100% rename from tests/data/vbmeta_appended.img rename to avbroot/tests/data/vbmeta_appended.img diff --git a/tests/data/vbmeta_root.img b/avbroot/tests/data/vbmeta_root.img similarity index 100% rename from tests/data/vbmeta_root.img rename to avbroot/tests/data/vbmeta_root.img diff --git a/tests/data/vendor_v3.img b/avbroot/tests/data/vendor_v3.img similarity index 100% rename from tests/data/vendor_v3.img rename to avbroot/tests/data/vendor_v3.img diff --git a/tests/data/vendor_v4.img b/avbroot/tests/data/vendor_v4.img similarity index 100% rename from tests/data/vendor_v4.img rename to avbroot/tests/data/vendor_v4.img diff --git a/e2e/Cargo.toml b/e2e/Cargo.toml index b1e7313..8f7d2a1 100644 --- a/e2e/Cargo.toml +++ b/e2e/Cargo.toml @@ -10,7 +10,7 @@ publish = false [dependencies] anyhow = "1.0.75" -avbroot = { path = ".." } +avbroot = { path = "../avbroot" } clap = { version = "4.4.1", features = ["derive"] } ctrlc = "3.4.0" hex = { version = "0.4.3", features = ["serde"] } diff --git a/xtask/src/version.rs b/xtask/src/version.rs index c631391..e29da63 100644 --- a/xtask/src/version.rs +++ b/xtask/src/version.rs @@ -20,7 +20,6 @@ fn update_cargo_version(version: &str) -> Result<()> { let data = fs::read_to_string(&path)?; let mut document: Document = data.parse()?; - document["package"]["version"] = value(version.clone()); document["workspace"]["package"]["version"] = value(version.clone()); fs::write(path, document.to_string())?;