Stop miniboot from fetching sw repo from sc on local install
This update implements the following 4 changes 1. Stop miniboot kickstart from fetching the software repo from the system controller on a local install. 2. Moves the patch Packages, repodata and metadata fetch so that it is done for both local and remote install modes. 3. Fixes prestaging parsing to handle the case where the prestaging dir is completely empty. It was not handling the 'for file in *' properly when empty. 4. Add braces around the wlog $KS prefix. Test Plan: Testing In Progress PASS: Verify Local install does not download the sw repo from sc PASS: Verify Remote install does download the sw repo from sc PASS: Verify subcloud patching for both local and remote install PASS: Verify Miniboot logging PASS: Verify prestage dir handling - no files - bad images check - bad iso image check - no iso found - valid prestaging Change-Id: I2858deb5d18d646f46799b1d850777e4bb2f88a6 Story: 2009291 Task: 43864 Signed-off-by: Eric MacDonald <eric.macdonald@windriver.com>
This commit is contained in:
parent
d2abf378d4
commit
653e3dda01
@ -3,17 +3,19 @@
|
||||
# Source common functions
|
||||
. /tmp/ks-functions.sh
|
||||
|
||||
SW_VERSION=xxxPLATFORM_RELEASExxx
|
||||
STAGING_DIR="platform-backup"
|
||||
BACKUP_PART_LABEL=Platform\\x20Backup
|
||||
BACKUP_DEVICE=/dev/disk/by-partlabel/${BACKUP_PART_LABEL}
|
||||
BACKUP_MOUNT=/mnt/platform-backup
|
||||
BACKUP_MOUNT=/mnt/${STAGING_DIR}
|
||||
BOOTIMAGE_ISO=""
|
||||
BOOTIMAGE_MOUNT=/mnt/bootimage
|
||||
KS="Miniboot pre:"
|
||||
|
||||
wlog "$KS local install check"
|
||||
|
||||
error=false
|
||||
wlog "${KS} local install check"
|
||||
|
||||
image=false
|
||||
check=true
|
||||
# Look for and validate the local iso image
|
||||
if [ -e ${BACKUP_DEVICE} ]; then
|
||||
mkdir -p ${BACKUP_MOUNT}
|
||||
@ -21,43 +23,69 @@ if [ -e ${BACKUP_DEVICE} ]; then
|
||||
rc=$?
|
||||
if [ $rc -eq 0 ] ; then
|
||||
sleep 2
|
||||
cd ${BACKUP_MOUNT}/xxxPLATFORM_RELEASExxx
|
||||
for file in * ; do
|
||||
filename="${file%.*}"
|
||||
extension="${file##*.}"
|
||||
wlog "$KS prestaged file : ${file}"
|
||||
if [ "${extension}" = "md5" ] ; then
|
||||
md5sum -c "${file}"
|
||||
if [ $? -eq 0 ] ; then
|
||||
wlog "$KS ${filename} check passed"
|
||||
else
|
||||
wlog "$KS ${filename} check failed"
|
||||
error=true
|
||||
fi
|
||||
elif [ "${extension}" = "iso" ] ; then
|
||||
# found the iso name for the mount operation below
|
||||
BOOTIMAGE_ISO=${BACKUP_MOUNT}/xxxPLATFORM_RELEASExxx/${file}
|
||||
fi
|
||||
done
|
||||
if [ "$error" = false ] ; then
|
||||
if [ -f ${BOOTIMAGE_ISO} ]; then
|
||||
wlog "$KS local iso found : ${BOOTIMAGE_ISO}"
|
||||
mkdir -p ${BOOTIMAGE_MOUNT}
|
||||
mount -o loop ${BOOTIMAGE_ISO} ${BOOTIMAGE_MOUNT}
|
||||
wlog "$KS local iso mounted"
|
||||
# does the prestaging dir for the specified sw version exist
|
||||
if [ -d "${BACKUP_MOUNT}/${SW_VERSION}" ] ; then
|
||||
|
||||
# are there files in it ?
|
||||
if [ "$(ls -A ${BACKUP_MOUNT}/${SW_VERSION})" ] ; then
|
||||
|
||||
# change to prestaging dir and load the file names
|
||||
cd ${BACKUP_MOUNT}/${SW_VERSION}
|
||||
|
||||
# loop over the files if there are any
|
||||
for file in $(ls -A .) ; do
|
||||
filename="${file%.*}"
|
||||
extension="${file##*.}"
|
||||
wlog "${KS} prestaged file : ${file}"
|
||||
if [ "${extension}" = "md5" ] ; then
|
||||
md5sum -c "${file}"
|
||||
if [ $? -eq 0 ] ; then
|
||||
wlog "${KS} ${filename} check passed"
|
||||
else
|
||||
wlog "${KS} ${filename} check failed"
|
||||
check=false
|
||||
|
||||
fi
|
||||
elif [ "${extension}" = "iso" ] ; then
|
||||
# found the iso name for the mount operation below
|
||||
BOOTIMAGE_ISO=${BACKUP_MOUNT}/${SW_VERSION}/${file}
|
||||
wlog "${KS} found prestaged iso image ${BOOTIMAGE_ISO}"
|
||||
image=true
|
||||
fi
|
||||
done
|
||||
else
|
||||
wlog "$KS local iso file not found : ${BOOTIMAGE_ISO}"
|
||||
wlog "${KS} no prestaged files"
|
||||
fi
|
||||
else
|
||||
wlog "$KS local install rejected due to validity check error"
|
||||
wlog "${KS} Error: ${BACKUP_MOUNT} not mounted"
|
||||
fi
|
||||
|
||||
if [ "${check}" = true ] ; then
|
||||
if [ "${image}" = true -a "${BOOTIMAGE_ISO}" != "" ]; then
|
||||
wlog "${KS} local iso found : ${BOOTIMAGE_ISO}"
|
||||
mkdir -p ${BOOTIMAGE_MOUNT}
|
||||
mount -o loop ${BOOTIMAGE_ISO} ${BOOTIMAGE_MOUNT}
|
||||
wlog "${KS} local iso mounted for local install"
|
||||
else
|
||||
wlog "${KS} local iso file not found"
|
||||
fi
|
||||
else
|
||||
wlog "${KS} local install rejected due to validity check error"
|
||||
fi
|
||||
else
|
||||
wlog "$KS mount of ${BACKUP_DEVICE} to ${BACKUP_MOUNT} failed rc:$rc"
|
||||
wlog "${KS} mount of ${BACKUP_DEVICE} to ${BACKUP_MOUNT} failed rc:$rc"
|
||||
fi
|
||||
else
|
||||
wlog "$KS backup device ${BACKUP_DEVICE} does not exist"
|
||||
wlog "${KS} backup device ${BACKUP_DEVICE} does not exist"
|
||||
fi
|
||||
|
||||
#
|
||||
# This controls where the packages come from.
|
||||
# Lower cost has higher priority ; making local install preferred.
|
||||
#
|
||||
# If ${BOOTIMAGE_MOUNT} exists then install from local iso - Local Install
|
||||
# Otherwise, they are fetched from the System Controller - Remote Install
|
||||
#
|
||||
cat << EOF > /tmp/repo-include
|
||||
repo --name=local-base --cost=100 --baseurl=file://${BOOTIMAGE_MOUNT}/
|
||||
repo --name=local-updates --cost=100 --baseurl=file://${BOOTIMAGE_MOUNT}/patches/
|
||||
@ -77,15 +105,15 @@ EOF
|
||||
|
||||
KS="Miniboot post:"
|
||||
|
||||
# wlog "$KS cmdLine: $(cat /proc/cmdline)"
|
||||
# wlog "${KS} cmdLine: $(cat /proc/cmdline)"
|
||||
if [ -e /dev/disk/by-label/oe_iso_boot ]; then
|
||||
# This is a hybrid ISO/network install. Mount the media to ensure Anaconda
|
||||
# ejects it on reboot.
|
||||
mkdir /mnt/iso
|
||||
wlog "$KS mount for eject"
|
||||
wlog "${KS} mount for eject"
|
||||
mount /dev/disk/by-label/oe_iso_boot /mnt/iso
|
||||
else
|
||||
wlog "$KS /dev/disk/by-label/oe_iso_boot does not exist"
|
||||
wlog "${KS} /dev/disk/by-label/oe_iso_boot does not exist"
|
||||
fi
|
||||
|
||||
# persist the default http port number to platform configuration. This
|
||||
@ -123,111 +151,110 @@ KS="Miniboot post:"
|
||||
if [ -d ${SYSIMAGE_MOUNT} ] ; then
|
||||
|
||||
files="$(ls -lrt ${SYSIMAGE_MOUNT})"
|
||||
wlog "$KS ${SYSIMAGE_MOUNT} files : $files[@]"
|
||||
wlog "${KS} ${SYSIMAGE_MOUNT} files : $files[@]"
|
||||
if [ -d ${FEED_DIR} ] ; then
|
||||
files=$(ls -lrt ${FEED_MOUNT})
|
||||
wlog "$KS $FEED_DIR files : $files[@]"
|
||||
wlog "${KS} $FEED_DIR files : $files[@]"
|
||||
else
|
||||
wlog "$KS error : feed dir '$FEED_DIR' does not exist"
|
||||
wlog "${KS} error : feed dir '$FEED_DIR' does not exist"
|
||||
fi
|
||||
|
||||
# Check updates Dir
|
||||
if [ -d ${UPDATES_DIR} ] ; then
|
||||
files=$(ls -lrt ${UPDATES_DIR})
|
||||
wlog "$KS $UPDATES_DIR files : $files[@]"
|
||||
wlog "${KS} $UPDATES_DIR files : $files[@]"
|
||||
else
|
||||
wlog "$KS $UPDATES_DIR does not exist"
|
||||
wlog "${KS} $UPDATES_DIR does not exist"
|
||||
fi
|
||||
|
||||
# Check Packages Dir
|
||||
if [ -d ${PATCHING_DIR} ] ; then
|
||||
files=$(ls -lrt ${PATCHING_DIR})
|
||||
wlog "$KS $PATCHING_DIR files : $files[@]"
|
||||
wlog "${KS} $PATCHING_DIR files : $files[@]"
|
||||
|
||||
if [ -d ${PATCHING_DIR}/metadata ] ; then
|
||||
files=$(ls -lrt ${PATCHING_DIR}/metadata)
|
||||
wlog "$KS $PATCHING_DIR/metadata files : $files[@]"
|
||||
wlog "${KS} $PATCHING_DIR/metadata files : $files[@]"
|
||||
|
||||
if [ -d ${PATCHING_DIR}/metadata/applied ] ; then
|
||||
files=$(ls -lrt ${PATCHING_DIR}/metadata/applied)
|
||||
wlog "$KS $PATCHING_DIR/metadata/applied files : $files[@]"
|
||||
wlog "${KS} $PATCHING_DIR/metadata/applied files : $files[@]"
|
||||
else
|
||||
wlog "$KS $PATCHING_DIR/metadata/applied does not exist"
|
||||
wlog "${KS} $PATCHING_DIR/metadata/applied does not exist"
|
||||
fi
|
||||
if [ -d ${PATCHING_DIR}/metadata/available ] ; then
|
||||
files=$(ls -lrt ${PATCHING_DIR}/metadata/available)
|
||||
wlog "$KS $PATCHING_DIR/metadata/available files : $files[@]"
|
||||
wlog "${KS} $PATCHING_DIR/metadata/available files : $files[@]"
|
||||
else
|
||||
wlog "$KS $PATCHING_DIR/metadata/available does not exist"
|
||||
wlog "${KS} $PATCHING_DIR/metadata/available does not exist"
|
||||
fi
|
||||
else
|
||||
wlog "$KS $PATCHING_DIR/metadata does not exist"
|
||||
wlog "${KS} $PATCHING_DIR/metadata does not exist"
|
||||
fi
|
||||
else
|
||||
wlog "$KS $PATCHING_DIR does not exist"
|
||||
wlog "${KS} $PATCHING_DIR does not exist"
|
||||
fi
|
||||
|
||||
# Check Packages Dir
|
||||
if [ -d ${PACKAGES_DIR} ] ; then
|
||||
files=$(ls -lrt ${PACKAGES_DIR})
|
||||
wlog "$KS $PACKAGES_DIR files : $files[@]"
|
||||
wlog "${KS} $PACKAGES_DIR files : $files[@]"
|
||||
else
|
||||
wlog "$KS $PACKAGES_DIR does not exist"
|
||||
wlog "${KS} $PACKAGES_DIR does not exist"
|
||||
fi
|
||||
|
||||
else
|
||||
wlog "$KS Error : $SYSIMAGE_MOUNT does not exists or is not a directory"
|
||||
wlog "${KS} Error : $SYSIMAGE_MOUNT does not exists or is not a directory"
|
||||
fi
|
||||
|
||||
|
||||
# Decide on install mode ; local or remote
|
||||
if [ -d /mnt/bootimage ]; then
|
||||
srcdir=/mnt/bootimage
|
||||
wlog "$KS local install - ${srcdir}"
|
||||
else
|
||||
# Remote System Controller
|
||||
srcdir=/mnt/install/source
|
||||
wlog "$KS remote install - ${srcdir}"
|
||||
fi
|
||||
|
||||
# prepare to boot other hosts by mirroring sw repository
|
||||
if [ -d $srcdir/Packages ] ; then
|
||||
wlog "$KS copying software repository $srcdir/Packages"
|
||||
wlog "${KS} copying software repository $srcdir/Packages"
|
||||
mkdir -p ${FEED_DIR}
|
||||
cp -r $srcdir/Packages ${FEED_DIR}/Packages
|
||||
if [ -d $srcdir/repodata ] ; then
|
||||
cp -r $srcdir/repodata ${FEED_DIR}/repodata
|
||||
else
|
||||
wlog "$KS $srcdir/repodata dir does not exist"
|
||||
wlog "${KS} $srcdir/repodata dir does not exist"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d $srcdir/patches ]; then
|
||||
if [ -d $srcdir/patches/Packages ] ; then
|
||||
wlog "$KS copying patch Packages $srcdir/patches/Packages"
|
||||
wlog "${KS} copying patch Packages $srcdir/patches/Packages"
|
||||
mkdir -p ${UPDATES_DIR}
|
||||
cp -r $srcdir/patches/Packages ${UPDATES_DIR}/Packages
|
||||
else
|
||||
wlog "$KS $srcdir/patches/Packages does not exist"
|
||||
wlog "${KS} $srcdir/patches/Packages does not exist"
|
||||
fi
|
||||
|
||||
if [ -d $srcdir/patches/repodata ] ; then
|
||||
wlog "$KS copying patch repository $srcdir/patches/repodata"
|
||||
wlog "${KS} copying patch repository $srcdir/patches/repodata"
|
||||
mkdir -p ${UPDATES_DIR}
|
||||
cp -r $srcdir/patches/repodata ${UPDATES_DIR}/repodata
|
||||
else
|
||||
wlog "$KS $srcdir/patches/repodata does not exist"
|
||||
wlog "${KS} $srcdir/patches/repodata does not exist"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d $srcdir/patches/metadata ] ; then
|
||||
mkdir -p ${PATCHING_DIR}
|
||||
wlog "$KS copying $srcdir/patches/metadata to ${PATCHING_DIR}"
|
||||
wlog "${KS} copying $srcdir/patches/metadata to ${PATCHING_DIR}"
|
||||
cp -r $srcdir/patches/metadata ${PATCHING_DIR}/metadata
|
||||
fi
|
||||
|
||||
if [ -d $srcdir/patches ]; then
|
||||
mkdir -p ${PACKAGES_DIR}
|
||||
wlog "$KS copying packages"
|
||||
wlog "${KS} copying packages"
|
||||
find ${UPDATES_DIR}/Packages -name '*.rpm' \
|
||||
| xargs --no-run-if-empty -I files cp --preserve=all files ${PACKAGES_DIR}
|
||||
fi
|
||||
@ -246,7 +273,7 @@ KS="Miniboot post:"
|
||||
INSTALL_UUID=`uuidgen`
|
||||
echo $INSTALL_UUID > /www/pages/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid
|
||||
echo "INSTALL_UUID=$INSTALL_UUID" >> /etc/platform/platform.conf
|
||||
wlog "$KS updating platform.conf with install uuid : ${INSTALL_UUID}"
|
||||
wlog "${KS} updating platform.conf with install uuid : ${INSTALL_UUID}"
|
||||
|
||||
# Mirror remote software repositories
|
||||
anaconda_logdir=/var/log/anaconda
|
||||
@ -265,70 +292,75 @@ fi
|
||||
#
|
||||
# - Packages
|
||||
# - Repodata
|
||||
# - Patch Packages
|
||||
# - Patches repodata
|
||||
# - Patches metadata
|
||||
# - Save all patch packages to /opt/patching/packages/xxxPLATFORM_RELEASExxx
|
||||
#
|
||||
FEED_DIR=/www/pages/feed/rel-xxxPLATFORM_RELEASExxx
|
||||
wlog "$KS feed dir $FEED_DIR"
|
||||
if [ -d ${FEED_DIR} ]; then
|
||||
mkdir -p ${FEED_DIR}/Packages
|
||||
mkdir -p ${FEED_DIR}/repodata
|
||||
cd ${FEED_DIR}
|
||||
declare -i cut_dirs=NUM_DIRS
|
||||
if [ ! -d "${FEED_DIR}/Packages" ]; then
|
||||
mkdir -p "${FEED_DIR}/Packages"
|
||||
mkdir -p "${FEED_DIR}/repodata"
|
||||
cd "${FEED_DIR}"
|
||||
feed_url=xxxHTTP_URLxxx
|
||||
declare -i cut_dirs=NUM_DIRS
|
||||
|
||||
wlog "$KS downloading software repository $feed_url"
|
||||
wlog "${KS} Remote Install"
|
||||
|
||||
wlog "${KS} downloading software repository $feed_url"
|
||||
|
||||
# Fetch Packages
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$cut_dirs $feed_url/Packages/ -o $anaconda_logdir/rpmget.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/rpmget.log
|
||||
|
||||
wlog "${KS} download of $feed_url/Packages/ complete"
|
||||
|
||||
# Fetch Repodata
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$cut_dirs $feed_url/repodata/ -o $anaconda_logdir/rpmget_repo.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/rpmget_repo.log
|
||||
|
||||
# Fetch Patch Package Data quietly
|
||||
patches_url=xxxHTTP_URLxxx/patches
|
||||
wget ${NOVERIFYSSL_WGET_OPT} -q --spider ${patches_url}/
|
||||
if [ $? -eq 0 ]; then
|
||||
wlog "$KS downloading patch repository $patches_url"
|
||||
cd /www/pages
|
||||
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||
cd updates/rel-xxxPLATFORM_RELEASExxx
|
||||
declare -i patches_cut_dirs=$((cut_dirs+1))
|
||||
|
||||
wlog "$KS fetch packages"
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$patches_cut_dirs $patches_url/Packages/ -o $anaconda_logdir/patches_rpmget.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget.log
|
||||
|
||||
wlog "$KS fetch package repodata"
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$patches_cut_dirs $patches_url/repodata/ -o $anaconda_logdir/patches_rpmget_repo.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_repo.log
|
||||
|
||||
mkdir -p /opt/patching/metadata
|
||||
mkdir -p /opt/patching/packages/xxxPLATFORM_RELEASExxx
|
||||
cd /opt/patching
|
||||
|
||||
wlog "$KS fetch patch metadata"
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$patches_cut_dirs $patches_url/metadata/ -o $anaconda_logdir/patches_rpmget_metadata.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_metadata.log
|
||||
|
||||
wlog "$KS save a copy of all patch packages, preserve attributes"
|
||||
find /www/pages/updates/rel-xxxPLATFORM_RELEASExxx/Packages -name '*.rpm' \
|
||||
| xargs --no-run-if-empty -I files cp --preserve=all files /opt/patching/packages/xxxPLATFORM_RELEASExxx/
|
||||
else
|
||||
wlog "$KS get from patches url '$patches_url' failed"
|
||||
fi
|
||||
wlog "${KS} download of $feed_url/repodata/ complete"
|
||||
else
|
||||
wlog "$KS feed dir $FEED_DIR does not exist"
|
||||
wlog "${KS} Local Install"
|
||||
fi
|
||||
|
||||
# Fetch Patch Package Data quietly
|
||||
# - Patch Packages
|
||||
# - Patches repodata
|
||||
# - Patches metadata
|
||||
# - Save all patch packages to /opt/patching/packages/xxxPLATFORM_RELEASExxx
|
||||
patches_url=xxxHTTP_URLxxx/patches
|
||||
wget ${NOVERIFYSSL_WGET_OPT} -q --spider ${patches_url}/
|
||||
if [ $? -eq 0 ]; then
|
||||
wlog "${KS} downloading patch repository $patches_url"
|
||||
cd /www/pages
|
||||
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/Packages
|
||||
mkdir -p updates/rel-xxxPLATFORM_RELEASExxx/repodata
|
||||
cd updates/rel-xxxPLATFORM_RELEASExxx
|
||||
declare -i patches_cut_dirs=$((cut_dirs+1))
|
||||
|
||||
wlog "${KS} fetch packages"
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$patches_cut_dirs $patches_url/Packages/ -o $anaconda_logdir/patches_rpmget.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget.log
|
||||
|
||||
wlog "${KS} fetch package repodata"
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$patches_cut_dirs $patches_url/repodata/ -o $anaconda_logdir/patches_rpmget_repo.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_repo.log
|
||||
|
||||
mkdir -p /opt/patching/metadata
|
||||
mkdir -p /opt/patching/packages/xxxPLATFORM_RELEASExxx
|
||||
cd /opt/patching
|
||||
|
||||
wlog "${KS} fetch patch metadata"
|
||||
wget ${NOVERIFYSSL_WGET_OPT} --mirror --no-parent --no-host-directories --reject 'index.html*' \
|
||||
--cut-dirs=$patches_cut_dirs $patches_url/metadata/ -o $anaconda_logdir/patches_rpmget_metadata.log \
|
||||
|| report_post_failure_with_logfile $anaconda_logdir/patches_rpmget_metadata.log
|
||||
|
||||
wlog "${KS} save a copy of all patch packages, preserve attributes"
|
||||
find /www/pages/updates/rel-xxxPLATFORM_RELEASExxx/Packages -name '*.rpm' \
|
||||
| xargs --no-run-if-empty -I files cp --preserve=all files /opt/patching/packages/xxxPLATFORM_RELEASExxx/
|
||||
else
|
||||
wlog "${KS} get from patches url '$patches_url' failed"
|
||||
fi
|
||||
|
||||
%end
|
||||
|
Loading…
x
Reference in New Issue
Block a user