[config_data] Put files in meta/

Files in config_data are usually small.
Put them in meta/ so they're archived, rather than rounding up to blob
boundaries.

Impact: >3MB saved in one of the product builds. :)

Bug: 37055
Fixed: 37055
Change-Id: Ia5513e5c942dce4ad8a4826931d5804613a4d9af
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/434554
Commit-Queue: Shai Barack <shayba@google.com>
Reviewed-by: Petr Hosek <phosek@google.com>
Reviewed-by: Fady Samuel <fsamuel@google.com>
Testability-Review: Fady Samuel <fsamuel@google.com>
diff --git a/build/config.gni b/build/config.gni
index 8bcbfef..dc8620c 100644
--- a/build/config.gni
+++ b/build/config.gni
@@ -61,8 +61,12 @@
       }
       foreach(source, sources) {
         foreach(target, process_file_template([ source ], outputs)) {
-          config_package_entries += [ "data/" + for_pkg + "/" + target + "=" +
-                                      rebase_path(source, root_build_dir) ]
+          # Config files are usually small, so package them in meta/ so they're
+          # archived together rather than spread across individual blobs.
+          # See also: fxbug.dev/37055
+          config_package_entries +=
+              [ "meta/data/" + for_pkg + "/" + target + "=" +
+                rebase_path(source, root_build_dir) ]
         }
       }
     }
diff --git a/build/tools/validate_sysmgr_config.py b/build/tools/validate_sysmgr_config.py
index c6898a5..4b545d4 100755
--- a/build/tools/validate_sysmgr_config.py
+++ b/build/tools/validate_sysmgr_config.py
@@ -28,10 +28,10 @@
 The input provided to this tool is expected to be the config-data package
 manifest, formatted like this::
 
-  data/some_package/foo=../../src/somewhere/foo
-  data/sysmgr/services.config=../../src/sys/sysmgr/config/services.config
-  data/sysmgr/file1.config=../../src/bar/file1.config
-  data/other_package/baz=../../some/other/path/baz
+  meta/data/some_package/foo=../../src/somewhere/foo
+  meta/data/sysmgr/services.config=../../src/sys/sysmgr/config/services.config
+  meta/data/sysmgr/file1.config=../../src/bar/file1.config
+  meta/data/other_package/baz=../../some/other/path/baz
 
 where the path before the '=' is the destination path in the package, and the
 path after the '=' is the source file (rebased to the root build directory).
@@ -65,7 +65,9 @@
         lines = f.read().splitlines()
 
     # Build a list of all the source paths that contribute to sysmgr's config-data
-    sysmgr_lines = [line for line in lines if line.startswith('data/sysmgr/')]
+    sysmgr_lines = [
+        line for line in lines if line.startswith('meta/data/sysmgr/')
+    ]
     sysmgr_config_files = [line.split('=')[1] for line in sysmgr_lines]
 
     # Parse all config files.
diff --git a/garnet/bin/run_test_component/main.cc b/garnet/bin/run_test_component/main.cc
index b5526d0..1039926 100644
--- a/garnet/bin/run_test_component/main.cc
+++ b/garnet/bin/run_test_component/main.cc
@@ -54,7 +54,7 @@
 const uint64_t kNanosInSec = 1000000000UL;
 
 const std::string max_severity_config_path =
