This is an automated email from the ASF dual-hosted git repository. stigahuang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/impala.git
commit 4ba6f9b5a5a6779629b400287b98f1f5cbe6eeed Author: Xiang Yang <[email protected]> AuthorDate: Sat Jun 22 06:30:33 2024 +0000 IMPALA-13064: Install service for linux packaging This patch provides LSB-compliant init scripts for impala package, administrator can manage impala services by the following commands: 'service <impala_service> <start|stop|restart|status|force-reload' This patch also change the owner of package files to 'impala', and launch process by the same user. Testing: - Manually deploy package on Ubuntu22.04 and verify it. Change-Id: If202e91e4b05adbc96cd5c556654901d2f7ca9fe Reviewed-on: http://gerrit.cloudera.org:8080/21994 Reviewed-by: Impala Public Jenkins <[email protected]> Tested-by: Impala Public Jenkins <[email protected]> --- package/CMakeLists.txt | 20 ++++++++++++++++++++ package/bin/impala.sh | 6 ++++-- package/etc/init.d/admissiond | 41 +++++++++++++++++++++++++++++++++++++++++ package/etc/init.d/catalogd | 41 +++++++++++++++++++++++++++++++++++++++++ package/etc/init.d/impalad | 41 +++++++++++++++++++++++++++++++++++++++++ package/etc/init.d/statestored | 41 +++++++++++++++++++++++++++++++++++++++++ package/postinst | 26 ++++++++++++++++++++++++++ 7 files changed, 214 insertions(+), 2 deletions(-) diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt index ceacff0ee..0a2195e06 100644 --- a/package/CMakeLists.txt +++ b/package/CMakeLists.txt @@ -71,6 +71,20 @@ endif() install(DIRECTORY bin/ DESTINATION ${IMPALA_INSTALLDIR}/bin USE_SOURCE_PERMISSIONS FILES_MATCHING PATTERN "*.sh") install(DIRECTORY conf/ DESTINATION ${IMPALA_INSTALLDIR}/conf) +install(FILES + etc/init.d/impalad + etc/init.d/catalogd + etc/init.d/admissiond + etc/init.d/statestored + DESTINATION /etc/init.d/ + PERMISSIONS + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE) # packaging option(BUILD_PACKAGES "Build deployment packages") @@ -134,4 +148,10 @@ else() set(CPACK_DEBIAN_PACKAGE_DEPENDS ${PKG_LIST}) endif() +if (${CPACK_GENERATOR} MATCHES "RPM") + set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/postinst") +else() + set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/postinst") +endif() + include(CPack) diff --git a/package/bin/impala.sh b/package/bin/impala.sh index 3ef3dbe6f..8a6231420 100755 --- a/package/bin/impala.sh +++ b/package/bin/impala.sh @@ -75,7 +75,9 @@ stop_await() { for ((i=1; ${counts} == -1 || i<=${counts}; i++)); do [[ ${i} -gt 1 ]] && sleep ${period} if ! kill -0 ${pid} &> /dev/null; then - rm ${service_pidfile} && echo "(${i}/${counts}) ${service} is stopped." && return 0 + rm -f ${service_pidfile} &&\ + echo "(${i}/${counts}) ${service} is stopped." &&\ + return 0 else echo "(${i}/${counts}) Waiting ${service} to stop." fi @@ -115,7 +117,7 @@ stop() { fi local pid=$(cat ${service_pidfile}) if ! ps -p ${pid} -o comm=|grep ${service} &> /dev/null ; then - rm ${service_pidfile} + rm -f ${service_pidfile} echo "Already stopped: ${service} is not running with PID ${pid}." \ "Removed stale file '${service_pidfile}'." return 0 diff --git a/package/etc/init.d/admissiond b/package/etc/init.d/admissiond new file mode 100755 index 000000000..ba177b5d7 --- /dev/null +++ b/package/etc/init.d/admissiond @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +### BEGIN INIT INFO +# Provides: admissiond +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Should-Start: $time $network +# Should-Stop: $time $network +# Short-Description: Apache Impala admission service +### END INIT INFO + +IMPALA_HOME=/opt/impala +IMPALA_SHELL_CMD=${IMPALA_HOME}/bin/impala.sh +IMPALA_SERVICE=admissiond + +main() { + case ${1} in + start|stop|restart|status) su impala -s /bin/bash -c "${IMPALA_SHELL_CMD} ${1} ${IMPALA_SERVICE}" ;; + force-reload) su impala -s /bin/sh -c "${IMPALA_SHELL_CMD} restart ${IMPALA_SERVICE}" ;; + *) exit 2 ;; + esac +} + +main ${@} diff --git a/package/etc/init.d/catalogd b/package/etc/init.d/catalogd new file mode 100755 index 000000000..6f5adab38 --- /dev/null +++ b/package/etc/init.d/catalogd @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +### BEGIN INIT INFO +# Provides: catalogd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Should-Start: $time $network +# Should-Stop: $time $network +# Short-Description: Apache Impala catalog service +### END INIT INFO + +IMPALA_HOME=/opt/impala +IMPALA_SHELL_CMD=${IMPALA_HOME}/bin/impala.sh +IMPALA_SERVICE=catalogd + +main() { + case ${1} in + start|stop|restart|status) su impala -s /bin/bash -c "${IMPALA_SHELL_CMD} ${1} ${IMPALA_SERVICE}" ;; + force-reload) su impala -s /bin/sh -c "${IMPALA_SHELL_CMD} restart ${IMPALA_SERVICE}" ;; + *) exit 2 ;; + esac +} + +main ${@} diff --git a/package/etc/init.d/impalad b/package/etc/init.d/impalad new file mode 100755 index 000000000..3e5870eef --- /dev/null +++ b/package/etc/init.d/impalad @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +### BEGIN INIT INFO +# Provides: impalad +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Should-Start: $time $network +# Should-Stop: $time $network +# Short-Description: Apache Impala daemon service +### END INIT INFO + +IMPALA_HOME=/opt/impala +IMPALA_SHELL_CMD=${IMPALA_HOME}/bin/impala.sh +IMPALA_SERVICE=impalad + +main() { + case ${1} in + start|stop|restart|status) su impala -s /bin/bash -c "${IMPALA_SHELL_CMD} ${1} ${IMPALA_SERVICE}" ;; + force-reload) su impala -s /bin/sh -c "${IMPALA_SHELL_CMD} restart ${IMPALA_SERVICE}" ;; + *) exit 2 ;; + esac +} + +main ${@} diff --git a/package/etc/init.d/statestored b/package/etc/init.d/statestored new file mode 100755 index 000000000..5014a2d83 --- /dev/null +++ b/package/etc/init.d/statestored @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +### BEGIN INIT INFO +# Provides: statestored +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Should-Start: $time $network +# Should-Stop: $time $network +# Short-Description: Apache Impala statestore service +### END INIT INFO + +IMPALA_HOME=/opt/impala +IMPALA_SHELL_CMD=${IMPALA_HOME}/bin/impala.sh +IMPALA_SERVICE=statestored + +main() { + case ${1} in + start|stop|restart|status) su impala -s /bin/bash -c "${IMPALA_SHELL_CMD} ${1} ${IMPALA_SERVICE}" ;; + force-reload) su impala -s /bin/sh -c "${IMPALA_SHELL_CMD} restart ${IMPALA_SERVICE}" ;; + *) exit 2 ;; + esac +} + +main ${@} diff --git a/package/postinst b/package/postinst new file mode 100644 index 000000000..250939139 --- /dev/null +++ b/package/postinst @@ -0,0 +1,26 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +set -euo pipefail + +IMPALA_USER=impala +IMPALA_GROUP=impala +IMPALA_HOME=/opt/impala +groupadd -f ${IMPALA_GROUP} +id -u ${IMPALA_USER} &> /dev/null || useradd -g ${IMPALA_GROUP} ${IMPALA_USER} +chown -R ${IMPALA_USER}:${IMPALA_GROUP} ${IMPALA_HOME}
