Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 45 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2457,18 +2457,62 @@ IF(WIN32)
ENDIF()
ENDIF()

# =============================================================================
# CPack Packaging — Percona XtraBackup 8.0
# =============================================================================
SET(CPACK_PACKAGE_NAME "percona-xtrabackup")
SET(CPACK_PACKAGE_VENDOR "Percona LLC")
SET(CPACK_PACKAGE_CONTACT "Percona Development Team <info@percona.com>")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY
"Percona XtraBackup - Online backup for MySQL / InnoDB")
SET(CPACK_PACKAGE_VERSION
"${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")

# Packaging components:
# Runtime -> main package (binaries, plugins, private libs, man pages)
# Test -> test suite package
SET(CPACK_COMPONENTS_ALL Runtime Test)
SET(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "Runtime")

IF(WIN32)
SET(CPACK_GENERATOR "ZIP")
ELSE()
SET(CPACK_GENERATOR "TGZ")
ENDIF()

IF(LINUX)
FIND_PROGRAM(RPMBUILD_EXECUTABLE rpmbuild)
IF(RPMBUILD_EXECUTABLE)
LIST(APPEND CPACK_GENERATOR "RPM")
INCLUDE(cpack_rpm)
ENDIF()

FIND_PROGRAM(DPKG_EXECUTABLE dpkg)
IF(DPKG_EXECUTABLE)
LIST(APPEND CPACK_GENERATOR "DEB")
INCLUDE(cpack_deb)
ENDIF()
ENDIF()
ENDIF()

# Produce separate tarballs for each INSTALL COMPONENT
IF(PACK_SEPARATE_COMPONENTS)
SET(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
SET(CPACK_COMPONENTS_GROUPING IGNORE)
ENDIF()

# Debug binary: pass -DPXB_DEBUG_BINARY=/path/to/debug/xtrabackup on cmake line
IF(PXB_DEBUG_BINARY AND EXISTS "${PXB_DEBUG_BINARY}")
INSTALL(PROGRAMS "${PXB_DEBUG_BINARY}"
DESTINATION ${INSTALL_BINDIR}
RENAME xtrabackup-debug
COMPONENT Runtime)
ENDIF()

# Install tree cleanup — removes unwanted MySQL files before packaging
INSTALL(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/cpack_filter_install.cmake"
COMPONENT Runtime)

#
# RPM installs documentation directly from the source tree
#
Expand Down
100 changes: 100 additions & 0 deletions cmake/cpack_deb.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# cmake/cpack_deb.cmake
# =============================================================================
# CPack DEB Configuration for Percona XtraBackup 8.0
# Replaces: storage/innobase/xtrabackup/utils/debian/
#
# LIMITATION: Cannot produce percona-xtrabackup-dbg-80 package.
# dh_strip --dbg-package has no CPack equivalent.
# For -dbg package, keep using dpkg-buildpackage.
# =============================================================================

IF(NOT DEFINED XB_VERSION_MAJOR)
SET(XB_VERSION_MAJOR ${MAJOR_VERSION})
ENDIF()
IF(NOT DEFINED XB_VERSION_MINOR)
SET(XB_VERSION_MINOR ${MINOR_VERSION})
ENDIF()
IF(NOT DEFINED XB_VERSION_PATCH)
SET(XB_VERSION_PATCH ${PATCH_VERSION})
ENDIF()
IF(NOT DEFINED XB_VERSION_EXTRA)
SET(XB_VERSION_EXTRA "")
ENDIF()

SET(XB_VERSION_SUFFIX "${XB_VERSION_MAJOR}${XB_VERSION_MINOR}")

IF(NOT DEFINED DEB_RELEASE)
SET(DEB_RELEASE "1")
ENDIF()

# ---------------------------------------------------------------------------
# Component-based packaging: Runtime (main), Test (test suite)
# No -dbg component (CPack limitation)
# ---------------------------------------------------------------------------
SET(CPACK_DEB_COMPONENT_INSTALL ON)

# ---------------------------------------------------------------------------
# Common DEB settings
# ---------------------------------------------------------------------------
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER
"Percona Development Team <opensource-dev@percona.com>")
SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE
"http://www.percona.com/software/percona-xtrabackup")
SET(CPACK_DEBIAN_PACKAGE_SECTION "database")
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "extra")

# ---------------------------------------------------------------------------
# Main package: percona-xtrabackup-80
# ---------------------------------------------------------------------------
SET(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME
"percona-xtrabackup-${XB_VERSION_SUFFIX}")

SET(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS
"libdbd-mysql-perl, libcurl4-openssl-dev, rsync, zstd, lz4")
SET(CPACK_DEBIAN_RUNTIME_PACKAGE_SHLIBDEPS ON)
SET(CPACK_DEBIAN_RUNTIME_PACKAGE_GENERATE_SHLIBS ON)

