
The starlingx mirror failed to capture the centos 7.6 installer. Although the installer files are stored under mirror.centos.org/<VER>/os/x86_64/, it is not captured by reposync. No options that I have tried will make it do so. We can either demand that folks create .lst file entries for any installer files they want to use, or modify the mirror scripts with a special case to capture the installer of all future centos versions via other means. This update takes the later approach. It does make some assumptions about the names of subdirectories we need to capture, e.g. EFI, images, isolinux, LiveOS, but they hold true for Centos releases to date. Change-Id: Id90b22fbb93c8143ed112be33ac168f1ee84f2f3 Signed-off-by: Scott Little <scott.little@windriver.com>
163 lines
4.9 KiB
Bash
Executable File
163 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Daily update script for mirror.starlingx.cengn.ca covering
|
|
# rpms and src.rpms downloaded from a yum repository.
|
|
#
|
|
# IMPORTANT: This script is only to be run on the StarlingX mirror.
|
|
# It is not for use by the general StarlinX developer.
|
|
#
|
|
# Configuration files for repositories to be downloaded are currently
|
|
# stored at mirror.starlingx.cengn.ca:/export/config/yum.repos.d.
|
|
# Those repos were derived from stx-tools/centos-mirror-tools/yum.repos.d
|
|
# with some modifications that will need to be automated in a
|
|
# future update.
|
|
#
|
|
# This script was originated by Scott Little.
|
|
#
|
|
|
|
LOGFILE="/export/log/daily_repo_sync.log"
|
|
YUM_CONF_DIR="/export/config"
|
|
YUM_REPOS_DIR="$YUM_CONF_DIR/yum.repos.d"
|
|
DOWNLOAD_PATH_ROOT="/export/mirror/centos"
|
|
URL_UTILS="url_utils.sh"
|
|
|
|
# These variables drive the download of the centos installer
|
|
# and other non-repo files found under the os/x86_64 subdirectory.
|
|
OS_PATH_PREFIX=/export/mirror/centos/centos
|
|
OS_PATH_SUFFIX=os/x86_64
|
|
OS_FILES="EULA GPL"
|
|
OS_DIRS="EFI LiveOS images isolinux"
|
|
|
|
DAILY_REPO_SYNC_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}" )" )"
|
|
|
|
if [ -f "$DAILY_REPO_SYNC_DIR/$URL_UTILS" ]; then
|
|
source "$DAILY_REPO_SYNC_DIR/$URL_UTILS"
|
|
elif [ -f "$DAILY_REPO_SYNC_DIR/../$URL_UTILS" ]; then
|
|
source "$DAILY_REPO_SYNC_DIR/../$URL_UTILS"
|
|
else
|
|
echo "Error: Can't find '$URL_UTILS'"
|
|
exit 1
|
|
fi
|
|
|
|
CREATEREPO=$(which createrepo_c)
|
|
if [ $? -ne 0 ]; then
|
|
CREATEREPO="createrepo"
|
|
fi
|
|
|
|
number_of_cpus () {
|
|
/usr/bin/nproc
|
|
}
|
|
|
|
if [ -f $LOGFILE ]; then
|
|
rm -f $LOGFILE
|
|
fi
|
|
|
|
ERR_COUNT=0
|
|
YUM_CONF="$YUM_CONF_DIR/yum.conf"
|
|
if [ ! -f "$YUM_CONF" ]; then
|
|
echo "Error: Missing yum.conf file at '$YUM_CONF'"
|
|
exit 1
|
|
fi
|
|
|
|
for REPO in $(find $YUM_REPOS_DIR -name '*.repo'); do
|
|
for REPO_ID in $(grep '^[[]' $REPO | sed 's#[][]##g'); do
|
|
|
|
REPO_URL=$(yum repoinfo --config="$YUM_CONF" --disablerepo="*" --enablerepo="$REPO_ID" | grep Repo-baseurl | cut -d ' ' -f 3)
|
|
DOWNLOAD_PATH="$DOWNLOAD_PATH_ROOT/$(repo_url_to_sub_path "$REPO_URL")"
|
|
|
|
echo "Processing: REPO=$REPO REPO_ID=$REPO_ID REPO_URL=$REPO_URL DOWNLOAD_PATH=$DOWNLOAD_PATH"
|
|
|
|
# Assume it's a repo of binary rpms unless repoid ends in
|
|
# some variation of 'source'.
|
|
SOURCE_FLAG=""
|
|
echo "$REPO_ID" | grep -q '[-_][Ss]ource$' && SOURCE_FLAG="--source"
|
|
echo "$REPO_ID" | grep -q '[-_][Ss]ources$' && SOURCE_FLAG="--source"
|
|
echo "$REPO_ID" | grep -q '[-_][Ss]ource[-_]' && SOURCE_FLAG="--source"
|
|
echo "$REPO_ID" | grep -q '[-_][Ss]ources[-_]' && SOURCE_FLAG="--source"
|
|
|
|
if [ ! -d "$DOWNLOAD_PATH" ]; then
|
|
CMD="mkdir -p '$DOWNLOAD_PATH'"
|
|
echo "$CMD"
|
|
eval $CMD
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: $CMD"
|
|
ERR_COUNT=$((ERR_COUNT+1))
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
CMD="reposync --norepopath $SOURCE_FLAG -l --config=$YUM_CONF --repoid=$REPO_ID --download_path='$DOWNLOAD_PATH'"
|
|
echo "$CMD"
|
|
eval $CMD
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: $CMD"
|
|
ERR_COUNT=$((ERR_COUNT+1))
|
|
continue
|
|
fi
|
|
|
|
CMD="pushd '$DOWNLOAD_PATH'"
|
|
echo "$CMD"
|
|
eval $CMD
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: $CMD"
|
|
ERR_COUNT=$((ERR_COUNT+1))
|
|
continue
|
|
fi
|
|
|
|
OPTIONS="--workers $(number_of_cpus)"
|
|
if [ -f comps.xml ]; then
|
|
OPTIONS="$OPTIONS -g comps.xml"
|
|
fi
|
|
if [ -d repodata ]; then
|
|
OPTIONS="$OPTIONS --update"
|
|
fi
|
|
|
|
CMD="$CREATEREPO $OPTIONS ."
|
|
echo "$CMD"
|
|
eval $CMD
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: $CMD"
|
|
ERR_COUNT=$((ERR_COUNT+1))
|
|
popd
|
|
continue
|
|
fi
|
|
|
|
# The following will download the centos installer and other non-repo
|
|
# files and directories found under the os/x86_64 subdirectory.
|
|
if [[ "$DOWNLOAD_PATH" == "$OS_PATH_PREFIX"/*/"$OS_PATH_SUFFIX" ]]; then
|
|
for f in $OS_FILES; do
|
|
CMD="wget '$REPO_URL/$f' --output-document='$DOWNLOAD_PATH/$f'"
|
|
echo "$CMD"
|
|
eval $CMD
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: $CMD"
|
|
ERR_COUNT=$((ERR_COUNT+1))
|
|
continue
|
|
fi
|
|
done
|
|
|
|
for d in $OS_DIRS; do
|
|
CMD="wget -r -N -l 3 -nv -np -e robots=off --reject-regex '.*[?].*' --reject index.html '$REPO_URL/$d/' -P '$OS_PATH_PREFIX/'"
|
|
echo "$CMD"
|
|
eval $CMD
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: $CMD"
|
|
ERR_COUNT=$((ERR_COUNT+1))
|
|
continue
|
|
fi
|
|
done
|
|
fi
|
|
|
|
popd
|
|
done
|
|
done | tee $LOGFILE
|
|
|
|
if [ $ERR_COUNT -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|