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}

Reply via email to