diff --git a/cmake/CPackage.cmake b/cmake/CPackage.cmake index 0034a0e3716..be22d64c3e4 100644 --- a/cmake/CPackage.cmake +++ b/cmake/CPackage.cmake @@ -144,13 +144,14 @@ macro(package to_one name home_page scripts_dir) set(CPACK_DEB_COMPONENT_INSTALL YES) set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${CMAKE_HOST_SYSTEM_PROCESSOR}) set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${home_page}) - set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${scripts_dir}/postinst) + set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${scripts_dir}/postinst;${scripts_dir}/prerm) set(CPACK_RPM_SPEC_MORE_DEFINE "%define debug_package %{nil} %define __os_install_post %{nil}") set(CPACK_RPM_COMPONENT_INSTALL YES) set(CPACK_RPM_PACKAGE_ARCHITECTURE ${CMAKE_HOST_SYSTEM_PROCESSOR}) set(CPACK_RPM_PACKAGE_URL ${home_page}) + set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE ${scripts_dir}/rpm_preuninst) set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE ${scripts_dir}/rpm_postinst) set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/local) set(CPACK_RPM_PACKAGE_RELOCATABLE ON) diff --git a/package/prerm b/package/prerm new file mode 100755 index 00000000000..0de9be4a62a --- /dev/null +++ b/package/prerm @@ -0,0 +1,10 @@ +#!/bin/bash + +install_dir=/usr/local/nebula +daemons=(storaged metad graphd) +for daemon in ${daemons[@]} +do + if [[ ! -f $install_dir/scripts/nebula.service ]] ; then + $install_dir/scripts/nebula.service stop ${daemon} + fi +done diff --git a/package/rpm_preuninst b/package/rpm_preuninst new file mode 100755 index 00000000000..f0bff58d960 --- /dev/null +++ b/package/rpm_preuninst @@ -0,0 +1,9 @@ +#!/bin/bash + +daemons=(storaged metad graphd) +for daemon in ${daemons[@]} +do + if [[ ! -f $RPM_INSTALL_PREFIX/scripts/nebula.service ]] ; then + $RPM_INSTALL_PREFIX/scripts/nebula.service stop ${daemon} + fi +done diff --git a/scripts/nebula.service b/scripts/nebula.service index 7fea4a2f977..b21d151be85 100755 --- a/scripts/nebula.service +++ b/scripts/nebula.service @@ -141,6 +141,8 @@ function start_daemon { local command="${executable} --flagfile ${config}" INFO "Starting ${daemon_name}..." eval ${command} + local port=$(get_port_from_config ${config}) + wait_for_port_listening ${port} 20 || WARN "Timed out waiting for ${daemon_name} to finish starting, but it may still be running" INFO "Done" } diff --git a/scripts/utils.sh b/scripts/utils.sh index 1d115ac7b56..53d30b2bdba 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -100,6 +100,19 @@ function wait_for_exit { done } +# To wait for a port to be listened on +# args: +function wait_for_port_listening { + local port=${1} + local seconds=${2} + is_port_listened_on ${port} || return 0 + while [[ ${seconds} > 0 ]]; do + sleep 0.1 + is_port_listened_on ${port} || return 0 + seconds=$(echo "${seconds} - 0.1" | bc -l) + done +} + # To read a config item's value from the config file # args: function get_item_from_config {