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 <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
This commit is contained in:
Xiang Yang
2024-06-22 06:30:33 +00:00
committed by Impala Public Jenkins
parent 086e0b0ffa
commit 4ba6f9b5a5
7 changed files with 214 additions and 2 deletions

View File

@@ -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)

View File

@@ -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

41
package/etc/init.d/admissiond Executable file
View File

@@ -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 ${@}

41
package/etc/init.d/catalogd Executable file
View File

@@ -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 ${@}

41
package/etc/init.d/impalad Executable file
View File

@@ -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 ${@}

41
package/etc/init.d/statestored Executable file
View File

@@ -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 ${@}

26
package/postinst Normal file
View File

@@ -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}