github.com/greenplum-db/gpbackup@v0.0.0-20240517212602-89daab1885b3/ci/scripts/build-gppkgs.bash (about) 1 #!/bin/bash 2 3 set -ex 4 5 ######################################################################################## 6 # Create native package installation files 7 function build_rpm_rhel() { 8 export ARCH=x86_64 9 GPDB_VER=( "5" "6" ) 10 RPMROOT=/tmp/gpbackup_tools_rpm 11 mkdir -p ${RPMROOT}/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 12 13 # Move source targz to SOURCES 14 cp gpbackup_tar/bin_gpbackup.tar.gz ${RPMROOT}/SOURCES/. 15 cp gpbackup/gppkg/gpbackup_tools.spec.in ${RPMROOT}/SPECS/gpbackup_tools.spec 16 17 sudo yum -y install rpm-build 18 rpmbuild -bb ${RPMROOT}/SPECS/gpbackup_tools.spec \ 19 --define "%_topdir ${RPMROOT}" \ 20 --define "debug_package %{nil}" \ 21 --define "rpm_version ${GPBACKUP_TOOLS_VERSION}" \ 22 --define "operating_system ${OS}" \ 23 --define "_build_id_links none" 24 25 PKG_FILES=${RPMROOT}/RPMS/x86_64/*${OS}*.rpm 26 } 27 28 function build_deb_ubuntu() { 29 export ARCH=amd64 30 GPDB_VER=( "6" ) 31 DEB_NAME=gpbackup_tools-${GPBACKUP_TOOLS_VERSION}-${OS}-amd64.deb 32 PACKAGE_NAME=${DEB_NAME%.*} 33 34 # gettext-base package is required to run envsubst command 35 apt update && apt-get install -y gettext-base 36 mkdir -p deb_build_dir 37 pushd deb_build_dir 38 mkdir -p ${PACKAGE_NAME}/DEBIAN 39 # control file 40 envsubst < ../gpbackup/gppkg/gpbackup_control.in > ${PACKAGE_NAME}/DEBIAN/control 41 tar -xzf ../gpbackup_tar/bin_gpbackup.tar.gz -C ${PACKAGE_NAME} 42 dpkg-deb --build ${PACKAGE_NAME} 43 popd 44 45 PKG_FILES=deb_build_dir/${DEB_NAME} 46 } 47 ######################################################################################## 48 49 ######################################################################################## 50 export GPBACKUP_TOOLS_VERSION=$(cat gpbackup-tools-versions/pkg_version) 51 echo "Building gppkg v1 installer for gpbackup version: ${GPBACKUP_TOOLS_VERSION} platform: ${OS}" 52 53 if [[ ${OS} == "RHEL7" || ${OS} == "RHEL8" || ${OS} == "RHEL9" ]]; then 54 build_rpm_rhel 55 elif [[ ${OS} == "ubuntu" ]]; then 56 build_deb_ubuntu 57 fi 58 59 60 # Install gpdb binaries 61 if [[ ! -f bin_gpdb/bin_gpdb.tar.gz ]]; then 62 mv bin_gpdb/{*.tar.gz,bin_gpdb.tar.gz} 63 fi 64 mkdir -p /usr/local/greenplum-db-devel 65 tar -xzf bin_gpdb/bin_gpdb.tar.gz -C /usr/local/greenplum-db-devel 66 67 # Setup gpadmin user 68 gpdb_src/concourse/scripts/setup_gpadmin_user.bash 69 source /usr/local/greenplum-db-devel/greenplum_path.sh 70 71 # Create gppkg_v1 from native package 72 for i in ${GPDB_VER[@]}; do 73 # spec file 74 export GPDB_MAJOR_VERSION=${i} 75 envsubst < gpbackup/gppkg/gppkg_spec.yml.in > gppkg_spec.yml 76 cat gppkg_spec.yml 77 78 mkdir -p gppkg 79 cp gppkg_spec.yml ${PKG_FILES} gppkg/ 80 gppkg --build gppkg/ 81 done 82 echo "Successfully built gppkg v1 for GPDB5 and GPDB6" 83 ######################################################################################## 84 85 ######################################################################################## 86 # gpdb7+ uses gppkg_v2, which does not require an rpm or deb package. Instead just placed compiled 87 # binaries and config metadata into a folder for building 88 if [[ ${OS} == "RHEL8" || ${OS} == "RHEL9" ]]; then 89 export ARCH=x86_64 90 export GPBACKUP_TOOLS_VERSION=$(cat gpbackup-tools-versions/pkg_version) 91 echo "Building gppkg v2 installer for gpbackup version: ${GPBACKUP_TOOLS_VERSION} platform: ${OS}" 92 93 mkdir /tmp/gppkgv2 94 tar -xzf gp-pkg/gppkg* -C /tmp/gppkgv2 95 96 BUILDROOT=/tmp/gpbackup_tools_build 97 mkdir -p ${BUILDROOT}/bin 98 99 cp gpbackup_tar/bin_gpbackup.tar.gz ${BUILDROOT}/ 100 tar -xzvf ${BUILDROOT}/bin_gpbackup.tar.gz -C ${BUILDROOT}/bin 101 102 # Create gppkg v2 from compiled binaries 103 # spec file 104 export GPDB_MAJOR_VERSION=7 105 envsubst < gpbackup/gppkg/gppkg_v2_spec.yml.in > gppkg_spec.yml 106 cat gppkg_spec.yml 107 108 cp gppkg_spec.yml ${BUILDROOT} 109 /tmp/gppkgv2/gppkg build -c $BUILDROOT/gppkg_spec.yml -i $BUILDROOT/bin 110 111 # gppkg v2 defaults to appending .tar.gz to the gppkg file 112 for file in *gppkg.tar.gz; do 113 if [ -f "$file" ]; then 114 new_name="${file%.gppkg.tar.gz}" 115 mv "$file" "${new_name}-${OS}-x86_64.gppkg" 116 fi 117 done 118 119 # other build scripts expect the file to be named gpbackup_tools*, even though the package name 120 # is greenplum_backup_restore* 121 set +e 122 rename greenplum_backup_restore gpbackup_tools *.gppkg 123 set -e 124 echo "Successfully built gppkg v2 for GPDB7" 125 fi 126 ######################################################################################## 127 128 ######################################################################################## 129 # Prepare to publish output 130 chown gpadmin:gpadmin *.gppkg 131 ls -l *.gppkg 132 mv *.gppkg gppkgs/ 133 ########################################################################################