From 6651efc972591b76552c0284b2f80d6414dea8e6 Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Wed, 23 Aug 2023 16:13:27 +0200 Subject: [PATCH] Add zmbuilder Docker image --- zmbuilder/Dockerfile | 54 ++++++++++ zmbuilder/README.md | 13 +++ zmbuilder/bin/zmbuilder | 85 +++++++++++++++ zmbuilder/patches/get_plat_tag_alma.patch | 15 +++ zmbuilder/thirdparty.txt | 125 ++++++++++++++++++++++ zmbuilder/zmbuilder.repo | 6 ++ 6 files changed, 298 insertions(+) create mode 100644 zmbuilder/Dockerfile create mode 100644 zmbuilder/README.md create mode 100755 zmbuilder/bin/zmbuilder create mode 100644 zmbuilder/patches/get_plat_tag_alma.patch create mode 100644 zmbuilder/thirdparty.txt create mode 100644 zmbuilder/zmbuilder.repo diff --git a/zmbuilder/Dockerfile b/zmbuilder/Dockerfile new file mode 100644 index 0000000..de4cbee --- /dev/null +++ b/zmbuilder/Dockerfile @@ -0,0 +1,54 @@ +FROM almalinux:8 +MAINTAINER Daniel Berteaud + +ARG ZM_VERSION=9.0.0 \ + ZM_PATCH=35 + +ENV ZM_VERSION=${ZM_VERSION} \ + ZM_PATCH=${ZM_PATCH} + +RUN set -x &&\ + dnf group install -y "Development Tools" &&\ + dnf config-manager --set-enabled -y powertools &&\ + dnf module enable -y javapackages-tools &&\ + dnf install -y java-1.8.0-openjdk \ + gcc-c++ \ + ant-junit \ + ruby \ + git \ + maven \ + perl \ + cpan \ + wget \ + curl \ + vim \ + rpm-build \ + createrepo \ + rsync \ + patch\ + make \ + cmake \ + sudo \ + expat-devel \ + pcre2-devel \ + libaio-devel \ + ncurses-devel \ + curl-devel \ + pam-devel \ + bison \ + file-devel \ + perl-HTML-Tagset \ + perl-Module-Install \ + libidn-devel \ + &&\ + dnf clean all &&\ + mkdir /work &&\ + chmod 777 /work &&\ + mkdir /patches + +COPY bin/ /usr/local/bin/ +COPY patches /patches +#COPY zmbuilder.repo /etc/yum.repos.d/zmbuilder.repo + +WORKDIR /work +CMD zmbuilder diff --git a/zmbuilder/README.md b/zmbuilder/README.md new file mode 100644 index 0000000..60d2d5d --- /dev/null +++ b/zmbuilder/README.md @@ -0,0 +1,13 @@ +# Zimbra Builder + +This is a Docker image able to build Zimbra for RHEL8. + +To use it you first have to build the image +``` +docker build -t zmbuild:latest . +``` + +Then you can run the build +``` +docker run --rm -it zmbuild:latest -v ./output:/zimbra +``` diff --git a/zmbuilder/bin/zmbuilder b/zmbuilder/bin/zmbuilder new file mode 100755 index 0000000..be37c2e --- /dev/null +++ b/zmbuilder/bin/zmbuilder @@ -0,0 +1,85 @@ +#!/bin/sh + +set -euxo pipefail + + +# Helper functions +get_repo_branch() { + REPO=$1 + local TAG="" + # Loop through the different patches. Eg, first check 9.0.0.p33, then 9.0.0.p32, 9.0.0.p31 etc. until we find an existing tag + if [[ "${ZM_VERSION}" =~ ^9 ]]; then + for PATCH in $(seq ${ZM_PATCH} -1 1); do + if git ls-remote --exit-code --tags ${REPO} ${ZM_VERSION}.p${PATCH} 2>&1 > /dev/null; then + TAG=${ZM_VERSION}.p${PATCH} + break + fi + done + if [ "${TAG}" == "" ]; then + TAG=${ZM_VERSION} + fi + elif [[ "${ZM_VERSION}" =~ ^10 ]]; then + MINOR=$(echo ${ZM_VERSION} | sed -E 's/.*\.([0-9]+)$/\1/') + MAJOR=$(echo ${ZM_VERSION} | sed -E 's/([0-9]+(\.[0-9]+)*)\.([0-9]+)$/\1/') + for PATCH in $(seq ${MINOR} -1 1); do + if git ls-remote --exit-code --tags ${REPO} ${MAJOR}.${PATCH} 2>&1 > /dev/null; then + TAG=${MAJOR}.${PATCH} + break + fi + done + if [ "${TAG}" == "" ]; then + TAG=${MAJOR}.0 + fi + fi + + echo ${TAG} +} + + + +echo Creating needed directories +mkdir -p /zimbra/tgz/${ZM_VERSION}/p${ZM_PATCH} +mkdir -p /zimbra/repo/${ZM_VERSION}/el8/{SRPMS,x86_64,noarch} + +cd /work + +echo Identify the latest tag for zm-build +BRANCH=$(get_repo_branch "https://github.com/Zimbra/zm-build.git") +git clone --depth=1 -b ${BRANCH} https://github.com/Zimbra/zm-build.git +cd zm-build + +echo Patching for AlmaLinux support +patch rpmconf/Build/get_plat_tag.sh /patches/get_plat_tag_alma.patch + +echo Running Zimbra build +DATE=$(date +%Y%m%d) +if [[ "${ZM_VERSION}" =~ ^9 ]]; then + ZM_NAME=KEPLER + TAG_TO_TRY=${ZM_VERSION}.p${ZM_PATCH} + for TAG in $(seq $((${ZM_PATCH}-1)) -1 1); do + TAG_TO_TRY=${TAG_TO_TRY},${ZM_VERSION}.p${TAG} + done + TAG_TO_TRY=${TAG_TO_TRY},${ZM_VERSION} +elif [[ "${ZM_VERSION}" =~ ^10 ]]; then + ZM_NAME=DAFFODIL + MINOR=$(echo ${ZM_VERSION} | sed -E 's/.*\.([0-9]+)$/\1/') + MAJOR=$(echo ${ZM_VERSION} | sed -E 's/([0-9]+(\.[0-9]+)*)\.([0-9]+)$/\1/') + TAG_TO_TRY=${ZM_VERSION} + for TAG in $(seq $((${MINOR}-1)) -1 1); do + TAG_TO_TRY=${TAG_TO_TRY},${MAJOR}.${TAG} + done + TAG_TO_TRY=${TAG_TO_TRY},10.0.0-GA,10.0.0 +fi + +ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options \ + -DskipTests=true \ + --git-default-tag=${TAG_TO_TRY} \ + --build-release-no=${ZM_VERSION} --build-type=FOSS --build-release=${ZM_NAME} \ + --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com \ + --build-no=${DATE} --no-interactive 2>&1 | tee -a build.log + +echo Copy repo dir +rsync -rtvP --del /work/.staging/RHEL8_64*/zm-packages/bundle/r8/ /zimbra/repo/${ZM_VERSION}/el8/x86_64/ + +echo Copy install tarball +mv /work/BUILDS/RHEL8_64*/zcs-${ZM_VERSION}*.tgz /zimbra/tgz/${ZM_VERSION}/p${ZM_PATCH}/ diff --git a/zmbuilder/patches/get_plat_tag_alma.patch b/zmbuilder/patches/get_plat_tag_alma.patch new file mode 100644 index 0000000..61c7182 --- /dev/null +++ b/zmbuilder/patches/get_plat_tag_alma.patch @@ -0,0 +1,15 @@ +--- zm-build/rpmconf/Build/get_plat_tag.sh 2022-01-17 09:04:54.494738132 +0100 ++++ get_plat_tag.sh 2022-02-01 20:58:34.849899069 +0100 +@@ -79,6 +79,12 @@ + exit 0 + fi + ++ grep "AlmaLinux release 8" /etc/redhat-release > /dev/null 2>&1 ++ if [ $? = 0 ]; then ++ echo "RHEL8${i}" ++ exit 0 ++ fi ++ + grep "Fedora release 23" /etc/redhat-release >/dev/null 2>&1 + if [ $? = 0 ]; then + echo "F23${i}" diff --git a/zmbuilder/thirdparty.txt b/zmbuilder/thirdparty.txt new file mode 100644 index 0000000..f2bae98 --- /dev/null +++ b/zmbuilder/thirdparty.txt @@ -0,0 +1,125 @@ +altermine: pb reversed patch +amavis-logwatch : OK +amavisd: OK +apr : OK +apr-util : OK +aspell : pb - dans version +aspell-ar : Nécessite aspell +aspell-ca : Nécessite aspell +aspell-da : Nécessite aspell +aspell-de : Nécessite aspell +aspell-en : Nécessite aspell +aspell-es : Nécessite aspell +aspell-fr : Nécessite aspell +aspell-hi : Nécessite aspell +aspell-hu : Nécessite aspell +aspell-it : Nécessite aspell +aspell-nl : Nécessite aspell +aspell-pl : Nécessite aspell +aspell-pt-br : Nécessite aspell +aspell-ru : Nécessite aspell +aspell-sv : Nécessite aspell +aspell-zimbra : Nécessite aspell-en +bdb : le lien de DL doit être modifié en https://ftp.tw.freebsd.org/distfiles/bdb/db-5.2.42.tar.gz +clamav : nécessite zimbra-libxml2-devel et zimbra-libmilter-devel +clamav-db : pb téléchargement main.cvd +cluebringer : OK +curl : nécessite zimbra-heimdal-devel +cyrus-sasl : nécessite zimbra-heimdal-devel, zimbra-curl-devel et zimbra-libxml2-devel +freetype : le lien de téléchargement des sources répond en 404 +heimdal : le lien de téléchargement des sources répond en 404 +httpd : OK +jetty-distribution : OK +libart : OK +libbsd : error: Empty %files file /work/packages/thirdparty/libbsd/build/RHEL8_64/zimbra-libbsd/rpm/BUILD/libbsd-0.7.0/debugsourcefiles.list +libevent : OK +libltdl : OK +libmilter : OK +libpng : OK +libsodium : OK +libxml2 : OK +mariadb : *** ERROR: ambiguous python shebang in /opt/zimbra/common/bin/myrocks_hotbackup: #!/usr/bin/env python. Change it to python3 (or python2) explicitly. +maven : nécessite zimbra-openjdk +memcached : nécessite zimbra-libevent-devel +net-snmp : le lien http://iweb.dl.sourceforge.net/project/net-snmp/net-snmp/5.8/net-snmp-5.8.tar.gz n'est plus valide +nginx : nécessite zimbra-cyrus-sasl-devel +opendkim : nécessite zimbra-libbsd-devel, zimbra-libmilter-devel, zimbra-openldap-devel et zimbra-cyrus-sasl-devel +openjdk : OK +openjdk-cacerts : pas de getsrc (normal), sinon OK +openldap : zimbra-cyrus-sasl-devel et zimbra-libltdl-devel +openssl : OK +perl-archive-zip : nécessite zimbra-perl-compress-raw-zlib, OK +perl-berkeleydb : nécessite bdb-devel, OK +perl-bit-vector : nécessite zimbra-perl-carp-clan +zimbra-perl-cache-fastmmap : OK +perl-canary-stability : OK +perl-carp-clan : les tests échouent +perl-class-inspector : can't locate inc::Module::Install::DSL +perl-compress-raw-bzip2 : can't locate private::MakeUtil +perl-compress-raw-zlib : OK +perl-config-inifiles : nécessite zimbra-perl-list-moreutils +perl-convert-asn1 : zimbra-perl-math-bigint +perl-convert-binhex : OK +perl-convert-tnef : nécessite zimbra-perl-mime-tools et zimbra-perl-io-stringy +perl-convert-uulib : nécessite zimbra-perl-canary-stability, OK (modulo un prompt d'avertissement durant le build) +perl-crypt-openssl-random : OK +perl-crypt-openssl-rsa : Can't locate Crypt/OpenSSL/Guess.pm +perl-crypt-saltedhash : OK +perl-data-uuid : OK +perl-date-calc : nécessite zimbra-perl-carp-clan et zimbra-perl-bit-vector +perl-date-manip : perl-Test-Inter is needed +perl-db-file : nécessite zimbra-bdb-devel, OK +perl-dbd-mysql : nécessite zimbra-perl-dbi et zimbra-mariadb-devel +perl-dbd-sqlite : nécessite zimbra-perl-dbi, OK +perl-dbi : OK +perl-digest-hmac : nécessite zimbra-perl-digest-sha1 +perl-digest-sha1 : OK +perl-email-date-format : OK +perl-encode-detect : OK +perl-encode-locale : OK +perl-error : OK +perl-exporter-tiny : OK +perl-extutils-constant : OK +perl-file-grep : OK +perl-file-libmagic : OK +perl-file-listing : nécessite zimbra-perl-http-date, OK +perl-file-tail : OK +perl-filesys-df : OK +perl-geography-countries : OK +perl-html-parser : OK +perl-http-cookies : nécessite zimbra-perl-http-date et zimbra-perl-http-message +perl-http-daemon : nécessite zimbra-perl-http-date, zimbra-perl-http-message et zimbra-perl-lwp-mediatypes +perl-http-date : OK +perl-http-message : nécessite zimbra-perl-io-compress, zimbra-perl-uri, zimbra-perl-io-html, zimbra-perl-encode-locale et zimbra-perl-lwp-mediatypes +perl-http-negotiate : nécessite perl-http-message +perl-innotop : nécessite zimbra-perl-dbd-mysql et zimbra-perl-term-readkey +perl-io-compress : nécessite zimbra-perl-compress-raw-bzip2 et zimbra-perl-compress-raw-zlib +perl-io-html : OK +perl-io-sessiondata : OK +perl-io-socket-inet6 : nécessite zimbra-perl-socket +perl-io-socket-ip : nécessite zimbra-perl-socket +perl-io-socket-ssl : nécessite zimbra-perl-net-ssleay, zimbra-perl-mozilla-ca, zimbra-perl-io-socket-ip +perl-io-stringy : OK +perl-ip-country : nécessite perl-geography-countries, OK +perl-json-pp : OK +perl-libwww : nécessite zimbra-perl-encode-locale, zimbra-perl-file-listing, zimbra-perl-http-cookies, zimbra-perl-http-daemon, zimbra-perl-http-negotiate, zimbra-perl-lwp-mediatypes, zimbra-perl-uri, zimbra-perl-net-http, zimbra-perl-www-robotrules et zimbra-perl-html-parser +perl-list-moreutils : nécessite zimbra-perl-exporter-tiny, Can't locate inc/Config/AutoConf/LMU.pm +perl-lwp-mediatypes : OK +perl-lwp-protocol-https : nécessite zimbra-perl-libwww, zimbra-perl-net-http, zimbra-perl-io-socket-ssl, zimbra-perl-mozilla-ca et zimbra-openssl-devel +perl-mail-dkim : nécessite zimbra-perl-crypt-openssl-rsa, zimbra-perl-digest-sha1, zimbra-perl-net-dns, zimbra-perl-mailtools et zimbra-openssl-devel +perl-mail-spamassassin : nécessite zimbra-perl-digest-sha1, zimbra-perl-html-parser, zimbra-perl-io-compress, zimbra-perl-mail-dkim, zimbra-perl-net-dns, zimbra-perl-netaddr-ip, zimbra-perl-mail-spf, zimbra-perl-encode-detect, zimbra-perl-net-cidr-lite +perl-mail-spf : nécessite zimbra-perl-error, zimbra-perl-net-dns, zimbra-perl-netaddr-ip, zimbra-perl-net-dns-resolver-programmable +perl-mailtools : nécessite zimbra-perl-timedate +perl-math-bigint : OK +perl-mime-lite : nécessite zimbra-perl-mime-types, zimbra-perl-email-date-format et zimbra-perl-mailtools +perl-mime-tools : nécessite zimbra-perl-mailtools, zimbra-perl-convert-binhex et zimbra-perl-timedate +perl-mime-types : OK +perl-mozilla-ca : OK +perl-net-cidr : OK +perl-net-cidr-lite : OK +perl-net-dns : nécessite zimbra-perl-digest-hmac, zimbra-perl-digest-sha1 et zimbra-perl-io-socket-inet6 +perl-net-dns-resolver-programmable : nécessite zimbra-perl-net-dns +perl-net-http : nécessite zimbra-perl-uri et zimbra-perl-io-socket-ssl +perl-net-ldap : nécessite zimbra-perl-convert-asn1, zimbra-perl-math-bigint, zimbra-perl-socket-linux +perl-net-ldapapi : nécessite zimbra-openldap-devel, zimbra-cyrus-sasl-devel et zimbra-perl-convert-asn1 +perl-net-libidn : relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIC diff --git a/zmbuilder/zmbuilder.repo b/zmbuilder/zmbuilder.repo new file mode 100644 index 0000000..910b3e6 --- /dev/null +++ b/zmbuilder/zmbuilder.repo @@ -0,0 +1,6 @@ +[zmbuilder] +name=Zimbra builder repository +metadata_expire=1 +gpgcheck=0 +enabled=1 +baseurl=file:///zimbra/repo/$releasever/