Hi! What is the proper solution for a local mirror for centos 7 (or oven 8) repositories?
trying with rsync, while the packages are downloaded but the repodata is not and is actually impossible to be used by clients. while i try to
Hi,
The script below is how I sync CentOS to a local mirror which is then used directly by the clients, no createrepo needed.
Please note that the exclude list is something to adjust to your needs to save space and traffic. Also the $MIRRORS list should be changed to use best mirrors for your situation.
Hope this helps, Simon
---%<--- #!/bin/bash
RELEASES="{7,8}" MIRRORS="rsync://mirrors.kernel.org rsync://mirror.xxxxxxx.xxx" TOUT=60
LOCALDIR=$(readlink -f $(dirname $0)) MODULE=${LOCALDIR##*/} RETVAL=1
# find a usable mirror echo "list of mirrors `${MIRRORS}'" for TESTURL in $MIRRORS; do echo "testing mirror `${TESTURL}/${MODULE}'" if rsync -qn ${TESTURL}/${MODULE}/ .; then # this mirror _should_ work ... echo "using mirror `${TESTURL}/${MODULE}'" RSYNCURLS=$(eval echo ${TESTURL}/${MODULE}/RPM-GPG-KEY-CentOS-* ${TESTURL}/${MODULE}/${RELEASES}) echo "syncing `${RSYNCURLS}'" # ... but it can still fail here if rsync -rtv --timeout=$TOUT --copy-links --delete --delete-excluded --progress --no-motd \ --exclude "aarch*/" \ --exclude "alpha/" \ --exclude "ia64/" \ --exclude "ppc*/" \ --exclude "s390*/" \ --exclude "SRPMS/" \ --exclude "debug/" \ --exclude "*~" \ --exclude ".*info" \ --exclude "kickstart/" \ --exclude "?/apt/" \ --exclude "?/atomic/" \ --exclude "?/build/" \ --exclude "?/cloud/" \ --exclude "?/docs/" \ --exclude "?/dotnet/" \ --exclude "?/isos/" \ --exclude "?/nfv/" \ --exclude "?/opstools/" \ --exclude "?/os/" \ --exclude "?/paas/" \ --exclude "?/rt/" \ --exclude "?/virt/" \ "$@" $RSYNCURLS ${LOCALDIR}/ then RETVAL=0 break else echo "mirror `${TESTURL}/${MODULE}' failed" RETVAL=1 fi fi done
exit $RETVAL ---%<---