Full Code of Zimbra/zm-build for AI

develop 8b669aab1a4d cached
148 files
1.0 MB
313.8k tokens
5 symbols
1 requests
Download .txt
Showing preview only (1,077K chars total). Download the full file or copy to clipboard to get everything.
Repository: Zimbra/zm-build
Branch: develop
Commit: 8b669aab1a4d
Files: 148
Total size: 1.0 MB

Directory structure:
gitextract_jdedxgo8/

├── .circleci/
│   ├── ENVIRONMENT.txt
│   ├── config.yml
│   ├── jobs/
│   │   └── deploy_ec2/
│   │       ├── deploy.sh
│   │       ├── install.conf.in
│   │       └── upgrade.conf.in
│   └── misc/
│       ├── glean_version.pl
│       └── status_api.sh
├── .gitignore
├── .project
├── RE/
│   ├── MICRO_WIN
│   ├── README.txt
│   └── RELEASE
├── README.md
├── build.pl
├── config.build.in
├── instructions/
│   ├── .gitignore
│   ├── FOSS_package_list.pl
│   ├── FOSS_remote_list.pl
│   ├── FOSS_repo_list.pl
│   ├── FOSS_staging_list.pl
│   └── bundling-scripts/
│       ├── .gitignore
│       ├── utils.sh
│       ├── zcs-bundle.sh
│       ├── zimbra-apache.sh
│       ├── zimbra-core.sh
│       ├── zimbra-dnscache.sh
│       ├── zimbra-imapd.sh
│       ├── zimbra-ldap.sh
│       ├── zimbra-logger.sh
│       ├── zimbra-mta.sh
│       ├── zimbra-proxy.sh
│       ├── zimbra-snmp.sh
│       ├── zimbra-spell.sh
│       └── zimbra-store.sh
├── lib/
│   └── Zimbra/
│       ├── DB/
│       │   └── DB.pm
│       ├── LDAP.pm
│       ├── LocalConfig.pm
│       ├── Mon/
│       │   ├── Logger.pm
│       │   ├── LoggerSchema.pm
│       │   └── Zmstat.pm
│       ├── SMTP.pm
│       ├── SOAP/
│       │   ├── Soap.pm
│       │   ├── Soap11.pm
│       │   ├── Soap12.pm
│       │   ├── XmlDoc.pm
│       │   └── XmlElement.pm
│       ├── Util/
│       │   ├── Common.pm
│       │   ├── LDAP.pm
│       │   └── Timezone.pm
│       └── ZmClient.pm
├── rpmconf/
│   ├── Build/
│   │   ├── checkLicense.pl
│   │   ├── checkService.pl
│   │   ├── create_distribution.dist.sh
│   │   ├── get_plat_tag.sh
│   │   └── zmValidateLdap.pl
│   ├── Conf/
│   │   ├── auditswatchrc
│   │   ├── hotspot_compiler
│   │   ├── logswatchrc
│   │   ├── mibs/
│   │   │   ├── zimbra.mib
│   │   │   └── zimbra_traps.mib
│   │   ├── snmp.conf
│   │   ├── snmpd.conf.in
│   │   ├── swatchrc
│   │   └── zmssl.cnf.in
│   ├── Ctl/
│   │   ├── zimbra.cf.in
│   │   ├── zimbracore.cf
│   │   ├── zimbraldap.cf
│   │   ├── zimbralogger.cf
│   │   ├── zimbramail.cf
│   │   ├── zimbramta.cf
│   │   └── zimbrasnmp.cf
│   ├── Env/
│   │   ├── crontabs/
│   │   │   ├── crontab
│   │   │   ├── crontab.ldap
│   │   │   ├── crontab.logger
│   │   │   ├── crontab.mta
│   │   │   └── crontab.store
│   │   ├── sudoers.d/
│   │   │   ├── 01_zimbra
│   │   │   ├── 02_zimbra-core
│   │   │   ├── 02_zimbra-dnscache.deb
│   │   │   ├── 02_zimbra-dnscache.rpm
│   │   │   ├── 02_zimbra-mta
│   │   │   └── 02_zimbra-store
│   │   ├── zimbra.bash_profile
│   │   ├── zimbra.bashrc
│   │   ├── zimbra.exrc
│   │   ├── zimbra.ldaprc
│   │   ├── zimbra.platform
│   │   └── zimbra.viminfo
│   ├── Install/
│   │   ├── Util/
│   │   │   ├── addUser.sh
│   │   │   ├── globals.sh
│   │   │   ├── modules/
│   │   │   │   ├── getconfig.sh
│   │   │   │   ├── packages.sh
│   │   │   │   └── postinstall.sh
│   │   │   └── utilfunc.sh
│   │   ├── install.sh
│   │   ├── postinstall.pm
│   │   ├── preinstall.pm
│   │   ├── test.pl
│   │   └── zmsetup.pl
│   ├── LicenseTool/
│   │   ├── Zimbra/
│   │   │   ├── Customer.pm
│   │   │   ├── License.pm
│   │   │   ├── LicenseKey.pm
│   │   │   └── LicensingDB.pm
│   │   ├── db/
│   │   │   └── create_license_db.sql
│   │   └── zmlicensetool.pl
│   ├── Patch/
│   │   ├── bin/
│   │   │   └── zmpatch.pl
│   │   ├── conf/
│   │   │   └── zmpatch.xml
│   │   ├── installPatch.sh
│   │   └── libexec/
│   │       ├── zmcurl807-updater.sh
│   │       └── zmopenssl-updater.sh
│   ├── Spec/
│   │   ├── Scripts/
│   │   │   ├── zimbra-core.post
│   │   │   ├── zimbra-core.pre
│   │   │   ├── zimbra-dnscache.post
│   │   │   ├── zimbra-ldap.post
│   │   │   ├── zimbra-logger.post
│   │   │   ├── zimbra-mta.post
│   │   │   ├── zimbra-proxy.post
│   │   │   ├── zimbra-qa.post
│   │   │   ├── zimbra-snmp.post
│   │   │   ├── zimbra-spell.post
│   │   │   ├── zimbra-store.post
│   │   │   └── zimbra-store.pre
│   │   ├── zimbra-apache.deb
│   │   ├── zimbra-apache.spec
│   │   ├── zimbra-core.deb
│   │   ├── zimbra-core.spec
│   │   ├── zimbra-dnscache.deb
│   │   ├── zimbra-dnscache.spec
│   │   ├── zimbra-imapd.deb
│   │   ├── zimbra-imapd.spec
│   │   ├── zimbra-ldap.deb
│   │   ├── zimbra-ldap.spec
│   │   ├── zimbra-logger.deb
│   │   ├── zimbra-logger.spec
│   │   ├── zimbra-mta.deb
│   │   ├── zimbra-mta.spec
│   │   ├── zimbra-proxy.deb
│   │   ├── zimbra-proxy.spec
│   │   ├── zimbra-qa.deb
│   │   ├── zimbra-qa.spec
│   │   ├── zimbra-snmp.deb
│   │   ├── zimbra-snmp.spec
│   │   ├── zimbra-spell.deb
│   │   ├── zimbra-spell.spec
│   │   ├── zimbra-store.deb
│   │   └── zimbra-store.spec
│   └── Upgrade/
│       └── zmupgrade.pm
└── show_git_overrides.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .circleci/ENVIRONMENT.txt
================================================
ENV VARIABLES:
   (used by deploy_ec2@app1_install, deploy_ec2@app1_upgrade):
      APP1_ADMIN_PASS =  password to set admin user to.
      APP1_SSH_HOST   =  ec2 machine
      APP1_SSH_USER   =  ec2 username (with sudo)
   (used by deploy_ec2@app2_install, deploy_ec2@app2_upgrade):
      APP2_ADMIN_PASS =  password to set admin user to.
      APP2_SSH_HOST   =  ec2 machine
      APP2_SSH_USER   =  ec2 username (with sudo)

SSH PERMISSIONS: (used by deploy_ec2)
   (private key for ec2 machine named in $APP1_SSH_HOST above)
   (private key for ec2 machine named in $APP2_SSH_HOST above)

AWS PERMISSIONS: (used by deploy_s3)
   Access Key ID
   Secret Access Key


================================================
FILE: .circleci/config.yml
================================================

# vim:expandtab:ts=3

version: 2

############################################################################

references:
   checkout_job_steps: &checkout_job_steps
      steps:
         - checkout
         - run:
            name: Checking out dependencies
            command: |
               mkdir -p ../BUILDS
               ./build.pl \
                  --build-type=FOSS \
                  --build-hostname=build.zimbra.org \
                  --build-release="$CIRCLE_PROJECT_USERNAME" \
                  --build-release-no=$(.circleci/misc/glean_version.pl) \
                  --build-release-candidate=beta \
                  --build-thirdparty-server=zdev-vm008.eng.zimbra.com \
                  --deploy-url-prefix="https://files.zimbra.com/dev-releases/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/$CIRCLE_BRANCH-$CIRCLE_BUILD_NUM" \
                  --git-default-branch="$CIRCLE_BRANCH,develop" \
                  --build-os="UBUNTU16_64" \
                  --pkg-os-tag="u16" \
                  --build-no="$CIRCLE_BUILD_NUM" \
                  --build-ts="$(date "+%Y%m%d%M%H%S")" \
                  --ant-options="-DskipTests=1" \
                  --no-interactive \
                  --disable-bundle \
                  --dump-config-to="$PWD/config.build" \
                  --stop-after-checkout \
                  --exclude-git-repos=zm-timezones \
                  2>&1 \
               | tee ../BUILDS/checkout.log;

               # FIXME: remove this hack, and fix --dump-config-to
               sed -i \
                  -e '/^DUMP_CONFIG_TO/d' \
                  -e '/^STOP_AFTER_CHECKOUT/d' \
                  -e '/^INTERACTIVE/d' \
                  -e '/^BUILD_OS/d' \
                  -e '/^PKG_OS_TAG/d' \
                  -e '/^BUILD_ARCH/d' \
                  -e '/\<UBUNTU16_64\>/d' \
                  -e '/\<BUILDS\>/d' \
                  config.build;
         - persist_to_workspace:
            root: ../..
            paths:
               - checkout
               - .zcs-deps

   build_job_steps: &build_job_steps
      steps:
         - attach_workspace:
            at: ../..
         - run:
            name: Creating build
            command: |
               rm ../BUILDS/checkout.log
               ENV_GIT_UPDATE_INCLUDE=@ \
                  ./build.pl 2>&1 \
                     --build-os="$ZIMBRA_BUILD_OS" \
                     --pkg-os-tag="$ZIMBRA_OS_TAG" \
                     --no-interactive \
               | tee -a ../BUILDS/build-${ZIMBRA_OS_TAG}.log
         - store_artifacts:
            path: ../BUILDS
         - persist_to_workspace:
            root: ../..
            paths: checkout/BUILDS

   deploy_s3_job_steps: &deploy_s3_job_steps
      steps:
         - attach_workspace:
            at: ../..
         - deploy:
            name: Deploying to S3
            command: |
               for i in ../BUILDS/*
               do
                  if [ -d "$i" ]
                  then
                     # NOTE: We are not using $CIRCLE_BUILD_NUM as its different for each job of the workflow
                     #       Instead, we need $CIRCLE_BUILD_NUM allocated for 'checkout' job, (stored in config.build)
                     BUILD_NO=$(cat config.build | sed -ne '/^BUILD_NO\>/ { s/.*=\s*//p }'); [ ! -z "$BUILD_NO" ] || exit 2;

                     aws s3 sync "$i" "s3://files.zimbra.com/dev-releases/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/$CIRCLE_BRANCH-$BUILD_NO/" \
                        --acl public-read \
                        --region us-east-1
                  fi
               done

   deploy_ec2_job_steps: &deploy_ec2_job_steps
      steps:
         - attach_workspace:
            at: ../..
         - deploy:
            name: Deploying to EC2
            command: |
               MY_SSH_HOST_var="${EC2_TARGET}_SSH_HOST";
               MY_SSH_USER_var="${EC2_TARGET}_SSH_USER";
               MY_ADMIN_PASS_var="${EC2_TARGET}_ADMIN_PASS";

               .circleci/jobs/deploy_ec2/deploy.sh \
                  -o ${OPERATION} \
                  -t ${PKG_OS_TAG} \
                  -h ${!MY_SSH_HOST_var} \
                  -u ${!MY_SSH_USER_var} \
                  -a ${!MY_ADMIN_PASS_var}

   std_filters: &std_filters
      filters:
         branches:
            only:
               - master
               - develop

############################################################################

jobs:
   checkout:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      docker:
         - image: zimbra/zm-base-os:devcore-ubuntu-16.04
      <<: *checkout_job_steps

   build_u16:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - ZIMBRA_OS_TAG: u16
         - ZIMBRA_BUILD_OS: UBUNTU16_64
      docker:
         - image: zimbra/zm-base-os:devcore-ubuntu-16.04
      <<: *build_job_steps

   build_u14:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - ZIMBRA_OS_TAG: u14
         - ZIMBRA_BUILD_OS: UBUNTU14_64
      docker:
         - image: zimbra/zm-base-os:devcore-ubuntu-14.04
      <<: *build_job_steps

   build_u12:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - ZIMBRA_OS_TAG: u12
         - ZIMBRA_BUILD_OS: UBUNTU12_64
      docker:
         - image: zimbra/zm-base-os:devcore-ubuntu-12.04
      <<: *build_job_steps

   build_r7:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - ZIMBRA_OS_TAG: r7
         - ZIMBRA_BUILD_OS: RHEL7_64
      docker:
         - image: zimbra/zm-base-os:devcore-centos-7
      <<: *build_job_steps

   build_r6:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - ZIMBRA_OS_TAG: r6
         - ZIMBRA_BUILD_OS: RHEL6_64
      docker:
         - image: zimbra/zm-base-os:devcore-centos-6
      <<: *build_job_steps

   deploy_s3:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      docker:
         - image: zimbra/zm-base-os:core-ubuntu
      <<: *deploy_s3_job_steps

   deploy_ec2@app1_install:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - EC2_TARGET: APP1
         - OPERATION: install
         - PKG_OS_TAG: u16
      docker:
         - image: zimbra/zm-base-os:core-ubuntu
      <<: *deploy_ec2_job_steps

   deploy_ec2@app1_upgrade:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - EC2_TARGET: APP1
         - OPERATION: upgrade
         - PKG_OS_TAG: u16
      docker:
         - image: zimbra/zm-base-os:core-ubuntu
      <<: *deploy_ec2_job_steps

   deploy_ec2@app2_install:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - EC2_TARGET: APP2
         - OPERATION: install
         - PKG_OS_TAG: r6
      docker:
         - image: zimbra/zm-base-os:core-ubuntu
      <<: *deploy_ec2_job_steps

   deploy_ec2@app2_upgrade:
      working_directory: ~/checkout/zm-build
      shell: /bin/bash -euo pipefail
      environment:
         - EC2_TARGET: APP2
         - OPERATION: upgrade
         - PKG_OS_TAG: r6
      docker:
         - image: zimbra/zm-base-os:core-ubuntu
      <<: *deploy_ec2_job_steps

############################################################################

workflows:
   version: 2
   main:
      jobs:
         - checkout

         #########################

         - build_u16:
            requires:
               - checkout
         - build_u14:
            requires:
               - checkout
         - build_u12:
            requires:
               - checkout
#         - build_r7:
#            requires:
#               - checkout
         - build_r6:
            requires:
               - checkout

         #########################

         - deploy_s3_hold:
            type: approval
            requires:
               - build_u16
               - build_u14
               - build_u12
#               - build_r7    (core dump issue while running ant)
               - build_r6
            <<: *std_filters

         - deploy_s3:
            requires:
               - deploy_s3_hold
            <<: *std_filters

         #########################

         - app1_ec2_install:
            type: approval
            requires:
               - build_u16
            <<: *std_filters

         - app1_ec2_upgrade:
            type: approval
            requires:
               - build_u16
            <<: *std_filters

         - deploy_ec2@app1_install:
            requires:
               - app1_ec2_install
            <<: *std_filters

         - deploy_ec2@app1_upgrade:
            requires:
               - app1_ec2_upgrade
            <<: *std_filters

         #########################

         - app2_ec2_install:
            type: approval
            requires:
               - build_r6
            <<: *std_filters

         - app2_ec2_upgrade:
            type: approval
            requires:
               - build_r6
            <<: *std_filters

         - deploy_ec2@app2_install:
            requires:
               - app2_ec2_install
            <<: *std_filters

         - deploy_ec2@app2_upgrade:
            requires:
               - app2_ec2_upgrade
            <<: *std_filters


================================================
FILE: .circleci/jobs/deploy_ec2/deploy.sh
================================================
#!/bin/bash

set -euo pipefail

SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd);
CIRCLE_DIR=$(dirname "$(dirname "$SCRIPT_DIR")")

usage()
{
   echo "Usage: $0 -o <upgrade|install> -t <u16|u14|u12|r7|r6> -h <ssh-ec2-host> -u <ssh-ec2-user> -a <admin-pass-to-set>" 1>&2;
   echo 1>&2;
   echo "Example:" 1>&2;
   echo "   $0 -o upgrade -t u16 -h ec2-xx-xx-xx-xx.us-east-2.compute.amazonaws.com -u ubuntu -a admin123" 1>&2;
   exit 1
}

#######################################################################
##### PARSE ARGS, SANITIZE #####
#######################################################################

set +u
while getopts "o:t:h:u:a:" cur_opt; do
    case "${cur_opt}" in
        o)
            OPERATION="${OPTARG}"
            if [ "$OPERATION" != "upgrade" ] && [ "$OPERATION" != "install" ]
            then
	       usage
            fi
            ;;
        t)
            PKG_OS_TAG=${OPTARG}
            case "$PKG_OS_TAG" in
               u16) DIR=$(echo $CIRCLE_DIR/../../BUILDS/UBUNTU16_64* | head -1); ;;
               u14) DIR=$(echo $CIRCLE_DIR/../../BUILDS/UBUNTU14_64* | head -1); ;;
               u12) DIR=$(echo $CIRCLE_DIR/../../BUILDS/UBUNTU12_64* | head -1); ;;
                r7) DIR=$(echo $CIRCLE_DIR/../../BUILDS/RHEL7_64* | head -1); ;;
                r6) DIR=$(echo $CIRCLE_DIR/../../BUILDS/RHEL6_64* | head -1); ;;
                *) usage; ;;
            esac
            ;;
        h)
            MY_SSH_HOST=${OPTARG}
            ;;
        u)
            MY_SSH_USER=${OPTARG}
            ;;
        a)
            MY_ADMIN_PASS=${OPTARG}
            ;;
        *)
            usage
            ;;
    esac
done
shift $((OPTIND-1))

if [ -z "$MY_SSH_USER" ] || [ -z "$MY_SSH_HOST" ] || [ -z "$MY_ADMIN_PASS" ] || [ -z "$PKG_OS_TAG" ]
then
   usage;
fi

if [ ! -f "$CIRCLE_DIR/config.yml" ]
then
   echo "Rerun from within .circleci directory";
   exit 1
fi

if [ ! -d "$DIR" ]
then
   echo "Could not find the BUILD";
   exit 1;
fi
set -u

##### END GETOPT #####
#######################################################################


#######################################################################
##### RSYNC #####
#######################################################################

SSH_OPTS=(
   "-o" "UserKnownHostsFile=/dev/null"
   "-o" "StrictHostKeyChecking=no"
   "-o" "CheckHostIP=no"
   "-o" "ServerAliveInterval=100"
)

Rsync()
{
   rsync -e "ssh ${SSH_OPTS[*]}" "$@"
}

Ssh()
{
   ssh "${SSH_OPTS[@]}" "$@"
}

#Rsync --delete -avz $CIRCLE_DIR/../zm-build "$MY_SSH_USER@$MY_SSH_HOST:"
Rsync --delete -avz "$DIR/" "$MY_SSH_USER@$MY_SSH_HOST:BUILD/"
Rsync $CIRCLE_DIR/jobs/deploy_ec2/install.conf.in "$MY_SSH_USER@$MY_SSH_HOST:BUILD/install.conf.in"
Rsync $CIRCLE_DIR/jobs/deploy_ec2/upgrade.conf.in "$MY_SSH_USER@$MY_SSH_HOST:BUILD/upgrade.conf.in"

##### END RSYNC #####
#######################################################################


#######################################################################
##### FORWARD SCRIPT TO EXECUTE #####
#######################################################################

Ssh "$MY_SSH_USER@$MY_SSH_HOST" -- tee /tmp/injected_bash_script.sh <<"SCRIPT_EOM"
#!/bin/bash

[ -z "$DOMAIN_NAME" ] && echo "DOMAIN_NAME is not defined" && exit 1;
[ -z "$ADMIN_PASS"  ] && echo "ADMIN_PASS is not defined"  && exit 1;
[ -z "$OPERATION"   ] && echo "OPERATION is not defined"   && exit 1;
[ -z "$PKG_OS_TAG"  ] && echo "PKG_OS_TAG is not defined"  && exit 1;

set -euxo pipefail

setUp()
{
   echo -----------------------------------
   echo System Setup specific to EC2
   echo -----------------------------------

   [ -f /etc/hosts.orig ] || sudo cp /etc/hosts /etc/hosts.orig
   [ -f /etc/resolv.conf.orig ] || sudo cp /etc/resolv.conf /etc/resolv.conf.orig
   EC2_IP=$(hostname      | sed -e 's/[.\s].*$//' -e 's/^ip-//' -e 's/[-]/./g')
   EC2_RESOLVE=$(hostname | sed -e 's/[.\s].*$//' -e 's/^ip-//' -e 's/[-]/./g' -e 's/[.][0-9]*[.][0-9]*$/.0.2/')
   sudo sed -i -e "\$a$EC2_IP $(hostname -f) $(hostname)" -e "/ip-/ { /$(hostname)/d; }" /etc/hosts
   sudo sed -i -e "/^search/i\\nameserver $EC2_RESOLVE\nnameserver 8.8.8.8" -e "/nameserver 8.8.8.8/d" -e "/nameserver $EC2_RESOLVE/d" /etc/resolv.conf

   echo -----------------------------------
   echo System Cleanup
   echo -----------------------------------

   set +e;
   sudo killall master zmstat-fd
   sudo killall -u zimbra
   sudo killall -u postfix
   sudo pkill -f 'amavi[s]'
   sleep 10
   sudo killall -9 master zmstat-fd
   sudo killall -9 -u zimbra
   sudo killall -9 -u postfix
   sudo pkill -9 -f 'amavi[s]'
   sleep 10
   [[ "$PKG_OS_TAG" =~ u* ]] && sudo apt-get remove --purge -y zimbra-*
   [[ "$PKG_OS_TAG" =~ r* ]] && sudo yum erase -y zimbra-*
   sudo rm -rf /opt/zimbra

   [[ "$PKG_OS_TAG" =~ u* ]] && sudo apt-get install -y perl
   [[ "$PKG_OS_TAG" =~ r* ]] && sudo yum install -y perl
   if [[ "$PKG_OS_TAG" =~ r6 ]]
   then
      if [ ! -f /usr/lib/python2.6/site-packages/yum/__init__.py.patched ]
      then
         #We are running into a curious yum bug - See https://bugzilla.redhat.com/show_bug.cgi?id=993567

         sudo yum -y install wget patch
         sudo wget http://s3.amazonaws.com/files.zimbra.com/dev-releases/hold/r6-yum-patch/yum.patch -O ~/yum.patch
         sudo cp /usr/lib/python2.6/site-packages/yum/__init__.py{,.orig}
         sudo patch -p0 < ~/yum.patch
         sudo cp /usr/lib/python2.6/site-packages/yum/__init__.py{,.patched}
      fi
   fi
   echo
}

buildCleanUp()
{
   echo -----------------------------------
   echo Build Cleanup, Uncompress new tarball
   echo -----------------------------------

   sudo rm -rf ~/WDIR
   mkdir ~/WDIR
   tar -C ~/WDIR -xzf BUILD/zcs-*.tgz
}

prepareConfig()
{
   echo -----------------------------------
   echo Create install configuration
   echo -----------------------------------

   HOSTNAME="$(hostname --fqdn)"
   RESOLVE="$(cat /etc/resolv.conf | awk '/^\s*nameserver/ { print $2; }' | grep -v ^127 | head -1)"
   sed -e "s/template_resolv/$RESOLVE/" \
       -e "s/template_hostname/$HOSTNAME/" \
       -e "s/template_domainname/$DOMAIN_NAME/" \
       -e "s/template_admin_pass/$ADMIN_PASS/g" \
   ~/BUILD/install.conf.in > ~/WDIR/install.conf
   cat ~/BUILD/upgrade.conf.in > ~/WDIR/upgrade.conf
}

