summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSukhyungKang <shine.kang@samsung.com>2024-01-16 17:09:37 +0900
committerHwanKyu Jhun <h.jhun@samsung.com>2024-01-31 05:18:42 +0000
commit5b59ee94971abb28eeda1cb66b9c1bd82523febd (patch)
treef5cd3935b09109a792558d928e25c9e8902c6833
parent0c0f20baffb827177aa22e104d191b2b32ae7d75 (diff)
downloadlaunchpad-5b59ee94971abb28eeda1cb66b9c1bd82523febd.tar.gz
launchpad-5b59ee94971abb28eeda1cb66b9c1bd82523febd.tar.bz2
launchpad-5b59ee94971abb28eeda1cb66b9c1bd82523febd.zip
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 <shine.kang@samsung.com>
-rw-r--r--src/launchpad-process-pool/app_executor.cc6
-rw-r--r--src/launchpad-process-pool/loader_mount.cc10
-rw-r--r--src/lib/launchpad-common/aul_keys.hh1
-rw-r--r--src/lib/launchpad-glib/util.cc10
-rw-r--r--src/lib/launchpad-glib/util.hh1
-rw-r--r--src/lib/launchpad/step_prepare_execution.cc5
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);