-    "/pkgfs/packages/config-data/0/data/run_test_component";
+    "/pkgfs/packages/config-data/0/meta/data/run_test_component";
 
 void PrintUsage() {
   fprintf(stderr, R"(
diff --git a/garnet/bin/setui/meta/setui_service.cml b/garnet/bin/setui/meta/setui_service.cml
index ad60c87..ea41d70 100644
--- a/garnet/bin/setui/meta/setui_service.cml
+++ b/garnet/bin/setui/meta/setui_service.cml
@@ -47,7 +47,7 @@
 
         // features: config-data
         {
-            directory: "/pkgfs/packages/config-data/0/data/setui_service",
+            directory: "/pkgfs/packages/config-data/0/meta/data/setui_service",
             from: "parent",
             as: "/config/data",
             rights: [ "r*" ],
diff --git a/garnet/bin/setui/src/agent/earcons/utils.rs b/garnet/bin/setui/src/agent/earcons/utils.rs
index 29531f1..5a0a5d7 100644
--- a/garnet/bin/setui/src/agent/earcons/utils.rs
+++ b/garnet/bin/setui/src/agent/earcons/utils.rs
@@ -22,12 +22,15 @@
     name: &str,
 ) -> Result<fidl::endpoints::ClientEnd<fidl_fuchsia_io::FileMarker>, Error> {
     // We try two paths here, because normal components see their config package data resources in
-    // /pkg/data and shell tools see them in /pkgfs/packages/config-data/0/data/<pkg>.
+    // /pkg/data and shell tools see them in /pkgfs/packages/config-data/0/meta/data/<pkg>.
     Ok(fidl::endpoints::ClientEnd::<fidl_fuchsia_io::FileMarker>::new(zx::Channel::from(
         fdio::transfer_fd(
             File::open(format!("/config/data/{}", name))
                 .or_else(|_| {
-                    File::open(format!("/pkgfs/packages/config-data/0/data/setui_service/{}", name))
+                    File::open(format!(
+                        "/pkgfs/packages/config-data/0/meta/data/setui_service/{}",
+                        name
+                    ))
                 })
                 .context("Opening package data file")?,
         )?,
diff --git a/src/session/bin/component_manager/meta/component_manager_sfw.cmx b/src/session/bin/component_manager/meta/component_manager_sfw.cmx
index 8d66ad0d..25cee37 100644
--- a/src/session/bin/component_manager/meta/component_manager_sfw.cmx
+++ b/src/session/bin/component_manager/meta/component_manager_sfw.cmx
@@ -21,8 +21,8 @@
             "root-ssl-certificates"
         ],
         "pkgfs": [
-            "packages/config-data/0/data/cast_agent",
-            "packages/config-data/0/data/setui_service"
+            "packages/config-data/0/meta/data/cast_agent",
+            "packages/config-data/0/meta/data/setui_service"
         ],
         "services": [
             "fuchsia.accessibility.SettingsManager",
diff --git a/src/session/bin/session_manager/meta/session_manager.cml b/src/session/bin/session_manager/meta/session_manager.cml
index 553df89..866c41d 100644
--- a/src/session/bin/session_manager/meta/session_manager.cml
+++ b/src/session/bin/session_manager/meta/session_manager.cml
@@ -137,13 +137,13 @@
         },
         {
             // features: config-data for cast_agent
-            directory: "/pkgfs/packages/config-data/0/data/cast_agent",
+            directory: "/pkgfs/packages/config-data/0/meta/data/cast_agent",
 
             // There is an approved Component Framework design to support
             // offering subdirectories.
             //
             // WHEN AVAILABLE, THIS SHOULD BE CHANGED TO JUST:
-            //   directory: "/pkgfs/packages/config-data/0/data",
+            //   directory: "/pkgfs/packages/config-data/0/meta/data",
             //   as: "/pkgfs-config-data"
             // and then share "/pkgfs-config-data/cast_agent" with the
             // cast_agent component.
@@ -153,7 +153,7 @@
         },
         {
             // features: config-data for setui_service (see above)
-            directory: "/pkgfs/packages/config-data/0/data/setui_service",
+            directory: "/pkgfs/packages/config-data/0/meta/data/setui_service",
             from: "parent",
             to: [ "#session" ],
             rights: [ "r*" ],
diff --git a/src/storage/fshost/meta/fshost.cml b/src/storage/fshost/meta/fshost.cml
index 786dcdd2..8ce9852 100644
--- a/src/storage/fshost/meta/fshost.cml
+++ b/src/storage/fshost/meta/fshost.cml
@@ -9,7 +9,7 @@
             directory: "config-data",
             from: "self",
             rights: [ "r*" ],
-            path: "/delayed/fs/pkgfs/packages/config-data/0/data",
+            path: "/delayed/fs/pkgfs/packages/config-data/0/meta/data",
         },
     ],
     use: [
@@ -107,7 +107,7 @@
             from: "self",
         },
         {
-            directory: "/delayed/fs/pkgfs/packages/config-data/0/data",
+            directory: "/delayed/fs/pkgfs/packages/config-data/0/meta/data",
             from: "self",
             as: "/config/data",
             rights: [ "r*" ],
diff --git a/src/sys/appmgr/appmgr.cc b/src/sys/appmgr/appmgr.cc
index 2332cf3..c36d048 100644
--- a/src/sys/appmgr/appmgr.cc
+++ b/src/sys/appmgr/appmgr.cc
@@ -66,7 +66,7 @@
   storage_watchdog_.Run(dispatcher);
 
   // 1. Create root realm.
-  fxl::UniqueFD appmgr_config_dir(open("/pkgfs/packages/config-data/0/data/appmgr", O_RDONLY));
+  fxl::UniqueFD appmgr_config_dir(open("/pkgfs/packages/config-data/0/meta/data/appmgr", O_RDONLY));
   fit::result<fbl::RefPtr<ComponentIdIndex>, ComponentIdIndex::Error> component_id_index =
       ComponentIdIndex::CreateFromAppmgrConfigDir(appmgr_config_dir);
   FX_CHECK(component_id_index) << "Cannot read component ID Index. error = "
diff --git a/src/sys/appmgr/integration_tests/lifecycle/meta/appmgr-lifecycle-tests.cmx b/src/sys/appmgr/integration_tests/lifecycle/meta/appmgr-lifecycle-tests.cmx
index f9ae5ee..2b8cc83 100644
--- a/src/sys/appmgr/integration_tests/lifecycle/meta/appmgr-lifecycle-tests.cmx
+++ b/src/sys/appmgr/integration_tests/lifecycle/meta/appmgr-lifecycle-tests.cmx
@@ -8,7 +8,7 @@
             "isolated-temp"
         ],
         "pkgfs": [
-            "packages/config-data/0/data/appmgr"
+            "packages/config-data/0/meta/data/appmgr"
         ],
         "services": [
             "fuchsia.logger.LogSink",
diff --git a/src/sys/appmgr/integration_tests/outdir/src/main.rs b/src/sys/appmgr/integration_tests/outdir/src/main.rs
index b247d2c..c7c8bae 100644
--- a/src/sys/appmgr/integration_tests/outdir/src/main.rs
+++ b/src/sys/appmgr/integration_tests/outdir/src/main.rs
@@ -84,14 +84,16 @@
                 },
                 "config-data" => pseudo_directory! {
                     "0" => pseudo_directory! {
-                        "data" => pseudo_directory! {
-                            "sysmgr" => pseudo_directory! {
-                                "services.config" => read_only_static(SYSMGR_SERVICES_CONFIG),
-                            },
-                            "appmgr" => pseudo_directory! {
-                                "scheme_map" => pseudo_directory! {
-                                    "default.config" => read_only_static(APPMGR_SCHEME_MAP),
-                                }
+                        "meta" => pseudo_directory! {
+                            "data" => pseudo_directory! {
+                                "sysmgr" => pseudo_directory! {
+                                    "services.config" => read_only_static(SYSMGR_SERVICES_CONFIG),
+                                },
+                                "appmgr" => pseudo_directory! {
+                                    "scheme_map" => pseudo_directory! {
+                                        "default.config" => read_only_static(APPMGR_SCHEME_MAP),
+                                    }
+                                },
                             },
                         },
                     },
diff --git a/src/sys/appmgr/namespace_builder.cc b/src/sys/appmgr/namespace_builder.cc
index c090ed5..296c34f 100644
--- a/src/sys/appmgr/namespace_builder.cc
+++ b/src/sys/appmgr/namespace_builder.cc
@@ -48,7 +48,8 @@
 void NamespaceBuilder::AddConfigData(const SandboxMetadata& sandbox, const std::string& pkg_name) {
   for (const auto& feature : sandbox.features()) {
     if (feature == "config-data") {
-      PushDirectoryFromPathAs("/pkgfs/packages/config-data/0/data/" + pkg_name, "/config/data");
+      PushDirectoryFromPathAs("/pkgfs/packages/config-data/0/meta/data/" + pkg_name,
+                              "/config/data");
     }
   }
 }
@@ -154,7 +155,7 @@
       PushDirectoryFromPath("/dev/class/goldfish-control");
       PushDirectoryFromPath("/dev/class/goldfish-pipe");
       PushDirectoryFromPath("/dev/class/gpu");
-      PushDirectoryFromPathAs("/pkgfs/packages/config-data/0/data/vulkan-icd/icd.d",
+      PushDirectoryFromPathAs("/pkgfs/packages/config-data/0/meta/data/vulkan-icd/icd.d",
                               "/config/vulkan/icd.d");
     } else if (feature == "isolated-cache-storage") {
       PushDirectoryFromPathAs(isolated_cache_path_factory().value(), "/cache");
diff --git a/src/sys/component_manager_for_test/config.json b/src/sys/component_manager_for_test/config.json
index 12150a3..28b21cf 100644
--- a/src/sys/component_manager_for_test/config.json
+++ b/src/sys/component_manager_for_test/config.json
@@ -12,7 +12,7 @@
         {
             directory: "config-data",
             rights: [ "r*" ],
-            path: "/pkgfs/packages/config-data/0/data",
+            path: "/pkgfs/packages/config-data/0/meta/data",
         },
         {
             protocol: [
diff --git a/src/sys/component_manager_for_test/meta/component_manager_for_test.cmx b/src/sys/component_manager_for_test/meta/component_manager_for_test.cmx
index a3ca025e..c24d55c 100644
--- a/src/sys/component_manager_for_test/meta/component_manager_for_test.cmx
+++ b/src/sys/component_manager_for_test/meta/component_manager_for_test.cmx
@@ -14,7 +14,7 @@
             "isolated-temp"
         ],
         "pkgfs": [
-            "packages/config-data/0/data"
+            "packages/config-data/0/meta/data"
         ],
         "services": [
             "fuchsia.boot.WriteOnlyLog",
diff --git a/src/sys/component_manager_for_test/meta/test_manager_envelope.cml b/src/sys/component_manager_for_test/meta/test_manager_envelope.cml
index e0ab002..3dbcdbf 100644
--- a/src/sys/component_manager_for_test/meta/test_manager_envelope.cml
+++ b/src/sys/component_manager_for_test/meta/test_manager_envelope.cml
@@ -1,5 +1,5 @@
 // We need this cml so that we can transform paths from appmgr's namespace like
-//  "/pkgfs/packages/config-data/0/data" to "/config/data" and present them to test_manager.
+//  "/pkgfs/packages/config-data/0/meta/data" to "/config/data" and present them to test_manager.
 // TODO(56604): I don't think we need this component anymore?
 {
     children: [