#!/bin/bash if [ "$2" = "" ]; then echo -e "\nusage: $0 [ options ] SRPM distro [ min_ver [, max_ver [, mock_options ]]]\n" echo -e "\t--redis store build command in redis queue" echo -e "\t--valkey store build command in valkey queue" echo -e "\t--list list queue content" echo -e "\t--nobase | --scl only build SCL packages" echo -e "\t--noscl | --base only build base packages\n" exit 0 fi # Script options BUILD_BASE=1 BUILD_SCLS=1 REDIS=0 REMOTE=0 # ARCH detection and check if [ "$(uname -m)" = "x86_64" ]; then SUF=x QUEUE=mockx REDISCLI="valkey-cli" else SUF=a QUEUE=mocka REDISCLI="valkey-cli -h remi" fi if [ "$1" == "--redis" -o "$1" == "--valkey" ]; then CHECK=$($REDISCLI ping) [ "$CHECK" = "PONG" ] || exit 1 REDIS=1 shift fi # Queue commands if [ "$1" == "--list" ]; then echo "-- x86_64 queue: $($REDISCLI scard mockx) tasks --" a=$($REDISCLI smembers mockx) [ -n "$a" ] && $REDISCLI smembers mockx || ps -ef | grep mock/mock | grep -v grep echo -e "\n-- aarch64 queue: $($REDISCLI scard mocka) tasks --" a=$($REDISCLI smembers mocka) [ -n "$a" ] && $REDISCLI smembers mocka || ps -ef | ssh remi@ampere 'ps -ef | grep mock/mock | grep -v grep' exit 0 elif [ "$1" == "--clean" ]; then $REDISCLI del mockx $REDISCLI del mocka exit 0 fi if [ "$1" == "--nobase" -o "$1" == "--scl" ]; then BUILD_BASE=0 shift elif [ "$1" == "--noscl" -o "$1" == "--base" ]; then BUILD_SCLS=0 shift fi SRPM=$1 DIST=$2 shift 2 # PHP version build range if [ "$1" = "" ]; then MIN=56 else MIN=$1 shift fi if [ "$1" = "" ]; then MAX=84 else MAX=$1 shift fi case $DIST in *x) if [ $SUF != x ]; then echo "Not an x86_64 builder" exit 1 fi ;; *a) if [ $SUF != a ]; then if [ $REDIS -ge 1 ]; then REMOTE=1 else echo "Not an aarch64 builder" exit 1 fi fi ;; *) DIST=$DIST$SUF ;; esac # SRPM abolute path case $DIST in *x) mocketc=/home/rpmbuild/SPECS/remirepo/tools/mock srpmdir=/home/rpmbuild/site/rpms/SRPMS ;; *a) mocketc=/home/remi/mock srpmdir=/home/remi/SRPMS ;; esac if [ -f $srpmdir/$SRPM ]; then SRPM=$srpmdir/$SRPM elif [ -f $PWD/$SRPM ]; then SRPM=$PWD/$SRPM elif [ ! -f $SRPM ]; then echo "file not found '$SRPM'" exit 1 fi # Send to remote aarch64 builder if [ $REMOTE -ge 1 ]; then LST=/tmp/srpm_aarch64_sent.list touch $LST if ! grep -q $SRPM $LST; then scp $SRPM remi@ampere:todo/ echo $SRPM >>$LST fi mocketc=/home/remi/mock QUEUE=mocka SRPM=/home/remi/todo/$(basename $SRPM) fi # PHP version matrix echo mockit $SRPM $DIST $MIN $MAX $@ case $DIST in fc39x|fc39a|fc40x|fc40a|fc41x|fc41a|el9x|el9a|el10x|el10a) LST="82 81 74 80 83 84" SCL="74 80 81 82 83 84" ;; el8a) LST="72 73 74 80 81 82 83 84" SCL="72 73 74 80 81 82 83 84" ;; el8x) LST="72 73 74 80 81 82 83 84" SCL="56 70 71 72 73 74 80 81 82 83 84" ;; allx) if [ $REDIS -ge 1 ]; then for i in fc39x fc40x fc41x el8x el9x el10x fc39a fc40a fc41a el8a el9a el10a do [ $BUILD_BASE -ge 1 ] && $0 --valkey --base $SRPM $i $MIN $MAX $@ [ $BUILD_SCLS -ge 1 ] && $0 --valkey --scl $SRPM $i $MIN $MAX $@ done else echo Not supported for direct build fi ;; ztsx) if [ $REDIS -ge 1 ]; then [ $MAX -gt 83 ] && MAX=83 for i in fc39x fc40x el8x el9x do [ $BUILD_BASE -ge 1 ] && $0 --valkey --base $SRPM $i $MIN $MAX $@ done else echo Not supported for direct build fi ;; *) echo Unkown DIST $DIST exit 1 ;; esac ID=${QUEUE:-$PPID} # Build base/modules [ $BUILD_BASE -ge 1 ] && for i in $LST do if [ 0$i -ge $MIN -a 0$i -le $MAX ]; then CMD="mock -q --configdir=$mocketc -r ${DIST}${i} rebuild $SRPM $@" if [ $REDIS -ge 1 ]; then $REDISCLI sadd $QUEUE "$CMD" else echo -n "$(date +%X) $i " $CMD --uniqueext=$ID && echo " Ok." || echo " Error !" fi fi done # Build Software Collections [ $BUILD_SCLS -ge 1 ] && for i in $SCL do if [ 0$i -ge $MIN -a 0$i -le $MAX ]; then CMD="mock -q --configdir=$mocketc -r ${DIST}scl${i} rebuild $SRPM $@" if [ $REDIS -ge 1 ]; then $REDISCLI sadd $QUEUE "$CMD" else echo -n "$(date +%X) scl$i " $CMD --uniqueext=$ID && echo " Ok." || echo " Error !" fi fi done if [ $REDIS -ge 1 ]; then echo "Queue size: " $($REDISCLI scard $QUEUE) else date +%X fi