SET(CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES "xtrabackup")
SET(CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS
"percona-xtrabackup-21, percona-xtrabackup-22, percona-xtrabackup, percona-xtrabackup-24, percona-xtrabackup-81, percona-xtrabackup-82, percona-xtrabackup-83, percona-xtrabackup-84, percona-xtrabackup-pro-80, percona-xtrabackup-pro-84")
SET(CPACK_DEBIAN_RUNTIME_PACKAGE_BREAKS "xtrabackup (<< 2.0.0~)")
SET(CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES "xtrabackup (<< 2.0.0~)")

SET(CPACK_DEBIAN_RUNTIME_PACKAGE_DESCRIPTION
"Open source backup tool for InnoDB and XtraDB
Percona XtraBackup is an open-source hot backup utility for MySQL that
doesn't lock your database during the backup. It can back up data from
InnoDB, XtraDB and MyISAM tables on MySQL/Percona Server/MariaDB
servers, and has many advanced features.")

SET(CPACK_DEBIAN_RUNTIME_FILE_NAME
"percona-xtrabackup-${XB_VERSION_SUFFIX}_${CPACK_PACKAGE_VERSION}-${DEB_RELEASE}_\${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")

SET(_deb_postinst_in "${CMAKE_SOURCE_DIR}/cmake/deb_postinst.in")
IF(EXISTS "${_deb_postinst_in}")
CONFIGURE_FILE("${_deb_postinst_in}"
"${CMAKE_BINARY_DIR}/postinst" @ONLY)
SET(CPACK_DEBIAN_RUNTIME_PACKAGE_CONTROL_EXTRA
"${CMAKE_BINARY_DIR}/postinst")
ENDIF()

# ---------------------------------------------------------------------------
# Test sub-package: percona-xtrabackup-test-80
# ---------------------------------------------------------------------------
SET(CPACK_DEBIAN_TEST_PACKAGE_NAME
"percona-xtrabackup-test-${XB_VERSION_SUFFIX}")
SET(CPACK_DEBIAN_TEST_PACKAGE_DEPENDS
"mysql-client, percona-xtrabackup-${XB_VERSION_SUFFIX} (= ${CPACK_PACKAGE_VERSION}-${DEB_RELEASE})")
SET(CPACK_DEBIAN_TEST_PACKAGE_CONFLICTS
"percona-xtrabackup-test-pro-80, percona-xtrabackup-test-pro-84")
SET(CPACK_DEBIAN_TEST_PACKAGE_DESCRIPTION
"Test suite for Percona XtraBackup
Test suite for Percona XtraBackup. Install this package if you intend
to run XtraBackup's test suite.")
SET(CPACK_DEBIAN_TEST_FILE_NAME
"percona-xtrabackup-test-${XB_VERSION_SUFFIX}_${CPACK_PACKAGE_VERSION}-${DEB_RELEASE}_\${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
SET(CPACK_DEBIAN_TEST_PACKAGE_SHLIBDEPS OFF)

MESSAGE(STATUS "CPack DEB: percona-xtrabackup-${XB_VERSION_SUFFIX} ${CPACK_PACKAGE_VERSION}-${DEB_RELEASE}")
MESSAGE(STATUS "CPack DEB: percona-xtrabackup-test-${XB_VERSION_SUFFIX}")
MESSAGE(STATUS "CPack DEB: NOTE - dbg package NOT produced (use dpkg-buildpackage if needed)")
49 changes: 49 additions & 0 deletions cmake/cpack_filter_install.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# cmake/cpack_filter_install.cmake
# =============================================================================
# Post-install cleanup — removes MySQL files not shipped in XtraBackup packages.
# Replicates the rm -rf lines from the RPM spec %install section and the
# implicit file filtering from debian/*.install files.
#
# Called via: INSTALL(SCRIPT ... COMPONENT Runtime) in CMakeLists.txt
# =============================================================================

# Remove libmysqlservices.a
FILE(GLOB _unwanted_libs
"${CMAKE_INSTALL_PREFIX}/lib/libmysqlservices.a"
"${CMAKE_INSTALL_PREFIX}/lib64/libmysqlservices.a"
)
FOREACH(_f ${_unwanted_libs})
IF(EXISTS "${_f}")
FILE(REMOVE "${_f}")
MESSAGE(STATUS "PXB filter: removed ${_f}")
ENDIF()
ENDFOREACH()

# Remove INFO_SRC
IF(EXISTS "${CMAKE_INSTALL_PREFIX}/docs/INFO_SRC")
FILE(REMOVE "${CMAKE_INSTALL_PREFIX}/docs/INFO_SRC")
ENDIF()

# Remove man8/ entirely
SET(_man8 "${CMAKE_INSTALL_PREFIX}/share/man/man8")
IF(IS_DIRECTORY "${_man8}")
FILE(REMOVE_RECURSE "${_man8}")
ENDIF()

# Remove man1 pages not related to XtraBackup
# Keep: xtrabackup.1, xbstream.1, xbcrypt.1, xbcloud.1
# Remove: c* m* i* l* p* z*
SET(_man1 "${CMAKE_INSTALL_PREFIX}/share/man/man1")
IF(IS_DIRECTORY "${_man1}")
FILE(GLOB _unwanted_man1
"${_man1}/c*.1*"
"${_man1}/m*.1*"
"${_man1}/i*.1*"
"${_man1}/l*.1*"
"${_man1}/p*.1*"
"${_man1}/z*.1*"
)
FOREACH(_f ${_unwanted_man1})
FILE(REMOVE "${_f}")
ENDFOREACH()
ENDIF()
114 changes: 114 additions & 0 deletions cmake/cpack_rpm.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# cmake/cpack_rpm.cmake

IF(NOT DEFINED XB_VERSION_MAJOR)
SET(XB_VERSION_MAJOR ${MAJOR_VERSION})
ENDIF()
IF(NOT DEFINED XB_VERSION_MINOR)
SET(XB_VERSION_MINOR ${MINOR_VERSION})
ENDIF()
IF(NOT DEFINED XB_VERSION_PATCH)
SET(XB_VERSION_PATCH ${PATCH_VERSION})
ENDIF()
IF(NOT DEFINED XB_VERSION_EXTRA)
SET(XB_VERSION_EXTRA "")
ENDIF()

SET(XB_VERSION_SUFFIX "${XB_VERSION_MAJOR}${XB_VERSION_MINOR}")

IF(NOT DEFINED RPM_RELEASE)
SET(RPM_RELEASE "1")
ENDIF()
IF(NOT DEFINED XB_RPM_VERSION_EXTRA)
IF("${XB_VERSION_EXTRA}" STREQUAL "" OR "${XB_VERSION_EXTRA}" STREQUAL "%{nil}")
SET(XB_RPM_VERSION_EXTRA "${RPM_RELEASE}")
ELSE()
STRING(REGEX REPLACE "^-" "" _extra_clean "${XB_VERSION_EXTRA}")
SET(XB_RPM_VERSION_EXTRA "${_extra_clean}.${RPM_RELEASE}")
ENDIF()
ENDIF()

# ---------------------------------------------------------------------------
# Component-based packaging: Runtime (main), Test (test suite)
# ---------------------------------------------------------------------------
SET(CPACK_RPM_COMPONENT_INSTALL ON)

# ---------------------------------------------------------------------------
# Common RPM settings
# ---------------------------------------------------------------------------
SET(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
SET(CPACK_RPM_PACKAGE_URL "http://www.percona.com/software/percona-xtrabackup")
SET(CPACK_RPM_PACKAGE_VENDOR "Percona LLC")
SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
SET(CPACK_RPM_PACKAGE_RELEASE "${XB_RPM_VERSION_EXTRA}%{?dist}")

SET(CPACK_RPM_SPEC_MORE_DEFINE
"%define __strip /bin/true
%define debug_package %{nil}
%define __brp_mangle_shebangs /usr/bin/true")

SET(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
/usr
/usr/bin
/usr/include
/usr/lib
/usr/lib/private
/usr/lib64
/usr/share
/usr/share/doc
/usr/share/man
/usr/share/man/man1
)

SET(_rpm_changelog_path "${CMAKE_SOURCE_DIR}/cmake/rpm_changelog")
IF(EXISTS "${_rpm_changelog_path}")
SET(CPACK_RPM_CHANGELOG_FILE "${_rpm_changelog_path}")
ELSE()
FILE(WRITE "${CMAKE_BINARY_DIR}/rpm_changelog"
"* Fri Aug 31 2018 Evgeniy Patlan <evgeniy.patlan@percona.com>\n- Packaging for 8.0\n")
SET(CPACK_RPM_CHANGELOG_FILE "${CMAKE_BINARY_DIR}/rpm_changelog")
ENDIF()

# ---------------------------------------------------------------------------
# Main package: percona-xtrabackup-80
# ---------------------------------------------------------------------------
SET(CPACK_RPM_RUNTIME_PACKAGE_NAME
"percona-xtrabackup-${XB_VERSION_SUFFIX}")
SET(CPACK_RPM_RUNTIME_PACKAGE_SUMMARY
"XtraBackup online backup for MySQL / InnoDB")
SET(CPACK_RPM_RUNTIME_PACKAGE_DESCRIPTION
"Percona XtraBackup is an OpenSource online (non-blockable) backup solution for InnoDB and XtraDB engines")
SET(CPACK_RPM_RUNTIME_FILE_NAME
"percona-xtrabackup-${XB_VERSION_SUFFIX}-${CPACK_PACKAGE_VERSION}-${XB_RPM_VERSION_EXTRA}%{?dist}.${CMAKE_SYSTEM_PROCESSOR}.rpm")
SET(CPACK_RPM_RUNTIME_PACKAGE_REQUIRES
"perl(DBD::mysql), rsync, zstd, perl(Digest::MD5), lz4")
SET(CPACK_RPM_RUNTIME_PACKAGE_CONFLICTS
"percona-xtrabackup-21, percona-xtrabackup-22, percona-xtrabackup, percona-xtrabackup-24")
SET(CPACK_RPM_RUNTIME_PACKAGE_AUTOREQ ON)
SET(CPACK_RPM_RUNTIME_PACKAGE_AUTOPROV ON)

SET(_rpm_post_install_in "${CMAKE_SOURCE_DIR}/cmake/rpm_post_install.sh.in")
IF(EXISTS "${_rpm_post_install_in}")
CONFIGURE_FILE("${_rpm_post_install_in}"
"${CMAKE_BINARY_DIR}/rpm_post_install.sh" @ONLY)
SET(CPACK_RPM_RUNTIME_POST_INSTALL_SCRIPT_FILE
"${CMAKE_BINARY_DIR}/rpm_post_install.sh")
ENDIF()

# ---------------------------------------------------------------------------
# Test sub-package: percona-xtrabackup-test-80
# ---------------------------------------------------------------------------
SET(CPACK_RPM_TEST_PACKAGE_NAME
"percona-xtrabackup-test-${XB_VERSION_SUFFIX}")
SET(CPACK_RPM_TEST_PACKAGE_SUMMARY
"Test suite for Percona XtraBackup")
SET(CPACK_RPM_TEST_PACKAGE_DESCRIPTION
"This package contains the test suite for Percona XtraBackup ${CPACK_PACKAGE_VERSION}${XB_VERSION_EXTRA}")
SET(CPACK_RPM_TEST_FILE_NAME
"percona-xtrabackup-test-${XB_VERSION_SUFFIX}-${CPACK_PACKAGE_VERSION}-${XB_RPM_VERSION_EXTRA}%{?dist}.${CMAKE_SYSTEM_PROCESSOR}.rpm")
SET(CPACK_RPM_TEST_PACKAGE_REQUIRES
"percona-xtrabackup-${XB_VERSION_SUFFIX} = ${CPACK_PACKAGE_VERSION}-${XB_RPM_VERSION_EXTRA}, /usr/bin/mysql")
SET(CPACK_RPM_TEST_PACKAGE_AUTOREQ OFF)
SET(CPACK_RPM_TEST_PACKAGE_AUTOPROV OFF)

MESSAGE(STATUS "CPack RPM: percona-xtrabackup-${XB_VERSION_SUFFIX} ${CPACK_PACKAGE_VERSION}-${XB_RPM_VERSION_EXTRA}")
MESSAGE(STATUS "CPack RPM: percona-xtrabackup-test-${XB_VERSION_SUFFIX}")
17 changes: 17 additions & 0 deletions cmake/deb_postinst.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash
# Percona XtraBackup DEB post-install
set -e

case "$1" in
configure)
if [[ -f /tmp/call-home.sh ]]; then
bash /tmp/call-home.sh \
-f "PRODUCT_FAMILY_PXB" \
-v "@XB_VERSION_MAJOR@.@XB_VERSION_MINOR@.@XB_VERSION_PATCH@@XB_VERSION_EXTRA@-@DEB_RELEASE@" \
-d "PACKAGE" &>/dev/null || :
rm -f /tmp/call-home.sh
fi
;;
esac

exit 0
2 changes: 2 additions & 0 deletions cmake/rpm_changelog
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* Fri Aug 31 2018 Evgeniy Patlan <evgeniy.patlan@percona.com>
- Packaging for 8.0
10 changes: 10 additions & 0 deletions cmake/rpm_post_install.sh.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
# Percona XtraBackup RPM post-install — call-home telemetry (best-effort)
if [[ -f /tmp/call-home.sh ]]; then
bash /tmp/call-home.sh \
-f "PRODUCT_FAMILY_PXB" \
-v "@XB_VERSION_MAJOR@.@XB_VERSION_MINOR@.@XB_VERSION_PATCH@@XB_VERSION_EXTRA@-@RPM_RELEASE@" \
-d "PACKAGE" &>/dev/null || :
rm -f /tmp/call-home.sh
fi
exit 0
Loading