Merge changes from topics "microdroid-no-bootstrap", "microdroid-starts-early"
* changes:
Microdroid_manager starts before apexd
microdroid runs in a single mount namespace
diff --git a/microdroid/init.rc b/microdroid/init.rc
index 614a5ed..043577d 100644
--- a/microdroid/init.rc
+++ b/microdroid/init.rc
@@ -15,13 +15,9 @@
# set RLIMIT_NICE to allow priorities from 19 to -20
setrlimit nice 40 40
- # in microdroid, we don't use "bootstrap" mount namespace
- # because APEXes are passed from host and are available
- # from the start. We don't need to wait till /data is ready.
- enter_default_mount_ns
-
start ueventd
+ start microdroid_manager
# TODO(b/190343842) verify apexes/apk before mounting them.
# Exec apexd in the VM mode to avoid unnecessary overhead of normal mode.
@@ -86,10 +82,6 @@
start adbd
- # TODO(b/186396070) microdroid_manager starts zipfuse if necessary
- # TODO(b/186396070) move this before apexd for DICE derivation
- start microdroid_manager
-
on load_persist_props_action
start logd
start logd-reinit
diff --git a/microdroid_manager/Android.bp b/microdroid_manager/Android.bp
index dabcf31..4ea156a 100644
--- a/microdroid_manager/Android.bp
+++ b/microdroid_manager/Android.bp
@@ -27,6 +27,7 @@
rust_binary {
name: "microdroid_manager",
defaults: ["microdroid_manager_defaults"],
+ bootstrap: true,
}
rust_test {
diff --git a/microdroid_manager/src/metadata.rs b/microdroid_manager/src/metadata.rs
index 86a9e3e..432a134 100644
--- a/microdroid_manager/src/metadata.rs
+++ b/microdroid_manager/src/metadata.rs
@@ -14,15 +14,19 @@
//! Payload metadata from /dev/block/by-name/payload-metadata
+use crate::ioutil;
+
use anyhow::Result;
use log::info;
use microdroid_metadata::{read_metadata, Metadata};
-use std::fs::File;
+use std::time::Duration;
+const WAIT_TIMEOUT: Duration = Duration::from_secs(10);
const PAYLOAD_METADATA_PATH: &str = "/dev/block/by-name/payload-metadata";
/// loads payload metadata from /dev/block/by-name/paylaod-metadata
pub fn load() -> Result<Metadata> {
info!("loading payload metadata...");
- read_metadata(File::open(PAYLOAD_METADATA_PATH)?)
+ let file = ioutil::wait_for_file(PAYLOAD_METADATA_PATH, WAIT_TIMEOUT)?;
+ read_metadata(file)
}