updatePackages()
{
   echo -----------------------------------
   echo Setup local archives
   echo -----------------------------------

   if [[ "$PKG_OS_TAG" =~ u ]]
   then
      sudo rm -f /etc/apt/sources.list.d/zimbra-*.list

      echo "deb [trusted=yes] file://$(echo $HOME/BUILD/archives/*/$PKG_OS_TAG) ./"                                                           | sudo tee -a /etc/apt/sources.list.d/zimbra-local.list
      echo "deb [trusted=yes] https://files.zimbra.com/dev-releases/hold/Zimbra/zm-zextras/develop-52/archives/zimbra-zextras/$PKG_OS_TAG ./" | sudo tee -a /etc/apt/sources.list.d/zimbra-zextras.list
      echo "deb [trusted=yes] https://files.zimbra.com/dev-releases/hold/Zimbra/zm-timezones/develop-35/archives/zimbra-foss/$PKG_OS_TAG  ./" | sudo tee -a /etc/apt/sources.list.d/zimbra-foss.list

      #echo "deb [arch=amd64] https://repo.zimbra.com/apt/zimbra-zextras xenial zimbra" | sudo tee -a /etc/apt/sources.list.d/zimbra-zextras.list
      #echo "deb [arch=amd64] https://repo.zimbra.com/apt/zimbra-foss xenial zimbra"    | sudo tee -a /etc/apt/sources.list.d/zimbra-foss.list

      sudo apt-get update -qq
   fi

   if [[ "$PKG_OS_TAG" =~ r ]]
   then
      sudo rm -f /etc/yum.repos.d/zimbra-*.repo

      sudo tee -a /etc/yum.repos.d/zimbra-local.repo <<EOM
[zimbra-local-zm-build]
name=zimbra-local
baseurl=file://$(echo $HOME/BUILD/archives/*/$PKG_OS_TAG)
enabled=1
gpgcheck=0
protect=0
EOM

      sudo tee -a /etc/yum.repos.d/zimbra-zextras.repo <<EOM
[zimbra-zextras-zm-zextras]
name=zimbra-zextras
baseurl=https://files.zimbra.com/dev-releases/hold/Zimbra/zm-zextras/develop-52/archives/zimbra-zextras/$PKG_OS_TAG
enabled=1
gpgcheck=0
protect=0
EOM

      sudo tee -a /etc/yum.repos.d/zimbra-foss.repo <<EOM
[zimbra-foss-zm-timezones]
name=zimbra-foss
baseurl=https://files.zimbra.com/dev-releases/hold/Zimbra/zm-timezones/develop-35/archives/zimbra-foss/$PKG_OS_TAG
enabled=1
gpgcheck=0
protect=0
EOM

      sudo yum clean all
   fi
}

deploy()
{
   echo -----------------------------------
   echo Upgrade/Install
   echo -----------------------------------

   cd ~/WDIR/zcs-*/;
   sudo ./install.sh $1
}

postInstallConfiguration()
{
   echo -----------------------------------
   echo Additional Settings
   echo -----------------------------------

   sudo su - zimbra -c "zmprov -l md $DOMAIN_NAME zimbraVirtualHostname $DOMAIN_NAME"
   sudo su - zimbra -c "zmprov -l mcf zimbraReverseProxyAdminEnabled TRUE"
   sudo su - zimbra -c "zmproxyctl restart"

   sudo su - zimbra -c "zmprov -l mcf zimbraPublicServiceHostname $DOMAIN_NAME"
   sudo su - zimbra -c "zmprov -l mcf zimbraPublicServicePort 443"
   sudo su - zimbra -c "zmprov -l mcf zimbraPublicServiceProtocol https"
   sudo su - zimbra -c "zmprov mc default zimbraFeatureNotebookEnabled TRUE"
   sudo su - zimbra -c "zmmailboxdctl restart"
}

Main() {
   echo $OPERATION
   if [ "$OPERATION" == "upgrade" ]; then
      buildCleanUp
      prepareConfig
      updatePackages
      deploy ~/WDIR/upgrade.conf
   else
      setUp
      buildCleanUp
      prepareConfig
      updatePackages
      deploy ~/WDIR/install.conf
      postInstallConfiguration
   fi
}

Main
echo -----------------------------------
echo INSTALL FINISHED
echo -----------------------------------
SCRIPT_EOM

#######################################################################
##### EXECUTE SCRIPT IN EC2 #####
#######################################################################

# XXX:  All variables have to be explicitly forwarded to the script below, and it runs inside the remote machines's context

Ssh "$MY_SSH_USER@$MY_SSH_HOST" -- "DOMAIN_NAME=$MY_SSH_HOST" "ADMIN_PASS=$MY_ADMIN_PASS" "OPERATION=$OPERATION" "PKG_OS_TAG=$PKG_OS_TAG" bash /tmp/injected_bash_script.sh

echo DEPLOY FINISHED - https://$MY_SSH_HOST/


================================================
FILE: .circleci/jobs/deploy_ec2/install.conf.in
================================================
AVDOMAIN="template_domainname"
AVUSER="admin@template_domainname"
CREATEADMIN="admin@template_domainname"
CREATEADMINPASS="template_admin_pass"
CREATEDOMAIN="template_domainname"
DOCREATEADMIN="yes"
DOCREATEDOMAIN="yes"
DOTRAINSA="yes"
ENABLEDEFAULTBACKUP="yes"
EXPANDMENU="no"
HOSTNAME="template_hostname"
HTTPPORT="8080"
HTTPPROXYPORT="80"
HTTPPROXY="TRUE"
HTTPSPORT="8443"
HTTPSPROXYPORT="443"
IMAPPORT="7143"
IMAPPROXYPORT="143"
IMAPSSLPORT="7993"
IMAPSSLPROXYPORT="993"
INSTALL_PACKAGES="zimbra-core zimbra-ldap zimbra-logger zimbra-mta zimbra-dnscache zimbra-snmp zimbra-store zimbra-apache zimbra-spell zimbra-proxy"
INSTALL_WEBAPPS="service zimlet zimbra zimbraAdmin"
LDAPADMINPASS="zpass-ldap-admin"
LDAPAMAVISPASS="zpass-ldap-amavis"
ldap_bes_searcher_password="zpass-bes"
LDAPBESSEARCHSET="set"
ldap_dit_base_dn_config="cn=zimbra"
LDAPHOST="template_hostname"
ldap_nginx_password="zpass-nginx"
LDAPPORT="389"
LDAPPOSTPASS="zpass-ldap-post"
LDAPREPLICATIONTYPE="master"
LDAPREPPASS="zpass-ldap-rep"
LDAPROOTPASS="zpass-ldap-root"
mailboxd_directory="/opt/zimbra/mailboxd"
mailboxd_keystore="/opt/zimbra/mailboxd/etc/keystore"
mailboxd_keystore_password="zpass-mailboxd"
MAILBOXDMEMORY="1484"
mailboxd_server="jetty"
mailboxd_truststore_password="changeit"
MAILPROXY="TRUE"
MODE="https"
MYSQLMEMORYPERCENT="30"
PACKAGE_SERVER="repo.zimbra.com"
POPPORT="7110"
POPPROXYPORT="110"
POPSSLPORT="7995"
POPSSLPROXYPORT="995"
postfix_mail_owner="postfix"
postfix_setgid_group="postdrop"
PROXYMODE="https"
REMOVE="no"
RUNARCHIVING="no"
RUNAV="yes"
RUNCBPOLICYD="no"
RUNDKIM="yes"
RUNSA="yes"
RUNVMHA="no"
SERVICEWEBAPP="yes"
SMTPDEST="admin@template_domainname"
SMTPHOST="template_hostname"
SMTPNOTIFY="yes"
SMTPSOURCE="admin@template_domainname"
SNMPNOTIFY="yes"
SNMPTRAPHOST="template_hostname"
SPELLURL="http://template_hostname:7780/aspell.php"
ssl_default_digest="sha256"
STARTSERVERS="yes"
SYSTEMMEMORY="5.8"
TRAINSAHAM="ham@template_domainname"
TRAINSASPAM="spam@template_domainname"
UIWEBAPPS="yes"
UPGRADE="no"
USESPELL="yes"
USE_ZIMBRA_PACKAGE_SERVER="yes"
VERSIONUPDATECHECKS="TRUE"
VIRUSQUARANTINE="virus-quarantine@template_domainname"
zimbraBackupReportEmailRecipients="admin@template_domainname"
zimbraBackupReportEmailSender="admin@template_domainname"
zimbraDNSMasterIP="template_resolve"
zimbraDNSTCPUpstream="no"
zimbraDNSUseTCP="yes"
zimbraDNSUseUDP="yes"
zimbraFeatureBriefcasesEnabled="Enabled"
zimbraFeatureTasksEnabled="Enabled"
zimbraIPMode="ipv4"
zimbra_ldap_userdn="uid=zimbra,cn=admins,cn=zimbra"
zimbraMailProxy="TRUE"
zimbraPrefTimeZoneId="America/Chicago"
ZIMBRA_REQ_SECURITY="yes"
zimbra_require_interprocess_security="1"
zimbraReverseProxyLookupTarget="TRUE"
zimbraVersionCheckNotificationEmail="admin@template_domainname"
zimbraVersionCheckNotificationEmailFrom="admin@template_domainname"
zimbraVersionCheckSendNotifications="TRUE"
zimbraWebProxy="TRUE"


================================================
FILE: .circleci/jobs/deploy_ec2/upgrade.conf.in
================================================
PACKAGE_SERVER="repo.zimbra.com"
REMOVE="no"
UPGRADE="yes"
USE_ZIMBRA_PACKAGE_SERVER="yes"
VERSIONUPDATECHECKS="TRUE"
INSTALL_PACKAGES="zimbra-core zimbra-ldap zimbra-logger zimbra-mta zimbra-dnscache zimbra-snmp zimbra-store zimbra-apache zimbra-spell zimbra-memcached zimbra-proxy "


================================================
FILE: .circleci/misc/glean_version.pl
================================================
#!/usr/bin/perl

use version;

if($ENV{CIRCLE_BRANCH} =~ "^release/([0-9]+[.][0-9]+[.][0-9]+)")
{
   print $1 . "\n";
}
else
{
   my $V = "1.0.0";

   close(STDERR);
   open(FD, "-|", "git", "ls-remote");
   while (<FD>)
   {
      if ( $_ =~ /refs.*\/release\/([0-9]+[.][0-9]+[.])([0-9]+)/ )
      {
         my $nV = $1 . ( $2 + 1 );

         if( ( version->parse($nV) <=> version->parse($V) ) gt 0 )
         {
            $V = $nV;
         }
      }
   }

   close(FD);

   print $V . "\n"
}


================================================
FILE: .circleci/misc/status_api.sh
================================================
#!/bin/bash

set -e -o pipefail

curl -Ls "https://circleci.com/api/v1.1/project/github/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/$CIRCLE_BUILD_NUM?circle-token=$CIRCLE_API_TOKEN"


================================================
FILE: .gitignore
================================================
.build.last_no_ts
.build.number
.idea
config.build
RE/BUILD
RE/MAJOR
RE/MICRO
RE/MINOR


================================================
FILE: .project
================================================
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>ZimbraBuild</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
	</buildSpec>
	<natures>
	</natures>
</projectDescription>


================================================
FILE: RE/MICRO_WIN
================================================
1_M1


================================================
FILE: RE/README.txt
================================================
Included:

Binary release:
	README.txt - this file
	install.sh - install script
	bin/ - binaries used during install
	data/ - contains installation data
	packages/ - contains ZCS rpms
	docs/ - more documentation

Source release:
	README.txt - this file
	src/ - source files
	docs/ - more documentation

Installing from binary:
	tar xzf zcs.tgz
	cd zcs
	./install.sh

Installing from source:
 	Consult the file readme_source.txt


================================================
FILE: RE/RELEASE
================================================
1


================================================
FILE: README.md
================================================
# zm-build

## Introduction

This repository contains the build script and supporting files required to create a [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) build of the [Zimbra Collaboration Suite](https://www.zimbra.com/). 

## Overview

* `build.pl` - Invoke this script to produce a build.  See the *Building* section 
  below for an example.
* `instructions/`
    * `FOSS_remote_list.pl` - Maps between remote label and URL
    * `FOSS_repo_list.pl` - Specifies which branches (or tags) are checked out to
      build each component repository.
    * `FOSS_staging_list.pl` - defines the staging order and details.

## Setup with Zimbra Development Images (used for building)

* Set up docker on your box
* You can then pull and run using development images (built from Zimbra/zm-base-os.git)
* In case you need to customize the images for your purposes, you could maintain your own Dockerfile such as this:

        $ cat Dockerfile
        FROM zimbra/zm-base-os:devcore-ubuntu-16.04
        RUN sudo apt-get install emacs my-special-tool etc..
        RUN ...

        $ docker build -t myuser/my-devcore-ubuntu-16 .
        $ docker run -it myuser/my-devcore-ubuntu-16 bash

### Ubuntu 16.04

    docker run -it zimbra/zm-base-os:devcore-ubuntu-16.04 bash

### CentOS 7

    docker run -it zimbra/zm-base-os:devcore-centos-7 bash

### CentOS 6

    docker run -it zimbra/zm-base-os:devcore-centos-6 bash

    # some tools are installed inside /home/build/.zm-dev-tools/, zm-build automatically sources this path.

## Setup (traditional)

### Ubuntu 16.04

The following steps assume that your are starting with a clean VM and are
logged in as a non-root user with `sudo` privileges.

    sudo apt-get update
    sudo apt-get install software-properties-common openjdk-8-jdk ant ant-optional ant-contrib ruby git maven build-essential debhelper

### CentOS 7

    sudo yum groupinstall 'Development Tools'
    sudo yum install java-1.8.0-openjdk ant ant-junit ruby git maven cpan wget perl-IPC-Cmd

### CentOS 6

    sudo yum groupinstall 'Development Tools'
    sudo yum remove java-1.7.0-openjdk java-1.6.0-openjdk ant
    sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel ruby git cpan wget
    # install specific perl modules
    sudo cpan IPC::Cmd
    cd /tmp
    # install maven
    wget http://mirror.metrocast.net/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
    sudo tar -xf apache-maven-3.3.9-bin.tar.gz
    sudo mv apache-maven-3.3.9 /opt
    echo 'export PATH="/opt/apache-maven-3.3.9/bin:$PATH"' | sudo tee -a /etc/profile.d/maven.sh
    # install current version of ant
    wget https://www.apache.org/dist/ant/binaries/apache-ant-1.9.9-bin.zip
    sudo unzip apache-ant-1.9.9-bin.zip
    sudo mv apache-ant-1.9.9 /opt
    echo 'export PATH="/opt/apache-ant-1.9.9/bin:$PATH"' | sudo tee -a /etc/profile.d/ant.sh

## Building
Create a directory for your build and check-out the `zm-build` repository:
Build from develop branch

    mkdir installer-build
    cd installer-build
    git clone https://github.com/Zimbra/zm-build.git
    cd zm-build
    git checkout origin/develop
    ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --ant-options -DskipCoverage=true --ant-options -DskipSonarScan=true --git-default-branch=develop --build-release-no=10.1.0 --build-type=FOSS --build-release=LIBERTY --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive

Build 10.1.0

```
mkdir installer-build
cd installer-build
git clone --depth 1 --branch 10.1.0 git@github.com:Zimbra/zm-build.git
cd zm-build
ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --git-default-tag=10.1.0 --build-release-no=10.1.0 --build-type=FOSS --build-release=LIBERTY --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive
```

To build a specific patch example 10.0.8 run the following:

```
mkdir installer-build
cd installer-build
git clone --depth 1 --branch 10.0.6 git@github.com:Zimbra/zm-build.git
cd zm-build
ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --git-default-tag=10.0.8,10.0.7,10.0.6,10.0.5,10.0.4,10.0.3,10.0.2,10.0.1,10.0.0-GA --build-release-no=10.0.8 --build-type=FOSS --build-release=LIBERTY --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive
```

Or for example 9.0.0.p40 run the following:

```
mkdir installer-build
cd installer-build
git clone --depth 1 --branch 9.0.0.p38 git@github.com:Zimbra/zm-build.git
cd zm-build
ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --git-default-tag=9.0.0.p40,9.0.0.p39,9.0.0.p38,9.0.0.p37,9.0.0.p36,9.0.0.p35,9.0.0.p34,9.0.0.p33,9.0.0.p32.1,9.0.0.p32,9.0.0.p31,9.0.0.p30,9.0.0.p29,9.0.0.p28,9.0.0.p27,9.0.0.p26,9.0.0.p25,9.0.0.p24.1,9.0.0.p24,9.0.0.p23,9.0.0.p22,9.0.0.p21,9.0.0.p20,9.0.0.p19,9.0.0.p18,9.0.0.p17,9.0.0.p16,9.0.0.p15,9.0.0.p14,9.0.0.p13,9.0.0.p12,9.0.0.p11,9.0.0.p10,9.0.0.p9,9.0.0.p8,9.0.0.p7,9.0.0.p6.1,9.0.0.p6,9.0.0.p5,9.0.0.p4,9.0.0.p3,9.0.0.p2,9.0.0.p1,9.0.0 --build-release-no=9.0.0 --build-type=FOSS --build-release=KEPLER --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive
```

The `build.pl` command is used to build the product. Run it with the `-h` option for help:

    Usage: ./build.pl <options>
    Supported options:
       --build-no=i
       --build-ts=i
       --build-artifacts-base-dir=s
       --build-sources-base-dir=s
       --build-release=s
       --build-release-no=s
       --build-release-candidate=s
       --build-type=s
       --build-thirdparty-server=s
       --build-prod-flag!
       --build-debug-flag!
       --build-dev-tool-base-dir=s
       --interactive!
       --git-overrides=s%
       --git-default-tag=s
       --git-default-remote=s
       --git-default-branch=s
       --stop-after-checkout!

You _can_ specify all the options on the command-line, as follows:

    ./build.pl --build-no=1713 --build-ts=`date +'%Y%m%d%H%M%S'` \
      --build-release=JUDASPRIEST --build-release-no=8.7.6 \
      --build-release-candidate=GA --build-type=FOSS \
      --build-thirdparty-server=files.zimbra.com --no-interactive

The completed build will be archived into a `*.tgz` file that is stored in the appropriate platform and release-specific
subdirectory of the `BUILDS` directory.  The above command, run on an Ubuntu 16.04 machine, created the following:

    $HOME/installer_build/BUILDS/UBUNTU16_64/JUDASPRIEST-876/20170322153033_FOSS/zm-build/zcs-8.7.6_1713.UBUNTU16_64.20170322153033.tgz

You can also specify any or all of the required options by placing them in a file
called `config.build`.  This file should be at the top level of the `zm-build`
directory.  For example:

    BUILD_NO                    = 1713
    BUILD_RELEASE               = JUDASPRIEST
    BUILD_RELEASE_NO            = 8.7.6
    BUILD_RELEASE_CANDIDATE     = GA
    BUILD_TYPE                  = FOSS
    BUILD_THIRDPARTY_SERVER     = files.zimbra.com
    INTERACTIVE                 = 0

Then just run `./build.pl`.

The above command, run on a CentOS 7 machine with the options as shown in `config.build`, created the following:

    $HOME/installer-build/BUILDS/RHEL7_64/JUDASPRIEST-876/20170323061131_FOSS/zm-build/zcs-8.7.6_GA_1713.RHEL7_64.20170323061131.tgz

# Development

## Setup

The following is a walk-through of the basic steps required to do ZCS development.  The first step is to simply install a current FOSS build on the machine that you wish to use.  The instructions that follow assume that this has been done.


1. Create `/home/zimbra` and make `zimbra` the owner.

		sudo mkdir /home/zimbra
		sudo chown zimbra:zimbra /home/zimbra

2. Install  `git`, `ant`, and `ant-contrib` by whichever method is appropriate for your distro:

		sudo apt-get install git ant ant-contrib

	or

		sudo yum install git ant ant-contrib

3. Configure `/opt/zimbra/.ssh/config` to use your ssh key for the git remotes that you need to access.
4. Perform the following edits on `/opt/zimbra/.bash_profile`
   * Comment-out `export LANG=C` and `export LC_ALL=C`.
   * Add export `LANG=en_US.UTF-8`
   * Add export `ANT_OPTS=-Ddev.home=/home/zimbra`
5. Change permissions on files and folders that you will be updating; e.g.,

		sudo chmod -R o+w /opt/zimbra/lib/
		sudo chmod -R o+w /opt/zimbra/jetty/
		sudo chown zimbra:zimbra /opt/zimbra
		
	**Note:** If you run `zmfixperms`, some of these permissions will be overwritten.

6. Add file `/opt/zimbra/.gitconfig` and update as needed.  At a minimum:

		[user]
			email = YOUR-EMAIL-ADDRESS
			name = YOUR-FIRST-AND-LAST-NAME

7. As the `zimbra` user, create a base directory under `/home/zimbra` from which to work.

		cd /home/zimbra
		mkdir zcs
		cd zcs

8. Now you can clone any repositories that you require and get to work.

## Email Delivery

If you want email delivery to work, set up a DNS server on your host
machine or another VM and configure `zimbraDNSMasterIP` to point to it.
To configure `zimbraDNSMasterIP`, do the following as the `zimbra` user:

	zmprov ms `zmhostname` zimbraDNSMasterIP DNS-SERVER-IP-ADDRESS

You may receive the following error when trying to send email:

	No SMTP hosts available for domain

If this occurs, you need to manually configure `zimbraSmtpHostname` for your domain(s).
To configure `zimbraSmtpHostname`, do the following as the `zimbra` user:

	zmprov md DOMAIN-NAME zimbraSmtpHostname `zmhostname`

## zm-mailbox example

As the `zimbra` user, `cd /home/zimbra/zcs`.  Then clone the `zm-mailbox` repository from github

	git clone git@github.com:Zimbra/zm-mailbox.git

The following sub-directories `zm-mailbox` build and deploy separately:

	client
	common
	milter-conf
	native
	soap
	store
	store-conf

The top-level `build.xml` is used by the `zm-build` scripts to create
an installer package.  You will not use that for normal development.  There are build-order
dependencies between the above-listed deployment targets.  These can be determined by 
inspection of the `ivy.xml` files within each subdirectory.

For example:

	grep 'org="zimbra"' store/ivy.xml

	<dependency org="zimbra" name="zm-common" rev="latest.integration"/>
	<dependency org="zimbra" name="zm-soap" rev="latest.integration"/>
	<dependency org="zimbra" name="zm-client" rev="latest.integration"/>
	<dependency org="zimbra" name="zm-native" rev="latest.integration"/>

Here you can see that the deployment target, `zm-store` (the `store` 
subdirectory), depends upon `common`, `soap`, `client`, and `native`.  Here is the current
ordering dependencies among all of the `zm-mailbox` deployment targets. The higher-numbered 
deployment targets depend upon the lower-numbered ones.  Note that `milter-conf` and 
`store-conf` have no cross-dependencies.

1. `native`
2. `common`
3. `soap`
4. `client`
5. `store`

So, from the `native` sub-directory:

	ant -Dzimbra.buildinfo.version=8.7.6_GA clean compile publish-local deploy
	
Comments:

- The requirement to include `-Dzimbra.buildinfo.version=8.7.6_GA` to ant is due to a change
  that was made when the FOSS code was moved to GitHub.  You can also just add that option
  to your `ANT_OPTS` enviroment variable that you defined in `$HOME/.bash_profile` as follows:
  
	  export ANT_OPTS="-Ddev.home=/home/zimbra -Dzimbra.buildinfo.version=8.7.6_GA"
	  
  If you do that, then you can omit that `-D...` argument to the `ant` command and future
  examples will reflect that.
- The `publish-local` target adds the artifact to `/home/zimbra/.zcs-deps`, which is 
  included in the Ivy resolution path.
- The `deploy` target installs the artifact to its run-time location and restarts the appropriate
  service(s). This will allow you to test your changes.

Then, from the `common`, `soap`, `client`, and `store` sub-directories (in that order):

	ant clean compile publish-local deploy

## Adding a new LDAP Attribute

**WARNING:It is absolutely imperative to avoid duplicate IDs for attributes.
Unfortunately, that currently isn't a trivial thing to do.  Need to check
Zimbra 8 and Zimbra X along with all development branches.
If customers get different setups using different IDs, this makes future upgrade
scenarios a complete nightmare**

Start by cloning _both_ the `zm-ldap-utilites` and the `zm-mailbox` repositories from GitHub.
Check out the appropriate branch of each. Then proceed as follows:

* Add your new attribute to `zm-mailbox/store/conf/attrs/zimbra-attrs.xml`
* From `zm-common/store` invoke the following command:

		ant generate-getters

* Do the following as `root`:

		chmod -R o+w /opt/zimbra/common/etc/openldap/schema
		chmod o+w /opt/zimbra/conf/zimbra.ldif
		chmod +w /opt/zimbra/conf/attrs/zimbra-attrs.xml
		chmod -R o+w /opt/zimbra/common/etc/openldap/zimbra

* Back as the `zimbra` user, invoke the following command from `zm-mailbox/common`:

		ant deploy publish-local

* Then from the `zm-mailbox/store` directory:

		ant deploy update-ldap-schema


Your ZCS development server should now be running with the new attribute(s).  You can test that
by querying them and modifying them with `zmprov`.  You can `git add ...` and `git commit`
your changes now.




================================================
FILE: build.pl
================================================
#!/usr/bin/perl

use strict;
use warnings;

use Config;
use Cwd;
use Data::Dumper;
use File::Basename;
use File::Copy;
use Getopt::Long;
use IPC::Cmd qw/run/;
use Net::Domain;
use Term::ANSIColor;

my $GLOBAL_PATH_TO_SCRIPT_FILE;
my $GLOBAL_PATH_TO_SCRIPT_DIR;
my $GLOBAL_PATH_TO_TOP;
my $CWD;

my %CFG = ();

BEGIN
{
   $ENV{ANSI_COLORS_DISABLED} = 1 if ( !-t STDOUT );
   $GLOBAL_PATH_TO_SCRIPT_FILE = Cwd::abs_path(__FILE__);
   $GLOBAL_PATH_TO_SCRIPT_DIR  = dirname($GLOBAL_PATH_TO_SCRIPT_FILE);
   $GLOBAL_PATH_TO_TOP         = dirname($GLOBAL_PATH_TO_SCRIPT_DIR);
   $CWD                        = getcwd();
}

chdir($GLOBAL_PATH_TO_TOP);

##############################################################################################

sub LoadConfiguration($)
{
   my $args = shift;

   my $cfg_name    = $args->{name};
   my $cmd_hash    = $args->{hash_src};
   my $default_sub = $args->{default_sub};

   my @cfg_list = ();
   push( @cfg_list, "config.build" );
   push( @cfg_list, ".build.last_no_ts" ) if ( $ENV{ENV_RESUME_FLAG} );

   my $val;
   my $src;

   if ( !defined $val )
   {
      y/A-Z_/a-z-/ foreach ( my $cmd_name = $cfg_name );

      if ( $cmd_hash && exists $cmd_hash->{$cmd_name} )
      {
         $val = $cmd_hash->{$cmd_name};
         $src = "cmdline";
      }
   }

   if ( !defined $val )
   {
      foreach my $file_basename (@cfg_list)
      {
         my $file = "$GLOBAL_PATH_TO_SCRIPT_DIR/$file_basename";
         my $hash = LoadProperties($file)
           if ( -f $file );

         if ( $hash && exists $hash->{$cfg_name} )
         {
            $val = $hash->{$cfg_name};
            $src = $file_basename;
            last;
         }
      }
   }

   if ( !defined $val )
   {
      if ($default_sub)
      {
         $val = &$default_sub($cfg_name);
         $src = "default";
      }
   }

   if ( defined $val )
   {
      if ( ref($val) eq "HASH" )
      {
         foreach my $k ( keys %{$val} )
         {
            $CFG{$cfg_name}{$k} = ${$val}{$k};

            printf( " %-35s: %-17s : %s\n", $cfg_name, $cmd_hash ? $src : "detected", $k . " => " . ${$val}{$k} );
         }
      }
      else
      {
         $CFG{$cfg_name} = $val;
         if (ref($val) eq 'ARRAY')
         {
            printf( " %-35s: %-17s : %s\n", $cfg_name, $cmd_hash ? $src : "detected", join(' ', @$val) );
         }
         else
         {
            printf( " %-35s: %-17s : %s\n", $cfg_name, $cmd_hash ? $src : "detected", $val );
         }
      }
   }
}

sub InitGlobalBuildVars()
{
   {
      my $destination_name_func = sub {
         return "$CFG{BUILD_OS}-$CFG{BUILD_RELEASE}-$CFG{BUILD_RELEASE_NO_SHORT}-$CFG{BUILD_TS}-$CFG{BUILD_TYPE}-$CFG{BUILD_NO}";
      };

      my $build_dir_func = sub {
         return "$CFG{BUILD_SOURCES_BASE_DIR}/.staging/$CFG{DESTINATION_NAME}";
      };

      my %cmd_hash = ();

      my @cmd_args = (
         { name => "BUILD_NO",                   type => "=i",  hash_src => \%cmd_hash, default_sub => sub { return GetNewBuildNo(); }, },
         { name => "BUILD_TS",                   type => "=i",  hash_src => \%cmd_hash, default_sub => sub { return GetNewBuildTs(); }, },
         { name => "BUILD_OS",                   type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return GetBuildOS(); }, },
         { name => "BUILD_DESTINATION_BASE_DIR", type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return "$GLOBAL_PATH_TO_TOP/BUILDS"; }, },
         { name => "BUILD_SOURCES_BASE_DIR",     type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return $GLOBAL_PATH_TO_TOP; }, },
         { name => "BUILD_RELEASE",              type => "=s",  hash_src => \%cmd_hash, default_sub => sub { Die("@_ not specified"); }, },
         { name => "BUILD_RELEASE_NO",           type => "=s",  hash_src => \%cmd_hash, default_sub => sub { Die("@_ not specified"); }, },
         { name => "BUILD_RELEASE_CANDIDATE",    type => "=s",  hash_src => \%cmd_hash, default_sub => sub { Die("@_ not specified"); }, },
         { name => "BUILD_REVISION",             type => "=s",  hash_src => \%cmd_hash, default_sub => sub { "1"; }, },
         { name => "BUILD_TYPE",                 type => "=s",  hash_src => \%cmd_hash, default_sub => sub { Die("@_ not specified"); }, },
         { name => "BUILD_THIRDPARTY_SERVER",    type => "=s",  hash_src => \%cmd_hash, default_sub => sub { Die("@_ not specified"); }, },
         { name => "BUILD_PROD_FLAG",            type => "!",   hash_src => \%cmd_hash, default_sub => sub { return 1; }, },
         { name => "BUILD_DEBUG_FLAG",           type => "!",   hash_src => \%cmd_hash, default_sub => sub { return 0; }, },
         { name => "BUILD_DEV_TOOL_BASE_DIR",    type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return "$ENV{HOME}/.zm-dev-tools"; }, },
         { name => "INTERACTIVE",                type => "!",   hash_src => \%cmd_hash, default_sub => sub { return 1; }, },
         { name => "DISABLE_TAR",                type => "!",   hash_src => \%cmd_hash, default_sub => sub { return 0; }, },
         { name => "DISABLE_BUNDLE",             type => "!",   hash_src => \%cmd_hash, default_sub => sub { return 0; }, },
         { name => "EXCLUDE_GIT_REPOS",          type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return ""; }, },
         { name => "GIT_OVERRIDES",              type => "=s%", hash_src => \%cmd_hash, default_sub => sub { return {}; }, },
         { name => "GIT_DEFAULT_TAG",            type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return undef; }, },
         { name => "GIT_DEFAULT_REMOTE",         type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return undef; }, },
         { name => "GIT_DEFAULT_BRANCH",         type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return undef; }, },
         { name => "GIT_DEFAULT_REPO_NAME_SUFFIX", type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return undef; }, },
         { name => "STOP_AFTER_CHECKOUT",        type => "!",   hash_src => \%cmd_hash, default_sub => sub { return 0; }, },
         { name => "ANT_OPTIONS",                type => "=s@",  hash_src => \%cmd_hash, default_sub => sub { return undef; }, },
         { name => "MVN_OPTIONS",                type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return undef; }, },
         { name => "BUILD_HOSTNAME",             type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return Net::Domain::hostfqdn; }, },
         { name => "BUILD_ARCH",                 type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return GetBuildArch(); }, },
         { name => "PKG_OS_TAG",                 type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return GetPkgOsTag(); }, },
         { name => "BUILD_REVISION_NORMALIZED",  type => "=s",  hash_src => \%cmd_hash, default_sub => sub { NormalizeBuildRevision($CFG{BUILD_REVISION}) }, },
         { name => "BUILD_RELEASE_NO_SHORT",     type => "=s",  hash_src => \%cmd_hash, default_sub => sub { my $x = $CFG{BUILD_RELEASE_NO}; $x =~ s/[.]//g; return $x; }, },
         { name => "DESTINATION_NAME",           type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return &$destination_name_func; }, },
         { name => "BUILD_DIR",                  type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return &$build_dir_func; }, },
         { name => "DEPLOY_URL_PREFIX",          type => "=s",  hash_src => \%cmd_hash, default_sub => sub { $CFG{LOCAL_DEPLOY} = 1; return "http://" . Net::Domain::hostfqdn . ":8008/$CFG{DESTINATION_NAME}"; }, },
         { name => "DUMP_CONFIG_TO",             type => "=s",  hash_src => \%cmd_hash, default_sub => sub { return undef; }, },
      );

      {
         my @cmd_opts =
           map { $_->{opt} =~ y/A-Z_/a-z-/; $_; }    # convert the opt named to lowercase to make command line options
           map { { opt => $_->{name}, opt_s => $_->{type} } }    # create a new hash with keys opt, opt_s
           grep { $_->{type} }                                   # get only names which have a valid type
           @cmd_args;

         my $help_func = sub {
            print "Usage: $0 <options>\n";
            print "Supported options: \n";
            print "   --" . "$_->{opt}$_->{opt_s}\n" foreach (@cmd_opts);
            exit(0);
         };
         if ( !GetOptions( \%cmd_hash, ( map { $_->{opt} . $_->{opt_s} } @cmd_opts ), help => $help_func ) )
         {
            print Die("wrong commandline options, use --help");
         }
      }
      print "=========================================================================================================\n";
      LoadConfiguration($_) foreach (@cmd_args);
      print "=========================================================================================================\n";

      Die( "Bad version '$CFG{BUILD_RELEASE_NO}'", "$@" )
        if ( $CFG{BUILD_RELEASE_NO} !~ m/^\d+[.]\d+[.]\d+$/ );
   }

   foreach my $x (`grep -o '\\<[E][N][V]_[A-Z_]*\\>' '$GLOBAL_PATH_TO_SCRIPT_FILE' | sort | uniq`)
   {
      chomp($x);
      my $fmt2v = " %-35s: %s\n";
      printf( $fmt2v, $x, defined $ENV{$x} ? $ENV{$x} : "(undef)" );
   }

   print "=========================================================================================================\n";
   {
      $ENV{PATH} = join(
         ":",
         "$CFG{BUILD_DEV_TOOL_BASE_DIR}/bin/Sencha/Cmd/4.0.2.67",    #remove nw specific requirements
         reverse sort glob("$CFG{BUILD_DEV_TOOL_BASE_DIR}/*/bin"),
         "$CFG{BUILD_DEV_TOOL_BASE_DIR}/bin",
         "$ENV{PATH}"
      );

      my $cc    = DetectPrerequisite("cc");
      my $cpp   = DetectPrerequisite("c++");
      my $java  = DetectPrerequisite( "java", $ENV{JAVA_HOME} ? "$ENV{JAVA_HOME}/bin" : "" );
      my $javac = DetectPrerequisite( "javac", $ENV{JAVA_HOME} ? "$ENV{JAVA_HOME}/bin" : "" );
      my $mvn   = DetectPrerequisite("mvn");
      my $ant   = DetectPrerequisite("ant");
      my $ruby  = DetectPrerequisite("ruby");
      my $make  = DetectPrerequisite("make");

      $ENV{JAVA_HOME} ||= dirname( dirname( Cwd::realpath($javac) ) );
      $ENV{PATH} = "$ENV{JAVA_HOME}/bin:$ENV{PATH}";

      my $fmt2v = " %-35s: %s\n";
      printf( $fmt2v, "USING javac", "$javac (JAVA_HOME=$ENV{JAVA_HOME})" );
      printf( $fmt2v, "USING java",  $java );
      printf( $fmt2v, "USING maven", $mvn );
      printf( $fmt2v, "USING ant",   $ant );
      printf( $fmt2v, "USING cc",    $cc );
      printf( $fmt2v, "USING c++",   $cpp );
      printf( $fmt2v, "USING ruby",  $ruby );
      printf( $fmt2v, "USING make",  $make );
   }

   print "=========================================================================================================\n";

   if ( $CFG{DUMP_CONFIG_TO} )
   {
      open( my $fh, ">", $CFG{DUMP_CONFIG_TO} ) or Die("Could not open '$CFG{DUMP_CONFIG_TO}'");

      print $fh "# Dumping config to file...\n\n";

      foreach my $k ( sort keys %CFG )
      {
         my $v = $CFG{$k};
         if ( ref($v) eq "HASH" )
         {
            foreach my $sk ( sort keys %$v )
            {
               printf $fh "%-30s = %s\n", '%' . $k, "$sk=$v->{$sk}";
            }
         }
         else
         {
            printf $fh "%-30s = %s\n", $k, $v;
         }
      }

      print "NOTE: DUMPED CONFIG TO FILE - $CFG{DUMP_CONFIG_TO}\n";
   }

   print "NOTE: THIS WILL STOP AFTER CHECKOUTS\n"
     if ( $CFG{STOP_AFTER_CHECKOUT} );

   if ( $CFG{INTERACTIVE} )
   {
      print "Press enter to proceed";
      read STDIN, $_, 1;
   }
}

