1#!/bin/sh 2 3shell_quote_string() { 4 echo "$1" | sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g' 5} 6 7usage () { 8 cat <<EOF 9Usage: $0 [OPTIONS] 10 The following options may be given : 11 --builddir=DIR Absolute path to the dir where all actions will be performed 12 --get_sources Source will be downloaded from github 13 --build_src_rpm If it is 1 src rpm will be built 14 --build_source_deb If it is 1 source deb package will be built 15 --build_rpm If it is 1 rpm will be built 16 --build_deb If it is 1 deb will be built 17 --build_tarball If it is 1 tarball will be built 18 --install_deps Install build dependencies(root previlages are required) 19 --branch Branch for build 20 --repo Repo for build 21 --yassl build tarball with yassl 22 --perconaft_repo PerconaFT repo 23 --perconaft_branch Branch for PerconaFT 24 --tokubackup_repo TokuBackup repo 25 --tokubackup_branch Btanch for TokuBackup 26 --help) usage ;; 27Example $0 --builddir=/tmp/PS56 --get_sources=1 --build_src_rpm=1 --build_rpm=1 28EOF 29 exit 1 30} 31 32append_arg_to_args () { 33 args="$args "$(shell_quote_string "$1") 34} 35 36parse_arguments() { 37 pick_args= 38 if test "$1" = PICK-ARGS-FROM-ARGV 39 then 40 pick_args=1 41 shift 42 fi 43 44 for arg do 45 val=$(echo "$arg" | sed -e 's;^--[^=]*=;;') 46 case "$arg" in 47 # these get passed explicitly to mysqld 48 --builddir=*) WORKDIR="$val" ;; 49 --build_src_rpm=*) SRPM="$val" ;; 50 --build_source_deb=*) SDEB="$val" ;; 51 --build_rpm=*) RPM="$val" ;; 52 --build_deb=*) DEB="$val" ;; 53 --get_sources=*) SOURCE="$val" ;; 54 --build_tarball=*) TARBALL="$val" ;; 55 --branch=*) BRANCH="$val" ;; 56 --repo=*) REPO="$val" ;; 57 --install_deps=*) INSTALL="$val" ;; 58 --yassl=*) YASSL="$val" ;; 59 --perconaft_branch=*) PERCONAFT_BRANCH="$val" ;; 60 --tokubackup_branch=*) TOKUBACKUP_BRANCH="$val" ;; 61 --perconaft_repo=*) PERCONAFT_REPO="$val" ;; 62 --tokubackup_repo=*) TOKUBACKUP_REPO="$val" ;; 63 --help) usage ;; 64 *) 65 if test -n "$pick_args" 66 then 67 append_arg_to_args "$arg" 68 fi 69 ;; 70 esac 71 done 72} 73 74check_workdir(){ 75 if [ "x$WORKDIR" = "x$CURDIR" ] 76 then 77 echo >&2 "Current directory cannot be used for building!" 78 exit 1 79 else 80 if ! test -d "$WORKDIR" 81 then 82 echo >&2 "$WORKDIR is not a directory." 83 exit 1 84 fi 85 fi 86 return 87} 88 89add_percona_yum_repo(){ 90 if [ ! -f /etc/yum.repos.d/percona-dev.repo ] 91 then 92 cat >/etc/yum.repos.d/percona-dev.repo <<EOL 93[percona-dev-$basearch] 94name=Percona internal YUM repository for build slaves \$releasever - \$basearch 95baseurl=http://jenkins.percona.com/yum-repo/\$releasever/RPMS/\$basearch 96gpgkey=http://jenkins.percona.com/yum-repo/PERCONA-PACKAGING-KEY 97gpgcheck=0 98enabled=1 99 100[percona-dev-noarch] 101name=Percona internal YUM repository for build slaves \$releasever - noarch 102baseurl=http://jenkins.percona.com/yum-repo/\$releasever/RPMS/noarch 103gpgkey=http://jenkins.percona.com/yum-repo/PERCONA-PACKAGING-KEY 104gpgcheck=0 105enabled=1 106EOL 107 fi 108 return 109} 110 111add_percona_apt_repo(){ 112 if [ ! -f /etc/apt/sources.list.d/percona-dev.list ]; then 113 cat >/etc/apt/sources.list.d/percona-dev.list <<EOL 114deb http://jenkins.percona.com/apt-repo/ @@DIST@@ main 115deb-src http://jenkins.percona.com/apt-repo/ @@DIST@@ main 116EOL 117 sed -i "s:@@DIST@@:$OS_NAME:g" /etc/apt/sources.list.d/percona-dev.list 118 fi 119 wget -qO - http://jenkins.percona.com/apt-repo/8507EFA5.pub | apt-key add - 120 return 121} 122 123get_sources(){ 124 cd "${WORKDIR}" 125 if [ "${SOURCE}" = 0 ] 126 then 127 echo "Sources will not be downloaded" 128 return 0 129 fi 130 131 git clone "$REPO" 132 retval=$? 133 if [ $retval != 0 ] 134 then 135 echo "There were some issues during repo cloning from github. Please retry one more time" 136 exit 1 137 fi 138 139 cd percona-server 140 if [ ! -z "$BRANCH" ] 141 then 142 git reset --hard 143 git clean -xdf 144 git checkout "$BRANCH" 145 fi 146 147 REVISION=$(git rev-parse --short HEAD) 148 git reset --hard 149 # 150 source VERSION 151 cat VERSION > ../percona-server-5.6.properties 152 echo "REVISION=${REVISION}" >> ../percona-server-5.6.properties 153 BRANCH_NAME="${BRANCH}" 154 echo "BRANCH_NAME=${BRANCH_NAME}" >> ../percona-server-5.6.properties 155 export PRODUCT=Percona-Server-${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR} 156 echo "PRODUCT=Percona-Server-${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}" >> ../percona-server-5.6.properties 157 export PRODUCT_FULL=${PRODUCT}.${MYSQL_VERSION_PATCH}${MYSQL_VERSION_EXTRA} 158 echo "PRODUCT_FULL=${PRODUCT}.${MYSQL_VERSION_PATCH}${MYSQL_VERSION_EXTRA}" >> ../percona-server-5.6.properties 159 echo "BUILD_NUMBER=${BUILD_NUMBER}" >> ../percona-server-5.6.properties 160 echo "BUILD_ID=${BUILD_ID}" >> ../percona-server-5.6.properties 161 echo "PERCONAFT_REPO=${PERCONAFT_REPO}" >> ../percona-server-5.6.properties 162 echo "PERCONAFT_BRANCH=${PERCONAFT_BRANCH}" >> ../percona-server-5.6.properties 163 echo "TOKUBACKUP_REPO=${TOKUBACKUP_REPO}" >> ../percona-server-5.6.properties 164 echo "TOKUBACKUP_BRANCH=${TOKUBACKUP_BRANCH}" >> ../percona-server-5.6.properties 165 echo "TOKUDB_VERSION=${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}.${MYSQL_VERSION_PATCH}${MYSQL_VERSION_EXTRA}" >> ../percona-server-5.6.properties 166 # 167 if [ -z "${DESTINATION}" ]; then 168 export DESTINATION=experimental 169 fi 170 # 171 TIMESTAMP=$(date "+%Y%m%d-%H%M%S") 172 echo "DESTINATION=${DESTINATION}" >> ../percona-server-5.6.properties 173 echo "UPLOAD=UPLOAD/${DESTINATION}/BUILDS/${PRODUCT}/${PRODUCT_FULL}/${BRANCH_NAME}/${REVISION}/${TIMESTAMP}" >> ../percona-server-5.6.properties 174 # 175 # initialize git submodules 176 rm -rf storage/tokudb/PerconaFT 177 rm -rf plugin/tokudb-backup-plugin/Percona-TokuBackup 178 git submodule deinit -f . 179 rm -rf storage/tokudb/PerconaFT 180 rm -rf plugin/tokudb-backup-plugin/Percona-TokuBackup 181 if [ -z ${PERCONAFT_REPO} -a -z ${TOKUBACKUP_REPO} ]; then 182 mkdir plugin/tokudb-backup-plugin/Percona-TokuBackup 183 mkdir storage/tokudb/PerconaFT 184 git submodule init 185 git submodule update 186 cd storage/tokudb/PerconaFT 187 git fetch origin 188 git checkout ${PERCONAFT_BRANCH} 189 if [ ${PERCONAFT_BRANCH} = "master" ]; then 190 git pull 191 fi 192 cd $WORKDIR/percona-server 193 cd plugin/tokudb-backup-plugin/Percona-TokuBackup 194 git fetch origin 195 git checkout ${TOKUBACKUP_BRANCH} 196 if [ ${TOKUBACKUP_BRANCH} = "master" ]; then 197 git pull 198 fi 199 cd $WORKDIR/percona-server 200 else 201 cd storage/tokudb 202 git clone ${PERCONAFT_REPO} 203 cd PerconaFT 204 git checkout ${PERCONAFT_BRANCH} 205 cd ../ 206 cd ${WORKDIR}/percona-server 207 cd plugin/tokudb-backup-plugin 208 git clone ${TOKUBACKUP_REPO} 209 cd Percona-TokuBackup 210 git checkout ${TOKUBACKUP_BRANCH} 211 cd ../ 212 cd ${WORKDIR}/percona-server 213 fi 214 # 215 cmake . -DDOWNLOAD_BOOST=1 -DWITH_BOOST=${WORKDIR}/build-ps/boost 216 make dist 217 # 218 EXPORTED_TAR=$(basename $(find . -type f -name *.tar.gz | sort | tail -n 1)) 219 # 220 PSDIR=${EXPORTED_TAR%.tar.gz} 221 rm -fr ${PSDIR} 222 tar xzf ${EXPORTED_TAR} 223 rm -f ${EXPORTED_TAR} 224 # add git submodules because make dist uses git archive which doesn't include them 225 rsync -av storage/tokudb/PerconaFT ${PSDIR}/storage/tokudb --exclude .git 226 rsync -av plugin/tokudb-backup-plugin/Percona-TokuBackup ${PSDIR}/plugin/tokudb-backup-plugin --exclude .git 227 # 228 cd ${PSDIR} 229 # set tokudb version - can be seen with show variables like '%version%' 230 sed -i "1s/^/SET(TOKUDB_VERSION ${TOKUDB_VERSION})\n/" storage/tokudb/CMakeLists.txt 231 # 232 sed -i "s:@@PERCONA_VERSION_EXTRA@@:${MYSQL_VERSION_EXTRA#-}:g" build-ps/debian/rules 233 sed -i "s:@@REVISION@@:${REVISION}:g" build-ps/debian/rules 234 sed -i "s:@@TOKUDB_BACKUP_VERSION@@:${TOKUDB_VERSION}:g" build-ps/debian/rules 235 sed -i "s:@@PERCONA_VERSION_EXTRA@@:${MYSQL_VERSION_EXTRA#-}:g" build-ps/debian/rules.yakkety 236 sed -i "s:@@REVISION@@:${REVISION}:g" build-ps/debian/rules.yakkety 237 sed -i "s:@@TOKUDB_BACKUP_VERSION@@:${TOKUDB_VERSION}:g" build-ps/debian/rules.yakkety 238 239 sed -i "s:@@PERCONA_VERSION_EXTRA@@:${MYSQL_VERSION_EXTRA#-}:g" build-ps/debian/rules.notokudb 240 sed -i "s:@@REVISION@@:${REVISION}:g" build-ps/debian/rules.notokudb 241 # 242 sed -i "s:@@MYSQL_VERSION@@:${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}.${MYSQL_VERSION_PATCH}:g" build-ps/percona-server.spec 243 sed -i "s:@@PERCONA_VERSION@@:${MYSQL_VERSION_EXTRA#-}:g" build-ps/percona-server.spec 244 sed -i "s:@@REVISION@@:${REVISION}:g" build-ps/percona-server.spec 245 sed -i "s:@@TOKUDB_BACKUP_VERSION@@:${TOKUDB_VERSION}:g" build-ps/percona-server.spec 246 # 247 sed -i "s:@@TOKUDB_BACKUP_VERSION@@:${TOKUDB_VERSION}:g" build-ps/build-binary.sh 248 # create a PS tar 249 cd ${WORKDIR}/percona-server 250 tar --owner=0 --group=0 --exclude=.bzr --exclude=.git -czf ${PSDIR}.tar.gz ${PSDIR} 251 rm -fr ${PSDIR} 252 253 254 mkdir $WORKDIR/source_tarball 255 mkdir $CURDIR/source_tarball 256 cp ${PSDIR}.tar.gz $WORKDIR/source_tarball 257 cp ${PSDIR}.tar.gz $CURDIR/source_tarball 258 cd $CURDIR 259 rm -rf percona-server 260 return 261} 262 263get_system(){ 264 if [ -f /etc/redhat-release ]; then 265 RHEL=$(rpm --eval %rhel) 266 ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') 267 OS_NAME="el$RHEL" 268 OS="rpm" 269 else 270 ARCH=$(uname -m) 271 OS_NAME="$(lsb_release -sc)" 272 OS="deb" 273 fi 274 return 275} 276 277install_deps() { 278 if [ $INSTALL = 0 ] 279 then 280 echo "Dependencies will not be installed" 281 return; 282 fi 283 if [ ! $( id -u ) -eq 0 ] 284 then 285 echo "It is not possible to instal dependencies. Please run as root" 286 exit 1 287 fi 288 CURPLACE=$(pwd) 289 290 if [ "x$OS" = "xrpm" ]; then 291 RHEL=$(rpm --eval %rhel) 292 ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') 293 add_percona_yum_repo 294 yum -y install https://repo.percona.com/yum/percona-release-1.0-11.noarch.rpm || true 295 yum -y install epel-release git redhat-lsb 296 yum clean metadata 297 yum -y install libtool rpm-build gcc-c++ gperf ncurses-devel perl readline-devel openssl-devel jemalloc 298 yum -y install time zlib-devel libaio-devel bison cmake pam-devel libeatmydata jemalloc-devel 299 yum -y install perl-Time-HiRes numactl-devel || true 300 yum -y install selinux-policy-devel || true 301 if [ ${RHEL} -lt 7 ]; then 302 if [ $(uname -m) = x86_64 ]; then 303 yum install -y percona-devtoolset-gcc percona-devtoolset-binutils percona-devtoolset-gcc-c++ percona-devtoolset-libstdc++-devel percona-devtoolset-valgrind-devel 304 else 305 wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo 306 wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-cern https://raw.githubusercontent.com/cms-sw/cms-docker/master/slc6-vanilla/RPM-GPG-KEY-cern 307 yum -y install devtoolset-2-gcc-c++ devtoolset-2-binutils libevent2-devel 308 fi 309 yum -y install Percona-Server-shared-56 310 fi 311 else 312 apt-get -y install dirmngr || true 313 add_percona_apt_repo 314 apt-get update 315 apt-get -y install dirmngr || true 316 apt-get -y install lsb-release 317 apt-get -y purge eatmydata || true 318 apt-get -y install git libtool curl bison cmake perl libssl-dev gcc g++ libaio-dev libldap2-dev libwrap0-dev gdb 319 apt-get -y install lsb-release libmecab-dev libncurses5-dev libreadline-dev libpam-dev zlib1g-dev 320 apt-get -y install libnuma-dev libjemalloc-dev libeatmydata 321 apt-get -y install cmake autotools-dev autoconf automake build-essential devscripts debconf debhelper fakeroot 322 apt-get -y install chrpath ghostscript gawk bison cmake libaio-dev libmecab-dev libncurses5-dev lsb-release perl po-debconf psmisc zlib1g-dev libreadline-dev libpam-dev libssl-dev libnuma-dev libwrap0-dev libldap2-dev dh-systemd || true 323 fi 324 if [ ! -d /usr/local/percona-subunit2junitxml ]; then 325 cd /usr/local 326 git clone https://github.com/percona/percona-subunit2junitxml.git 327 rm -rf /usr/bin/subunit2junitxml 328 ln -s /usr/local/percona-subunit2junitxml/subunit2junitxml /usr/bin/subunit2junitxml 329 cd ${CURPLACE} 330 fi 331 return; 332} 333 334get_tar(){ 335 TARBALL=$1 336 TARFILE=$(basename $(find $WORKDIR/$TARBALL -name 'percona-server*.tar.gz' | sort | tail -n1)) 337 if [ -z $TARFILE ] 338 then 339 TARFILE=$(basename $(find $CURDIR/$TARBALL -name 'percona-server*.tar.gz' | sort | tail -n1)) 340 if [ -z $TARFILE ] 341 then 342 echo "There is no $TARBALL for build" 343 exit 1 344 else 345 cp $CURDIR/$TARBALL/$TARFILE $WORKDIR/$TARFILE 346 fi 347 else 348 cp $WORKDIR/$TARBALL/$TARFILE $WORKDIR/$TARFILE 349 fi 350 return 351} 352 353get_deb_sources(){ 354 param=$1 355 echo $param 356 FILE=$(basename $(find $WORKDIR/source_deb -name "percona-server*.$param" | sort | tail -n1)) 357 if [ -z $FILE ] 358 then 359 FILE=$(basename $(find $CURDIR/source_deb -name "percona-server*.$param" | sort | tail -n1)) 360 if [ -z $FILE ] 361 then 362 echo "There is no sources for build" 363 exit 1 364 else 365 cp $CURDIR/source_deb/$FILE $WORKDIR/ 366 fi 367 else 368 cp $WORKDIR/source_deb/$FILE $WORKDIR/ 369 fi 370 return 371} 372 373build_srpm(){ 374 if [ $SRPM = 0 ] 375 then 376 echo "SRC RPM will not be created" 377 return; 378 fi 379 if [ "x$OS" = "xdeb" ] 380 then 381 echo "It is not possible to build src rpm here" 382 exit 1 383 fi 384 cd $WORKDIR 385 get_tar "source_tarball" 386 rm -fr rpmbuild 387 ls | grep -v percona-server*.tar.* | xargs rm -rf 388 mkdir -vp rpmbuild/{SOURCES,SPECS,BUILD,SRPMS,RPMS} 389 390 TARFILE=$(basename $(find . -name 'percona-server-*.tar.gz' | sort | tail -n1)) 391 NAME=$(echo ${TARFILE}| awk -F '-' '{print $1"-"$2}') 392 VERSION=$(echo ${TARFILE}| awk -F '-' '{print $3}') 393 # 394 SHORTVER=$(echo ${VERSION} | awk -F '.' '{print $1"."$2}') 395 TMPREL=$(echo ${TARFILE}| awk -F '-' '{print $4}') 396 RELEASE=${TMPREL%.tar.gz} 397 # 398 cd ${WORKDIR}/rpmbuild/SPECS 399 tar vxzf ${WORKDIR}/${TARFILE} --wildcards '*/build-ps/*.spec' --strip=2 400 # 401 cd ${WORKDIR}/rpmbuild/SOURCES 402 tar vxzf ${WORKDIR}/${TARFILE} --wildcards '*/build-ps/rpm/*.patch' --strip=3 403 # 404 cd ${WORKDIR} 405 # 406 mv -fv ${TARFILE} ${WORKDIR}/rpmbuild/SOURCES 407 408 rpmbuild -bs --define "_topdir ${WORKDIR}/rpmbuild" --with tokudb --define "dist .generic" --define "pkg_ver .${RPM_RELEASE}" rpmbuild/SPECS/percona-server.spec 409 # 410 411 mkdir -p ${WORKDIR}/srpm 412 mkdir -p ${CURDIR}/srpm 413 cp rpmbuild/SRPMS/*.src.rpm ${CURDIR}/srpm 414 cp rpmbuild/SRPMS/*.src.rpm ${WORKDIR}/srpm 415 return 416} 417 418build_rpm(){ 419 if [ $RPM = 0 ] 420 then 421 echo "RPM will not be created" 422 return; 423 fi 424 if [ "x$OS" = "xdeb" ] 425 then 426 echo "It is not possible to build rpm here" 427 exit 1 428 fi 429 SRC_RPM=$(basename $(find $WORKDIR/srpm -name 'Percona-Server-*.src.rpm' | sort | tail -n1)) 430 if [ -z $SRC_RPM ] 431 then 432 SRC_RPM=$(basename $(find $CURDIR/srpm -name 'Percona-Server-*.src.rpm' | sort | tail -n1)) 433 if [ -z $SRC_RPM ] 434 then 435 echo "There is no src rpm for build" 436 echo "You can create it using key --build_src_rpm=1" 437 exit 1 438 else 439 cp $CURDIR/srpm/$SRC_RPM $WORKDIR 440 fi 441 else 442 cp $WORKDIR/srpm/$SRC_RPM $WORKDIR 443 fi 444 cd $WORKDIR 445 rm -fr rpmbuild 446 mkdir -vp rpmbuild/{SOURCES,SPECS,BUILD,SRPMS,RPMS} 447 cp $SRC_RPM rpmbuild/SRPMS/ 448 449 RHEL=$(rpm --eval %rhel) 450 ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') 451 # 452 echo "RHEL=${RHEL}" >> percona-server-5.6.properties 453 echo "ARCH=${ARCH}" >> percona-server-5.6.properties 454 # 455 if [ ${RHEL} = 6 ]; then 456 if [ ${ARCH} = x86_64 ]; then 457 source /opt/percona-devtoolset/enable 458 rpmbuild --define "_topdir ${WORKDIR}/rpmbuild" --with tokudb --define "dist .el${RHEL}" --define "pkg_ver .${RPM_RELEASE}" --rebuild rpmbuild/SRPMS/${SRC_RPM} 459 else 460 source /opt/rh/devtoolset-2/enable 461 rpmbuild --define "_topdir ${WORKDIR}/rpmbuild" --define "dist .el${RHEL}" --define "pkg_ver .${RPM_RELEASE}" --rebuild rpmbuild/SRPMS/${SRC_RPM} 462 fi 463 else 464 rpmbuild --define "_topdir ${WORKDIR}/rpmbuild" --with tokudb --define "dist .el${RHEL}" --define "pkg_ver .${RPM_RELEASE}" --rebuild rpmbuild/SRPMS/${SRC_RPM} 465 fi 466 467 return_code=$? 468 if [ $return_code != 0 ]; then 469 exit $return_code 470 fi 471 mkdir -p ${WORKDIR}/rpm 472 mkdir -p ${CURDIR}/rpm 473 cp rpmbuild/RPMS/*/*.rpm ${WORKDIR}/rpm 474 cp rpmbuild/RPMS/*/*.rpm ${CURDIR}/rpm 475 476} 477 478build_source_deb(){ 479 if [ $SDEB = 0 ] 480 then 481 echo "source deb package will not be created" 482 return; 483 fi 484 if [ "x$OS" = "xrpm" ] 485 then 486 echo "It is not possible to build source deb here" 487 exit 1 488 fi 489 rm -rf percona-server* 490 get_tar "source_tarball" 491 rm -f *.dsc *.orig.tar.gz *.debian.tar.gz *.changes 492 # 493 494 TARFILE=$(basename $(find . -name 'percona-server-*.tar.gz' | grep -v tokudb | sort | tail -n1)) 495 NAME=$(echo ${TARFILE}| awk -F '-' '{print $1"-"$2}') 496 VERSION=$(echo ${TARFILE}| awk -F '-' '{print $3}') 497 SHORTVER=$(echo ${VERSION} | awk -F '.' '{print $1"."$2}') 498 TMPREL=$(echo ${TARFILE}| awk -F '-' '{print $4}') 499 RELEASE=${TMPREL%.tar.gz} 500 # 501 # rm -fr ${NAME}-${VERSION}-${RELEASE} 502 # 503 NEWTAR=${NAME}-${SHORTVER}_${VERSION}-${RELEASE}.orig.tar.gz 504 mv ${TARFILE} ${NEWTAR} 505 # 506 tar xzf ${NEWTAR} 507 cd ${NAME}-${VERSION}-${RELEASE} 508 cp -ap build-ps/debian/ . 509 dch -D unstable --force-distribution -v "${VERSION}-${RELEASE}-1" "Update to new upstream release Percona Server ${VERSION}-${RELEASE}-2" 510 dpkg-buildpackage -S 511 # 512 cd ${WORKDIR} 513 # rm -fr ${NAME}-${VERSION}-${RELEASE} 514 515 mkdir -p $WORKDIR/source_deb 516 mkdir -p $CURDIR/source_deb 517 cp *.debian.tar.* $WORKDIR/source_deb 518 cp *_source.changes $WORKDIR/source_deb 519 cp *.dsc $WORKDIR/source_deb 520 cp *.orig.tar.gz $WORKDIR/source_deb 521 cp *.debian.tar.* $CURDIR/source_deb 522 cp *_source.changes $CURDIR/source_deb 523 cp *.dsc $CURDIR/source_deb 524 cp *.orig.tar.gz $CURDIR/source_deb 525} 526 527build_deb(){ 528 if [ $DEB = 0 ] 529 then 530 echo "source deb package will not be created" 531 return; 532 fi 533 if [ "x$OS" = "xrpm" ] 534 then 535 echo "It is not possible to build source deb here" 536 exit 1 537 fi 538 for file in 'dsc' 'orig.tar.gz' 'changes' 'debian.tar*' 539 do 540 get_deb_sources $file 541 done 542 cd $WORKDIR 543 rm -fv *.deb 544 # 545 export DEBIAN_VERSION=$(lsb_release -sc) 546 export ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') 547 # 548 rm -fv *.deb 549 550 export DEBIAN_VERSION="$(lsb_release -sc)" 551 DSC=$(basename $(find . -name '*.dsc' | sort | tail -n 1)) 552 DIRNAME=$(echo ${DSC%-1.dsc} | sed -e 's:_:-:g') 553 VERSION=$(echo ${DSC} | sed -e 's:_:-:g' | awk -F'-' '{print $4}') 554 RELEASE=$(echo ${DSC} | sed -e 's:_:-:g' | awk -F'-' '{print $5}') 555 ARCH=$(uname -m) 556 export EXTRAVER=${MYSQL_VERSION_EXTRA#-} 557 # 558 echo "ARCH=${ARCH}" >> percona-server-5.6.properties 559 echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> percona-server-5.6.properties 560 echo VERSION=${VERSION} >> percona-server-5.6.properties 561 # 562 563 dpkg-source -x ${DSC} 564 #mv percona-server-source-5.6.tar.gz ${DIRNAME}/debian 565 cd ${DIRNAME} 566 # 567 dch -b -m -D "$DEBIAN_VERSION" --force-distribution -v "${VERSION}-${RELEASE}-1.${DEBIAN_VERSION}" 'Update distribution' 568 # 569 # 570 if [ ${ARCH} != "x86_64" ]; then 571 rm -f debian/rules 572 rm -f debian/control 573 mv debian/rules.notokudb debian/rules 574 mv debian/control.notokudb debian/control 575 else 576 if [ ${DEBIAN_VERSION} != trusty -a ${DEBIAN_VERSION} != xenial -a ${DEBIAN_VERSION} != stretch -a ${DEBIAN_VERSION} != jessie -a ${DEBIAN_VERSION} != vivid -a ${DEBIAN_VERSION} != yakkety -a ${DEBIAN_VERSION} != artful -a ${DEBIAN_VERSION} != bionic -a ${DEBIAN_VERSION} != cosmic -a ${DEBIAN_VERSION} != disco -a ${DEBIAN_VERSION} != buster ]; then 577 gcc47=$(which gcc-4.7 2>/dev/null || true) 578 if [ -x "${gcc47}" ]; then 579 export CC=gcc-4.7 580 export USE_THIS_GCC_VERSION="-4.7" 581 export CXX=g++-4.7 582 else 583 export CC=gcc-4.8 584 export USE_THIS_GCC_VERSION="-4.8" 585 export CXX=g++-4.8 586 fi 587 fi 588 fi 589 # 590 591 if [ ${DEBIAN_VERSION} = "artful" -o ${DEBIAN_VERSION} = "bionic" -o ${DEBIAN_VERSION} = "cosmic" -o ${DEBIAN_VERSION} = "disco" -o ${DEBIAN_VERSION} = "buster" ]; then 592 sed -i 's/export CFLAGS=/export CFLAGS=-Wimplicit-fallthrough=0 /' debian/rules 593 sed -i 's/export CXXFLAGS=/export CXXFLAGS=-Wimplicit-fallthrough=0 /' debian/rules 594 fi 595 596 597 dpkg-buildpackage -rfakeroot -uc -us -b 598 # 599 cd ${WORKDIR} 600 mkdir -p $CURDIR/deb 601 mkdir -p $WORKDIR/deb 602 cp $WORKDIR/*.deb $WORKDIR/deb 603 cp $WORKDIR/*.deb $CURDIR/deb 604} 605 606build_tarball(){ 607 if [ $TARBALL = 0 ] 608 then 609 echo "Binary tarball will not be created" 610 return; 611 fi 612 get_tar "source_tarball" 613 cd $WORKDIR 614 TARFILE=$(basename $(find . -name 'percona-server-*.tar.gz' | sort | tail -n1)) 615 if [ -f /etc/debian_version ]; then 616 export OS_RELEASE="$(lsb_release -sc)" 617 fi 618 # 619 if [ -f /etc/redhat-release ]; then 620 export OS_RELEASE="centos$(lsb_release -sr | awk -F'.' '{print $1}')" 621 RHEL=$(rpm --eval %rhel) 622 fi 623 # 624 625 ARCH=$(uname -m 2>/dev/null||true) 626 TARFILE=$(basename $(find . -name 'percona-server-*.tar.gz' | sort | grep -v "tools" | tail -n1)) 627 NAME=$(echo ${TARFILE}| awk -F '-' '{print $1"-"$2}') 628 VERSION=$(echo ${TARFILE}| awk -F '-' '{print $3}') 629 # 630 SHORTVER=$(echo ${VERSION} | awk -F '.' '{print $1"."$2}') 631 TMPREL=$(echo ${TARFILE}| awk -F '-' '{print $4}') 632 RELEASE=${TMPREL%.tar.gz} 633 # 634 if [ -f /etc/redhat-release ]; then 635 if [ ${RHEL} = 6 ]; then 636 if [ ${ARCH} = x86_64 ]; then 637 source /opt/percona-devtoolset/enable 638 else 639 source /opt/rh/devtoolset-2/enable 640 fi 641 fi 642 fi 643 export CFLAGS=$(rpm --eval %{optflags} | sed -e "s|march=i386|march=i686|g") 644 export CXXFLAGS="${CFLAGS}" 645 if [ "${YASSL}" = 0 ]; then 646 if [ -f /etc/redhat-release ]; then 647 SSL_VER_TMP=$(yum list installed|grep -i openssl|head -n1|awk '{print $2}'|awk -F "-" '{print $1}'|sed 's/\.//g'|sed 's/[a-z]$//' | awk -F':' '{print $2}') 648 if [ -z "${SSL_VER_TMP}" ]; then 649 SSL_VER_TMP=$(yum list installed|grep -i openssl|head -n1|awk '{print $2}'|awk -F "-" '{print $1}'|sed 's/\.//g'|sed 's/[a-z]$//') 650 fi 651 if [[ ${SSL_VER_TMP} == 102 ]]; then 652 export SSL_VER=".ssl${SSL_VER_TMP}.rpm" 653 else 654 export SSL_VER=".ssl${SSL_VER_TMP}" 655 fi 656 else 657 SSL_VER_TMP=$(dpkg -l|grep -i libssl|grep -v "libssl\-"|head -n1|awk '{print $2}'|awk -F ":" '{print $1}'|sed 's/libssl/ssl/g'|sed 's/\.//g') 658 if [[ ${SSL_VER_TMP} == 'ssl102' ]]; then 659 export SSL_VER=".${SSL_VER_TMP}.deb" 660 else 661 export SSL_VER=".${SSL_VER_TMP}" 662 fi 663 fi 664 fi 665 # 666 rm -fr TARGET && mkdir TARGET 667 rm -rf jemalloc 668 git clone https://github.com/jemalloc/jemalloc 669 ( 670 cd jemalloc 671 git checkout 3.6.0 672 bash autogen.sh 673 ) 674 # 675 rm -fr ${TARFILE%.tar.gz} 676 tar xzf ${TARFILE} 677 cd ${TARFILE%.tar.gz} 678 if [ "${YASSL}" = 1 ]; then 679 DIRNAME="tarball_yassl" 680 bash -xe ./build-ps/build-binary.sh --with-jemalloc=../jemalloc/ --with-yassl ../TARGET 681 else 682 bash -xe ./build-ps/build-binary.sh --with-jemalloc=../jemalloc/ ../TARGET 683 DIRNAME="tarball" 684 fi 685 mkdir -p ${WORKDIR}/${DIRNAME} 686 mkdir -p ${CURDIR}/${DIRNAME} 687 cp ../TARGET/*.tar.gz ${WORKDIR}/${DIRNAME} 688 cp ../TARGET/*.tar.gz ${CURDIR}/${DIRNAME} 689} 690 691#main 692 693CURDIR=$(pwd) 694VERSION_FILE=$CURDIR/percona-server-5.6.properties 695args= 696WORKDIR= 697SRPM=0 698SDEB=0 699RPM=0 700DEB=0 701SOURCE=0 702TARBALL=0 703OS_NAME= 704ARCH= 705OS= 706TOKUBACKUP_REPO= 707PERCONAFT_REPO= 708INSTALL=0 709RPM_RELEASE=1 710DEB_RELEASE=1 711REVISION=0 712BRANCH="5.6" 713YASSL=0 714REPO="git://github.com/percona/percona-server.git" 715PRODUCT=Percona-Server-5.6 716MYSQL_VERSION_MAJOR=5 717MYSQL_VERSION_MINOR=6 718MYSQL_VERSION_PATCH=40 719MYSQL_VERSION_EXTRA=-84.0 720PRODUCT_FULL=Percona-Server-5.6.40-84.0 721PERCONAFT_BRANCH=Percona-Server-5.6.40-84.0 722TOKUBACKUP_BRANCH=Percona-Server-5.6.40-84.0 723parse_arguments PICK-ARGS-FROM-ARGV "$@" 724if [ ${YASSL} = 1 ]; then 725 TARBALL=1 726fi 727 728check_workdir 729get_system 730install_deps 731get_sources 732build_tarball 733build_srpm 734build_source_deb 735build_rpm 736build_deb 737 738