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)
 }