sub TranslateToPackagePath
{
   my $deploy_pkg_into = shift;

   if ( my $pkg_dir = $deploy_pkg_into )
   {
      $pkg_dir = "zimbra-" . lc( $CFG{BUILD_TYPE} )
        if ( $pkg_dir eq "bundle" && $CFG{DISABLE_BUNDLE} );

      $pkg_dir .= "-$ENV{ENV_ARCHIVE_SUFFIX_STR}"
        if ( $pkg_dir ne "bundle" && $ENV{ENV_ARCHIVE_SUFFIX_STR} );

      return "$CFG{BUILD_DIR}/zm-packages/$pkg_dir/$CFG{PKG_OS_TAG}";
   }
   else
   {
      return undef;
   }
}

sub Prepare()
{
   RemoveTargetInDir( ".zcs-deps",   $ENV{HOME} ) if ( $ENV{ENV_CACHE_CLEAR_FLAG} );
   RemoveTargetInDir( ".ivy2/cache", $ENV{HOME} ) if ( $ENV{ENV_CACHE_CLEAR_FLAG} );

   open( FD, ">", "$GLOBAL_PATH_TO_SCRIPT_DIR/.build.last_no_ts" );
   print FD "BUILD_NO=$CFG{BUILD_NO}\n";
   print FD "BUILD_TS=$CFG{BUILD_TS}\n";
   close(FD);

   SysExec( "mkdir", "-p", "$CFG{BUILD_DIR}" );
   SysExec( "mkdir", "-p", "$CFG{BUILD_DIR}/logs" );
   SysExec( "mkdir", "-p", "$ENV{HOME}/.zcs-deps" );
   SysExec( "mkdir", "-p", "$ENV{HOME}/.ivy2/cache" );

   SysExec( "find", $CFG{BUILD_DIR}, "-type", "f", "-name", ".built.*", "-delete" ) if ( $ENV{ENV_CACHE_CLEAR_FLAG} );

   my @TP_JARS = (
      "https://files.zimbra.com/repository/ant-1.7.0-ziputil-patched/ant-1.7.0-ziputil-patched-1.0.jar",
      "https://files.zimbra.com/repository/ant-contrib/ant-contrib-1.0b1.jar",
      "https://files.zimbra.com/repository/jruby/jruby-complete-1.6.3.jar",
      "https://files.zimbra.com/repository/applet/plugin.jar",
      "https://files.zimbra.com/repository/servlet-api/servlet-api-3.1.jar",
      "https://files.zimbra.com/repository/unbound-ldapsdk/unboundid-ldapsdk-2.3.5-se.jar",
   );

   for my $j_url (@TP_JARS)
   {
      if ( my $f = "$ENV{HOME}/.zcs-deps/" . basename($j_url) )
      {
         if ( !-f $f )
         {
            SysExec( "wget", $j_url, "-O", "$f.tmp" );
            SysExec( "mv", "$f.tmp", $f );
         }
      }
   }

   my ( $MAJOR, $MINOR, $MICRO ) = split( /[.]/, $CFG{BUILD_RELEASE_NO} );

   EchoToFile( "$GLOBAL_PATH_TO_SCRIPT_DIR/RE/BUILD", $CFG{BUILD_NO} );
   EchoToFile( "$GLOBAL_PATH_TO_SCRIPT_DIR/RE/MAJOR", $MAJOR );
   EchoToFile( "$GLOBAL_PATH_TO_SCRIPT_DIR/RE/MINOR", $MINOR );
   EchoToFile( "$GLOBAL_PATH_TO_SCRIPT_DIR/RE/MICRO", "${MICRO}_$CFG{BUILD_RELEASE_CANDIDATE}" );

   close(FD);
}

sub EvalFile($;$)
{
   my $fname = shift;

   my $file = "$GLOBAL_PATH_TO_SCRIPT_DIR/$fname";

   Die( "Error in '$file'", "$@" )
     if ( !-f $file );

   my @ENTRIES;

   eval `cat '$file'`;
   Die( "Error in '$file'", "$@" )
     if ($@);

   return \@ENTRIES;
}

sub LoadRepos()
{
   my @agg_repos = ();

   my %exclusions = ();
   map { $exclusions{$_} = 1; } split(/,/, $CFG{EXCLUDE_GIT_REPOS});

   push( @agg_repos, grep { !exists $exclusions{$_->{name}} } @{ EvalFile("instructions/$CFG{BUILD_TYPE}_repo_list.pl") } );

   return \@agg_repos;
}


sub LoadRemotes()
{
   my %details = @{ EvalFile("instructions/$CFG{BUILD_TYPE}_remote_list.pl") };

   return \%details;
}


