#!/bin/bash if [ "$USER" != "jenkins" ]; then echo "ERROR: only jenkins should run this" return 1 fi CENTOS_BASE_VERSION=7.2.1511 EPEL_BASE_VERSION=7 BIN_ARCH=x86_64 BIN_DIRS="/export/jenkins/mirrors/CentOS/$CENTOS_BASE_VERSION/updates/x86_64 /export/jenkins/mirrors/CentOS/$CENTOS_BASE_VERSION/cloud/x86_64/openstack-mitaka /export/jenkins/mirrors/CentOS/$CENTOS_BASE_VERSION/os/x86_64 /export/jenkins/mirrors/CentOS/$CENTOS_BASE_VERSION/extras/x86_64 /export/jenkins/mirrors/fedora/epel/$EPEL_BASE_VERSION/x86_64 " SRC_DIRS="/export/jenkins/mirrors/CentOS/vault.centos.org/$CENTOS_BASE_VERSION/updates/Source /export/jenkins/mirrors/CentOS/vault.centos.org/$CENTOS_BASE_VERSION/cloud/Source/openstack-mitaka /export/jenkins/mirrors/CentOS/vault.centos.org/$CENTOS_BASE_VERSION/os/Source /export/jenkins/mirrors/CentOS/vault.centos.org/$CENTOS_BASE_VERSION/extras/Source /export/jenkins/mirrors/fedora/dl.fedoraproject.org/pub/epel/$EPEL_BASE_VERSION/SRPMS " TESTING_BIN_DIRS="/export/jenkins/mirrors/fedora/epel/testing/7/x86_64 " TESTING_SRC_DIRS="/export/jenkins/mirrors/dl.fedoraproject.org/pub/epel/testing/7/SRPMS " BIN_ARCH=x86_64 NEW_DIR="/export/jenkins/mirrors/CentOS/tis-r3-CentOS/mitaka" BACKUP_DIR="/export/jenkins/mirrors/CentOS/tis-r3-CentOS/mitaka.old" CREATEREPO=$(which createrepo_c) if [ $? -ne 0 ]; then CREATEREPO="createrepo" fi if [ -d $BACKUP_DIR ]; then rm -rf $BACKUP_DIR fi cp -r $NEW_DIR $BACKUP_DIR BIN_DEST="$NEW_DIR/Binary" SRC_DEST="$NEW_DIR/Source" LOG_DEST="$NEW_DIR/Data" DATA_DEST="$NEW_DIR/Data" mkdir -p $BIN_DEST $SRC_DEST $LOG_DEST WHITE_LIST_FILE="$DATA_DIR/white_list.txt" BLACK_LIST_FILE="$DATA_DIR/black_list.txt" OBSOLETE_LOG="$LOG_DEST/obsolete.log" NO_SOURCERPM_LOG="$LOG_DEST/no_sourcerpm.log" SOURCERPM_NOT_FOUND_LOG="$LOG_DEST/sourcerpm_not_found.log" BIN_COPY_LOG="$LOG_DEST/bin_copy.log" SRC_COPY_LOG="$LOG_DEST/src_copy.log" NO_INSTALLED_COPY="$LOG_DEST/installed_copy.log" BLACKLISTED_LOG="$LOG_DEST/blacklisted.log" WHITELISTED_LOG="$LOG_DEST/whitelisted.log" rm -f $OBSOLETE_LOG $NO_SOURCERPM_LOG $SOURCERPM_NOT_FOUND_LOG $BIN_COPY_LOG $SRC_COPY_LOG $NO_INSTALLED_COPY $BLACKLISTED_LOG $WHITELISTED_LOG LAST_INSTALLED_NAME="" LAST_NAME="" NAME="" # The following is similar to a find for *.rpm files, # but we transform the path into ## . # Then do a reverse 'version' sort, so that the newest version # of the rpm appears first, no matter what directory it originates from. for dat in $((for bd in `echo $BIN_DIRS`; do for br in $(find $bd/ -name '*.rpm' ); do d=$(dirname $br) b=$(basename $br) s=$(echo $b | sed -e 's#.centos.#.#' -e 's#.el7.#.#' -e 's#.el7_##' -e 's#.rpm$##' -e 's#.src$##' -e 's#.noarch$##' -e 's#.x86_64$##') echo "$s#$b#$d" done done) | sort -r -V) do b=$(echo "$dat" | awk -F '#' '{ print $2 }') d=$(echo "$dat" | awk -F '#' '{ print $3 }') br="$d/$b" echo $br MATCH=$(grep "^$b" $BLACK_LIST_FILE || true) if [ "$MATCH" != "" ]; then echo "$bs" >> $BLACKLISTED_LOG continue fi SOURCERPM=$(rpm -q --queryformat='%{SOURCERPM}' -p $br --nosignature) if [ "x$SOURCERPM" != "x" ]; then MATCH=$(grep "^$SOURCERPM" $BLACK_LIST_FILE || true) if [ "$MATCH" != "" ]; then echo "$bs" >> $BLACKLISTED_LOG echo "$SOURCERPM" >> $BLACKLISTED_LOG continue fi fi ARCH=$(rpm -q --queryformat='%{ARCH}' -p $br --nosignature) LAST_NAME="$NAME" NAME=$(rpm -q --queryformat='%{NAME}' -p $br --nosignature) if [ "$NAME" != "$LAST_NAME" ] && [ "$LAST_NAME" != "$LAST_INSTALLED_NAME" ]; then echo "$LAST_NAME" >> $NO_INSTALLED_COPY fi if [ "$ARCH" == "$BIN_ARCH" ] || [ "$ARCH" == "noarch" ]; then if [ "$NAME" != "$LAST_INSTALLED_NAME" ]; then if [ "x$SOURCERPM" != "x" ]; then bs=$(find $SRC_DIRS -name $SOURCERPM | head -n 1) if [ "x$bs" != "x" ]; then mkdir -p $BIN_DEST/$ARCH if [ ! -f $BIN_DEST/$ARCH/$b ]; then cp -v $br $BIN_DEST/$ARCH/ echo "$br" >> $BIN_COPY_LOG fi if [ ! -f $SRC_DEST/$SOURCERPM ]; then cp -v $bs $SRC_DEST/ echo "$bs" >> $SRC_COPY_LOG fi LAST_INSTALLED_NAME=$NAME else echo "$SOURCERPM not found" echo "$br" >> $SOURCERPM_NOT_FOUND_LOG fi else echo "no SOURCERPM for $br" echo "$br" >> $NO_SOURCERPM_LOG fi else echo "$br is obsolete" echo "$br" >> $OBSOLETE_LOG fi fi done for dat in $((for bd in $(echo $BIN_DIRS; echo $TESTING_BIN_DIRS); do for br in $(find $bd/ -name '*.rpm'); do d=$(dirname $br) b=$(basename $br) s=$(echo $b | sed -e 's#.centos.#.#' -e 's#.el7.#.#' -e 's#.el7_##' -e 's#.rpm$##' -e 's#.src$##' -e 's#.noarch$##' -e 's#.x86_64$##') echo "$s#$b#$d" done done) | sort -r -V) do b=$(echo "$dat" | awk -F '#' '{ print $2 }') d=$(echo "$dat" | awk -F '#' '{ print $3 }') br="$d/$b" echo $br MATCH=$(grep "^$b" $WHITE_LIST_FILE || true) if [ "$MATCH" != "" ]; then echo "$bs" >> $WHITELISTED_LOG else continue fi SOURCERPM=$(rpm -q --queryformat='%{SOURCERPM}' -p $br --nosignature) if [ "x$SOURCERPM" != "x" ]; then grep "^$SOURCERPM" $WHITE_LIST_FILE >> /dev/null || true if [ $? -eq 0 ]; then echo "$bs" >> $WHITELISTED_LOG echo "$SOURCERPM" >> $WHITELISTED_LOG else continue fi fi ARCH=$(rpm -q --queryformat='%{ARCH}' -p $br --nosignature) LAST_NAME="$NAME" NAME=$(rpm -q --queryformat='%{NAME}' -p $br --nosignature) if [ "$NAME" != "$LAST_NAME" ] && [ "$LAST_NAME" != "$LAST_INSTALLED_NAME" ]; then echo "$LAST_NAME" >> $NO_INSTALLED_COPY fi if [ "$ARCH" == "$BIN_ARCH" ] || [ "$ARCH" == "noarch" ]; then if [ "$NAME" != "$LAST_INSTALLED_NAME" ]; then if [ "x$SOURCERPM" != "x" ]; then bs=$(find $SRC_DIRS $TESTING_SRC_DIRS -name $SOURCERPM | head -n 1) if [ "x$bs" != "x" ]; then mkdir -p $BIN_DEST/$ARCH if [ ! -f $BIN_DEST/$ARCH/$b ]; then cp -v $br $BIN_DEST/$ARCH/ echo "$br" >> $BIN_COPY_LOG fi if [ ! -f $SRC_DEST/$SOURCERPM ]; then cp -v $bs $SRC_DEST/ echo "$bs" >> $SRC_COPY_LOG fi LAST_INSTALLED_NAME=$NAME else echo "$SOURCERPM not found" echo "$br" >> $SOURCERPM_NOT_FOUND_LOG fi else echo "no SOURCERPM for $br" echo "$br" >> $NO_SOURCERPM_LOG fi else echo "$br is obsolete" echo "$br" >> $OBSOLETE_LOG fi fi done repodata_update () { DIR=${1} ( cd $DIR for d in `find -L . -type d -name repodata`; do (cd $d/.. for c in $(find repodata -name '*comps*xml'); do mv -f $c comps.xml done rm -rf repodata if [ -f comps.xml ]; then $CREATEREPO -g comps.xml --workers $(cat /usr/bin/nproc) $(pwd) else $CREATEREPO --workers $(cat /usr/bin/nproc) $(pwd) fi ) done ) return 0 } repodata_update $SRC_DEST repodata_update $BIN_DEST