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