sub LoadBuilds($)
{
   my $repo_list = shift;

   my @agg_builds = ();

   push( @agg_builds, @{ EvalFile("instructions/$CFG{BUILD_TYPE}_staging_list.pl") } );

   my %repo_hash = map { $_->{name} => 1 } @$repo_list;

   my @filtered_builds =
     grep { my $d = $_->{dir}; $d =~ s/\/.*//; $repo_hash{$d} }    # extract the repository from the 'dir' entry, filter out entries which do not exist in repo_list
     @agg_builds;

   return \@filtered_builds;
}


sub Checkout($)
{
   my $repo_list = shift;

   print "\n";
   print "=========================================================================================================\n";
   print " Processing " . scalar(@$repo_list) . " repositories\n";
   print "=========================================================================================================\n";
   print "\n";

   my $repo_remote_details = LoadRemotes();

   for my $repo_details (@$repo_list)
   {
      Clone( $repo_details, $repo_remote_details );
   }
}


sub RemoveTargetInDir($$)
{
   my $target = shift;
   my $chdir  = shift;

   s/\/\/*/\//g, s/\/*$// for ( my $sane_target = $target );    #remove multiple slashes, and ending slashes, dots

   if ( $sane_target && $chdir && -d $chdir )
   {
      eval
      {
         RunInDir( cd => $chdir, child => sub { SysExec( "rm", "-rf", $sane_target ); } );
      };
   }
}

sub EmitArchiveAccessInstructions($)
{
   my $archive_names = shift;

   if ( -f "/etc/redhat-release" )
   {
      return <<EOM_DUMP;
#########################################
# INSTRUCTIONS TO ACCESS FROM CLIENT BOX
#########################################

sudo bash -s <<"EOM_SCRIPT"
cat > /etc/yum.repos.d/zimbra-packages.repo <<EOM
@{[
   join("\n",
      map {
"[$_]
name=Zimbra Package Archive ($_)
baseurl=$CFG{DEPLOY_URL_PREFIX}/archives/$_/$CFG{PKG_OS_TAG}/
enabled=1
gpgcheck=0
protect=0"
      }
      @$archive_names
   )]}
EOM
yum clean all
EOM_SCRIPT
EOM_DUMP
   }
   else
   {
      return <<EOM_DUMP;
#########################################
# INSTRUCTIONS TO ACCESS FROM CLIENT BOX
#########################################

sudo bash -s <<"EOM_SCRIPT"
cat > /etc/apt/sources.list.d/zimbra-packages.list << EOM
@{[
   join("\n",
      map {
"deb [trusted=yes] $CFG{DEPLOY_URL_PREFIX}/archives/$_/$CFG{PKG_OS_TAG} ./ # Zimbra Package Archive ($_)"
      }
      @$archive_names
   )]}
EOM
apt-get update
EOM_SCRIPT
EOM_DUMP
   }
}


sub Build($)
{
   my $repo_list = shift;

   my @ALL_BUILDS = @{ LoadBuilds($repo_list) };

   my $tool_attributes = {
      ant => [
         "-Ddebug=$CFG{BUILD_DEBUG_FLAG}",
         "-Dis-production=$CFG{BUILD_PROD_FLAG}",
         "-Dzimbra.buildinfo.platform=$CFG{BUILD_OS}",
         "-Dzimbra.buildinfo.pkg_os_tag=$CFG{PKG_OS_TAG}",
         "-Dzimbra.buildinfo.version=$CFG{BUILD_RELEASE_NO}_$CFG{BUILD_RELEASE_CANDIDATE}_$CFG{BUILD_NO}",
         "-Dzimbra.buildinfo.revision=$CFG{BUILD_REVISION_NORMALIZED}",
         "-Dzimbra.buildinfo.type=$CFG{BUILD_TYPE}",
         "-Dzimbra.buildinfo.release=$CFG{BUILD_TS}",
         "-Dzimbra.buildinfo.date=$CFG{BUILD_TS}",
         "-Dzimbra.buildinfo.host=$CFG{BUILD_HOSTNAME}",
         "-Dzimbra.buildinfo.buildnum=$CFG{BUILD_NO}",
      ],
      make => [
         "debug=$CFG{BUILD_DEBUG_FLAG}",
         "is-production=$CFG{BUILD_PROD_FLAG}",
         "zimbra.buildinfo.platform=$CFG{BUILD_OS}",
         "zimbra.buildinfo.pkg_os_tag=$CFG{PKG_OS_TAG}",
         "zimbra.buildinfo.version=$CFG{BUILD_RELEASE_NO}_$CFG{BUILD_RELEASE_CANDIDATE}_$CFG{BUILD_NO}",
         "zimbra.buildinfo.revision=$CFG{BUILD_REVISION_NORMALIZED}",
         "zimbra.buildinfo.type=$CFG{BUILD_TYPE}",
         "zimbra.buildinfo.release=$CFG{BUILD_TS}",
         "zimbra.buildinfo.date=$CFG{BUILD_TS}",
         "zimbra.buildinfo.host=$CFG{BUILD_HOSTNAME}",
         "zimbra.buildinfo.buildnum=$CFG{BUILD_NO}",
      ],
      mvn => [
      ],
   };

   push @{ $tool_attributes->{ant} },
       ref $CFG{ANT_OPTIONS} eq 'ARRAY' ? @{ $CFG{ANT_OPTIONS} } : ($CFG{ANT_OPTIONS})
       if defined $CFG{ANT_OPTIONS};
     
   push( @{ $tool_attributes->{mvn} }, $CFG{MVN_OPTIONS} )
       if ( $CFG{MVN_OPTIONS} );

   my $cnt = 0;
   for my $build_info (@ALL_BUILDS)
   {
      ++$cnt;

      if ( my $dir = $build_info->{dir} )
      {
         my $target_dir = "$CFG{BUILD_DIR}/$dir";

         next
           unless ( !defined $ENV{ENV_BUILD_INCLUDE} || grep { $dir =~ /$_/ } split( ",", $ENV{ENV_BUILD_INCLUDE} ) );

         RemoveTargetInDir( $dir, $CFG{BUILD_DIR} )
           if ( ( $ENV{ENV_FORCE_REBUILD} && grep { $dir =~ /$_/ } split( ",", $ENV{ENV_FORCE_REBUILD} ) ) );

         print "=========================================================================================================\n";
         print color('blue') . "BUILDING: $dir ($cnt of " . scalar(@ALL_BUILDS) . ")" . color('reset') . "\n";
         print "\n";

         if ( $ENV{ENV_RESUME_FLAG} && -f "$target_dir/.built.$CFG{BUILD_TS}" )
         {
            print color('yellow') . "SKIPPING... [TO REBUILD REMOVE '$target_dir']" . color('reset') . "\n";
            print "=========================================================================================================\n";
            print "\n";
         }
         else
         {
            unlink glob "$target_dir/.built.*";

            RunInDir(
               cd    => $dir,
               child => sub {

                  my $abs_dir = Cwd::abs_path();

                  if ( my $tool_seq = $build_info->{tool_seq} || [ "ant", "mvn", "make" ] )
                  {
                     for my $tool (@$tool_seq)
                     {
                        if ( my $targets = $build_info->{ $tool . "_targets" } )    #Known values are: ant_targets, mvn_targets, make_targets
                        {
                           eval { SysExec( $tool, "clean" ) if ( !$ENV{ENV_SKIP_CLEAN_FLAG} ); };

                           SysExec( $tool, @{ $tool_attributes->{$tool} || [] }, @$targets );
                        }
                     }
                  }

                  if ( my $stage_cmd = $build_info->{stage_cmd} )
                  {
                     &$stage_cmd
                  }

                  if ( my $packages_path = TranslateToPackagePath( $build_info->{deploy_pkg_into} ) )
                  {
                     SysExec( "mkdir", "-p", $packages_path );
                     SysExec( "rsync", "-av", "build/dist/$CFG{PKG_OS_TAG}/", "$packages_path/" );
                  }

                  if ( !exists $build_info->{partial} )
                  {
                     SysExec( "mkdir", "-p", "$target_dir" );
                     SysExec( "touch", "$target_dir/.built.$CFG{BUILD_TS}" );
                  }
               },
            );

            print "\n";
            print "=========================================================================================================\n";
            print "\n";
         }
      }
   }

   RunInDir(
      cd    => "$GLOBAL_PATH_TO_SCRIPT_DIR",
      child => sub {
         SysExec( "rsync", "-az", "--delete", ".", "$CFG{BUILD_DIR}/zm-build" );
         SysExec( "mkdir", "-p", "$CFG{BUILD_DIR}/zm-build/$CFG{BUILD_ARCH}" );

         my @ALL_PACKAGES = ();
         push( @ALL_PACKAGES, @{ EvalFile("instructions/$CFG{BUILD_TYPE}_package_list.pl") } );
         push( @ALL_PACKAGES, "zcs-bundle" )
           if ( !$CFG{DISABLE_TAR} );

         for my $package_script (@ALL_PACKAGES)
         {
            if ( !defined $ENV{ENV_PACKAGE_INCLUDE} || grep { $package_script =~ /$_/ } split( ",", $ENV{ENV_PACKAGE_INCLUDE} ) )
            {
               SysExec(
                  "  releaseNo='$CFG{BUILD_RELEASE_NO}' \\
                     releaseCandidate='$CFG{BUILD_RELEASE_CANDIDATE}' \\
                     branch='$CFG{BUILD_RELEASE}-$CFG{BUILD_RELEASE_NO_SHORT}' \\
                     buildNo='$CFG{BUILD_NO}' \\
                     os='$CFG{BUILD_OS}' \\
                     PKG_OS_TAG='$CFG{PKG_OS_TAG}' \\
                     buildType='$CFG{BUILD_TYPE}' \\
                     repoDir='$CFG{BUILD_DIR}' \\
                     arch='$CFG{BUILD_ARCH}' \\
                     buildTimeStamp='$CFG{BUILD_TS}' \\
                     buildLogFile='$CFG{BUILD_DIR}/logs/build.log' \\
                     zimbraThirdPartyServer='$CFG{BUILD_THIRDPARTY_SERVER}' \\
                        bash $GLOBAL_PATH_TO_SCRIPT_DIR/instructions/bundling-scripts/$package_script.sh
                  "
               );

               if ( $CFG{DISABLE_BUNDLE} )    # move created packages out of the tar for independent deployment in archive.
               {
                  my $alt_dest_pkg_dir = TranslateToPackagePath("bundle");

                  SysExec( "mkdir", "-p", $alt_dest_pkg_dir );
                  SysExec( "rsync", "-av", "--remove-source-files", "$CFG{BUILD_DIR}/zm-build/$CFG{BUILD_ARCH}/", "$alt_dest_pkg_dir/" );
               }
            }
         }
      },
   );
}


sub Deploy()
{
   print "\n";
   print "=========================================================================================================\n";
   print color('blue') . "DEPLOYING ARTIFACTS" . color('reset') . "\n";
   print "\n";
   print "\n";

   my $destination_dir = "$CFG{BUILD_DESTINATION_BASE_DIR}/$CFG{DESTINATION_NAME}";

   SysExec( "mkdir", "-p", "$destination_dir/archives" );

   my @archive_names = map { basename($_) } grep { -d $_ && $_ !~ m/\/bundle$/ } glob("$CFG{BUILD_DIR}/zm-packages/*");

   foreach my $archive_name (@archive_names)
   {
      SysExec( "rsync", "-av", "--delete", "$CFG{BUILD_DIR}/zm-packages/$archive_name/", "$destination_dir/archives/$archive_name" );

      if ( -f "/etc/redhat-release" )
      {
         if ( !$CFG{LOCAL_DEPLOY} || DetectPrerequisite( "createrepo", "", 1 ) )
         {
            SysExec("cd '$destination_dir/archives/$archive_name/$CFG{PKG_OS_TAG}' && createrepo '.'");
         }
      }
      else
      {
         if ( !$CFG{LOCAL_DEPLOY} || DetectPrerequisite( "dpkg-scanpackages", "", 1 ) )
         {
            SysExec("cd '$destination_dir/archives/$archive_name/$CFG{PKG_OS_TAG}' && dpkg-scanpackages '.' /dev/null > Packages");
         }
      }
   }

   EchoToFile( "$destination_dir/archive-access-$CFG{PKG_OS_TAG}.txt", EmitArchiveAccessInstructions( \@archive_names ) );

   SysExec("cp $CFG{BUILD_DIR}/zm-build/zcs-*.$CFG{BUILD_TS}.tgz $destination_dir/")
     if ( !$CFG{DISABLE_TAR} );

   if ( $CFG{LOCAL_DEPLOY} )
   {
      if ( !-f "/etc/nginx/conf.d/zimbra-pkg-archives-host.conf" || !`pgrep -f -P1 '[n]ginx'` )
      {
         print "\n";
         print "=========================================================================================================\n";
         print <<EOM_DUMP;
@{[color('bold white')]}
############################################
# INSTRUCTIONS TO SETUP NGINX PACKAGES HOST
############################################
@{[color('reset')]}
# You might need to resolve network, firewall, selinux, permissions issues appropriately before proceeding:

# sudo sed -i -e s/^SELINUX=enforcing/SELINUX=permissive/ /etc/selinux/config
# sudo setenforce permissive
# sudo systemctl stop firewalld
# sudo ufw disable
@{[color('yellow')]}
sudo bash -s <<"EOM_SCRIPT"
[ -f /etc/redhat-release ] && ( yum install -y epel-release && yum install -y nginx && service nginx start )
[ -f /etc/redhat-release ] || ( apt-get -y install nginx && service nginx start )
tee /etc/nginx/conf.d/zimbra-pkg-archives-host.conf <<EOM
server {
  listen 8008;
  location / {
     root $CFG{BUILD_DESTINATION_BASE_DIR};
     autoindex on;
  }
}
EOM
service httpd stop 2>/dev/null
service nginx restart
service nginx status
EOM_SCRIPT
@{[color('reset')]}
EOM_DUMP
      }
   }

   print "\n";
   print "=========================================================================================================\n";
   print "\n";
}


sub GetNewBuildNo()
{
   my $line = 1000;

   my $file = "$GLOBAL_PATH_TO_SCRIPT_DIR/.build.number";

   if ( -f $file )
   {
      open( FD1, "<", $file );
      $line = <FD1>;
      close(FD1);

      $line += 1;
   }

   open( FD2, ">", $file );
   printf( FD2 "%s\n", $line );
   close(FD2);

   return $line;
}

sub GetNewBuildTs()
{
   chomp( my $x = `date +'%Y%m%d%H%M%S'` );

   return $x;
}


sub GetBuildOS()    # FIXME - use standard mechanism
{
   our $detected_os = undef;

   sub detect_os
   {
      chomp( $detected_os = `$GLOBAL_PATH_TO_SCRIPT_DIR/rpmconf/Build/get_plat_tag.sh` )
        if ( !$detected_os );

      return $detected_os
        if ($detected_os);

      Die("Unknown OS");
   }

   return detect_os();
}

sub GetBuildArch()
{
   my $b_os = $CFG{BUILD_OS};

   return "amd64"
     if ( $b_os =~ /UBUNTU[0-9]+_64/ );

   return "x86_64"
     if ( $b_os =~ /RHEL[0-9]+_64/ || $b_os =~ /CENTOS[0-9]+_64/ );

   Die("Could not determine BUILD_ARCH");
}

sub GetPkgOsTag()
{
   my $b_os = $CFG{BUILD_OS};

   return "u$1"
     if ( $b_os =~ /UBUNTU([0-9]+)_/ );

   return "r$1"
     if ( $b_os =~ /RHEL([0-9]+)_/ || $b_os =~ /CENTOS([0-9]+)_/ );

   Die("Could not determine PKG_OS_TAG");
}


##############################################################################################

sub Clone($$)
{
   my $repo_details        = shift;
   my $repo_remote_details = shift;

   my $repo_name       = $repo_details->{name};
   my $repo_branch_csv = $CFG{GIT_OVERRIDES}->{"$repo_name.branch"} || $repo_details->{branch} || $CFG{GIT_DEFAULT_BRANCH} || "develop";
   my $repo_tag_csv    = $CFG{GIT_OVERRIDES}->{"$repo_name.tag"} || $repo_details->{tag} || $CFG{GIT_DEFAULT_TAG} if ( $CFG{GIT_OVERRIDES}->{"$repo_name.tag"} || !$CFG{GIT_OVERRIDES}->{"$repo_name.branch"} );
   my $repo_remote     = $CFG{GIT_OVERRIDES}->{"$repo_name.remote"} || $repo_details->{remote} || $CFG{GIT_DEFAULT_REMOTE} || "gh-zm";
   my $repo_url_prefix = $CFG{GIT_OVERRIDES}->{"$repo_remote.url-prefix"} || $repo_remote_details->{$repo_remote}->{'url-prefix'} || Die( "unresolved url-prefix for remote='$repo_remote'", "" );
   my $repo_name_suffix     = $CFG{GIT_OVERRIDES}->{"$repo_name.repo_name_suffix"} || $repo_details->{repo_name_suffix} || $CFG{GIT_DEFAULT_REPO_NAME_SUFFIX};

   $repo_url_prefix =~ s,/*$,,;

   my $repo_dir = "$CFG{BUILD_SOURCES_BASE_DIR}/$repo_name";
   my $repo_source = $repo_url_prefix . "/" .
                  ($repo_name_suffix ? "$repo_name$repo_name_suffix.git" : "$repo_name.git");

   if ( !-d $repo_dir )
   {
      my $s = 0;
      foreach my $minus_b_arg ( split( /,/, $repo_tag_csv ? $repo_tag_csv : $repo_branch_csv ) )
      {
         my $r = SysExec("git", "ls-remote",
                $repo_tag_csv ? "--tags" : "--heads",
                $repo_source,
                "$minus_b_arg");
         if ( $r->{success} && "@{$r->{out}}" =~ /$minus_b_arg$/ )
         {
            my @clone_cmd_args = ( "git", "clone" );

            push( @clone_cmd_args, "--depth=1" ) if ( not $ENV{ENV_GIT_FULL_CLONE} and $repo_name ne "zm-mailbox");
            push( @clone_cmd_args, "-b", $minus_b_arg );
            push( @clone_cmd_args, $repo_source, "$repo_dir");
            print "\n";
            my $r = SysExec(@clone_cmd_args);
            if ( $r->{success} )
            {
               $s++;
               last;
            }
         }
      }

      Die("Clone Attempts Failed")
        if ( !$s );

      RemoveTargetInDir( $repo_name, $CFG{BUILD_DIR} );
   }
   else
   {
      if ( !defined $ENV{ENV_GIT_UPDATE_INCLUDE} || grep { $repo_name =~ /$_/ } split( ",", $ENV{ENV_GIT_UPDATE_INCLUDE} ) )
      {
         if ($repo_tag_csv)
         {
            RunInDir(
               cd    => $repo_dir,
               child => sub {

                  my $s = 0;
                  foreach my $minus_b_arg ( split( /,/, $repo_tag_csv ) )
                  {
                     print "\n";
                     my $r = SysExec( "git", "checkout", $minus_b_arg );
                     if ( $r->{success} )
                     {
                        $s++;
                        last;
                     }
                  }

                  Die("Clone Attempts Failed")
                    if ( !$s );
               },
            );

            RemoveTargetInDir( $repo_name, $CFG{BUILD_DIR} );
         }
         else
         {
            print "\n";
            RunInDir(
               cd    => $repo_dir,
               child => sub {
                  my $z = SysExec( "git", "pull", "--ff-only" );

                  if ( "@{$z->{out}}" !~ /Already up-to-date/ )
                  {
                     RemoveTargetInDir( $repo_name, $CFG{BUILD_DIR} );
                  }
               },
            );
         }
      }
   }
}

sub SysExec(@)
{
   my $options = shift
     if ( @_ && ref( $_[0] ) eq "HASH" );

   $options->{continue_on_error} ||= 0;
   $options->{verbose}           ||= 1;

   my $cmd_str = "@_";

   if ( $options->{verbose} )
   {
      print color('green') . "#: pwd=@{[Cwd::getcwd()]}" . color('reset') . "\n";
      print color('green') . "#: $cmd_str" . color('reset') . "\n";
   }

   $! = 0;
   my ( $success, $error_message, $full_buf, $stdout_buf, $stderr_buf ) = run( command => \@_, verbose => 1 );

   Die( "cmd='$cmd_str'", $error_message )
     if ( !$success && !$options->{continue_on_error} );

   return { msg => $error_message, out => $stdout_buf, err => $stderr_buf, success => $success };
}


sub LoadProperties($)
{
   my $f = shift;

   my $x = SlurpFile($f);

   my @cfg_kvs =
     map { $_ =~ s/^\s+|\s+$//g; $_ }    # trim
     map { split( /=/, $_, 2 ) }         # split around =
     map { $_ =~ s/#.*$//g; $_ }         # strip comments
     grep { $_ !~ /^\s*#/ }              # ignore comments
     grep { $_ !~ /^\s*$/ }              # ignore empty lines
     @$x;

   my %ret_hash = ();
   for ( my $e = 0 ; $e < scalar @cfg_kvs ; $e += 2 )
   {
      my $probe_key = $cfg_kvs[$e];
      my $probe_val = $cfg_kvs[ $e + 1 ];

      if ( $probe_key =~ /^%(.*)/ )
      {
         my @val_kv_pair = split( /=/, $probe_val, 2 );

         $ret_hash{$1}{ $val_kv_pair[0] } = $val_kv_pair[1];
      }
      else
      {
         $ret_hash{$probe_key} = $probe_val;
      }
   }

   return \%ret_hash;
}


sub SlurpFile($)
{
   my $f = shift;

   open( FD, "<", "$f" ) || Die( "In open for read", "file='$f'" );

   chomp( my @x = <FD> );
   close(FD);

   return \@x;
}


sub EchoToFile($$)
{
   my $f = shift;
   my $w = shift;

   open( FD, ">", "$f" ) || Die( "In open for write", "file='$f'" );
   print FD $w . "\n";
   close(FD);
}


sub DetectPrerequisite($;$$)
{
   my $util_name       = shift;
   my $additional_path = shift || "";
   my $warn_only       = shift || 0;

   chomp( my $detected_util = `PATH="$additional_path:\$PATH" \\which "$util_name" 2>/dev/null | sed -e 's,//*,/,g'` );

   return $detected_util
     if ($detected_util);

   Die(
      "Prerequisite '$util_name' missing in PATH"
        . "\nTry: "
        . "\n   [ -f /etc/redhat-release ] && sudo yum install perl-Data-Dumper perl-IPC-Cmd gcc-c++ java-1.8.0-openjdk ant ant-junit ruby maven wget rpm-build createrepo"
        . "\n   [ -f /etc/redhat-release ] || sudo apt-get install software-properties-common openjdk-8-jdk ant ant-optional ruby git maven build-essential",
      "",
      $warn_only
   );
}


sub RunInDir(%)
{
   my %args  = (@_);
   my $chdir = $args{cd};
   my $child = $args{child};

   my $child_pid = fork();

   Die("FAILURE while forking")
     if ( !defined $child_pid );

   if ( $child_pid != 0 )    # parent
   {
      while ( waitpid( $child_pid, 0 ) == -1 ) { }

      Die( "child $child_pid died", einfo($?) )
        if ( $? != 0 );
   }
   else
   {
      Die( "chdir to '$chdir' failed", einfo($?) )
        if ( $chdir && !chdir($chdir) );

      $! = 0;
      &$child;
      exit(0);
   }
}

sub einfo()
{
   my @SIG_NAME = split( / /, $Config{sig_name} );

   return "ret=" . ( $? >> 8 ) . ( ( $? & 127 ) ? ", sig=SIG" . $SIG_NAME[ $? & 127 ] : "" );
}

sub Die($;$$)
{
   my $msg       = shift;
   my $info      = shift || "";
   my $warn_only = shift || 0;

   my $err = "$!";

   print "\n" if ( !$warn_only );
   print "\n";
   print "=========================================================================================================\n";
   print color('red') . "FAILURE MSG" . color('reset') . " : $msg\n"  if ( !$warn_only );
   print color('red') . "WARNING MSG" . color('reset') . " : $msg\n"  if ($warn_only);
   print color('red') . "SYSTEM ERR " . color('reset') . " : $err\n"  if ($err);
   print color('red') . "EXTRA INFO " . color('reset') . " : $info\n" if ($info);
   print "\n";
   print "=========================================================================================================\n";

   if ( !$warn_only )
   {
      print color('red');
      print "--Stack Trace-- ($$)\n";
      my $i = 1;

      while ( ( my @call_details = ( caller( $i++ ) ) ) )
      {
         print $call_details[1] . ":" . $call_details[2] . " called from " . $call_details[3] . "\n";
      }
      print color('reset');
      print "\n";
      print "=========================================================================================================\n";

      die "END"
   }
}

sub NormalizeBuildRevision {
    my ($val) = @_;
    return $val unless defined $val;

    if ($CFG{PKG_OS_TAG} =~ /^r/) {
        return $val if $val =~ /^[\w]+$/;
        $val =~ s/[~-]/_/g;
        $val =~ s/_+/_/g;
        $val =~ s/^_//;
        $val =~ s/_$//;
    }

    return $val;
}

##############################################################################################

sub main()
{
   InitGlobalBuildVars();

   my $all_repos = LoadRepos();

   Prepare();

   Checkout($all_repos);

   if ( !$CFG{STOP_AFTER_CHECKOUT} )
   {
      Build($all_repos);

      Deploy();
   }
}

main();

##############################################################################################


================================================
FILE: config.build.in
================================================
# Example config:
# - please change as appropriate.
# - command line overrides the config.

BUILD_RELEASE           = JUDASPRIEST
BUILD_RELEASE_NO        = 8.8.0
BUILD_RELEASE_CANDIDATE = GA
BUILD_TYPE              = FOSS
BUILD_THIRDPARTY_SERVER = zdev-vm008.eng.zimbra.com

# Example of GIT_OVERRIDES (hash)
# %GIT_OVERRIDES          = myremote.url-prefix=ssh://git@stash.corp.synacor.com:7999/~user/zm-mailbox.git
# %GIT_OVERRIDES          = zm-mailbox.branch=dev
# %GIT_OVERRIDES          = zm-mailbox.remote=myremote
# %GIT_OVERRIDES          = zm-mailbox.tag=judaspriest-872    # .tag always overrides .branch


================================================
FILE: instructions/.gitignore
================================================
NETWORK_*.pl


================================================
FILE: instructions/FOSS_package_list.pl
================================================
@ENTRIES = (
   "zimbra-core",
   "zimbra-ldap",
   "zimbra-logger",
   "zimbra-mta",
   "zimbra-dnscache",
   "zimbra-snmp",
   "zimbra-store",
   "zimbra-apache",
   "zimbra-spell",
   "zimbra-proxy",
   "zimbra-imapd",
);


================================================
FILE: instructions/FOSS_remote_list.pl
================================================
@ENTRIES = (
   "gh-zm" => { 'url-prefix' => "https://github.com/Zimbra", },
   "gh-ks" => { 'url-prefix' => "https://github.com/kohlschutter", },
);


================================================
FILE: instructions/FOSS_repo_list.pl
================================================
@ENTRIES = (
   { name => "ant-1.7.0-ziputil-patched",            },
   { name => "ant-tar-patched",                      },
   { name => "ical4j-0.9.16-patched",                },
   { name => "junixsocket",                         tag    => "junixsocket-parent-2.0.4", remote => "gh-ks",},
   { name => "nekohtml-1.9.13",                      },
   { name => "java-html-sanitizer-release-20190610.1",},
   { name => "antisamy",                             },
   { name => "zm-admin-console",                     },
   { name => "zm-admin-help-common",                 },
   { name => "zm-ajax",                              },
   { name => "zm-admin-ajax",                        },
   { name => "zm-amavis",                            },
   { name => "zm-aspell",                            },
   { name => "zm-bulkprovision-admin-zimlet",        },
   { name => "zm-bulkprovision-store",               },
   { name => "zm-certificate-manager-admin-zimlet",  },
   { name => "zm-certificate-manager-store",         },
   { name => "zm-charset",                           },
   { name => "zm-clam-scanner-store",                },
   { name => "zm-core-utils",                        },
   { name => "zm-db-conf",                           },
   { name => "zm-dnscache",                          },
   { name => "zm-downloads",                         },
   { name => "zm-freshclam",                         },
   { name => "zm-helptooltip-zimlet",                },
   { name => "zm-jetty-conf",                        },
   { name => "zm-jython",                            },
   { name => "zm-launcher",                          },
   { name => "zm-ldap-utilities",                    },
   { name => "zm-ldap-utils-store",                  },
   { name => "zm-licenses",                          },
   { name => "zm-mailbox",                           },
   { name => "zm-migration-tools",                   },
   { name => "zm-mta",                               },
   { name => "zm-nginx-conf",                        },
   { name => "zm-nginx-lookup-store",                },
   { name => "zm-openid-consumer-store",             },
   { name => "zm-pkg-tool",                          },
   { name => "zm-postfix",                           },
   { name => "zm-proxy-config-admin-zimlet",         },
   { name => "zm-ssdb-ephemeral-store",              },
   { name => "zm-taglib",                            },
      # zm-timezones repo can be removed and made independent of zm-zextras
      # zm-timezones cannot be done unless the packages from it are pushed to public repo
      # zm-timezones is already excluded in CircleCI builds via --exclude-git-repo=...
   { name => "zm-timezones",                         },
   { name => "zm-versioncheck-admin-zimlet",         },
   { name => "zm-versioncheck-store",                },
   { name => "zm-versioncheck-utilities",            },
   { name => "zm-viewmail-admin-zimlet",             },
   { name => "zm-web-client",                        },
   { name => "zm-webclient-portal-example",          },
   { name => "zm-zcs",                               },
   { name => "zm-zcs-lib",                           },
   { name => "zm-zimlets",                           },
   { name => "zm-oauth-social",                      },
   { name => "zm-gql",		                     },
);


================================================
FILE: instructions/FOSS_staging_list.pl
================================================
@ENTRIES = (
   {
      "dir"             => "zm-mailbox",
      "ant_targets"     => ["pkg-after-plough-through-tests"],
      "deploy_pkg_into" => "bundle",
      "stage_cmd"       => sub {
         SysExec("mkdir -p                                 $CFG{BUILD_DIR}/zm-mailbox/store-conf/");
         SysExec("rsync -az store-conf/conf                $CFG{BUILD_DIR}/zm-mailbox/store-conf/");
         SysExec("install -T -D store/build/dist/versions-init.sql $CFG{BUILD_DIR}/zm-mailbox/store/build/dist/versions-init.sql");
      },
   },
   {
      "dir"         => "zm-mailbox/store",
      "ant_targets" => ["publish-store-test", "test", "coverage", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      # This repo can be removed and made independent of zm-zextras
      # This cannot be done unless the packages from zm-timezones are pushed to public repo
      # This is already excluded in CircleCI builds
      "dir"             => "zm-timezones",
      "ant_targets"     => ["pkg", "sonar-scan"],
      "deploy_pkg_into" => "bundle",
   },
   {
      "dir"         => "junixsocket/junixsocket-native",
      "mvn_targets" => ["package"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/junixsocket/junixsocket-native/build");
         SysExec("cp -f target/nar/junixsocket-native-*/lib/*/jni/libjunixsocket-native-*.so $CFG{BUILD_DIR}/junixsocket/junixsocket-native/build/");
         SysExec("cp -f target/junixsocket-native-*.nar  $CFG{BUILD_DIR}/junixsocket/junixsocket-native/build/");
      },
   },
   {
      "dir"         => "zm-taglib",
      "ant_targets" => ["publish-local", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-taglib/build");
         SysExec("cp -f build/zm-taglib*.jar  $CFG{BUILD_DIR}/zm-taglib/build/");
      },
   },
   {
      "dir"         => "zm-charset",
      "ant_targets" => ["publish-local", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "zm-ldap-utilities",
      "ant_targets" => ["build-dist"],
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative zm-ldap-utilities/build/dist $CFG{BUILD_DIR}/)");
         SysExec("(cd .. && rsync -az --relative zm-ldap-utilities/src/ldap/migration $CFG{BUILD_DIR}/)");
         SysExec("(cd .. && rsync -az --relative zm-ldap-utilities/conf $CFG{BUILD_DIR}/)");
         SysExec("(cd .. && rsync -az --relative zm-ldap-utilities/src/libexec $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"         => "zm-ajax",
      "ant_targets" => ["publish-local", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "zm-admin-ajax",
      "ant_targets" => ["publish-local", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "zm-ssdb-ephemeral-store",
      "ant_targets" => ["publish-local", "test", "coverage", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-ssdb-ephemeral-store/build/dist");
         SysExec("cp -f build/zm-ssdb-ephemeral-store*.jar $CFG{BUILD_DIR}/zm-ssdb-ephemeral-store/build/dist");
      },
   },
   {
      "dir"         => "zm-openid-consumer-store",
      "ant_targets" => ["dist-package", "test", "coverage", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-openid-consumer-store/build/dist");
         SysExec("cp -f -r build/dist $CFG{BUILD_DIR}/zm-openid-consumer-store/build/");
      },
   },
   {
      "dir"         => "zm-clam-scanner-store",
      "ant_targets" => ["publish-local", "test", "coverage", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-clam-scanner-store/build/dist");
         SysExec("cp -f -rp build/zm-clam-scanner-store-*.jar $CFG{BUILD_DIR}/zm-clam-scanner-store/build/dist");
      },
   },
   {
      "dir"         => "zm-licenses",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-licenses");
         SysExec("(cd .. && rsync -az --relative zm-licenses/ $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"         => "zm-nginx-lookup-store",
      "ant_targets" => ["publish-local", "test", "coverage", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-nginx-lookup-store/build/dist");
         SysExec("cp -f -rp build/zm-nginx-lookup-store-*.jar $CFG{BUILD_DIR}/zm-nginx-lookup-store/build/dist");
      },
   },
   {
      "dir"         => "zm-versioncheck-admin-zimlet",
      "ant_targets" => ["package-zimlet"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-versioncheck-admin-zimlet/build/zimlet");
         SysExec("cp -f build/zimlet/*.zip $CFG{BUILD_DIR}/zm-versioncheck-admin-zimlet/build/zimlet");
      },
   },
   {
      "dir"         => "zm-bulkprovision-admin-zimlet",
      "ant_targets" => ["package-zimlet"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-bulkprovision-admin-zimlet/build/zimlet");
         SysExec("cp -f build/zimlet/*.zip $CFG{BUILD_DIR}/zm-bulkprovision-admin-zimlet/build/zimlet");
      },
   },
   {
      "dir"         => "zm-certificate-manager-admin-zimlet",
      "ant_targets" => ["package-zimlet"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-certificate-manager-admin-zimlet/build/zimlet");
         SysExec("cp -f build/zimlet/*.zip $CFG{BUILD_DIR}/zm-certificate-manager-admin-zimlet/build/zimlet");
      },
   },
   {
      "dir"         => "zm-proxy-config-admin-zimlet",
      "ant_targets" => ["package-zimlet"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-proxy-config-admin-zimlet/build/zimlet");
         SysExec("cp -f build/zimlet/*.zip $CFG{BUILD_DIR}/zm-proxy-config-admin-zimlet/build/zimlet");
      },
   },
   {
      "dir"         => "zm-helptooltip-zimlet",
      "ant_targets" => ["package-zimlet"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-helptooltip-zimlet/build/zimlet");
         SysExec("cp -f build/zimlet/*.zip $CFG{BUILD_DIR}/zm-helptooltip-zimlet/build/zimlet");
      },
   },
   {
      "dir"         => "zm-viewmail-admin-zimlet",
      "ant_targets" => ["package-zimlet"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-viewmail-admin-zimlet/build/zimlet");
         SysExec("cp -f build/zimlet/*.zip $CFG{BUILD_DIR}/zm-viewmail-admin-zimlet/build/zimlet");
      },
   },
   {
      "dir"         => "zm-zimlets",
      "ant_targets" => [ "package-zimlets", "jar", "sonar-scan" ],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-zimlets/conf");
         SysExec("cp -f conf/zimbra.tld $CFG{BUILD_DIR}/zm-zimlets/conf");
         SysExec("cp -f conf/web.xml.production $CFG{BUILD_DIR}/zm-zimlets/conf");
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-zimlets/build/dist/zimlets");
         SysExec("cp -f build/dist/zimlets/*.zip $CFG{BUILD_DIR}/zm-zimlets/build/dist/zimlets");
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-zimlets/build/dist");
         SysExec("cp -f build/dist/lib/zimlettaglib.jar $CFG{BUILD_DIR}/zm-zimlets/build/dist/zimlettaglib.jar");
      },
   },
   {
      "dir"         => "zm-web-client",
      "ant_targets"     => ["pkg"],
      "deploy_pkg_into" => "bundle",
   },
   {
      "dir"         => "zm-admin-help-common",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-admin-help-common $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-versioncheck-utilities",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative zm-versioncheck-utilities/src/libexec/zmcheckversion $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"         => "zm-webclient-portal-example",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-webclient-portal-example $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-downloads",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative --exclude '.git' zm-downloads $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"         => "zm-db-conf",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative zm-db-conf/src/db/migration $CFG{BUILD_DIR}/)");
         SysExec("(cd .. && rsync -az --relative zm-db-conf/src/db/mysql     $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"         => "zm-admin-console",
      "ant_targets" => ["pkg"],
      "deploy_pkg_into" => "bundle",
   },
   {
      "dir"         => "zm-aspell",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-aspell $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-dnscache",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-dnscache $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-amavis",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-amavis $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-nginx-conf",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-nginx-conf $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-postfix",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-postfix $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-core-utils",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-core-utils $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-migration-tools",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-migration-tools $CFG{BUILD_DIR}");
      },
   },
   {
      "dir"         => "zm-bulkprovision-store",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-bulkprovision-store");
         SysExec("cp -f -r ../zm-bulkprovision-store/build $CFG{BUILD_DIR}/zm-bulkprovision-store");
      },
   },
   {
      "dir"         => "zm-certificate-manager-store",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-certificate-manager-store");
         SysExec("cp -f -r ../zm-certificate-manager-store/build $CFG{BUILD_DIR}/zm-certificate-manager-store");
      },
   },
   {
      "dir"         => "zm-versioncheck-store",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-versioncheck-store");
         SysExec("cp -f -r ../zm-versioncheck-store/build $CFG{BUILD_DIR}/zm-versioncheck-store");
      },
   },
   {
      "dir"         => "zm-ldap-utils-store",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-ldap-utils-store");
         SysExec("cp -f -r ../zm-ldap-utils-store/build $CFG{BUILD_DIR}/zm-ldap-utils-store");
      },
   },
   {
      "dir"         => "ant-1.7.0-ziputil-patched",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "ant-tar-patched",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "nekohtml-1.9.13",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "java-html-sanitizer-release-20190610.1",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "antisamy",
      "ant_targets" => ["jar", "sonar-scan"],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "ical4j-0.9.16-patched",
      "ant_targets" => [ "clean-compile", "package", "sonar-scan" ],
      "stage_cmd"   => undef,
   },
   {
      "dir"         => "zm-zcs-lib",
      "ant_targets" => ["dist", "pkg"],
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative zm-zcs-lib $CFG{BUILD_DIR}/)");
      },
      "deploy_pkg_into" => "bundle",
   },
   {
      "dir"         => "zm-jython",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative zm-jython $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"         => "zm-mta",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative zm-mta $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"         => "zm-freshclam",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("(cd .. && rsync -az --relative zm-freshclam $CFG{BUILD_DIR}/)");
      },
   },
   {
      "dir"          => "zm-launcher",
      "make_targets" => ["JAVA_BINARY=/opt/zimbra/common/bin/java"],
      "stage_cmd"    => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-launcher/build/dist");
         SysExec("cp -f build/zmmailboxd* $CFG{BUILD_DIR}/zm-launcher/build/dist");
      },
   },
   {
      "dir"         => "zm-jetty-conf",
      "ant_targets" => undef,
      "stage_cmd"   => sub {
         SysExec("cp -f -r ../zm-jetty-conf $CFG{BUILD_DIR}");
      },
   },
   
   {
      "dir"         => "zm-oauth-social",
      "ant_targets" => ["publish-local", "oauth-social-common-jar", "oauth-social-jar", "test", "coverage", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-oauth-social/build/dist");
         SysExec("cp -f -rp build/zm-oauth-social*.jar $CFG{BUILD_DIR}/zm-oauth-social/build/dist");
      },
   },
   
   {
      "dir"         => "zm-gql",
      "ant_targets" => ["publish-local", "test", "coverage", "sonar-scan"],
      "stage_cmd"   => sub {
         SysExec("mkdir -p $CFG{BUILD_DIR}/zm-gql/build/dist");
         SysExec("cp -f -rp build/zm-gql-*.jar $CFG{BUILD_DIR}/zm-gql/build/dist");
      },
   },
);


================================================
FILE: instructions/bundling-scripts/.gitignore
================================================
zimbra-archiving.sh
zimbra-convertd.sh


================================================
FILE: instructions/bundling-scripts/utils.sh
================================================
#!/bin/bash

Copy()
{
   if [ $# -ne 2 ]
   then
      echo "Usage: Copy <file1> <file2>" 1>&2
      exit 1;
   fi

   local src_file="$1"; shift;
   local dest_file="$1"; shift;

   mkdir -p "$(dirname "$dest_file")"

   cp -f "$src_file" "$dest_file"
}

Cpy2()
{
   if [ $# -ne 2 ]
   then
      echo "Usage: Cpy2 <file1> <dir>" 1>&2
      exit 1;
   fi

   local src_file="$1"; shift;
   local dest_dir="$1"; shift;

   mkdir -p "$dest_dir"

   cp -f "$src_file" "$dest_dir"
}


CreatePackage()
{
    if [ $# -ne 1 ]
    then
      echo "Usage: CreatePackage <os-name>" 1>&2
      exit 1
    fi

    if [[ $1 == UBUNTU* ]]
    then
        CreateDebianPackage
    elif [[ $1 == RHEL* ]]
    then
        CreateRhelPackage
    else
        echo "OS not supported. Run using UBUNTU or RHEL system. "
        exit 1
    fi

    if [ $? -ne 0 ]; then
        echo -e "\t### ${currentPackage} package building failed ###" >> ${buildLogFile}
    else
        echo -e "\t*** ${currentPackage} package successfully created ***" >> ${buildLogFile}
    fi

}



================================================
FILE: instructions/bundling-scripts/zcs-bundle.sh
================================================
#!/bin/bash
#
# ***** BEGIN LICENSE BLOCK *****
# Zimbra Collaboration Suite Server
# Copyright (C) 2009, 2010, 2011, 2013, 2014, 2015, 2016 Synacor, Inc.
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software Foundation,
# version 2 of the License.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>.
# ***** END LICENSE BLOCK *****

cd ${repoDir}/zm-build

if [ "${buildType}" = "NETWORK" ]
then
   ZCS_REL=zcs-${buildType}-${releaseNo}_${releaseCandidate}_${buildNo}.${os}.${buildTimeStamp}
else
   ZCS_REL=zcs-${releaseNo}_${releaseCandidate}_${buildNo}.${os}.${buildTimeStamp}
fi

mkdir -p $ZCS_REL/bin
mkdir -p $ZCS_REL/data
mkdir -p $ZCS_REL/docs/en_US
mkdir -p $ZCS_REL/lib/jars
mkdir -p $ZCS_REL/packages
mkdir -p $ZCS_REL/util/modules

cp -f ${repoDir}/zm-build/RE/README.txt                                                 ${ZCS_REL}/
cp -f ${repoDir}/zm-build/rpmconf/Build/checkLicense.pl                                 ${ZCS_REL}/bin
cp -f ${repoDir}/zm-build/rpmconf/Build/checkService.pl                                 ${ZCS_REL}/bin
cp -f ${repoDir}/zm-build/rpmconf/Build/get_plat_tag.sh                                 ${ZCS_REL}/bin
cp -f ${repoDir}/zm-build/rpmconf/Build/zmValidateLdap.pl                               ${ZCS_REL}/bin
cp -f ${repoDir}/zm-build/rpmconf/Install/Util/addUser.sh                               ${ZCS_REL}/util
cp -f ${repoDir}/zm-build/rpmconf/Install/Util/globals.sh                               ${ZCS_REL}/util
cp -f ${repoDir}/zm-build/rpmconf/Install/Util/modules/getconfig.sh                     ${ZCS_REL}/util/modules
cp -f ${repoDir}/zm-build/rpmconf/Install/Util/modules/packages.sh                      ${ZCS_REL}/util/modules
cp -f ${repoDir}/zm-build/rpmconf/Install/Util/modules/postinstall.sh                   ${ZCS_REL}/util/modules
cp -f ${repoDir}/zm-build/rpmconf/Install/Util/utilfunc.sh                              ${ZCS_REL}/util
cp -f ${repoDir}/zm-build/rpmconf/Install/install.sh                                    ${ZCS_REL}/
cp -f ${repoDir}/zm-core-utils/src/libexec/zmdbintegrityreport                          ${ZCS_REL}/bin
cp -f ${repoDir}/zm-mailbox/store/build/dist/versions-init.sql                          ${ZCS_REL}/data

# all local packages to bundle
cp -f ${repoDir}/zm-build/${arch}/*.*                                                   ${ZCS_REL}/packages

for pkgf in ${repoDir}/zm-packages/bundle/*/*.{rpm,deb,changes}
do
   if ! [[ "$pkgf" =~ src.rpm$ ]]
   then
      [ -f "$pkgf" ] && cp -f "$pkgf"                                                   ${ZCS_REL}/packages
   fi
done

if [ -f "/etc/redhat-release" ]
then
   if \which createrepo 2>&-
   then
      ( cd ${ZCS_REL}/packages && createrepo . ) # Create index of packages
   fi
else
   if \which dpkg-scanpackages 2>&-
   then
      ( cd ${ZCS_REL}/packages && dpkg-scanpackages . /dev/null > Packages ) # Create index of packages
   fi
fi

chmod 755 ${ZCS_REL}/bin/checkService.pl
chmod 755 ${ZCS_REL}/bin/checkLicense.pl
chmod 755 ${ZCS_REL}/bin/zmValidateLdap.pl
chmod 755 ${ZCS_REL}/bin/zmdbintegrityreport
chmod 755 ${ZCS_REL}/install.sh

cp -f ${repoDir}/zm-admin-help-common/WebRoot/help/en_US/admin/pdf/*.pdf                ${ZCS_REL}/docs/en_US
cp -f ${repoDir}/zm-admin-help-common/WebRoot/help/en_US/admin/txt/readme_binary.txt    ${ZCS_REL}/readme_binary_en_US.txt

if [ "${buildType}" = "NETWORK" ]
then
   cp -f ${repoDir}/zm-admin-help-network/WebRoot/help/en_US/admin/pdf/*.pdf               ${ZCS_REL}/docs/en_US
   cp -f ${repoDir}/zm-admin-help-network/WebRoot/help/en_US/admin/txt/readme_binary.txt   ${ZCS_REL}/readme_binary_en_US.txt

   cp -f ${repoDir}/zm-backup-store/build/dist/backup-version-init.sql                     ${ZCS_REL}/data
   cp -f ${repoDir}/zm-license-tools/build/zm-license-tools-*.jar                          ${ZCS_REL}/lib/jars/zimbra-license-tools.jar

   cp -f ${repoDir}/zm-network-licenses/thirdparty/oracle_jdk_eula.txt                     ${ZCS_REL}/docs/oracle_jdk_eula.txt
   cp -f ${repoDir}/zm-network-licenses/zimbra/zimbra_network_eula.txt                     ${ZCS_REL}/docs/zimbra_network_eula.txt

   cp -f ${repoDir}/zm-network-build/rpmconf/Install/Util/modules/postinstall.sh           ${ZCS_REL}/util/modules
   cp -f ${repoDir}/zm-network-build/rpmconf/Util/checkValidBackup                         ${ZCS_REL}/bin/checkValidBackup

   chmod 755 ${ZCS_REL}/bin/checkValidBackup
else
   cp -f ${repoDir}/zm-licenses/zimbra/zcl.txt                                                        ${ZCS_REL}/docs
fi

##########################################

if [ "${buildType}" == "NETWORK" ]
then
   echo "NETWORK" > ${ZCS_REL}/.BUILD_TYPE
else
   echo "FOSS" > ${ZCS_REL}/.BUILD_TYPE
fi

echo "${buildNo}"          > ${ZCS_REL}/.BUILD_NUM
echo "${os}"               > ${ZCS_REL}/.BUILD_PLATFORM
echo "${releaseNo}"        > ${ZCS_REL}/.BUILD_RELEASE_NO
echo "${releaseCandidate}" > ${ZCS_REL}/.BUILD_RELEASE_CANDIDATE
echo "${buildTimeStamp}"   > ${ZCS_REL}/.BUILD_TIME_STAMP

##########################################

tar czf ${ZCS_REL}.tgz  ${ZCS_REL}

echo "ZCS build completed: ${repoDir}/zm-build/${ZCS_REL}.tgz"


================================================
FILE: instructions/bundling-scripts/zimbra-apache.sh
================================================
#!/bin/bash
#
# ***** BEGIN LICENSE BLOCK *****
# Zimbra Collaboration Suite Server
# Copyright (C) 2009, 2010, 2011, 2013, 2014, 2015, 2016 Synacor, Inc.
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software Foundation,
# version 2 of the License.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>.
# ***** END LICENSE BLOCK *****

# Shell script to create zimbra apache package


#-------------------- Configuration ---------------------------

    currentScript=`basename $0 | cut -d "." -f 1`                          # zimbra-apache
    currentPackage=`echo ${currentScript}build | cut -d "-" -f 2` # apachebuild


#-------------------- Build Package ---------------------------

main()
{
    echo -e "\tCreate package directories" >> ${buildLogFile}
    mkdir -p ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf

    echo -e "\tCopy package files" >> ${buildLogFile}
    cp ${repoDir}/zm-aspell/conf/httpd.conf ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/httpd.conf
    cp ${repoDir}/zm-aspell/conf/php.ini ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/php.ini

    CreatePackage "${os}"
}

#-------------------- Util Functions ---------------------------

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

source "$SCRIPT_DIR/utils.sh"

CreateDebianPackage()
{
    mkdir -p ${repoDir}/zm-build/${currentPackage}/DEBIAN
    echo -e "\tCreate debian package" >> ${buildLogFile}
    (cd ${repoDir}/zm-build/${currentPackage}; find . -type f ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -print0 | xargs -0 md5sum | sed -e 's| \./| |' \
        > ${repoDir}/zm-build/${currentPackage}/DEBIAN/md5sums)
    cat ${repoDir}/zm-build/rpmconf/Spec/${currentScript}.deb | sed -e "s/@@VERSION@@/${releaseNo}.${releaseCandidate}.${buildNo}.${os/_/.}/" -e "s/@@branch@@/${buildTimeStamp}/" -e "s/@@ARCH@@/${arch}/" \
        > ${repoDir}/zm-build/${currentPackage}/DEBIAN/control
    (cd ${repoDir}/zm-build/${currentPackage}; dpkg -b ${repoDir}/zm-build/${currentPackage} ${repoDir}/zm-build/${arch})

}

CreateRhelPackage()
{
  cat ${repoDir}/zm-build/rpmconf/Spec/${currentScript}.spec | \
  sed -e "s/@@VERSION@@/${releaseNo}_${releaseCandidate}_${buildNo}.${os} /" \
      -e "s/@@RELEASE@@/${buildTimeStamp}/" \
      -e "s/^Copyright:/Copyright:/" > ${repoDir}/zm-build/${currentScript}.spec
  echo "%attr(755, zimbra, zimbra) /opt/zimbra/conf" >> ${repoDir}/zm-build/${currentScript}.spec
  echo "%attr(644, zimbra, zimbra) /opt/zimbra/conf/*" >> ${repoDir}/zm-build/${currentScript}.spec
  echo "" >> ${repoDir}/zm-build/${currentScript}.spec
  echo "%clean" >> ${repoDir}/zm-build/${currentScript}.spec
  (cd ${repoDir}/zm-build/${currentPackage}; \
  rpmbuild --target ${arch} --define '_rpmdir ../' --buildroot=${repoDir}/zm-build/${currentPackage} -bb ${repoDir}/zm-build/${currentScript}.spec )
}

############################################################################
main "$@"


================================================
FILE: instructions/bundling-scripts/zimbra-core.sh
================================================
#!/bin/bash
#
# ***** BEGIN LICENSE BLOCK *****
# Zimbra Collaboration Suite Server
# Copyright (C) 2009, 2010, 2011, 2013, 2014, 2015, 2016 Synacor, Inc.
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software Foundation,
# version 2 of the License.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>.
# ***** END LICENSE BLOCK *****

# Shell script to create zimbra core package


#-------------------- Configuration ---------------------------

currentScript="$(basename "$0" | cut -d "." -f 1)"               # zimbra-core
currentPackage="$(echo ${currentScript}build | cut -d "-" -f 2)" # corebuild

#-------------------- Util Functions ---------------------------

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

source "$SCRIPT_DIR/utils.sh"

CreateDebianPackage()
{
   echo -e "\tCreate debian package" >> ${buildLogFile}

   mkdir -p "${repoDir}/zm-build/${currentPackage}/DEBIAN";

   cat ${repoDir}/zm-build/rpmconf/Spec/Scripts/${currentScript}.post > ${repoDir}/zm-build/${currentPackage}/DEBIAN/postinst
   cat ${repoDir}/zm-build/rpmconf/Spec/Scripts/${currentScript}.pre  > ${repoDir}/zm-build/${currentPackage}/DEBIAN/preinst

   chmod 555 ${repoDir}/zm-build/${currentPackage}/DEBIAN/preinst
   chmod 555 ${repoDir}/zm-build/${currentPackage}/DEBIAN/postinst

   (
      set -e;
      cd ${repoDir}/zm-build/${currentPackage}
      find . -type f -print0 \
         | xargs -0 md5sum \
         | grep -v -w "DEBIAN/.*" \
         | sed -e "s@ [.][/]@ @" \
         | sort \
   ) > ${repoDir}/zm-build/${currentPackage}/DEBIAN/md5sums

   (
      set -e;
      MORE_DEPENDS=", zimbra-timezone-data (>= 1.0.1+1510156506-1.$PKG_OS_TAG) $(find ${repoDir}/zm-packages/ -name \*.deb \
                         | xargs -n1 basename \
                         | sed -e 's/_[0-9].*//' \
                         | grep -e zimbra-common- \
                         | sed '1s/^/, /; :a; {N;s/\n/, /;ba}')";

      cat ${repoDir}/zm-build/rpmconf/Spec/${currentScript}.deb \
         | sed -e "s/@@VERSION@@/${releaseNo}.${releaseCandidate}.${buildNo}.${os/_/.}/" \
               -e "s/@@branch@@/${buildTimeStamp}/" \
               -e "s/@@ARCH@@/${arch}/" \
               -e "s/@@MORE_DEPENDS@@/${MORE_DEPENDS}/" \
               -e "/^%post$/ r ${currentScript}.post"
   ) > ${repoDir}/zm-build/${currentPackage}/DEBIAN/control

   (
      set -e;
      cd ${repoDir}/zm-build/${currentPackage}
      dpkg -b ${repoDir}/zm-build/${currentPackage} ${repoDir}/zm-build/${arch}
   )
}

