This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a commit to branch branch-3.4.2
in repository https://gitbox.apache.org/repos/asf/impala.git
The following commit(s) were added to refs/heads/branch-3.4.2 by this push:
new a5e5aa16d IMPALA-12362: (part-4/4) Refactor linux packaging related
cmake files.
a5e5aa16d is described below
commit a5e5aa16d887faedee4eea1bc809fba41d758f5b
Author: Xiang Yang <[email protected]>
AuthorDate: Tue Jan 16 16:39:49 2024 +0000
IMPALA-12362: (part-4/4) Refactor linux packaging related cmake files.
Independent linux packaging related content to package/CMakeLists.txt
to make it more clearly.
This patch also add LICENSE and NOTICE file in the final package.
Testing:
- Manually deploy package on Ubuntu22.04 and verify it.
Backport note for 3.4.x:
- Resolved conflicts in CMakeLists.txt and modified
package/CMakeLists.txt accordingly.
Change-Id: If3914dcda69f81a735cdf70d76c59fa09454777b
Reviewed-on: http://gerrit.cloudera.org:8080/20263
Reviewed-by: Impala Public Jenkins <[email protected]>
Tested-by: Impala Public Jenkins <[email protected]>
Reviewed-on: http://gerrit.cloudera.org:8080/21410
Reviewed-by: Xiang Yang <[email protected]>
Reviewed-by: Zihao Ye <[email protected]>
Tested-by: Quanlong Huang <[email protected]>
---
.gitignore | 3 ++
CMakeLists.txt | 101 +-------------------------------------
NOTICE.txt | 2 +-
package/CMakeLists.txt | 131 +++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 136 insertions(+), 101 deletions(-)
diff --git a/.gitignore b/.gitignore
index d98de44f8..daf7734c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,6 +39,9 @@ build.ninja
rules.ninja
CMakeDoxyfile.in
CMakeDoxygenDefaults.cmake
+CPackConfig.cmake
+CPackSourceConfig.cmake
+_CPack_Packages
# Build timestamp files
.*timestamp
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5ad23838e..6480f8a27 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,8 +24,6 @@ set(NO_TESTS 1)
# initialized.
project(Impala)
-option(BUILD_PACKAGES "Build deployment packages")
-
include(cmake_modules/kudu_cmake_fns.txt)
if (NOT DEFINED BUILD_SHARED_LIBS)
@@ -418,35 +416,7 @@ add_subdirectory(fe)
add_subdirectory(impala-parent)
add_subdirectory(ext-data-source)
add_subdirectory(query-event-hook-api)
-
-install(DIRECTORY "www/" DESTINATION ${IMPALA_INSTALLDIR}/www)
-install(FILES fe/target/impala-frontend-$ENV{IMPALA_VERSION}.jar
- DESTINATION ${IMPALA_INSTALLDIR}/lib/jars)
-
-FILE(GLOB gcc_lib ${GCC_ROOT}/lib64/libgcc_s.so.1*)
-install(FILES ${gcc_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
-
-FILE(GLOB cpp_lib ${GCC_ROOT}/lib64/libstdc++.so.6*)
-install(FILES ${cpp_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
-
-set(KUDU_HOME $ENV{IMPALA_TOOLCHAIN}/kudu-$ENV{IMPALA_KUDU_VERSION}/release)
-# The parent folder is lib64 on centos/redhat, while on ubuntu it's lib.
-FILE(GLOB kudu_lib ${KUDU_HOME}/lib*/libkudu_client.so*)
-install(FILES ${kudu_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
-
-FILE(GLOB hadoop_lib $ENV{HADOOP_LIB_DIR}/native/libhadoop.so*)
-install(FILES ${hadoop_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
-
-install(DIRECTORY fe/target/dependency/ DESTINATION
${IMPALA_INSTALLDIR}/lib/jars
- FILES_MATCHING PATTERN "*.jar")
-
-install(DIRECTORY shell/build/impala-shell-$ENV{IMPALA_VERSION}/
- DESTINATION ${IMPALA_INSTALLDIR}/shell
- USE_SOURCE_PERMISSIONS PATTERN "*.pyc" EXCLUDE)
-
-install(DIRECTORY package/bin/ DESTINATION ${IMPALA_INSTALLDIR}/bin
- USE_SOURCE_PERMISSIONS FILES_MATCHING PATTERN "*.sh")
-install(DIRECTORY package/conf/ DESTINATION ${IMPALA_INSTALLDIR}/conf)
+add_subdirectory(package)
# Build target for all generated files which most backend code depends on
add_custom_target(gen-deps ALL DEPENDS thrift-deps proto-deps fb-deps)
@@ -482,72 +452,3 @@ if (DUMP_INCLUDE_PATHS)
endif(DUMP_INCLUDE_PATHS)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libstdc++")
-
-# packaging
-if (BUILD_PACKAGES)
- if (EXISTS "/etc/redhat-release")
- set(IMPALA_LINUX_ID_FILE "/etc/redhat-release")
- elseif (EXISTS "/etc/os-release")
- set(IMPALA_LINUX_ID_FILE "/etc/os-release")
- elseif (EXISTS "/etc/issue")
- set(IMPALA_LINUX_ID_FILE "/etc/issue")
- else()
- message(FATAL_ERROR "Can not determine OS version!")
- endif()
- file(READ ${IMPALA_LINUX_ID_FILE} IMPALA_OS_INFO)
-
- string(TOLOWER ${IMPALA_OS_INFO} IMPALA_OS_INFO)
- if (${IMPALA_OS_INFO} MATCHES "(redhat|centos)")
- set(CPACK_GENERATOR "RPM")
- elseif (${IMPALA_OS_INFO} MATCHES "ubuntu")
- set(CPACK_GENERATOR "DEB")
- else()
- message(WARNING "OS is ${IMPALA_OS_INFO}. No packages will be generated.")
- endif()
-
- if (CPACK_GENERATOR)
- message(STATUS "Packaging enabled: ${CPACK_GENERATOR}")
- set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
- set(CPACK_PACKAGE_VENDOR "Apache")
- set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An open source massively parallel
processing SQL query engine.")
- set(CPACK_PACKAGE_CONTACT "[email protected]")
- set(CPACK_PACKAGE_HOMEPAGE_URL "https://impala.apache.org")
- set(CPACK_PACKAGE_VERSION "$ENV{IMPALA_VERSION}")
- set(CPACK_RPM_PACKAGE_LICENSE "ASL-2.0")
- # Set a meaningful package name, e.g.
Impala-4.3.0-SNAPSHOT_hive-3.1.3000.7.2.18.0-41-x86_64
- set(CPACK_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
- set(CPACK_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_FILE_NAME}_hive-$ENV{IMPALA_HIVE_VERSION}")
- set(CPACK_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_FILE_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
- message(STATUS "Package name: ${CPACK_PACKAGE_FILE_NAME}")
-
- if ($ENV{STRIP_DEPLOYMENT_IMPALAD})
- set(CPACK_STRIP_FILES ${IMPALA_INSTALLDIR}/bin/impalad)
- message("Binaries in the package will be stripped")
- endif()
-
- set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
- set(CPACK_PACKAGE_INSTALL_DIRECTORY "impala")
-
- execute_process(
- COMMAND bash -c "${CMAKE_SOURCE_DIR}/docker/install_os_packages.sh
--dry-run | tail -n1"
- OUTPUT_VARIABLE PKG_LIST
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- if ("${PKG_LIST}" STREQUAL "")
- message(FATAL_ERROR "Package list is empty: '${PKG_LIST}'")
- else()
- message(STATUS "Get required package list: '${PKG_LIST}'")
- endif()
-
- if (${CPACK_GENERATOR} MATCHES "RPM")
- set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
- set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE)
- set(CPACK_RPM_PACKAGE_REQUIRES ${PKG_LIST})
- else()
- set(CPACK_DEBIAN_PACKAGE_DEPENDS ${PKG_LIST})
- endif()
- endif()
-
-include(CPack)
-
-endif()
diff --git a/NOTICE.txt b/NOTICE.txt
index e4bd7b3ad..4c8ed2875 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,5 +1,5 @@
Apache Impala
-Copyright 2019 The Apache Software Foundation
+Copyright 2024 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt
new file mode 100644
index 000000000..8166e749f
--- /dev/null
+++ b/package/CMakeLists.txt
@@ -0,0 +1,131 @@
+# 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.
+
+project(Impala_packaging)
+
+install(FILES ${CMAKE_SOURCE_DIR}/LICENSE.txt DESTINATION ${IMPALA_INSTALLDIR}
RENAME LICENSE)
+install(FILES ${CMAKE_SOURCE_DIR}/NOTICE.txt DESTINATION ${IMPALA_INSTALLDIR}
RENAME NOTICE)
+install(DIRECTORY "${CMAKE_SOURCE_DIR}/www/" DESTINATION
${IMPALA_INSTALLDIR}/www)
+install(FILES
${CMAKE_SOURCE_DIR}/fe/target/impala-frontend-$ENV{IMPALA_VERSION}.jar
+ DESTINATION ${IMPALA_INSTALLDIR}/lib/jars)
+install(DIRECTORY ${CMAKE_SOURCE_DIR}/fe/target/dependency/
+ DESTINATION ${IMPALA_INSTALLDIR}/lib/jars
+ FILES_MATCHING PATTERN "*.jar")
+
+FILE(GLOB gcc_lib ${GCC_ROOT}/lib64/libgcc_s.so.1*)
+if("${gcc_lib}" STREQUAL "")
+ message(FATAL_ERROR "libgcc_s.so.1 was not found in '${GCC_ROOT}/lib64'!")
+endif()
+install(FILES ${gcc_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
+
+FILE(GLOB cpp_lib ${GCC_ROOT}/lib64/libstdc++.so.6*)
+if("${cpp_lib}" STREQUAL "")
+ message(FATAL_ERROR "libstdc++.so.6 was not found in '${GCC_ROOT}/lib64'!")
+endif()
+install(FILES ${cpp_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
+
+set(KUDU_HOME $ENV{IMPALA_TOOLCHAIN}/kudu-$ENV{IMPALA_KUDU_VERSION}/release)
+# The parent folder is lib64 on centos/redhat, while on ubuntu it's lib.
+FILE(GLOB kudu_lib ${KUDU_HOME}/lib*/libkudu_client.so*)
+if("${kudu_lib}" STREQUAL "")
+ message(FATAL_ERROR "libkudu_client.so was not found in '${KUDU_HOME}/lib'!")
+endif()
+install(FILES ${kudu_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
+
+FILE(GLOB hadoop_lib $ENV{HADOOP_LIB_DIR}/native/libhadoop.so*)
+if("${hadoop_lib}" STREQUAL "")
+ message(FATAL_ERROR "libhadoop.so was not found in
'$ENV{HADOOP_LIB_DIR}/native'!")
+endif()
+install(FILES ${hadoop_lib} DESTINATION ${IMPALA_INSTALLDIR}/lib/native)
+
+install(DIRECTORY
${CMAKE_SOURCE_DIR}/shell/build/impala-shell-$ENV{IMPALA_VERSION}/
+ DESTINATION ${IMPALA_INSTALLDIR}/shell
+ USE_SOURCE_PERMISSIONS PATTERN "*.pyc" EXCLUDE)
+
+install(DIRECTORY bin/ DESTINATION ${IMPALA_INSTALLDIR}/bin
+ USE_SOURCE_PERMISSIONS FILES_MATCHING PATTERN "*.sh")
+install(DIRECTORY conf/ DESTINATION ${IMPALA_INSTALLDIR}/conf)
+
+# packaging
+option(BUILD_PACKAGES "Build deployment packages")
+if (NOT BUILD_PACKAGES)
+ return()
+endif()
+
+if (EXISTS "/etc/redhat-release")
+ set(IMPALA_LINUX_ID_FILE "/etc/redhat-release")
+elseif (EXISTS "/etc/os-release")
+ set(IMPALA_LINUX_ID_FILE "/etc/os-release")
+elseif (EXISTS "/etc/issue")
+ set(IMPALA_LINUX_ID_FILE "/etc/issue")
+else()
+ message(FATAL_ERROR "Can not determine OS version!")
+endif()
+file(READ ${IMPALA_LINUX_ID_FILE} IMPALA_OS_INFO)
+
+string(TOLOWER ${IMPALA_OS_INFO} IMPALA_OS_INFO)
+if (${IMPALA_OS_INFO} MATCHES "(redhat|centos)")
+ set(CPACK_GENERATOR "RPM")
+elseif (${IMPALA_OS_INFO} MATCHES "ubuntu")
+ set(CPACK_GENERATOR "DEB")
+else()
+ message(FATAL_ERROR "OS is ${IMPALA_OS_INFO}. No packages will be
generated.")
+endif()
+
+message(STATUS "Packaging enabled: ${CPACK_GENERATOR}")
+set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
+set(CPACK_PACKAGE_VENDOR "Apache")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An open source massively parallel
processing SQL query engine.")
+set(CPACK_PACKAGE_CONTACT "[email protected]")
+set(CPACK_PACKAGE_HOMEPAGE_URL "https://impala.apache.org")
+set(CPACK_PACKAGE_VERSION "$ENV{IMPALA_VERSION}")
+set(CPACK_RPM_PACKAGE_LICENSE "ASL-2.0")
+set(CPACK_PACKAGE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build)
+# Set a meaningful package name, e.g. apache-impala-4.4.0_hive-3.1.3-x86_64
+set(CPACK_PACKAGE_FILE_NAME "apache-impala-${CPACK_PACKAGE_VERSION}")
+set(CPACK_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_FILE_NAME}_hive-$ENV{IMPALA_HIVE_VERSION}")
+set(CPACK_PACKAGE_FILE_NAME
"${CPACK_PACKAGE_FILE_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
+message(STATUS "Package name: ${CPACK_PACKAGE_FILE_NAME}")
+
+if ($ENV{STRIP_DEPLOYMENT_IMPALAD})
+ set(CPACK_STRIP_FILES ${IMPALA_INSTALLDIR}/sbin/impalad)
+ message("Binaries in the package will be stripped")
+endif()
+
+set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
+set(CPACK_PACKAGE_INSTALL_DIRECTORY "impala")
+
+execute_process(
+ COMMAND bash -c "${CMAKE_SOURCE_DIR}/docker/install_os_packages.sh --dry-run
| tail -n1"
+ OUTPUT_VARIABLE PKG_LIST
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+if ("${PKG_LIST}" STREQUAL "")
+ message(FATAL_ERROR "Package list is empty: '${PKG_LIST}'")
+else()
+ message(STATUS "Get required package list: '${PKG_LIST}'")
+endif()
+
+if (${CPACK_GENERATOR} MATCHES "RPM")
+ set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
+ set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE)
+ set(CPACK_RPM_PACKAGE_REQUIRES ${PKG_LIST})
+else()
+ set(CPACK_DEBIAN_PACKAGE_DEPENDS ${PKG_LIST})
+endif()
+
+include(CPack)