oceanbase/cmake/RPM.cmake
2024-12-11 20:15:38 +00:00

132 lines
5.2 KiB
CMake

set(CPACK_GENERATOR "RPM")
# use seperated RPM SPECs and generate different RPMs
set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
set(CPACK_RPM_COMPONENT_INSTALL ON)
# use "server" as main component so its RPM filename won't have "server"
if (BUILD_CDC_ONLY)
set(CPACK_RPM_MAIN_COMPONENT "cdc")
else()
set(CPACK_RPM_MAIN_COMPONENT "server")
endif()
# let rpmbuild determine rpm filename
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CMAKE_INSTALL_LIBDIR "lib64")
## Stardard debuginfo generating instructions in cmake. However 6u
## server with rpm-4.8.0 which doesn't support dwarf4 won't generate
## BUILDID for RPM. And Our debuginfo package doesn't contain source
## code. Thus we don't use the way cmake sugguests.
#set(CPACK_RPM_DEBUGINFO_PACKAGE ON)
#set(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX "/usr/src/debug")
# RPM package informations.
include(cmake/Pack.cmake)
set(CPACK_RPM_PACKAGE_RELEASE ${OB_RELEASEID})
if (OB_DISABLE_LSE)
ob_insert_nonlse_to_package_version(${CPACK_RPM_PACKAGE_RELEASE} CPACK_RPM_PACKAGE_RELEASE)
message(STATUS "CPACK_RPM_PACKAGE_RELEASE: ${CPACK_RPM_PACKAGE_RELEASE}")
endif()
if (OB_BUILD_OPENSOURCE)
set(CPACK_RPM_PACKAGE_URL "${OceanBase_CE_HOMEPAGE_URL}")
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
## set relocation path install prefix for each component
set(CPACK_RPM_DEVEL_PACKAGE_PREFIX /usr)
set(CPACK_RPM_UTILS_PACKAGE_PREFIX /usr)
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/home")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/home/admin")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/home/admin/oceanbase")
else()
set(CPACK_RPM_PACKAGE_URL "${OceanBase_HOMEPAGE_URL}")
endif()
set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION})
set(CPACK_RPM_PACKAGE_LICENSE "Mulan PubL v2.")
set(CPACK_RPM_DEFAULT_USER "admin")
set(CPACK_RPM_DEFAULT_GROUP "admin")
if (OB_BUILD_OPENSOURCE AND NOT BUILD_CDC_ONLY)
set(DEBUG_INSTALL_POST "mv $RPM_BUILD_ROOT/../server/home/admin/oceanbase/bin/obshell %{_builddir}/obshell; %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{_builddir}/%{?buildsubdir}; mv %{_builddir}/obshell $RPM_BUILD_ROOT/../server/home/admin/oceanbase/bin/obshell; %{nil}")
else()
set(DEBUG_INSTALL_POST "%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{_builddir}/%{?buildsubdir};%{nil}")
endif()
set(CPACK_RPM_SPEC_MORE_DEFINE
"%global _missing_build_ids_terminate_build 0
%global _find_debuginfo_opts -g
%global __brp_check_rpaths %{nil}
%define __strip ${CMAKE_SOURCE_DIR}/deps/3rd/usr/local/oceanbase/devtools/bin/llvm-strip
%undefine __brp_mangle_shebangs
%global __requires_exclude ^\(/bin/bash\|/usr/bin/\.*\)$
%define __debug_install_post ${DEBUG_INSTALL_POST}
%if \\\"%name\\\" != \\\"oceanbase-ce-sql-parser\\\" && \\\"%name\\\" != \\\"oceanbase-sql-parser\\\"
%debug_package
%endif
")
# systemd define on rpm
if (OB_BUILD_OPENSOURCE)
set(CPACK_RPM_SERVER_PACKAGE_REQUIRES "oceanbase-ce-libs = ${CPACK_PACKAGE_VERSION}, systemd")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_install.sh.template
${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_install.sh
@ONLY)
set(CPACK_RPM_SERVER_PRE_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_install.sh)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_install.sh.template
${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_install.sh
@ONLY)
set(CPACK_RPM_SERVER_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_install.sh)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_uninstall.sh.template
${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_uninstall.sh
@ONLY)
set(CPACK_RPM_SERVER_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_uninstall.sh)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_uninstall.sh.template
${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_uninstall.sh
@ONLY)
set(CPACK_RPM_SERVER_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_uninstall.sh)
endif()
## server
if (NOT OB_BUILD_OPENSOURCE)
install(PROGRAMS
${DEVTOOLS_DIR}/bin/obstack
DESTINATION bin
COMPONENT server)
endif()
# add the rpm post and pre script
if (OB_BUILD_OPENSOURCE)
install(FILES
tools/systemd/profile/pre_install.sh
tools/systemd/profile/post_install.sh
tools/systemd/profile/post_uninstall.sh
tools/systemd/profile/pre_uninstall.sh
DESTINATION profile
COMPONENT server)
endif()
if (BUILD_CDC_ONLY)
message(STATUS "oceanbase build cdc only")
set(CPACK_COMPONENTS_ALL cdc)
set(CPACK_PACKAGE_NAME "oceanbase-cdc")
if (OB_BUILD_OPENSOURCE)
set(CPACK_PACKAGE_NAME "oceanbase-ce-cdc")
endif()
else()
add_custom_target(bitcode_to_elf ALL
DEPENDS ${BITCODE_TO_ELF_LIST})
add_custom_target(ob_table ALL
DEPENDS obtable obtable_static)
endif()
message(STATUS "Cpack Components:${CPACK_COMPONENTS_ALL}")
# install cpack to make everything work
include(CPack)
#add rpm target to create RPMS
add_custom_target(rpm
COMMAND +make package
)