CreateRhelPackage()
{
    MORE_DEPENDS=", zimbra-timezone-data >= 1.0.1+1510156506-1.$PKG_OS_TAG $(find ${repoDir}/zm-packages/ -name \*.rpm \
                       | xargs -n1 basename \
                       | sed -e 's/-[0-9].*//' \
                       | grep -e zimbra-common- \
                       | sed '1s/^/, /; :a; {N;s/\n/, /;ba}')";

    cat ${repoDir}/zm-build/rpmconf/Spec/${currentScript}.spec | \
    	sed -e "s/@@VERSION@@/${releaseNo}_${releaseCandidate}_${buildNo}.${os}/" \
            	-e "s/@@RELEASE@@/${buildTimeStamp}/" \
                -e "s/@@MORE_DEPENDS@@/${MORE_DEPENDS}/" \
            	-e "/^%pre$/ r ${repoDir}/zm-build/rpmconf/Spec/Scripts/${currentScript}.pre" \
            	-e "/Best email money can buy/ a Network edition" \
            	-e "/^%post$/ r ${repoDir}/zm-build/rpmconf/Spec/Scripts/${currentScript}.post" > ${repoDir}/zm-build/${currentScript}.spec
    (cd ${repoDir}/zm-build/corebuild; find opt -maxdepth 2 -type f -o -type l \
    	| sed -e 's|^|%attr(-, zimbra, zimbra) /|' >> \
    	${repoDir}/zm-build/${currentScript}.spec )
    echo "%attr(440, root, root) /etc/sudoers.d/01_zimbra" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(440, root, root) /etc/sudoers.d/02_zimbra-core" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, root, root) /opt/zimbra/bin" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, zimbra, zimbra) /opt/zimbra/docs" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(444, zimbra, zimbra) /opt/zimbra/docs/*" >> \
    	${repoDir}/zm-build/${currentScript}.spec

    if [ "${buildType}" == "NETWORK" ]
    then
      echo "%attr(755, zimbra, zimbra) /opt/zimbra/docs/rebranding" >> \
         ${repoDir}/zm-build/${currentScript}.spec
      echo "%attr(444, zimbra, zimbra) /opt/zimbra/docs/rebranding/*" >> \
         ${repoDir}/zm-build/${currentScript}.spec
    fi

    echo "%attr(755, root, root) /opt/zimbra/contrib" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, root, root) /opt/zimbra/libexec" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, zimbra, zimbra) /opt/zimbra/logger" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, zimbra, zimbra) /opt/zimbra/conf" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(644, zimbra, zimbra) /opt/zimbra/conf/*" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, zimbra, zimbra) /opt/zimbra/conf/externaldirsync" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(644, zimbra, zimbra) /opt/zimbra/conf/externaldirsync/*" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, zimbra, zimbra) /opt/zimbra/conf/sasl2" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(644, zimbra, zimbra) /opt/zimbra/conf/sasl2/*" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, zimbra, zimbra) /opt/zimbra/conf/zmconfigd" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(644, zimbra, zimbra) /opt/zimbra/conf/zmconfigd/*" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(-, zimbra, zimbra) /opt/zimbra/db" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(-, root, root) /opt/zimbra/lib" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(-, zimbra, zimbra) /opt/zimbra/conf/crontabs" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(-, root, root) /opt/zimbra/common/lib/jylibs" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(-, root, root) /opt/zimbra/common/lib/perl5/Zimbra" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "%attr(755, zimbra, zimbra) /opt/zimbra/logger/db/work" >> \
    	${repoDir}/zm-build/${currentScript}.spec
    echo "" >> ${repoDir}/zm-build/${currentScript}.spec
    echo "%clean" >> ${repoDir}/zm-build/${currentScript}.spec
    (cd ${repoDir}/zm-build/${currentPackage}; \
    	rpmbuild --target ${arch} --define '_rpmdir ../' --buildroot=${repoDir}/zm-build/${currentPackage} -bb ${repoDir}/zm-build/${currentScript}.spec )
}

#-------------------- main packaging ---------------------------

