From 1022ed91ac4242d05246e03275572bd4d8b225ed Mon Sep 17 00:00:00 2001 From: Eric Badger Date: Mon, 15 Mar 2021 20:01:24 +0000 Subject: [PATCH] YARN-10495. make the rpath of container-executor configurable. Contributed by angerszhu. (cherry picked from commit 7d3c8ef6064efd132828765e52e961977aebbf47) --- .../hadoop-yarn-server-nodemanager/pom.xml | 2 ++ .../src/CMakeLists.txt | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/pom.xml index 0ba9da41e0..2504f7a3a9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/pom.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/pom.xml @@ -30,6 +30,7 @@ ${project.parent.parent.basedir} ../etc/hadoop + ../lib/native @@ -199,6 +200,7 @@ ${basedir}/src ${container-executor.conf.dir} + ${extra.libhadoop.rpath} ${sun.arch.data.model} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/CMakeLists.txt b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/CMakeLists.txt index 677429bb99..e2cfbc52df 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/CMakeLists.txt +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/CMakeLists.txt @@ -25,6 +25,8 @@ set(GTEST_SRC_DIR ${CMAKE_SOURCE_DIR}/../../../../../hadoop-common-project/hadoo set(HADOOP_COMMON_SEC_PATH ${HADOOP_COMMON_PATH}/src/main/native/src/org/apache/hadoop/security) +set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + # determine if container-executor.conf.dir is an absolute # path in case the OS we're compiling on doesn't have # a hook in get_executable. We'll use this define @@ -157,6 +159,18 @@ add_executable(container-executor main/native/container-executor/impl/main.c ) +# By embedding '$ORIGIN' into the RPATH of container-executor, dlopen will look in +# the directory containing container-executor. However, $ORIGIN is not supported by +# all operating systems. +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|SunOS") + set(RPATH "\$ORIGIN/") + if(EXTRA_LIBHADOOP_RPATH) + set(RPATH "${RPATH}:${EXTRA_LIBHADOOP_RPATH}/") + endif() + message("RPATH SET AS ${RPATH}.") + set_target_properties(container-executor PROPERTIES INSTALL_RPATH "${RPATH}") +endif() + target_link_libraries(container-executor container crypto @@ -168,6 +182,19 @@ output_directory(container-executor target/usr/local/bin) add_executable(test-container-executor main/native/container-executor/test/test-container-executor.c ) + +# By embedding '$ORIGIN' into the RPATH of test-container-executor, dlopen will look in +# the directory containing test-container-executor. However, $ORIGIN is not supported by +# all operating systems. +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|SunOS") + set(RPATH "\$ORIGIN/") + if(EXTRA_LIBHADOOP_RPATH) + set(RPATH "${RPATH}:${EXTRA_LIBHADOOP_RPATH}/") + endif() + message("RPATH SET AS ${RPATH}.") + set_target_properties(test-container-executor PROPERTIES INSTALL_RPATH "${RPATH}") +endif() + target_link_libraries(test-container-executor container ${EXTRA_LIBS}