ceph/mirroring/mirror-ceph.sh
Wido den Hollander 1e4dfae0b4 Script and Guidelines for mirroring Ceph
This commit introduces a script which admins can use to mirror
the Ceph packages to their local systems.

With this script they can easily sync from a mirror local to them.

The README explains user on how and when to sync the sources and
how they can become a official mirror for Ceph.

Signed-off-by: Wido den Hollander <wido@42on.com>
2016-01-28 10:08:39 +01:00

107 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
#
# Script to mirror Ceph locally
#
# Please, choose a local source and do not sync in a shorter interval than
# 3 hours.
#
SILENT=0
# All available source mirrors
declare -A SOURCES
SOURCES[eu]="eu.ceph.com"
SOURCES[au]="au.ceph.com"
SOURCES[us]="download.ceph.com"
SOURCES[global]="download.ceph.com"
function print_usage() {
echo "$0 [-q ] -s <source mirror> -t <target directory>"
}
while getopts ":qhs:t:" opt; do
case $opt in
q)
SILENT=1
;;
s)
SOURCE=$OPTARG
;;
t)
TARGET=$OPTARG
;;
h)
HELP=1
;;
\?)
print_usage
exit 1
;;
esac
done
if [ ! -z "$HELP" ] || [ -z "$TARGET" ] || [ -z "$SOURCE" ]; then
print_usage
exit 1
fi
if [ ! -d "$TARGET" ]; then
echo "$TARGET is not a valid target directory"
exit 1
fi
for i in "${!SOURCES[@]}"; do
if [ "$i" == "$SOURCE" ]; then
SOURCE_HOST=${SOURCES[$i]}
fi
done
if [ -z "$SOURCE_HOST" ]; then
echo -n "Please select one of the following sources:"
for i in "${!SOURCES[@]}"; do
echo -n " $i"
done
echo ""
exit 1
fi
RSYNC_OPTS="--stats --progress"
if [ $SILENT -eq 1 ]; then
RSYNC_OPTS="--quiet"
fi
# We start a two-stage sync here for DEB and RPM
# Based on: https://www.debian.org/mirror/ftpmirror
#
# The idea is to prevent temporary situations where metadata points to files
# which do not exist
#
# Exclude all metadata files
RET=0
rsync ${RSYNC_OPTS} ${SOURCE_HOST}::ceph --recursive --times --links \
--hard-links \
--exclude Packages* \
--exclude Sources* \
--exclude Release* \
--exclude InRelease \
--exclude i18n/* \
--exclude ls-lR* \
--exclude repodata/* \
${TARGET}
if [ "$?" -ne 0 ]; then
RET=$?
fi
# Now also transfer the metadata and delete afterwards
rsync ${RSYNC_OPTS} ${SOURCE_HOST}::ceph --recursive --times --links \
--hard-links --delete-after \
${TARGET}
if [ "$?" -ne 0 ]; then
RET=$?
fi
exit $RET