main()
{
   set -e

   Copy ${repoDir}/zm-build/rpmconf/Env/sudoers.d/01_zimbra                                         ${repoDir}/zm-build/${currentPackage}/etc/sudoers.d/01_zimbra
   Copy ${repoDir}/zm-build/rpmconf/Env/sudoers.d/02_zimbra-core                                    ${repoDir}/zm-build/${currentPackage}/etc/sudoers.d/02_zimbra-core

   Copy ${repoDir}/zm-amavis/conf/amavisd.conf.in                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/amavisd.conf.in
   Copy ${repoDir}/zm-amavis/conf/amavisd/amavisd-custom.conf                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/amavisd-custom.conf
   Copy ${repoDir}/zm-amavis/conf/dspam.conf.in                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/dspam.conf.in

   Copy ${repoDir}/zm-build/lib/Zimbra/DB/DB.pm                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/DB/DB.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/LDAP.pm                                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/LDAP.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/LocalConfig.pm                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/LocalConfig.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/Mon/Logger.pm                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/Mon/Logger.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/Mon/LoggerSchema.pm                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/Mon/LoggerSchema.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/Mon/Zmstat.pm                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/Mon/Zmstat.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/SMTP.pm                                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/SMTP.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/SOAP/Soap.pm                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/SOAP/Soap.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/SOAP/Soap11.pm                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/SOAP/Soap11.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/SOAP/Soap12.pm                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/SOAP/Soap12.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/SOAP/XmlDoc.pm                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/SOAP/XmlDoc.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/SOAP/XmlElement.pm                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/SOAP/XmlElement.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/Util/Common.pm                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/Util/Common.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/Util/LDAP.pm                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/Util/LDAP.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/Util/Timezone.pm                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/Util/Timezone.pm
   Copy ${repoDir}/zm-build/lib/Zimbra/ZmClient.pm                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/perl5/Zimbra/ZmClient.pm

   Copy ${repoDir}/zm-build/rpmconf/Build/get_plat_tag.sh                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/get_plat_tag.sh
   Copy ${repoDir}/zm-build/rpmconf/Build/get_plat_tag.sh                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/bin/get_plat_tag.sh
   Copy ${repoDir}/zm-build/rpmconf/Conf/auditswatchrc                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/auditswatchrc.in
   Copy ${repoDir}/zm-build/rpmconf/Conf/logswatchrc                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/logswatchrc
   Copy ${repoDir}/zm-build/rpmconf/Conf/swatchrc                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/swatchrc.in
   Copy ${repoDir}/zm-build/rpmconf/Conf/zmssl.cnf.in                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmssl.cnf.in
   Copy ${repoDir}/zm-build/rpmconf/Env/crontabs/crontab                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/crontabs/crontab
   Copy ${repoDir}/zm-build/rpmconf/Env/crontabs/crontab.ldap                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/crontabs/crontab.ldap
   Copy ${repoDir}/zm-build/rpmconf/Env/crontabs/crontab.logger                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/crontabs/crontab.logger
   Copy ${repoDir}/zm-build/rpmconf/Env/crontabs/crontab.mta                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/crontabs/crontab.mta
   Copy ${repoDir}/zm-build/rpmconf/Env/crontabs/crontab.store                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/crontabs/crontab.store
   Copy ${repoDir}/zm-build/rpmconf/Env/zimbra.bash_profile                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/.bash_profile
   Copy ${repoDir}/zm-build/rpmconf/Env/zimbra.bashrc                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/.bashrc
   Copy ${repoDir}/zm-build/rpmconf/Env/zimbra.exrc                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/.exrc
   Copy ${repoDir}/zm-build/rpmconf/Env/zimbra.ldaprc                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/.ldaprc
   Copy ${repoDir}/zm-build/rpmconf/Env/zimbra.platform                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/.platform
   Copy ${repoDir}/zm-build/rpmconf/Env/zimbra.viminfo                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/.viminfo
   Copy ${repoDir}/zm-build/rpmconf/Img/connection_failed.gif                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/logger/db/work/connection_failed.gif
   Copy ${repoDir}/zm-build/rpmconf/Img/data_not_available.gif                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/logger/db/work/data_not_available.gif
   Copy ${repoDir}/zm-build/rpmconf/Install/Util/addUser.sh                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/addUser.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/Util/addUser.sh                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/util/addUser.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/Util/globals.sh                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/util/globals.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/Util/modules/getconfig.sh                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/util/modules/getconfig.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/Util/modules/packages.sh                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/util/modules/packages.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/Util/modules/postinstall.sh                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/util/modules/postinstall.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/Util/utilfunc.sh                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/util/utilfunc.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/install.sh                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/install.sh
   Copy ${repoDir}/zm-build/rpmconf/Install/postinstall.pm                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/postinstall.pm
   Copy ${repoDir}/zm-build/rpmconf/Install/preinstall.pm                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/preinstall.pm
   Copy ${repoDir}/zm-build/rpmconf/Install/zmsetup.pl                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmsetup.pl
   Copy ${repoDir}/zm-build/rpmconf/Upgrade/zmupgrade.pm                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmupgrade.pm

   Copy ${repoDir}/zm-core-utils/conf/dhparam.pem.zcs                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/dhparam.pem.zcs
   Copy ${repoDir}/zm-core-utils/conf/zmlogrotate                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmlogrotate
   Copy ${repoDir}/zm-core-utils/src/bin/antispam-mysql                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/antispam-mysql
   Copy ${repoDir}/zm-core-utils/src/bin/antispam-mysql.server                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/antispam-mysql.server
   Copy ${repoDir}/zm-core-utils/src/bin/antispam-mysqladmin                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/antispam-mysqladmin
   Copy ${repoDir}/zm-core-utils/src/bin/ldap.production                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/ldap
   Copy ${repoDir}/zm-core-utils/src/bin/mysql                                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/mysql
   Copy ${repoDir}/zm-core-utils/src/bin/mysql.server                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/mysql.server
   Copy ${repoDir}/zm-core-utils/src/bin/mysqladmin                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/mysqladmin
   Copy ${repoDir}/zm-core-utils/src/bin/postconf                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/postconf
   Copy ${repoDir}/zm-core-utils/src/bin/postfix                                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/postfix
   Copy ${repoDir}/zm-core-utils/src/bin/qshape                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/qshape
   Copy ${repoDir}/zm-core-utils/src/bin/zmaccts                                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmaccts
   Copy ${repoDir}/zm-core-utils/src/bin/zmamavisdctl                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmamavisdctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmantispamctl                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmantispamctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmantispamdbpasswd                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmantispamdbpasswd
   Copy ${repoDir}/zm-core-utils/src/bin/zmantivirusctl                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmantivirusctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmapachectl                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmapachectl
   Copy ${repoDir}/zm-core-utils/src/bin/zmarchivectl                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmarchivectl
   Copy ${repoDir}/zm-core-utils/src/bin/zmauditswatchctl                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmauditswatchctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmblobchk                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmblobchk
   Copy ${repoDir}/zm-core-utils/src/bin/zmcaldebug                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmcaldebug
   Copy ${repoDir}/zm-core-utils/src/bin/zmcbpadmin                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmcbpadmin
   Copy ${repoDir}/zm-core-utils/src/bin/zmcbpolicydctl                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmcbpolicydctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmcertmgr                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmcertmgr
   Copy ${repoDir}/zm-core-utils/src/bin/zmclamdctl                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmclamdctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmconfigdctl                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmconfigdctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmcontactbackup                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmcontactbackup
   Copy ${repoDir}/zm-core-utils/src/bin/zmcontrol                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmcontrol
   Copy ${repoDir}/zm-core-utils/src/bin/zmdedupe                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmdedupe
   Copy ${repoDir}/zm-core-utils/src/bin/zmdhparam                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmdhparam
   Copy ${repoDir}/zm-core-utils/src/bin/zmdnscachectl                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmdnscachectl
   Copy ${repoDir}/zm-core-utils/src/bin/zmdumpenv                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmdumpenv
   Copy ${repoDir}/zm-core-utils/src/bin/zmfixcalendtime                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmfixcalendtime
   Copy ${repoDir}/zm-core-utils/src/bin/zmfixcalprio                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmfixcalprio
   Copy ${repoDir}/zm-core-utils/src/bin/zmfreshclamctl                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmfreshclamctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmgsautil                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmgsautil
   Copy ${repoDir}/zm-core-utils/src/bin/zmhostname                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmhostname
   Copy ${repoDir}/zm-core-utils/src/bin/zminnotop                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zminnotop
   Copy ${repoDir}/zm-core-utils/src/bin/zmitemdatafile                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmitemdatafile
   Copy ${repoDir}/zm-core-utils/src/bin/zmjava                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmjava
   Copy ${repoDir}/zm-core-utils/src/bin/zmjavaext                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmjavaext
   Copy ${repoDir}/zm-core-utils/src/bin/zmldappasswd                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmldappasswd
   Copy ${repoDir}/zm-core-utils/src/bin/zmldapupgrade                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmldapupgrade
   Copy ${repoDir}/zm-core-utils/src/bin/zmlmtpinject                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmlmtpinject
   Copy ${repoDir}/zm-core-utils/src/bin/zmlocalconfig                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmlocalconfig
   Copy ${repoDir}/zm-core-utils/src/bin/zmloggerctl                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmloggerctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmloggerhostmap                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmloggerhostmap
   Copy ${repoDir}/zm-core-utils/src/bin/zmlogswatchctl                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmlogswatchctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmmailbox                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmailbox
   Copy ${repoDir}/zm-core-utils/src/bin/zmmailboxdctl                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmailboxdctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmmemcachedctl                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmemcachedctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmmetadump                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmetadump
   Copy ${repoDir}/zm-core-utils/src/bin/zmmigrateattrs                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmigrateattrs
   Copy ${repoDir}/zm-core-utils/src/bin/zmmilterctl                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmilterctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmmtactl                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmtactl
   Copy ${repoDir}/zm-core-utils/src/bin/zmmypasswd                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmypasswd
   Copy ${repoDir}/zm-core-utils/src/bin/zmmysqlstatus                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmysqlstatus
   Copy ${repoDir}/zm-core-utils/src/bin/zmmytop                                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmytop
   Copy ${repoDir}/zm-core-utils/src/bin/zmopendkimctl                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmopendkimctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmplayredo                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmplayredo
   Copy ${repoDir}/zm-core-utils/src/bin/zmprov                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmprov
   Copy ${repoDir}/zm-core-utils/src/bin/zmproxyconf                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmproxyconf
   Copy ${repoDir}/zm-core-utils/src/bin/zmproxyctl                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmproxyctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmpython                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmpython
   Copy ${repoDir}/zm-core-utils/src/bin/zmredodump                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmredodump
   Copy ${repoDir}/zm-core-utils/src/bin/zmsaslauthdctl                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmsaslauthdctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmshutil                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmshutil
   Copy ${repoDir}/zm-core-utils/src/bin/zmskindeploy                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmskindeploy
   Copy ${repoDir}/zm-core-utils/src/bin/zmsoap                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmsoap
   Copy ${repoDir}/zm-core-utils/src/bin/zmspellctl                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmspellctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmsshkeygen                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmsshkeygen
   Copy ${repoDir}/zm-core-utils/src/bin/zmstat-chart                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmstat-chart
   Copy ${repoDir}/zm-core-utils/src/bin/zmstat-chart-config                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmstat-chart-config
   Copy ${repoDir}/zm-core-utils/src/bin/zmstatctl                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmstatctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmstorectl                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmstorectl
   Copy ${repoDir}/zm-core-utils/src/bin/zmswatchctl                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmswatchctl
   Copy ${repoDir}/zm-core-utils/src/bin/zms3config                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zms3config
   Copy ${repoDir}/zm-core-utils/src/bin/zmthrdump                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmthrdump
   Copy ${repoDir}/zm-core-utils/src/bin/zmtlsctl                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmtlsctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmtotp                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmtotp
   Copy ${repoDir}/zm-core-utils/src/bin/zmtrainsa                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmtrainsa
   Copy ${repoDir}/zm-core-utils/src/bin/zmtzupdate                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmtzupdate
   Copy ${repoDir}/zm-core-utils/src/bin/zmupdateauthkeys                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmupdateauthkeys
   Copy ${repoDir}/zm-core-utils/src/bin/zmvolume                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmvolume
   Copy ${repoDir}/zm-core-utils/src/bin/zmzimletctl                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmzimletctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmonlyofficectl                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmonlyofficectl
   Copy ${repoDir}/zm-core-utils/src/bin/zmrabbitmqctl                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmrabbitmqctl
   Copy ${repoDir}/zm-core-utils/src/bin/zmonlyofficeinstall                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmonlyofficeinstall
   Copy ${repoDir}/zm-core-utils/src/bin/zmlicensectl                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmlicensectl
   Copy ${repoDir}/zm-core-utils/src/bin/zmacl                                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmacl
   Copy ${repoDir}/zm-core-utils/src/contrib/zmfetchercfg                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/contrib/zmfetchercfg
   Copy ${repoDir}/zm-core-utils/src/libexec/600.zimbra                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/600.zimbra
   Copy ${repoDir}/zm-core-utils/src/libexec/client_usage_report.py                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/client_usage_report.py
   Copy ${repoDir}/zm-core-utils/src/libexec/configrewrite                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/configrewrite
   Copy ${repoDir}/zm-core-utils/src/libexec/icalmig                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/icalmig
   Copy ${repoDir}/zm-core-utils/src/libexec/libreoffice-installer.sh                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/libreoffice-installer.sh
   Copy ${repoDir}/zm-core-utils/src/libexec/zcs                                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zcs
   Copy ${repoDir}/zm-core-utils/src/libexec/zimbra                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zimbra
   Copy ${repoDir}/zm-core-utils/src/libexec/zmaltermimeconfig                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmaltermimeconfig
   Copy ${repoDir}/zm-core-utils/src/libexec/zmantispamdbinit                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmantispamdbinit
   Copy ${repoDir}/zm-core-utils/src/libexec/zmantispammycnf                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmantispammycnf
   Copy ${repoDir}/zm-core-utils/src/libexec/zmcbpolicydinit                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmcbpolicydinit
   Copy ${repoDir}/zm-core-utils/src/libexec/zmcheckduplicatemysqld                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmcheckduplicatemysqld
   Copy ${repoDir}/zm-core-utils/src/libexec/zmcheckexpiredcerts                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmcheckexpiredcerts
   Copy ${repoDir}/zm-core-utils/src/libexec/zmcleantmp                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmcleantmp
   Copy ${repoDir}/zm-core-utils/src/libexec/zmclientcertmgr                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmclientcertmgr
   Copy ${repoDir}/zm-core-utils/src/libexec/zmcompresslogs                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmcompresslogs
   Copy ${repoDir}/zm-core-utils/src/libexec/zmcomputequotausage                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmcomputequotausage
   Copy ${repoDir}/zm-core-utils/src/libexec/zmconfigd                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmconfigd
   Copy ${repoDir}/zm-core-utils/src/libexec/zmcpustat                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmcpustat
   Copy ${repoDir}/zm-core-utils/src/libexec/zmdailyreport                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmdailyreport
   Copy ${repoDir}/zm-core-utils/src/bin/zmpasswordexpiryreminder                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmpasswordexpiryreminder
   Copy ${repoDir}/zm-core-utils/src/libexec/zmdbintegrityreport                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmdbintegrityreport
   Copy ${repoDir}/zm-core-utils/src/libexec/zmdiaglog                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmdiaglog
   Copy ${repoDir}/zm-core-utils/src/libexec/zmdkimkeyutil                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmdkimkeyutil
   Copy ${repoDir}/zm-core-utils/src/libexec/zmdnscachealign                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmdnscachealign
   Copy ${repoDir}/zm-core-utils/src/libexec/zmdomaincertmgr                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmdomaincertmgr
   Copy ${repoDir}/zm-core-utils/src/libexec/zmexplainslow                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmexplainslow
   Copy ${repoDir}/zm-core-utils/src/libexec/zmexplainsql                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmexplainsql
   Copy ${repoDir}/zm-core-utils/src/libexec/zmextractsql                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmextractsql
   Copy ${repoDir}/zm-core-utils/src/libexec/zmfixperms                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmfixperms
   Copy ${repoDir}/zm-core-utils/src/libexec/zmfixreminder                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmfixreminder
   Copy ${repoDir}/zm-core-utils/src/libexec/zmgenentitlement                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmgenentitlement
   Copy ${repoDir}/zm-core-utils/src/libexec/zmgsaupdate                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmgsaupdate
   Copy ${repoDir}/zm-core-utils/src/libexec/zmhspreport                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmhspreport
   Copy ${repoDir}/zm-core-utils/src/libexec/zminiutil                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zminiutil
   Copy ${repoDir}/zm-core-utils/src/libexec/zmiostat                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmiostat
   Copy ${repoDir}/zm-core-utils/src/libexec/zmiptool                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmiptool
   Copy ${repoDir}/zm-core-utils/src/libexec/zmjavawatch                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmjavawatch
   Copy ${repoDir}/zm-core-utils/src/libexec/zmjettyenablelogging                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmjettyenablelogging
   Copy ${repoDir}/zm-core-utils/src/libexec/zmjsprecompile                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmjsprecompile
   Copy ${repoDir}/zm-core-utils/src/libexec/zmlogger                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmlogger
   Copy ${repoDir}/zm-core-utils/src/libexec/zmloggerinit                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmloggerinit
   Copy ${repoDir}/zm-core-utils/src/libexec/zmlogprocess                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmlogprocess
   Copy ${repoDir}/zm-core-utils/src/libexec/zmmsgtrace                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmmsgtrace
   Copy ${repoDir}/zm-core-utils/src/libexec/zmmtainit                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmmtainit
   Copy ${repoDir}/zm-core-utils/src/libexec/zmmtastatus                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmmtastatus
   Copy ${repoDir}/zm-core-utils/src/libexec/zmmycnf                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmmycnf
   Copy ${repoDir}/zm-core-utils/src/libexec/zmmyinit                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmmyinit
   Copy ${repoDir}/zm-core-utils/src/libexec/zmnotifyinstall                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmnotifyinstall
   Copy ${repoDir}/zm-core-utils/src/libexec/zmpostfixpolicyd                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmpostfixpolicyd
   Copy ${repoDir}/zm-core-utils/src/libexec/zmproxyconfgen                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmproxyconfgen
   Copy ${repoDir}/zm-core-utils/src/libexec/zmproxyconfig                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmproxyconfig
   Copy ${repoDir}/zm-core-utils/src/libexec/zmproxypurge                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmproxypurge
   Copy ${repoDir}/zm-core-utils/src/libexec/zmqaction                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmqaction
   Copy ${repoDir}/zm-core-utils/src/libexec/zmqstat                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmqstat
   Copy ${repoDir}/zm-core-utils/src/libexec/zmqueuelog                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmqueuelog
   Copy ${repoDir}/zm-core-utils/src/libexec/zmrc                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmrc
   Copy ${repoDir}/zm-core-utils/src/libexec/zmrcd                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmrcd
   Copy ${repoDir}/zm-core-utils/src/libexec/zmresetmysqlpassword                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmresetmysqlpassword
   Copy ${repoDir}/zm-core-utils/src/libexec/zmrrdfetch                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmrrdfetch
   Copy ${repoDir}/zm-core-utils/src/libexec/zmsacompile                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmsacompile
   Copy ${repoDir}/zm-core-utils/src/libexec/zmsaupdate                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmsaupdate
   Copy ${repoDir}/zm-core-utils/src/libexec/zmserverips                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmserverips
   Copy ${repoDir}/zm-core-utils/src/libexec/zmsetservername                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmsetservername
   Copy ${repoDir}/zm-core-utils/src/libexec/zmsnmpinit                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmsnmpinit
   Copy ${repoDir}/zm-core-utils/src/libexec/zmspamextract                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmspamextract
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-allprocs                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-allprocs
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-cleanup                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-cleanup
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-convertd                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-convertd
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-cpu                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-cpu
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-df                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-df
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-fd                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-fd
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-io                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-io
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-mtaqueue                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-mtaqueue
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-mysql                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-mysql
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-nginx                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-nginx
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-proc                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-proc
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstat-vm                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-vm
   Copy ${repoDir}/zm-core-utils/src/libexec/zmstatuslog                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstatuslog
   Copy ${repoDir}/zm-core-utils/src/libexec/zmsyslogsetup                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmsyslogsetup
   Copy ${repoDir}/zm-core-utils/src/libexec/zmthreadcpu                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmthreadcpu
   Copy ${repoDir}/zm-core-utils/src/libexec/zmunbound                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmunbound
   Copy ${repoDir}/zm-core-utils/src/libexec/zmupdatedownload                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmupdatedownload
   Copy ${repoDir}/zm-core-utils/src/libexec/zmupdatezco                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmupdatezco
   Copy ${repoDir}/zm-core-utils/src/perl/migrate20131014-removezca.pl                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20131014-removezca.pl

   Copy ${repoDir}/zm-db-conf/src/db/migration/Migrate.pm                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/Migrate.pm
   Copy ${repoDir}/zm-db-conf/src/db/migration/clearArchivedFlag.pl                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/clearArchivedFlag.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/fixConversationCounts.pl                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/fixConversationCounts.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/fixZeroChangeIdItems.pl                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/fixZeroChangeIdItems.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/fixup20080410-SetRsvpTrue.pl                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/fixup20080410-SetRsvpTrue.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate-ComboUpdater.pl                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate-ComboUpdater.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050517-AddUnreadColumn.pl                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050517-AddUnreadColumn.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050531-RemoveCascadingDeletes.pl            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050531-RemoveCascadingDeletes.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050609-AddDateIndex.pl                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050609-AddDateIndex.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050628-ShrinkSyncColumns.pl                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050628-ShrinkSyncColumns.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050701-SchemaCleanup.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050701-SchemaCleanup.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050721-MailItemIndexes.pl                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050721-MailItemIndexes.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050727-RemoveTypeInvite.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050727-RemoveTypeInvite.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050727a-Volume.pl                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050727a-Volume.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050804-SpamToJunk.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050804-SpamToJunk.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050809-AddConfig.pl                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050809-AddConfig.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050811-WipeAppointments.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050811-WipeAppointments.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050818-TagsFlagsIndexes.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050818-TagsFlagsIndexes.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050822-TrackChangeDate.pl                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050822-TrackChangeDate.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050824-AddMailTransport.sh                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050824-AddMailTransport.sh
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050824a-Volume.pl                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050824a-Volume.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050831-SecondaryMsgVolume.pl                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050831-SecondaryMsgVolume.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050916-Volume.pl                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050916-Volume.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050920-CompressionThreshold.pl              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050920-CompressionThreshold.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20050927-DropRedologSequence.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20050927-DropRedologSequence.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20051021-UniqueVolume.pl                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20051021-UniqueVolume.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060120-Appointment.pl                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060120-Appointment.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060412-NotebookFolder.pl                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060412-NotebookFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060515-AddImapId.pl                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060515-AddImapId.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060518-EmailedContactsFolder.pl             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060518-EmailedContactsFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060708-FlagCalendarFolder.pl                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060708-FlagCalendarFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060803-CreateMailboxMetadata.pl             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060803-CreateMailboxMetadata.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060807-WikiDigestFixup.sh                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060807-WikiDigestFixup.sh
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060810-PersistFolderCounts.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060810-PersistFolderCounts.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060911-MailboxGroup.pl                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060911-MailboxGroup.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20060929-TypedTombstones.pl                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20060929-TypedTombstones.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20061101-IMFolder.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20061101-IMFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20061117-TasksFolder.pl                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20061117-TasksFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20061120-AddNameColumn.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20061120-AddNameColumn.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20061204-CreatePop3MessageTable.pl            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20061204-CreatePop3MessageTable.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20061205-UniqueAppointmentIndex.pl            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20061205-UniqueAppointmentIndex.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20061212-RepairMutableIndexIds.pl             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20061212-RepairMutableIndexIds.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20061221-RecalculateFolderSizes.pl            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20061221-RecalculateFolderSizes.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070302-NullContactVolumeId.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070302-NullContactVolumeId.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070306-Pop3MessageUid.pl                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070306-Pop3MessageUid.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070606-WidenMetadata.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070606-WidenMetadata.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070614-BriefcaseFolder.pl                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070614-BriefcaseFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070627-BackupTime.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070627-BackupTime.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070629-IMTables.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070629-IMTables.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070630-LastSoapAccess.pl                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070630-LastSoapAccess.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070703-ScheduledTask.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070703-ScheduledTask.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070706-DeletedAccount.pl                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070706-DeletedAccount.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070713-NullContactBlobDigest.pl             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070713-NullContactBlobDigest.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070725-CreateRevisionTable.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070725-CreateRevisionTable.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070726-ImapDataSource.pl                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070726-ImapDataSource.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070809-Signatures.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070809-Signatures.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070921-ImapDataSourceUidValidity.pl         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070921-ImapDataSourceUidValidity.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20070928-ScheduledTaskIndex.pl                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20070928-ScheduledTaskIndex.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20071128-AccountId.pl                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20071128-AccountId.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20071202-DeleteSignatures.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20071202-DeleteSignatures.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20071204-deleteOldLDAPUsers.pl                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20071204-deleteOldLDAPUsers.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20071206-WidenSizeColumns.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20071206-WidenSizeColumns.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20080130-ImapFlags.pl                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20080130-ImapFlags.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20080213-IndexDeferredColumn.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20080213-IndexDeferredColumn.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20080909-DataSourceItemTable.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20080909-DataSourceItemTable.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20080930-MucService.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20080930-MucService.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20090315-MobileDevices.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20090315-MobileDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20090406-DataSourceItemTable.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20090406-DataSourceItemTable.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20090430-highestindexed.pl                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20090430-highestindexed.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20100106-MobileDevices.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20100106-MobileDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20100913-Mysql51.pl                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20100913-Mysql51.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20100926-Dumpster.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20100926-Dumpster.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20101123-MobileDevices.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20101123-MobileDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20110314-MobileDevices.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110314-MobileDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20110330-RecipientsColumn.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110330-RecipientsColumn.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20110705-PendingAclPush.pl                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110705-PendingAclPush.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20110810-TagTable.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110810-TagTable.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20110928-MobileDevices.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110928-MobileDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20110929-VersionColumn.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110929-VersionColumn.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20111005-ItemIdCheckpoint.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20111005-ItemIdCheckpoint.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20120125-uuidAndDigest.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120125-uuidAndDigest.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20120222-LastPurgeAtColumn.pl                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120222-LastPurgeAtColumn.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20120229-DropIMTables.pl                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120229-DropIMTables.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20120319-Name255Chars.pl                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120319-Name255Chars.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20120410-BlobLocator.pl                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120410-BlobLocator.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20120611_7to8_bundle.pl                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120611_7to8_bundle.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20121009-VolumeBlobs.pl                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20121009-VolumeBlobs.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20130226_alwayson.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20130226_alwayson.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20130227-UpgradeCBPolicyDSchema.sql           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20130227-UpgradeCBPolicyDSchema.sql
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20130606-UpdateCBPolicydSchema.sql            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20130606-UpdateCBPolicydSchema.sql
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20130819-UpgradeQuotasTable.sql               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20130819-UpgradeQuotasTable.sql
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20140319-MailItemPrevFolders.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20140319-MailItemPrevFolders.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20140328-EnforceTableCharset.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20140328-EnforceTableCharset.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20140624-DropMysqlIndexes.pl                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20140624-DropMysqlIndexes.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20150401-ZmgDevices.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20150401-ZmgDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20150515-DataSourcePurgeTables.pl             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20150515-DataSourcePurgeTables.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20150623-ZmgDevices.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20150623-ZmgDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20150702-ZmgDevices.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20150702-ZmgDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20170301-ZimbraChat.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20170301-ZimbraChat.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20180301-ZimbraChat.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20180301-ZimbraChat.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20190401-ZimbraChat.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20190401-ZimbraChat.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20190611-ZimbraChat.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20190611-ZimbraChat.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20210506-BriefcaseApi.pl                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20210506-BriefcaseApi.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20200625-MobileDevices.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20200625-MobileDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20210319-MobileDevices.pl                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20210319-MobileDevices.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20210809-UnsubscribeFolder.pl                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20210809-UnsubscribeFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20220525-Volume.pl                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20220525-Volume.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20220721-AddMdmUpdateTimestamp.pl             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20220721-AddMdmUpdateTimestamp.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20220729-FilesShareWithMeFolder.pl            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20220729-FilesShareWithMeFolder.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrate20230224-UpdateOnlyOffice-7.2.1.pl            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20230224-UpdateOnlyOffice-7.2.1.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateAmavisLdap20050810.pl                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateAmavisLdap20050810.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateClearSpamFlag.pl                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateClearSpamFlag.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateLargeMetadata.pl                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateLargeMetadata.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateLogger1-index.pl                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateLogger1-index.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateLogger2-config.pl                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateLogger2-config.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateLogger3-diskindex.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateLogger3-diskindex.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateLogger4-loghostname.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateLogger4-loghostname.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateLogger5-qid.pl                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateLogger5-qid.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateLogger6-qid.pl                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateLogger6-qid.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateMailItemTimestamps.pl                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateMailItemTimestamps.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migratePreWidenSizeColumns.pl                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migratePreWidenSizeColumns.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateRemoveMailboxId.pl                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateRemoveMailboxId.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateRemoveTagIndexes.pl                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateRemoveTagIndexes.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateRenameIdentifiers.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateRenameIdentifiers.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateSyncSequence.pl                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateSyncSequence.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateToSplitTables.pl                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateToSplitTables.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/migrateUpdateAppointment.pl                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrateUpdateAppointment.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/optimizeMboxgroups.pl                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/optimizeMboxgroups.pl
   Copy ${repoDir}/zm-db-conf/src/db/migration/zmdbupgrade.pl                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/zmdbupgrade.pl
   Copy ${repoDir}/zm-db-conf/src/db/mysql/create_database.sql                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/db/create_database.sql
   Copy ${repoDir}/zm-db-conf/src/db/mysql/db.sql                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/db/db.sql

   Copy ${repoDir}/zm-freshclam/freshclam.conf.in                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/freshclam.conf.in

   Copy ${repoDir}/zm-jython/jylibs/commands.py                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/commands.py
   Copy ${repoDir}/zm-jython/jylibs/conf.py                                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/conf.py
   Copy ${repoDir}/zm-jython/jylibs/config.py                                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/config.py
   Copy ${repoDir}/zm-jython/jylibs/globalconfig.py                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/globalconfig.py
   Copy ${repoDir}/zm-jython/jylibs/ldap.py                                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/ldap.py
   Copy ${repoDir}/zm-jython/jylibs/listener.py                                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/listener.py
   Copy ${repoDir}/zm-jython/jylibs/localconfig.py                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/localconfig.py
   Copy ${repoDir}/zm-jython/jylibs/logmsg.py                                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/logmsg.py
   Copy ${repoDir}/zm-jython/jylibs/miscconfig.py                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/miscconfig.py
   Copy ${repoDir}/zm-jython/jylibs/mtaconfig.py                                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/mtaconfig.py
   Copy ${repoDir}/zm-jython/jylibs/serverconfig.py                                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/serverconfig.py
   Copy ${repoDir}/zm-jython/jylibs/state.py                                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/common/lib/jylibs/state.py

   Copy ${repoDir}/zm-launcher/build/dist/zmmailboxdmgr                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmmailboxdmgr
   Copy ${repoDir}/zm-launcher/build/dist/zmmailboxdmgr.unrestricted                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmmailboxdmgr.unrestricted 

   Copy ${repoDir}/zm-ldap-utilities/conf/externaldirsync/Exchange2000.xml                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/externaldirsync/Exchange2000.xml
   Copy ${repoDir}/zm-ldap-utilities/conf/externaldirsync/Exchange2003.xml                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/externaldirsync/Exchange2003.xml
   Copy ${repoDir}/zm-ldap-utilities/conf/externaldirsync/Exchange5.5.xml                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/externaldirsync/Exchange5.5.xml
   Copy ${repoDir}/zm-ldap-utilities/conf/externaldirsync/domino.xml                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/externaldirsync/domino.xml
   Copy ${repoDir}/zm-ldap-utilities/conf/externaldirsync/novellGroupWise.xml                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/externaldirsync/novellGroupWise.xml
   Copy ${repoDir}/zm-ldap-utilities/conf/externaldirsync/openldap.xml                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/externaldirsync/openldap.xml
   Copy ${repoDir}/zm-ldap-utilities/conf/freshclam.conf.in                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/freshclam.conf.in
   Copy ${repoDir}/zm-ldap-utilities/conf/zmconfigd.cf                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd.cf
   Copy ${repoDir}/zm-ldap-utilities/conf/zmconfigd.log4j.properties                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd.log4j.properties
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20110615-AddDynlist.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110615-AddDynlist.pl
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20110721-AddUnique.pl                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20110721-AddUnique.pl
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20111019-UniqueZimbraId.pl           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20111019-UniqueZimbraId.pl
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20120210-AddSearchNoOp.pl            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120210-AddSearchNoOp.pl
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20120507-UniqueDKIMSelector.pl       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20120507-UniqueDKIMSelector.pl
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20140728-AddSSHA512.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20140728-AddSSHA512.pl
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20141022-AddTLSBits.pl               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20141022-AddTLSBits.pl
   Copy ${repoDir}/zm-ldap-utilities/src/ldap/migration/migrate20150930-AddSyncpovSessionlog.pl     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/scripts/migrate20150930-AddSyncpovSessionlog.pl
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapanon                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapanon
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapapplyldif                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapapplyldif
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapenable-mmr                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapenable-mmr
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapenablereplica                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapenablereplica
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapinit                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapinit
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapmmrtool                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapmmrtool
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapmonitordb                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapmonitordb
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldappromote-replica-mmr                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldappromote-replica-mmr
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapreplicatool                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapreplicatool
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapschema                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapschema
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmldapupdateldif                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmldapupdateldif
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmreplchk                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmreplchk
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmslapadd                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmslapadd
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmslapcat                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmslapcat
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmslapd                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmslapd
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmslapindex                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmslapindex
   Copy ${repoDir}/zm-ldap-utilities/src/libexec/zmstat-ldap                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmstat-ldap

   Copy ${repoDir}/zm-licenses/zimbra/ypl-full.txt                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/YPL.txt
   Copy ${repoDir}/zm-licenses/zimbra/zpl-full.txt                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/ZPL.txt

   Copy ${repoDir}/zm-migration-tools/ReadMe.txt                                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/zmztozmig.txt

   Copy ${repoDir}/zm-mta/cbpolicyd.conf.in                                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/cbpolicyd.conf.in
   Copy ${repoDir}/zm-mta/clamd.conf.in                                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/clamd.conf.in
   Copy ${repoDir}/zm-mta/opendkim-localnets.conf.in                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/opendkim-localnets.conf.in
   Copy ${repoDir}/zm-mta/opendkim.conf.in                                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/opendkim.conf.in
   Copy ${repoDir}/zm-mta/postfix_header_checks.in                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/postfix_header_checks.in
   Copy ${repoDir}/zm-mta/postfix_sasl_smtpd.conf                                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/sasl2/smtpd.conf.in
   Copy ${repoDir}/zm-mta/salocal.cf.in                                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/salocal.cf.in
   Copy ${repoDir}/zm-mta/saslauthd.conf.in                                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/saslauthd.conf.in
   Copy ${repoDir}/zm-mta/zmconfigd/postfix_content_filter.cf                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd/postfix_content_filter.cf
   Copy ${repoDir}/zm-mta/zmconfigd/smtpd_end_of_data_restrictions.cf                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd/smtpd_end_of_data_restrictions.cf
   Copy ${repoDir}/zm-mta/zmconfigd/smtpd_recipient_restrictions.cf                                 ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf
   Copy ${repoDir}/zm-mta/zmconfigd/smtpd_relay_restrictions.cf                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd/smtpd_relay_restrictions.cf
   Copy ${repoDir}/zm-mta/zmconfigd/smtpd_sender_login_maps.cf                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd/smtpd_sender_login_maps.cf
   Copy ${repoDir}/zm-mta/zmconfigd/smtpd_sender_restrictions.cf                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/zmconfigd/smtpd_sender_restrictions.cf

   Cpy2 ${repoDir}/junixsocket/junixsocket-native/build/junixsocket-native-*.nar                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/
   Cpy2 ${repoDir}/junixsocket/junixsocket-native/build/libjunixsocket-native-*.so                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/

   Copy ${repoDir}/zm-bulkprovision-store/build/dist/commons-csv-1.2.jar                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/ext/com_zimbra_bulkprovision/commons-csv-1.2.jar
   Copy ${repoDir}/zm-bulkprovision-store/build/dist/zm-bulkprovision-store*.jar                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/ext/com_zimbra_bulkprovision/com_zimbra_bulkprovision.jar

   Copy ${repoDir}/zm-certificate-manager-store/build/zm-certificate-manager-store*.jar             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/ext/com_zimbra_cert_manager/com_zimbra_cert_manager.jar 


   # Copy SSDB Ephemeral storage extension + dependencies
   Cpy2 ${repoDir}/zm-ssdb-ephemeral-store/build/dist/zm-ssdb-ephemeral-store*.jar                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/ext/com_zimbra_ssdb_ephemeral_store/
   Cpy2 ${repoDir}/zm-zcs-lib/build/dist/jedis-2.9.0.jar                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/ext/com_zimbra_ssdb_ephemeral_store/
   Cpy2 ${repoDir}/zm-zcs-lib/build/dist/commons-pool2-2.4.2.jar                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/ext/com_zimbra_ssdb_ephemeral_store/

   if [ "${buildType}" == "NETWORK" ]
   then
      Copy ${repoDir}/zm-backup-store/docs/backup.txt                                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/backup.txt
      Copy ${repoDir}/zm-backup-store/docs/mailboxMove.txt                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/mailboxMove.txt
      Copy ${repoDir}/zm-backup-store/docs/soapbackup.txt                                              ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/soapbackup.txt
      Copy ${repoDir}/zm-backup-store/docs/xml-meta.txt                                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/xml-meta.txt
      Copy ${repoDir}/zm-backup-store/build/dist/backup-version-init.sql                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/db/backup-version-init.sql

      Copy ${repoDir}/zm-backup-utilities/src/bin/zmbackup                                             ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmbackup
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmbackupabort                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmbackupabort
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmbackupquery                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmbackupquery
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmmboxmove                                           ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmboxmove
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmmboxmovequery                                      ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmmboxmovequery
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmpurgeoldmbox                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmpurgeoldmbox
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmrestore                                            ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmrestore
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmrestoreldap                                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmrestoreldap
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmrestoreoffline                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmrestoreoffline
      Copy ${repoDir}/zm-backup-utilities/src/bin/zmschedulebackup                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmschedulebackup
      Copy ${repoDir}/zm-backup-utilities/src/db/backup_schema.sql                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/db/backup_schema.sql
      Copy ${repoDir}/zm-backup-utilities/src/libexec/zmbackupldap                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmbackupldap
      Copy ${repoDir}/zm-backup-utilities/src/libexec/zmbackupqueryldap                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmbackupqueryldap

      Copy ${repoDir}/zm-convertd-native/conf/convertd.log4j.properties                                ${repoDir}/zm-build/${currentPackage}/opt/zimbra/conf/convertd.log4j.properties
      Copy ${repoDir}/zm-convertd-native/src/bin/zmconvertctl                                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/bin/zmconvertctl
      Copy ${repoDir}/zm-convertd-native/src/libexec/zmconvertdmod                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/zmconvertdmod

      Copy ${repoDir}/zm-hsm/docs/soap-admin.txt                                                       ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/hsm-soap-admin.txt

      Copy ${repoDir}/zm-network-build/rpmconf/Install/Util/modules/postinstall.sh                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/installer/util/modules/postinstall.sh
      Copy ${repoDir}/zm-network-build/rpmconf/Install/postinstall.pm                                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/postinstall.pm
      Copy ${repoDir}/zm-network-build/rpmconf/Install/preinstall.pm                                   ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/preinstall.pm

      Copy ${repoDir}/zm-network-licenses/thirdparty/oracle_jdk_eula.txt                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/oracle_jdk_eula.txt

      Copy ${repoDir}/zm-postfixjournal/build/dist/postjournal                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/postjournal

      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/DE_Rebranding_directions.txt                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/DE_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/ES_Rebranding_directions.txt                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/ES_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/FR_Rebranding_directions.txt                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/FR_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/IT_Rebranding_directions.txt                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/IT_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/JA_Rebranding_directions.txt                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/JA_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/NL_Rebranding_directions.txt                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/NL_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/RU_Rebranding_directions.txt                  ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/RU_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/en_US_Rebranding_directions.txt               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/en_US_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/pt_BR_Rebranding_directions.txt               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/pt_BR_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/zh_CN_Rebranding_directions.txt               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/zh_CN_Rebranding_directions.txt
      Copy ${repoDir}/zm-rebranding-docs/docs/rebranding/zh_HK_Rebranding_directions.txt               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/rebranding/zh_HK_Rebranding_directions.txt

      Copy ${repoDir}/zm-twofactorauth-store/docs/twofactorauth.md                                     ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/twofactorauth.md

      Copy ${repoDir}/zm-vmware-appmonitor/build/dist/libexec/vmware-appmonitor                        ${repoDir}/zm-build/${currentPackage}/opt/zimbra/libexec/vmware-appmonitor
      Copy ${repoDir}/zm-vmware-appmonitor/build/dist/lib/libappmonitorlib.so                          ${repoDir}/zm-build/${currentPackage}/opt/zimbra/lib/libappmonitorlib.so

      Copy ${repoDir}/zm-voice-store/docs/ZimbraVoice-Extension.txt                                    ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/ZimbraVoice-Extension.txt
      Copy ${repoDir}/zm-voice-store/docs/soap-voice-admin.txt                                         ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/soap-voice-admin.txt
      Copy ${repoDir}/zm-voice-store/docs/soap-voice.txt                                               ${repoDir}/zm-build/${currentPackage}/opt/zimbra/docs/soap-voice.txt
   fi

   CreatePackage "${os}"
}

