diff --git a/bsp-files/kickstarts/post_miniboot_controller.cfg b/bsp-files/kickstarts/post_miniboot_controller.cfg index 885f7dd6..df8ebfd2 100644 --- a/bsp-files/kickstarts/post_miniboot_controller.cfg +++ b/bsp-files/kickstarts/post_miniboot_controller.cfg @@ -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