diff --git a/CMakeLists.txt b/CMakeLists.txt index 31beca4dd1..d5386a95cd 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,12 +193,27 @@ set(CPACK_PACKAGE_VERSION ${VERSION_STRING}) # This is used by configure_file for *_postinit.in set(RDC_CLIENT_ROOT_PATH "${RDC_SERVER_ROOT_PATH}/${RDC_CLIENT_INSTALL_PREFIX}") + +#Identify between SLES and Centos for setting symlink for rdc.service +#SLES need serice file in /usr/lib/systemd/system/rdc.service +#CENTOS/RHEL Require file in /lib/systemd/system/rdc.service +file(STRINGS /etc/os-release LINUX_DISTRO LIMIT_COUNT 1 REGEX "NAME=") +message ( "Using Linux Distro: ${LINUX_DISTRO}" ) +if(LINUX_DISTRO MATCHES "SLES") + set(DISTRO_ROOT "/usr/lib/systemd/system") +else() + set(DISTRO_ROOT "/lib/systemd/system") +endif() + configure_file( "${PROJECT_SOURCE_DIR}/src/DEBIAN_postinst.in" "${PROJECT_SOURCE_DIR}/DEBIAN/postinst") configure_file( "${PROJECT_SOURCE_DIR}/src/RPM_rpm_post.in" "${PROJECT_SOURCE_DIR}/RPM/rpm_post") +configure_file( + "${PROJECT_SOURCE_DIR}/src/RPM_postun.in" + "${PROJECT_SOURCE_DIR}/RPM/rpm_postun") if ( DEFINED ENV{ROCM_LIBPATCH_VERSION} ) set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.$ENV{ROCM_LIBPATCH_VERSION}" ) diff --git a/DEBIAN/prerm b/DEBIAN/prerm index 66d0a0b601..3d2dc1c67b 100755 --- a/DEBIAN/prerm +++ b/DEBIAN/prerm @@ -1,14 +1,21 @@ #!/bin/bash - -set -e - -rm_ldconfig() { - rm -f /etc/ld.so.conf.d/x86_64-librdc_client.conf && ldconfig +stop_rdc() { + #stop RDC if running + systemctl stop rdc + return 0 } +reload_systemd() { + systemctl daemon-reload + return 0 +} +set -e + case "$1" in remove) - rm_ldconfig + stop_rdc + unlink /lib/systemd/system/rdc.service + reload_systemd ;; purge) ;; diff --git a/README.md b/README.md index a314584a03..16249b7319 100644 --- a/README.md +++ b/README.md @@ -100,12 +100,14 @@ When *rdcd* is started from a command-line the *capabilities* are determined by $ cd rdc_install_prefix ## If specified in Building RDC section ## To run with authentication. Ensure SSL keys are setup properly - $ ./usr/sbin/rdcd ## rdcd is started with monitor-only capabilities - $ sudo ./usr/sbin/rdcd ## rdcd is started will full-capabilities + ## version will be the version number(ex:3.10.0) of ROCm where RDC was pacakged with + $ /opt/rocm-/rdc/bin/rdcd ## rdcd is started with monitor-only capabilities + $ sudo /opt/rocm-/rdc/bin/rdcd ## rdcd is started will full-capabilities ## To run without authentication. SSL key & certificates are not required. - $ ./usr/sbin/rdcd -u ## rdcd is started with monitor-only capabilities - $ sudo ./usr/sbin/rdcd -u ## rdcd is started will full-capabilities + ## version will be the version number(ex:3.10.0) of ROCm where RDC was pacakged with + $ /opt/rocm-/rdc/bin/rdcd -u ## rdcd is started with monitor-only capabilities + $ sudo /opt/rocm-/rdc/bin/rdcd -u ## rdcd is started will full-capabilities ### Start RDCD using systemd *rdcd* can be started by using the systemctl command. systemctl will read /lib/systemd/system/rdc.service, which is installed with rdc. This file has 2 lines that control what *capabilities* with which *rdcd* will run. If left uncommented, rdcd will run with full-capabilities. @@ -137,6 +139,7 @@ Log messages that can provide useful debug information. journalctl -u rdc ## To run rdcd with debug log from command-line use - RDC_LOG=DEBUG ./usr/sbin/rdcd + ## version will be the version number(ex:3.10.0) of ROCm where RDC was pacakged with + RDC_LOG=DEBUG /opt/rocm-/rdc/bin/rdcd diff --git a/RPM/rpm_postun b/RPM/rpm_postun deleted file mode 100755 index 3622b8b74a..0000000000 --- a/RPM/rpm_postun +++ /dev/null @@ -1,3 +0,0 @@ -if [ $1 -eq 0 ]; then - rm -f /etc/ld.so.conf.d/x86_64-librdc_client.conf && ldconfig -fi diff --git a/rdci/CMakeLists.txt b/rdci/CMakeLists.txt index 4cf8543713..d298b1562e 100644 --- a/rdci/CMakeLists.txt +++ b/rdci/CMakeLists.txt @@ -89,6 +89,14 @@ link_directories(${LIB_BOOSTRAP_DIR}) add_executable(${RDCI_EXE} "${RDCI_SRC_LIST}") +## RUNPATH should help to run "rdci" without the usage of ldconfig +set(RDC_RUNPATH "\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../lib64") +set(GRPC_RUNPATH "\$ORIGIN/../../grpc/lib:\$ORIGIN/../../grpc/lib64") +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--rpath,${RDC_RUNPATH}:${GRPC_RUNPATH}") +set(CMAKE_SKIP_BUILD_RPATH TRUE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +set(CMAKE_SKIP_RPATH TRUE) + target_link_libraries(${RDCI_EXE} pthread dl rdc_bootstrap) diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt index 8352eddfcc..5f0e8be5db 100755 --- a/server/CMakeLists.txt +++ b/server/CMakeLists.txt @@ -81,10 +81,21 @@ set(SERVER_SRC_LIST ${SERVER_SRC_LIST} "${RDC_SRC_ROOT}/common/rdc_utils.cc") message("SERVER_SRC_LIST=${SERVER_SRC_LIST}") set(SERVER_DAEMON_EXE "rdcd") +configure_file("rdc.service.in" "${PROJECT_BINARY_DIR}/rdc.service" @ONLY) set(SERVICE_FILE_NAME "rdc.service") link_directories(${RSMI_LIB_DIR} "${GRPC_ROOT}/lib" "${GRPC_ROOT}/lib64") +## Set RUNPATH if ROCM_RPATH is defined and passed by the environment +## RUNPATH should help to run "rdcd" without the usage of ldconfig +if (DEFINED ENV{ROCM_RPATH}) + set (GRPC_RUNPATH "\$ORIGIN/../../grpc/lib:\$ORIGIN/../../grpc/lib64") + set (CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags") + set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${GRPC_RUNPATH}") + set (CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + set (CMAKE_SKIP_BUILD_RPATH TRUE) +endif () + add_executable(${SERVER_DAEMON_EXE} "${SERVER_SRC_LIST}") # target_include_directories(${SERVER_DAEMON_EXE} PUBLIC ${RSMI_INC_DIR}) @@ -94,10 +105,10 @@ target_link_libraries(${SERVER_DAEMON_EXE} pthread rt grpc grpc++ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SERVER_DAEMON_EXE} PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE - DESTINATION usr/sbin + DESTINATION ${RDC_CLIENT_INSTALL_PREFIX}/rdc/bin COMPONENT ${SERVER_COMPONENT}) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SERVICE_FILE_NAME} - DESTINATION lib/systemd/system +install(FILES ${PROJECT_BINARY_DIR}/${SERVICE_FILE_NAME} + DESTINATION ${RDC_CLIENT_INSTALL_PREFIX}/rdc/lib COMPONENT ${SERVER_COMPONENT}) message("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&") diff --git a/server/rdc.service b/server/rdc.service.in similarity index 95% rename from server/rdc.service rename to server/rdc.service.in index 7e6fb8890f..4d08f95ccd 100755 --- a/server/rdc.service +++ b/server/rdc.service.in @@ -24,7 +24,7 @@ AmbientCapabilities=CAP_DAC_OVERRIDE # If we need to start anything before rdcd, use this # ExecStartPre= -ExecStart=/usr/sbin/rdcd +ExecStart=/@RDC_CLIENT_INSTALL_PREFIX@/rdc/bin/rdcd # If we need to start anything after rdcd use this # ExecStartPost= diff --git a/src/DEBIAN_postinst.in b/src/DEBIAN_postinst.in index 4bec5efbfa..8342026f95 100755 --- a/src/DEBIAN_postinst.in +++ b/src/DEBIAN_postinst.in @@ -1,28 +1,24 @@ #/bin/bash -RDC_LIB_DIR=@RDC_CLIENT_ROOT_PATH@/rdc/lib -GRPC_LIB_DIR=@RDC_CLIENT_ROOT_PATH@/grpc/lib - # This will return 0 if an id is created and non-zero if # it already exists do_create_rdc_user() { useradd -r -s /bin/nologin rdc + # Make sure this doesn't return non-zero if an id already exists + return 0 } -# librdc_client.so -do_ldconfig() { - echo "$RDC_LIB_DIR" > /etc/ld.so.conf.d/x86_64-librdc_client.conf - echo "$GRPC_LIB_DIR" >> /etc/ld.so.conf.d/x86_64-librdc_client.conf && ldconfig - - do_create_rdc_user - - # Make sure this doesn't return non-zero if an id already exists +reload_systemd() { + systemctl daemon-reload return 0 } case "$1" in configure) - do_ldconfig + do_create_rdc_user + #Symlink RDC Service + ln -s -f -r /@RDC_CLIENT_INSTALL_PREFIX@/rdc/lib/rdc.service /lib/systemd/system/rdc.service + reload_systemd exit 0 ;; abort-upgrade|abort-remove|abort-deconfigure) diff --git a/src/RPM_postun.in b/src/RPM_postun.in new file mode 100755 index 0000000000..07731c520d --- /dev/null +++ b/src/RPM_postun.in @@ -0,0 +1,16 @@ +stop_rdc() { + #stop RDC if running + systemctl stop rdc + return 0 +} + +reload_systemd() { + systemctl daemon-reload + return 0 +} + +if [ $1 -eq 0 ]; then + stop_rdc + unlink @DISTRO_ROOT@/rdc.service + reload_systemd +fi diff --git a/src/RPM_rpm_post.in b/src/RPM_rpm_post.in index 1323150aca..f99611e85e 100755 --- a/src/RPM_rpm_post.in +++ b/src/RPM_rpm_post.in @@ -1,16 +1,19 @@ #!/bin/bash -RDC_LIB_DIR=@RDC_CLIENT_ROOT_PATH@/rdc/lib -GRPC_LIB_DIR=@RDC_CLIENT_ROOT_PATH@/grpc/lib - do_create_rdc_user() { useradd -r -s /bin/nologin rdc + # Make sure this doesn't return non-zero if an id already exists + return 0 } +reload_systemd() { + systemctl daemon-reload + return 0 +} do_create_rdc_user -echo "$GRPC_LIB_DIR" > /etc/ld.so.conf.d/x86_64-librdc_client.conf -echo "$GRPC_LIB_DIR"64 >> /etc/ld.so.conf.d/x86_64-librdc_client.conf -echo "$RDC_LIB_DIR" >> /etc/ld.so.conf.d/x86_64-librdc_client.conf -echo "$RDC_LIB_DIR"64 >> /etc/ld.so.conf.d/x86_64-librdc_client.conf -ldconfig +#Symlink RDC Service +ln -s -f -r /@RDC_CLIENT_INSTALL_PREFIX@/rdc/lib/rdc.service @DISTRO_ROOT@/rdc.service + +#Request systemctl to reload file since RDC is adding new file/service +reload_systemd