############################################################################
main "$@"


================================================
FILE: instructions/bundling-scripts/zimbra-dnscache.sh
==============================
Download .txt
gitextract_jdedxgo8/

├── .circleci/
│   ├── ENVIRONMENT.txt
│   ├── config.yml
│   ├── jobs/
│   │   └── deploy_ec2/
│   │       ├── deploy.sh
│   │       ├── install.conf.in
│   │       └── upgrade.conf.in
│   └── misc/
│       ├── glean_version.pl
│       └── status_api.sh
├── .gitignore
├── .project
├── RE/
│   ├── MICRO_WIN
│   ├── README.txt
│   └── RELEASE
├── README.md
├── build.pl
├── config.build.in
├── instructions/
│   ├── .gitignore
│   ├── FOSS_package_list.pl
│   ├── FOSS_remote_list.pl
│   ├── FOSS_repo_list.pl
│   ├── FOSS_staging_list.pl
│   └── bundling-scripts/
│       ├── .gitignore
│       ├── utils.sh
│       ├── zcs-bundle.sh
│       ├── zimbra-apache.sh
│       ├── zimbra-core.sh
│       ├── zimbra-dnscache.sh
│       ├── zimbra-imapd.sh
│       ├── zimbra-ldap.sh
│       ├── zimbra-logger.sh
│       ├── zimbra-mta.sh
│       ├── zimbra-proxy.sh
│       ├── zimbra-snmp.sh
│       ├── zimbra-spell.sh
│       └── zimbra-store.sh
├── lib/
│   └── Zimbra/
│       ├── DB/
│       │   └── DB.pm
│       ├── LDAP.pm
│       ├── LocalConfig.pm
│       ├── Mon/
│       │   ├── Logger.pm
│       │   ├── LoggerSchema.pm
│       │   └── Zmstat.pm
│       ├── SMTP.pm
│       ├── SOAP/
│       │   ├── Soap.pm
│       │   ├── Soap11.pm
│       │   ├── Soap12.pm
│       │   ├── XmlDoc.pm
│       │   └── XmlElement.pm
│       ├── Util/
│       │   ├── Common.pm
│       │   ├── LDAP.pm
│       │   └── Timezone.pm
│       └── ZmClient.pm
├── rpmconf/
│   ├── Build/
│   │   ├── checkLicense.pl
│   │   ├── checkService.pl
│   │   ├── create_distribution.dist.sh
│   │   ├── get_plat_tag.sh
│   │   └── zmValidateLdap.pl
│   ├── Conf/
│   │   ├── auditswatchrc
│   │   ├── hotspot_compiler
│   │   ├── logswatchrc
│   │   ├── mibs/
│   │   │   ├── zimbra.mib
│   │   │   └── zimbra_traps.mib
│   │   ├── snmp.conf
│   │   ├── snmpd.conf.in
│   │   ├── swatchrc
│   │   └── zmssl.cnf.in
│   ├── Ctl/
│   │   ├── zimbra.cf.in
│   │   ├── zimbracore.cf
│   │   ├── zimbraldap.cf
│   │   ├── zimbralogger.cf
│   │   ├── zimbramail.cf
│   │   ├── zimbramta.cf
│   │   └── zimbrasnmp.cf
│   ├── Env/
│   │   ├── crontabs/
│   │   │   ├── crontab
│   │   │   ├── crontab.ldap
│   │   │   ├── crontab.logger
│   │   │   ├── crontab.mta
│   │   │   └── crontab.store
│   │   ├── sudoers.d/
│   │   │   ├── 01_zimbra
│   │   │   ├── 02_zimbra-core
│   │   │   ├── 02_zimbra-dnscache.deb
│   │   │   ├── 02_zimbra-dnscache.rpm
│   │   │   ├── 02_zimbra-mta
│   │   │   └── 02_zimbra-store
│   │   ├── zimbra.bash_profile
│   │   ├── zimbra.bashrc
│   │   ├── zimbra.exrc
│   │   ├── zimbra.ldaprc
│   │   ├── zimbra.platform
│   │   └── zimbra.viminfo
│   ├── Install/
│   │   ├── Util/
│   │   │   ├── addUser.sh
│   │   │   ├── globals.sh
│   │   │   ├── modules/
│   │   │   │   ├── getconfig.sh
│   │   │   │   ├── packages.sh
│   │   │   │   └── postinstall.sh
│   │   │   └── utilfunc.sh
│   │   ├── install.sh
│   │   ├── postinstall.pm
│   │   ├── preinstall.pm
│   │   ├── test.pl
│   │   └── zmsetup.pl
│   ├── LicenseTool/
│   │   ├── Zimbra/
│   │   │   ├── Customer.pm
│   │   │   ├── License.pm
│   │   │   ├── LicenseKey.pm
│   │   │   └── LicensingDB.pm
│   │   ├── db/
│   │   │   └── create_license_db.sql
│   │   └── zmlicensetool.pl
│   ├── Patch/
│   │   ├── bin/
│   │   │   └── zmpatch.pl
│   │   ├── conf/
│   │   │   └── zmpatch.xml
│   │   ├── installPatch.sh
│   │   └── libexec/
│   │       ├── zmcurl807-updater.sh
│   │       └── zmopenssl-updater.sh
│   ├── Spec/
│   │   ├── Scripts/
│   │   │   ├── zimbra-core.post
│   │   │   ├── zimbra-core.pre
│   │   │   ├── zimbra-dnscache.post
│   │   │   ├── zimbra-ldap.post
│   │   │   ├── zimbra-logger.post
│   │   │   ├── zimbra-mta.post
│   │   │   ├── zimbra-proxy.post
│   │   │   ├── zimbra-qa.post
│   │   │   ├── zimbra-snmp.post
│   │   │   ├── zimbra-spell.post
│   │   │   ├── zimbra-store.post
│   │   │   └── zimbra-store.pre
│   │   ├── zimbra-apache.deb
│   │   ├── zimbra-apache.spec
│   │   ├── zimbra-core.deb
│   │   ├── zimbra-core.spec
│   │   ├── zimbra-dnscache.deb
│   │   ├── zimbra-dnscache.spec
│   │   ├── zimbra-imapd.deb
│   │   ├── zimbra-imapd.spec
│   │   ├── zimbra-ldap.deb
│   │   ├── zimbra-ldap.spec
│   │   ├── zimbra-logger.deb
│   │   ├── zimbra-logger.spec
│   │   ├── zimbra-mta.deb
│   │   ├── zimbra-mta.spec
│   │   ├── zimbra-proxy.deb
│   │   ├── zimbra-proxy.spec
│   │   ├── zimbra-qa.deb
│   │   ├── zimbra-qa.spec
│   │   ├── zimbra-snmp.deb
│   │   ├── zimbra-snmp.spec
│   │   ├── zimbra-spell.deb
│   │   ├── zimbra-spell.spec
│   │   ├── zimbra-store.deb
│   │   └── zimbra-store.spec
│   └── Upgrade/
│       └── zmupgrade.pm
└── show_git_overrides.sh
Download .txt
SYMBOL INDEX (5 symbols across 1 files)

