From 5b59ee94971abb28eeda1cb66b9c1bd82523febd Mon Sep 17 00:00:00 2001 From: SukhyungKang Date: Tue, 16 Jan 2024 17:09:37 +0900 Subject: [PATCH] Add to mount lib directory for rpk - 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 --- src/launchpad-process-pool/app_executor.cc | 6 ++++++ src/launchpad-process-pool/loader_mount.cc | 10 ++++++++-- src/lib/launchpad-common/aul_keys.hh | 1 + src/lib/launchpad-glib/util.cc | 10 ++++++++++ src/lib/launchpad-glib/util.hh | 1 + src/lib/launchpad/step_prepare_execution.cc | 5 +++++ 6 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/launchpad-process-pool/app_executor.cc b/src/launchpad-process-pool/app_executor.cc index c47d3cf..84a164f 100644 --- a/src/launchpad-process-pool/app_executor.cc +++ b/src/launchpad-process-pool/app_executor.cc @@ -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_); } diff --git a/src/launchpad-process-pool/loader_mount.cc b/src/launchpad-process-pool/loader_mount.cc index b31bb11..b6414de 100644 --- a/src/launchpad-process-pool/loader_mount.cc +++ b/src/launchpad-process-pool/loader_mount.cc @@ -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_); } diff --git a/src/lib/launchpad-common/aul_keys.hh b/src/lib/launchpad-common/aul_keys.hh index de54fbf..5606e94 100644 --- a/src/lib/launchpad-common/aul_keys.hh +++ b/src/lib/launchpad-common/aul_keys.hh @@ -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 diff --git a/src/lib/launchpad-glib/util.cc b/src/lib/launchpad-glib/util.cc index 0cf50c4..088f9c0 100644 --- a/src/lib/launchpad-glib/util.cc +++ b/src/lib/launchpad-glib/util.cc @@ -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()) { diff --git a/src/lib/launchpad-glib/util.hh b/src/lib/launchpad-glib/util.hh index fa490fa..9619d63 100644 --- a/src/lib/launchpad-glib/util.hh +++ b/src/lib/launchpad-glib/util.hh @@ -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 diff --git a/src/lib/launchpad/step_prepare_execution.cc b/src/lib/launchpad/step_prepare_execution.cc index 7da7fa3..0c177a6 100644 --- a/src/lib/launchpad/step_prepare_execution.cc +++ b/src/lib/launchpad/step_prepare_execution.cc @@ -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); -- 2.7.4