Add to mount lib directory for rpk 47/304347/14
authorSukhyungKang <shine.kang@samsung.com>
Tue, 16 Jan 2024 08:09:37 +0000 (17:09 +0900)
committerHwanKyu Jhun <h.jhun@samsung.com>
Wed, 31 Jan 2024 05:18:42 +0000 (05:18 +0000)
- The RPK supports Libs sharing. Libs are packaged in /lib directory in
rpk package. And then it's mounted to user package's /lib directory path.

Change-Id: If9120038f644e85bc6688d27d5ee5e902239a9b3
Signed-off-by: SukhyungKang <shine.kang@samsung.com>
src/launchpad-process-pool/app_executor.cc
src/launchpad-process-pool/loader_mount.cc
src/lib/launchpad-common/aul_keys.hh
src/lib/launchpad-glib/util.cc
src/lib/launchpad-glib/util.hh
src/lib/launchpad/step_prepare_execution.cc

index c47d3cf..84a164f 100644 (file)
@@ -206,6 +206,12 @@ int AppExecutor::StepMountResDir() {
     return ret;
   }
 
+  ret = Util::MountLibraryDirectories(app_info_->GetBundle());
+  if (ret != 0) {
+    _E("Failed to mount lib directories");
+    return ret;
+  }
+
   return Util::MountResourceDirectories(app_info_);
 }
 
index b31bb11..b6414de 100644 (file)
@@ -217,7 +217,8 @@ void LoaderMount::HandleSigchld(pid_t pid) {
 
 int LoaderMount::Mount(pid_t pid, const AppInfo* app_info) {
   auto& b = app_info->GetBundle();
-  if (b.GetType(kAulMountGadgetPaths) == BUNDLE_TYPE_NONE) return 0;
+  if (b.GetType(kAulMountGadgetPaths) == BUNDLE_TYPE_NONE &&
+      b.GetType(kAulMountLibDir) == BUNDLE_TYPE_NONE) return 0;
 
   tizen_base::Parcel parcel;
   Request request(pid, b);
@@ -313,7 +314,12 @@ int LoaderMount::ProcessRequests() {
     Request request(&parcel);
     ret = ChangeMountNamespace(request.GetPid());
     if (ret == 0) {
-      ret = Util::MountGadgetDirectories(request.GetBundle());
+      auto& b = request.GetBundle();
+      if (b.GetType(kAulMountGadgetPaths) != BUNDLE_TYPE_NONE)
+        ret |= Util::MountGadgetDirectories(b);
+      if (b.GetType(kAulMountLibDir) != BUNDLE_TYPE_NONE)
+        ret |= Util::MountLibraryDirectories(b);
+
       ChangeMountNamespace(launchpad_ppid_);
     }
 
index de54fbf..5606e94 100644 (file)
@@ -55,6 +55,7 @@ constexpr const char kAulWaylandDisplay[] = "__AUL_WAYLAND_DISPLAY__";
 constexpr const char kAulWaylandWorkingDir[] = "__AUL_WAYLAND_WORKING_DIR__";
 constexpr const char kAulMountGadgetPaths[] = "__AUL_MOUNT_GADGET_PATHS__";
 constexpr const char kAulMountGadgetPkgIds[] = "__AUL_MOUNT_GADGET_PKGIDS__";
+constexpr const char kAulMountLibDir[] = "__AUL_MOUNT_LIB_DIR__";
 
 }  // namespace launchpad
 
index 0cf50c4..088f9c0 100644 (file)
@@ -471,6 +471,16 @@ int Util::MountResourceDirectories(const AppInfo* app_info) {
   return 0;
 }
 
+int Util::MountLibraryDirectories(const tizen_base::Bundle& b) {
+  auto lib_dir = b.GetStringArray(kAulMountLibDir);
+  if (!lib_dir.empty()) {
+    auto root_path = b.GetString(kAulRootPath);
+    MountDirectories(lib_dir, root_path + "/lib/");
+  }
+
+  return 0;
+}
+
 int Util::MountGadgetDirectories(const tizen_base::Bundle& b) {
   auto gadget_paths = b.GetStringArray(kAulMountGadgetPaths);
   if (!gadget_paths.empty()) {
index fa490fa..9619d63 100644 (file)
@@ -49,6 +49,7 @@ class EXPORT_API Util {
   static int PrepareAppIdFile(const AppInfo* app_info);
   static int SendCmdToAmd(enum AmdCmd cmd);
   static int SendCmdToAmd(enum AmdCmd cmd, bundle* request, int opt);
+  static int MountLibraryDirectories(const tizen_base::Bundle& b);
 };
 
 }  // namespace launchpad
index 7da7fa3..0c177a6 100644 (file)
@@ -103,6 +103,11 @@ int StepPrepareExecution::MountResourceDirectories(AppInfo* app_info) {
       _E("Failed to mount gadget resources");
       return -1;
     }
+
+    if (Util::MountLibraryDirectories(app_info->GetBundle()) != 0) {
+      _E("Failed to mount library direstories");
+      return -1;
+    }
   }
 
   int ret = Util::MountResourceDirectories(app_info);