FILE: rpmconf/LicenseTool/db/create_license_db.sql
  type customer (line 11) | CREATE TABLE customer (
  type fk (line 20) | CREATE TABLE fk (
  type sign_keys (line 30) | CREATE TABLE sign_keys (
  type customer_license (line 41) | CREATE TABLE customer_license (
  type license_details (line 52) | CREATE TABLE license_details (
Condensed preview — 148 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,115K chars).
[
  {
    "path": ".circleci/ENVIRONMENT.txt",
    "chars": 668,
    "preview": "ENV VARIABLES:\n   (used by deploy_ec2@app1_install, deploy_ec2@app1_upgrade):\n      APP1_ADMIN_PASS =  password to set a"
  },
  {
    "path": ".circleci/config.yml",
    "chars": 9543,
    "preview": "\n# vim:expandtab:ts=3\n\nversion: 2\n\n############################################################################\n\nreferen"
  },
  {
    "path": ".circleci/jobs/deploy_ec2/deploy.sh",
    "chars": 10115,
    "preview": "#!/bin/bash\n\nset -euo pipefail\n\nSCRIPT_DIR=$(CDPATH= cd \"$(dirname \"$0\")\" && pwd);\nCIRCLE_DIR=$(dirname \"$(dirname \"$SCR"
  },
  {
    "path": ".circleci/jobs/deploy_ec2/install.conf.in",
    "chars": 2889,
    "preview": "AVDOMAIN=\"template_domainname\"\nAVUSER=\"admin@template_domainname\"\nCREATEADMIN=\"admin@template_domainname\"\nCREATEADMINPAS"
  },
  {
    "path": ".circleci/jobs/deploy_ec2/upgrade.conf.in",
    "chars": 285,
    "preview": "PACKAGE_SERVER=\"repo.zimbra.com\"\nREMOVE=\"no\"\nUPGRADE=\"yes\"\nUSE_ZIMBRA_PACKAGE_SERVER=\"yes\"\nVERSIONUPDATECHECKS=\"TRUE\"\nIN"
  },
  {
    "path": ".circleci/misc/glean_version.pl",
    "chars": 498,
    "preview": "#!/usr/bin/perl\n\nuse version;\n\nif($ENV{CIRCLE_BRANCH} =~ \"^release/([0-9]+[.][0-9]+[.][0-9]+)\")\n{\n   print $1 . \"\\n\";\n}\n"
  },
  {
    "path": ".circleci/misc/status_api.sh",
    "chars": 188,
    "preview": "#!/bin/bash\n\nset -e -o pipefail\n\ncurl -Ls \"https://circleci.com/api/v1.1/project/github/$CIRCLE_PROJECT_USERNAME/$CIRCLE"
  },
  {
    "path": ".gitignore",
    "chars": 87,
    "preview": ".build.last_no_ts\n.build.number\n.idea\nconfig.build\nRE/BUILD\nRE/MAJOR\nRE/MICRO\nRE/MINOR\n"
  },
  {
    "path": ".project",
    "chars": 204,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>ZimbraBuild</name>\n\t<comment></comment>\n\t<projects>\n\t"
  },
  {
    "path": "RE/MICRO_WIN",
    "chars": 5,
    "preview": "1_M1\n"
  },
  {
    "path": "RE/README.txt",
    "chars": 428,
    "preview": "Included:\n\nBinary release:\n\tREADME.txt - this file\n\tinstall.sh - install script\n\tbin/ - binaries used during install\n\tda"
  },
  {
    "path": "RE/RELEASE",
    "chars": 2,
    "preview": "1\n"
  },
  {
    "path": "README.md",
    "chars": 13189,
    "preview": "# zm-build\n\n## Introduction\n\nThis repository contains the build script and supporting files required to create a [FOSS]("
  },
  {
    "path": "build.pl",
    "chars": 36574,
    "preview": "#!/usr/bin/perl\n\nuse strict;\nuse warnings;\n\nuse Config;\nuse Cwd;\nuse Data::Dumper;\nuse File::Basename;\nuse File::Copy;\nu"
  },
  {
    "path": "config.build.in",
    "chars": 615,
    "preview": "# Example config:\n# - please change as appropriate.\n# - command line overrides the config.\n\nBUILD_RELEASE           = JU"
  },
  {
    "path": "instructions/.gitignore",
    "chars": 13,
    "preview": "NETWORK_*.pl\n"
  },
  {
    "path": "instructions/FOSS_package_list.pl",
    "chars": 225,
    "preview": "@ENTRIES = (\n   \"zimbra-core\",\n   \"zimbra-ldap\",\n   \"zimbra-logger\",\n   \"zimbra-mta\",\n   \"zimbra-dnscache\",\n   \"zimbra-s"
  },
  {
    "path": "instructions/FOSS_remote_list.pl",
    "chars": 150,
    "preview": "@ENTRIES = (\n   \"gh-zm\" => { 'url-prefix' => \"https://github.com/Zimbra\", },\n   \"gh-ks\" => { 'url-prefix' => \"https://gi"
  },
  {
    "path": "instructions/FOSS_repo_list.pl",
    "chars": 3341,
    "preview": "@ENTRIES = (\n   { name => \"ant-1.7.0-ziputil-patched\",            },\n   { name => \"ant-tar-patched\",                    "
  },
  {
    "path": "instructions/FOSS_staging_list.pl",
    "chars": 14040,
    "preview": "@ENTRIES = (\n   {\n      \"dir\"             => \"zm-mailbox\",\n      \"ant_targets\"     => [\"pkg-after-plough-through-tests\"]"
  },
  {
    "path": "instructions/bundling-scripts/.gitignore",
    "chars": 39,
    "preview": "zimbra-archiving.sh\nzimbra-convertd.sh\n"
  },
  {
    "path": "instructions/bundling-scripts/utils.sh",
    "chars": 1053,
    "preview": "#!/bin/bash\n\nCopy()\n{\n   if [ $# -ne 2 ]\n   then\n      echo \"Usage: Copy <file1> <file2>\" 1>&2\n      exit 1;\n   fi\n\n   l"
  },
  {
    "path": "instructions/bundling-scripts/zcs-bundle.sh",
    "chars": 5576,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-apache.sh",
    "chars": 3355,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-core.sh",
    "chars": 93441,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-dnscache.sh",
    "chars": 4056,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-imapd.sh",
    "chars": 4029,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2017 Synacor, Inc.\n#"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-ldap.sh",
    "chars": 4917,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-logger.sh",
    "chars": 3383,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-mta.sh",
    "chars": 5770,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-proxy.sh",
    "chars": 4089,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-snmp.sh",
    "chars": 5170,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-spell.sh",
    "chars": 3412,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "instructions/bundling-scripts/zimbra-store.sh",
    "chars": 24718,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2011, 20"
  },
  {
    "path": "lib/Zimbra/DB/DB.pm",
    "chars": 2447,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2007, 2009, 2010, 2013, 2"
  },
  {
    "path": "lib/Zimbra/LDAP.pm",
    "chars": 6996,
    "preview": "package Zimbra::LDAP;\n\nuse strict;\nuse warnings;\n\nuse Zimbra::LocalConfig;\nuse Net::LDAP;\n\nmy $ERROR;\nmy $TLSVERIFY = \"r"
  },
  {
    "path": "lib/Zimbra/LocalConfig.pm",
    "chars": 2188,
    "preview": "package Zimbra::LocalConfig;\n\nuse strict;\nuse warnings;\n\nuse XML::Simple;\n\nmy $ERROR;\n\n=head1 NAME\n\nZimbra::LocalConfig "
  },
  {
    "path": "lib/Zimbra/Mon/Logger.pm",
    "chars": 2834,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2004, 2005, 2006, 2007, 2009, 2"
  },
  {
    "path": "lib/Zimbra/Mon/LoggerSchema.pm",
    "chars": 7558,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 2013, 2014, 2016 Sy"
  },
  {
    "path": "lib/Zimbra/Mon/Zmstat.pm",
    "chars": 7606,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2007, 2008, 2009, 2010, 2013, 2"
  },
  {
    "path": "lib/Zimbra/SMTP.pm",
    "chars": 4095,
    "preview": "package Zimbra::SMTP;\n\nuse strict;\nuse warnings;\n\nuse Zimbra::LDAP;\nuse Net::SMTP;\nuse Net::DNS;\n\nmy $ERROR;\n\n=head1 NAM"
  },
  {
    "path": "lib/Zimbra/SOAP/Soap.pm",
    "chars": 5869,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2004, 2005, 2007, 2009, 2010, 2"
  },
  {
    "path": "lib/Zimbra/SOAP/Soap11.pm",
    "chars": 2864,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2004, 2005, 2007, 2009, 2010, 2"
  },
  {
    "path": "lib/Zimbra/SOAP/Soap12.pm",
    "chars": 2871,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2004, 2005, 2007, 2009, 2010, 2"
  },
  {
    "path": "lib/Zimbra/SOAP/XmlDoc.pm",
    "chars": 2658,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2004, 2005, 2007, 2009, 2010, 2"
  },
  {
    "path": "lib/Zimbra/SOAP/XmlElement.pm",
    "chars": 8457,
    "preview": "# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2004, 2005, 2007, 2009, 2010, 2"
  },
  {
    "path": "lib/Zimbra/Util/Common.pm",
    "chars": 1348,
    "preview": "#!/usr/bin/perl\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2006, 2007, 200"
  },
  {
    "path": "lib/Zimbra/Util/LDAP.pm",
    "chars": 5480,
    "preview": "#!/usr/bin/perl\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2009, 2010, 201"
  },
  {
    "path": "lib/Zimbra/Util/Timezone.pm",
    "chars": 1723,
    "preview": "package Zimbra::Util::Timezone;\nuse strict;\nour %TIMEZONES;\nour $_PARSED=0;\n\nsub new {\n  my $class = shift;\n  my $tzname"
  },
  {
    "path": "lib/Zimbra/ZmClient.pm",
    "chars": 3985,
    "preview": "#!/usr/bin/perl\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2010, 2012, 201"
  },
  {
    "path": "rpmconf/Build/checkLicense.pl",
    "chars": 5450,
    "preview": "#!/usr/bin/perl\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2014, 2015, 2016"
  },
  {
    "path": "rpmconf/Build/checkService.pl",
    "chars": 5109,
    "preview": "#!/usr/bin/perl\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2016 Synacor, In"
  },
  {
    "path": "rpmconf/Build/create_distribution.dist.sh",
    "chars": 2043,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Build/get_plat_tag.sh",
    "chars": 6449,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 20"
  },
  {
    "path": "rpmconf/Build/zmValidateLdap.pl",
    "chars": 6429,
    "preview": "#!/usr/bin/perl\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2014, 2015, 2016"
  },
  {
    "path": "rpmconf/Conf/auditswatchrc",
    "chars": 1799,
    "preview": "\n# Failures for an ip:account pair\nwatchfor /\\[.*\\w+=(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3});.*\\]\\s+.*cmd=.*Auth; account=("
  },
  {
    "path": "rpmconf/Conf/hotspot_compiler",
    "chars": 196,
    "preview": "exclude com/zimbra/cs/session/SessionMap.putAndPrune\nexclude com/zimbra/cs/mailbox/MailItem.delete\nexclude org/apache/xe"
  },
  {
    "path": "rpmconf/Conf/logswatchrc",
    "chars": 89,
    "preview": "ignore /DEBUG/\nwatchfor /.*/\n\tpipe /opt/zimbra/libexec/zmlogger,MESSAGE=$_\\n,KEEP_OPEN=1\n"
  },
  {
    "path": "rpmconf/Conf/mibs/zimbra.mib",
    "chars": 535,
    "preview": "ZIMBRA-MIB DEFINITIONS ::= BEGIN\n\tIMPORTS\n\t\tenterprises\n\t\tFROM SNMPv2-SMI;\n\nzimbra OBJECT IDENTIFIER ::= { enterprises 6"
  },
  {
    "path": "rpmconf/Conf/mibs/zimbra_traps.mib",
    "chars": 274,
    "preview": "ZIMBRA-TRAP-MIB DEFINITIONS ::= BEGIN\n        IMPORTS zimbra FROM ZIMBRA-MIB;\n\nzmtraps OBJECT IDENTIFIER ::= { zimbra 0 "
  },
  {
    "path": "rpmconf/Conf/snmp.conf",
    "chars": 2241,
    "preview": "###########################################################################\n#\n# snmp.conf\n#\n#   - created by the snmpcon"
  },
  {
    "path": "rpmconf/Conf/snmpd.conf.in",
    "chars": 793,
    "preview": "###########################################################################\n#\n# snmpd.conf\n#\n#   - created by the snmpco"
  },
  {
    "path": "rpmconf/Conf/swatchrc",
    "chars": 2278,
    "preview": "perlcode 0 my %notifications=();\nperlcode 0 $notifications{smtp}=\"@@DOSMTPNOTIFICATIONS@@\";\nperlcode 0 $notifications{sn"
  },
  {
    "path": "rpmconf/Conf/zmssl.cnf.in",
    "chars": 7843,
    "preview": "#\n# OpenSSL example configuration file.\n# This is mostly being used for generation of certificate requests.\n#\n\n# This de"
  },
  {
    "path": "rpmconf/Ctl/zimbra.cf.in",
    "chars": 1125,
    "preview": "# Order is important.\n#\n# APPLICATION name executable \"args\" mode \"label\"\n#\n# mode = \"normal\"\n#\n# SERVICE name \"label\" a"
  },
  {
    "path": "rpmconf/Ctl/zimbracore.cf",
    "chars": 289,
    "preview": "APPLICATION mysql test_server \"9999\" normal \"mysql server\"\n\nCONTROL_SYNTAX zimbrasyntax mysql_start \"/opt/zimbra/bin/mys"
  },
  {
    "path": "rpmconf/Ctl/zimbraldap.cf",
    "chars": 301,
    "preview": "APPLICATION ldap test_server \"9999\" normal \"ldap server\"\n\nSERVICE ldap \"Zimbra Directory\" ldap \n\nCONTROL_SYNTAX zimbrasy"
  },
  {
    "path": "rpmconf/Ctl/zimbralogger.cf",
    "chars": 689,
    "preview": "SERVICE logger \"Zimbra Mail Console\" logmysql,logswatch\n\nAPPLICATION logmysql test_server \"9999\" normal \"mysql server\"\n\n"
  },
  {
    "path": "rpmconf/Ctl/zimbramail.cf",
    "chars": 690,
    "preview": "SERVICE mailbox \"Zimbra Mail Console\" tomcat,mysql\n\nAPPLICATION tomcat test_server \"9999\" normal \"tomcat server\"\n\nCONTRO"
  },
  {
    "path": "rpmconf/Ctl/zimbramta.cf",
    "chars": 1638,
    "preview": "SERVICE mta \"Zimbra MTA\" postfix,saslauthd,mtaconfig\n\nAPPLICATION postfix test_server \"9999\" normal \"Postfix mta\"\nCONTRO"
  },
  {
    "path": "rpmconf/Ctl/zimbrasnmp.cf",
    "chars": 348,
    "preview": "# SNMP COMMANDS HERE\nAPPLICATION swatch test_server \"9999\" normal \"SNMP monitor\"\nSERVICE snmp \"Zimbra MTA\" swatch \n\nCONT"
  },
  {
    "path": "rpmconf/Env/crontabs/crontab",
    "chars": 930,
    "preview": "# ZIMBRASTART -- DO NOT EDIT ANYTHING BETWEEN THIS LINE AND ZIMBRAEND\nSHELL=/bin/bash\n#\n# Log pruning\n#\n30 2 * * * find "
  },
  {
    "path": "rpmconf/Env/crontabs/crontab.ldap",
    "chars": 115,
    "preview": "#\n# crontab.ldap\n#\n# Monitor MDB database size\n*/30 * * * * /opt/zimbra/libexec/zmldapmonitordb > /dev/null 2>&1\n#\n"
  },
  {
    "path": "rpmconf/Env/crontabs/crontab.logger",
    "chars": 287,
    "preview": "#\n# crontab.logger\n#\n# process logs\n#\n00,10,20,30,40,50 * * * * /opt/zimbra/libexec/zmlogprocess > /tmp/logprocess.out 2"
  },
  {
    "path": "rpmconf/Env/crontabs/crontab.mta",
    "chars": 921,
    "preview": "#\n# crontab.mta\n#\n#\n# Queue logging\n#\n0,10,20,30,40,50 * * * * /opt/zimbra/libexec/zmqueuelog\n#\n# Spam training\n#\n0 22 *"
  },
  {
    "path": "rpmconf/Env/crontabs/crontab.store",
    "chars": 1219,
    "preview": "#\n# crontab.store\n#\n# Log pruning\n#\n30 2 * * * find /opt/zimbra/mailboxd/logs/ -type f -name \\*log\\* -mtime +8 -exec rm "
  },
  {
    "path": "rpmconf/Env/sudoers.d/01_zimbra",
    "chars": 28,
    "preview": "Defaults:zimbra !requiretty\n"
  },
  {
    "path": "rpmconf/Env/sudoers.d/02_zimbra-core",
    "chars": 53,
    "preview": "%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmstat-fd *\n"
  },
  {
    "path": "rpmconf/Env/sudoers.d/02_zimbra-dnscache.deb",
    "chars": 91,
    "preview": "%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmunbound\n%zimbra ALL=NOPASSWD:/sbin/resolvconf *\n"
  },
  {
    "path": "rpmconf/Env/sudoers.d/02_zimbra-dnscache.rpm",
    "chars": 150,
    "preview": "%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmunbound\n%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmdnscachealign *\n%zimbra AL"
  },
  {
    "path": "rpmconf/Env/sudoers.d/02_zimbra-mta",
    "chars": 482,
    "preview": "%zimbra ALL=NOPASSWD:/opt/zimbra/common/sbin/postfix\n%zimbra ALL=NOPASSWD:/opt/zimbra/common/sbin/postalias\n%zimbra ALL="
  },
  {
    "path": "rpmconf/Env/sudoers.d/02_zimbra-store",
    "chars": 55,
    "preview": "%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmmailboxdmgr\n"
  },
  {
    "path": "rpmconf/Env/zimbra.bash_profile",
    "chars": 350,
    "preview": "# .bash_profile\numask 0027\n\n# Get the aliases and functions\nif [ -f ~/.bashrc ]; then\n        . ~/.bashrc\nfi\n\n# User spe"
  },
  {
    "path": "rpmconf/Env/zimbra.bashrc",
    "chars": 2961,
    "preview": "# .bashrc\n\n# User specific aliases and functions\n\nalias rm='rm -i'\nalias cp='cp -i'\nalias mv='mv -i'\nalias h='history 40"
  },
  {
    "path": "rpmconf/Env/zimbra.exrc",
    "chars": 62,
    "preview": "set tabstop=4\nset shiftwidth=4\nset ai\nset nohlsearch\nset exrc\n"
  },
  {
    "path": "rpmconf/Env/zimbra.ldaprc",
    "chars": 52,
    "preview": "TLS_CACERTDIR /opt/zimbra/conf/ca\nTLS_REQCERT never\n"
  },
  {
    "path": "rpmconf/Env/zimbra.platform",
    "chars": 19,
    "preview": "@@BUILD_PLATFORM@@\n"
  },
  {
    "path": "rpmconf/Env/zimbra.viminfo",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "rpmconf/Install/Util/addUser.sh",
    "chars": 2662,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2007, 2009, 2"
  },
  {
    "path": "rpmconf/Install/Util/globals.sh",
    "chars": 3330,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Install/Util/modules/getconfig.sh",
    "chars": 4758,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2007, 2010, 2"
  },
  {
    "path": "rpmconf/Install/Util/modules/packages.sh",
    "chars": 9245,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 20"
  },
  {
    "path": "rpmconf/Install/Util/modules/postinstall.sh",
    "chars": 6016,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2007, 2008, 2"
  },
  {
    "path": "rpmconf/Install/Util/utilfunc.sh",
    "chars": 100768,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 20"
  },
  {
    "path": "rpmconf/Install/install.sh",
    "chars": 9033,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 20"
  },
  {
    "path": "rpmconf/Install/postinstall.pm",
    "chars": 2362,
    "preview": "#!/usr/bin/perl\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 200"
  },
  {
    "path": "rpmconf/Install/preinstall.pm",
    "chars": 864,
    "preview": "#!/usr/bin/perl\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2006, 2007, 200"
  },
  {
    "path": "rpmconf/Install/test.pl",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "rpmconf/Install/zmsetup.pl",
    "chars": 261948,
    "preview": "#!/usr/bin/perl\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007"
  },
  {
    "path": "rpmconf/LicenseTool/Zimbra/Customer.pm",
    "chars": 453,
    "preview": "package Zimbra::Customer;\n\nsub new {\n\tmy $class = shift;\n\tmy $attrs = shift;\n\tmy $self = {};\n\tbless $self, $class;\n\tif ("
  },
  {
    "path": "rpmconf/LicenseTool/Zimbra/License.pm",
    "chars": 1975,
    "preview": "package Zimbra::License;\n\nuse strict;\n\nsub new {\n\tmy $class = shift;\n\tmy $attrs = shift;\n\tmy $self = {};\n\tbless $self, $"
  },
  {
    "path": "rpmconf/LicenseTool/Zimbra/LicenseKey.pm",
    "chars": 5165,
    "preview": "package Zimbra::LicenseKey;\n\n# id                      INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n# pubkey       "
  },
  {
    "path": "rpmconf/LicenseTool/Zimbra/LicensingDB.pm",
    "chars": 5274,
    "preview": "package Zimbra::LicensingDB;\n\nuse strict;\nuse DBI;\nuse Time::Local;\n\n#my $data_source=\"dbi:mysql:database=license;mysql_"
  },
  {
    "path": "rpmconf/LicenseTool/db/create_license_db.sql",
    "chars": 1352,
    "preview": "DROP DATABASE IF EXISTS license;\nCREATE DATABASE license;\n\nUSE license;\n\nGRANT ALL ON license.* to 'license' IDENTIFIED "
  },
  {
    "path": "rpmconf/LicenseTool/zmlicensetool.pl",
    "chars": 9395,
    "preview": "#!/usr/bin/perl\n\nuse strict;\nuse Zimbra::LicensingDB;\nuse Zimbra::License;\nuse Zimbra::LicenseKey;\nuse Zimbra::Customer;"
  },
  {
    "path": "rpmconf/Patch/bin/zmpatch.pl",
    "chars": 19041,
    "preview": "#!/usr/bin/perl -w\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2010, 2011, "
  },
  {
    "path": "rpmconf/Patch/conf/zmpatch.xml",
    "chars": 53717,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n * ***** BEGIN LICENSE BLOCK *****\n * Zimbra Collaboration Suite Server\n * C"
  },
  {
    "path": "rpmconf/Patch/installPatch.sh",
    "chars": 1078,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2010, 2012, 2013, 2"
  },
  {
    "path": "rpmconf/Patch/libexec/zmcurl807-updater.sh",
    "chars": 2640,
    "preview": "#!/bin/bash\n\nif [ x`whoami` != xroot ]; then\n  echo Error: must be run as root user\n  exit 1\nfi\n\nVERSION=`su - zimbra -c"
  },
  {
    "path": "rpmconf/Patch/libexec/zmopenssl-updater.sh",
    "chars": 3040,
    "preview": "#!/bin/bash\n\nif [ x`whoami` != xroot ]; then\n  echo Error: must be run as root user\n  exit 1\nfi\n\nSSL[0]='1.0.1d'\nSSL[1]="
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-core.post",
    "chars": 4669,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-core.pre",
    "chars": 2246,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 20"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-dnscache.post",
    "chars": 1388,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2013, 2014, 2015, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-ldap.post",
    "chars": 1362,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 20"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-logger.post",
    "chars": 877,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-mta.post",
    "chars": 3446,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-proxy.post",
    "chars": 1400,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2007, 2008, 2009, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-qa.post",
    "chars": 860,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-snmp.post",
    "chars": 1126,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-spell.post",
    "chars": 856,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-store.post",
    "chars": 2204,
    "preview": "#!/bin/bash\n# \n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 2"
  },
  {
    "path": "rpmconf/Spec/Scripts/zimbra-store.pre",
    "chars": 1536,
    "preview": "#!/bin/bash\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005, 2006, 2007, 20"
  },
  {
    "path": "rpmconf/Spec/zimbra-apache.deb",
    "chars": 214,
    "preview": "Package: zimbra-apache\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: "
  },
  {
    "path": "rpmconf/Spec/zimbra-apache.spec",
    "chars": 572,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra Apache HTTPD server\nName: zimbra-apache\nVersion: @@VERSION@@\nRelease: @@R"
  },
  {
    "path": "rpmconf/Spec/zimbra-core.deb",
    "chars": 213,
    "preview": "Package: zimbra-core\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: ma"
  },
  {
    "path": "rpmconf/Spec/zimbra-core.spec",
    "chars": 556,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra Core\nName: zimbra-core\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicense:"
  },
  {
    "path": "rpmconf/Spec/zimbra-dnscache.deb",
    "chars": 256,
    "preview": "Package: zimbra-dnscache\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: Zimbra Packaging Service"
  },
  {
    "path": "rpmconf/Spec/zimbra-dnscache.spec",
    "chars": 572,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra DNS cache\nName: zimbra-dnscache\nVersion: @@VERSION@@\nRelease: @@RELEASE@@"
  },
  {
    "path": "rpmconf/Spec/zimbra-imapd.deb",
    "chars": 187,
    "preview": "Package: zimbra-imapd\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: M"
  },
  {
    "path": "rpmconf/Spec/zimbra-imapd.spec",
    "chars": 627,
    "preview": "#\n# spec file for zimbra-imapd.rpm\n#\nSummary: Zimbra IMAP\nName: zimbra-imapd\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nL"
  },
  {
    "path": "rpmconf/Spec/zimbra-ldap.deb",
    "chars": 210,
    "preview": "Package: zimbra-ldap\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: Ma"
  },
  {
    "path": "rpmconf/Spec/zimbra-ldap.spec",
    "chars": 554,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra LDAP\nName: zimbra-ldap\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicense:"
  },
  {
    "path": "rpmconf/Spec/zimbra-logger.deb",
    "chars": 188,
    "preview": "Package: zimbra-logger\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: "
  },
  {
    "path": "rpmconf/Spec/zimbra-logger.spec",
    "chars": 537,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra Mail\nName: zimbra-logger\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicens"
  },
  {
    "path": "rpmconf/Spec/zimbra-mta.deb",
    "chars": 302,
    "preview": "Package: zimbra-mta\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: Mai"
  },
  {
    "path": "rpmconf/Spec/zimbra-mta.spec",
    "chars": 577,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra MTA\nName: zimbra-mta\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicense: V"
  },
  {
    "path": "rpmconf/Spec/zimbra-proxy.deb",
    "chars": 230,
    "preview": "Package: zimbra-proxy\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: M"
  },
  {
    "path": "rpmconf/Spec/zimbra-proxy.spec",
    "chars": 580,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra Proxy\nName: zimbra-proxy\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicens"
  },
  {
    "path": "rpmconf/Spec/zimbra-qa.deb",
    "chars": 184,
    "preview": "Package: zimbra-qa\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: Mail"
  },
  {
    "path": "rpmconf/Spec/zimbra-qa.spec",
    "chars": 433,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra QA Tests\nName: zimbra-qatest\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLi"
  },
  {
    "path": "rpmconf/Spec/zimbra-snmp.deb",
    "chars": 210,
    "preview": "Package: zimbra-snmp\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: Ma"
  },
  {
    "path": "rpmconf/Spec/zimbra-snmp.spec",
    "chars": 553,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra SNMP\nName: zimbra-snmp\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicense:"
  },
  {
    "path": "rpmconf/Spec/zimbra-spell.deb",
    "chars": 212,
    "preview": "Package: zimbra-spell\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: M"
  },
  {
    "path": "rpmconf/Spec/zimbra-spell.spec",
    "chars": 647,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra Spell\nName: zimbra-spell\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicens"
  },
  {
    "path": "rpmconf/Spec/zimbra-store.deb",
    "chars": 294,
    "preview": "Package: zimbra-store\nVersion: @@VERSION@@\nDescription: Best email money can buy\nMaintainer: build@zimbra.com\nSection: M"
  },
  {
    "path": "rpmconf/Spec/zimbra-store.spec",
    "chars": 732,
    "preview": "#\n# spec file for zimbra.rpm\n#\nSummary: Zimbra Mail\nName: zimbra-store\nVersion: @@VERSION@@\nRelease: @@RELEASE@@\nLicense"
  },
  {
    "path": "rpmconf/Upgrade/zmupgrade.pm",
    "chars": 131838,
    "preview": "#!/usr/bin/perl\n# vim: ts=2\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Zimbra Collaboration Suite Server\n# Copyright (C) 2005"
  },
  {
    "path": "show_git_overrides.sh",
    "chars": 2902,
    "preview": "#!/bin/bash\n\nif [ $# -lt 1 ]\nthen\n   echo \"Usage: $0 <cfg|cmd> [remote-branch]\"\n   exit 1\nfi\n\nCDPATH=\nSCRIPT_DIR=\"$(cd \""
  }
]

About this extraction

This page contains the full source code of the Zimbra/zm-build GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 148 files (1.0 MB), approximately 313.8k tokens, and a symbol index with 5 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!