From 42fc5a9c9dee4c2465308781e65ddbd651714337 Mon Sep 17 00:00:00 2001 From: Eero Kelly Date: Tue, 14 May 2024 22:40:49 +0000 Subject: [PATCH] [NODE-1355] Create tool to help with migration to e2fsdroid --- Cargo.lock | 12 +++++++++--- Cargo.toml | 1 + rs/ic_os/diroid/BUILD.bazel | 17 +++++++++++++++++ rs/ic_os/diroid/Cargo.toml | 9 +++++++++ rs/ic_os/diroid/README.md | 4 ++++ rs/ic_os/diroid/src/main.rs | 25 +++++++++++++++++++++++++ 6 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 rs/ic_os/diroid/BUILD.bazel create mode 100644 rs/ic_os/diroid/Cargo.toml create mode 100644 rs/ic_os/diroid/README.md create mode 100644 rs/ic_os/diroid/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 32290c24592..c5a19177ad8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3293,6 +3293,13 @@ dependencies = [ "subtle", ] +[[package]] +name = "diroid" +version = "0.1.0" +dependencies = [ + "walkdir", +] + [[package]] name = "dirs" version = "2.0.2" @@ -19983,12 +19990,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", - "winapi 0.3.9", "winapi-util", ] diff --git a/Cargo.toml b/Cargo.toml index 36c1414ca9e..e9f4d92c92f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -124,6 +124,7 @@ members = [ "rs/http_utils", "rs/ic_os/deterministic_ips", "rs/ic_os/dflate", + "rs/ic_os/diroid", "rs/ic_os/config", "rs/ic_os/fstrim_tool", "rs/ic_os/guestos_tool", diff --git a/rs/ic_os/diroid/BUILD.bazel b/rs/ic_os/diroid/BUILD.bazel new file mode 100644 index 00000000000..37abccaebdb --- /dev/null +++ b/rs/ic_os/diroid/BUILD.bazel @@ -0,0 +1,17 @@ +load("@rules_rust//rust:defs.bzl", "rust_binary") + +package(default_visibility = ["//visibility:public"]) + +DEPENDENCIES = [ + "@crate_index//:walkdir", +] + +MACRO_DEPENDENCIES = [] + +rust_binary( + name = "diroid", + srcs = glob(["src/**/*.rs"]), + proc_macro_deps = MACRO_DEPENDENCIES, + version = "0.1.0", + deps = DEPENDENCIES, +) diff --git a/rs/ic_os/diroid/Cargo.toml b/rs/ic_os/diroid/Cargo.toml new file mode 100644 index 00000000000..5af776e7ea6 --- /dev/null +++ b/rs/ic_os/diroid/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "diroid" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +walkdir = "2.5.0" diff --git a/rs/ic_os/diroid/README.md b/rs/ic_os/diroid/README.md new file mode 100644 index 00000000000..0fb18221215 --- /dev/null +++ b/rs/ic_os/diroid/README.md @@ -0,0 +1,4 @@ +# diroid + +`diroid` is a tool that generates an `e2fsdroid` `fs_config` file for a given directory tree. +This file describes the metadata associated with files as they are placed into the filesystem. diff --git a/rs/ic_os/diroid/src/main.rs b/rs/ic_os/diroid/src/main.rs new file mode 100644 index 00000000000..9a64eda5d20 --- /dev/null +++ b/rs/ic_os/diroid/src/main.rs @@ -0,0 +1,25 @@ +use std::env; +use std::os::unix::fs::MetadataExt; + +use walkdir::WalkDir; + +fn main() { + let args: Vec = env::args().collect(); + + if args.len() != 2 { + panic!("Incorrect arguments!"); + } + + for entry in WalkDir::new(&args[1]) { + let entry = entry.unwrap(); + + let metadata = entry.metadata().unwrap(); + println!( + "{} {} {} {:o}", + entry.path().strip_prefix(&args[1]).unwrap().display(), + metadata.uid(), + metadata.gid(), + metadata.mode() + ); + } +}