Support CentOS previous release in subcloud remote install
This commit introduces support for installing CentOS-based previous release (21.12) in Debian. There are two main components in this commit: 1. Handle the label change for the backup partition: Platform Backup in 21.12 vs 'platform_backup' in Debian This is accomplished by ignoring the label/partlabel entirely when searching for an existing backup partition. Instead, the partition GUID is used to locate the partition. The GUID does not change between distributions. 2. Use pre-bundled CentOS kickstarts for subcloud installs in Debian Since modifications are required to the CentOS kickstart files for the above, we copy the relevant pre-bundled centos kickstarts (for miniboot and prestaged ISO only) into a centos-specific directory under the Debian /var/www/pages/feed/rel-${platform_release}/kickstart directory structure, in order to be available for the gen-bootloader-iso-centos.sh utility. These files are included in the platform-kickstarts .deb package. NOTES on how the pre-bundled files are created: - We cannot use the files under bsp-file/kickstarts/*.cfg, since they are not valid for 21.12 release (e.g. they refer to /var/www) - Instead, files were taken from a valid 21.12 release and manually merged with the pre-bundled files generated from this repo GOING FORWARD: Only the bundled files at kickstart/files/centos/*.cfg will be maintained. At a later time, we may choose to remove the partial kickstarts under bsp-files/kickstarts/*.cfg, since they are not used anywhere. Test Plan PASS: - Build full ISO, verify that the /var/www/pages/feed/rel-23.09/kickstart/centos directory is populated with the pre-bundled kickstart files - Verify previous-release CentOS subcloud install/deployment under Debian (requires patched 22.12 load) - Verify current-release subcloud install under Debian Story: 2010611 Task: 48268 Signed-off-by: Kyle MacLeod <kyle.macleod@windriver.com> Change-Id: I1b7f76212e222dea7c6e586e4e9492f8a86a955e
This commit is contained in:
parent
0510b0c1a7
commit
5f3c54297d
|
@ -178,12 +178,13 @@ if [ -n "${BACKUP_DEVICE}" ] && [ -e "${BACKUP_DEVICE}" ]; then
|
|||
wlog "${KS} ${BACKUP_MOUNT} not mounted"
|
||||
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
|
||||
|
||||
wlog "${KS} iso_check: ${iso_check} iso_mount: ${iso_mount}"
|
||||
if [ "${iso_check}" = true -a "${iso_mount}" = true ] ; then
|
||||
wlog "${KS} Local Install ready"
|
||||
elif [ "${iso_mount}" = false ] ; then
|
||||
|
@ -192,7 +193,7 @@ fi
|
|||
|
||||
# Make sure the prestage directory exists, as well as the required subdirectories.
|
||||
exists_prestage=false
|
||||
ilog "${KS} Checking prestaged content PRESTAGE_DIR: ${PRESTAGE_DIR}"
|
||||
wlog "${KS} Checking prestaged content PRESTAGE_DIR: ${PRESTAGE_DIR}"
|
||||
if [ ! -e ${PRESTAGE_DIR} ] || [ ! -e ${PRESTAGE_DIR}/Packages ] || [ ! -e ${PRESTAGE_DIR}/repodata ]; then
|
||||
exists_prestage=false
|
||||
wlog "${KS} Prestaged content not present"
|
||||
|
@ -229,15 +230,15 @@ fi
|
|||
# If this fails, they are fetched from the System Controller - Remote Install
|
||||
#
|
||||
if [ "${exists_prestage}" = true ]; then
|
||||
wlog "${KS} Prestage directory found: ${PRESTAGE_DIR}"
|
||||
wlog "${KS} Prestage directory found: ${PRESTAGE_DIR}. Proceeding with prestaged install."
|
||||
cat << EOF > /tmp/repo-include
|
||||
repo --name=local-base --cost=100 --baseurl=file://${PRESTAGE_DIR}/
|
||||
repo --name=local-updates --cost=100 --baseurl=file://${PRESTAGE_DIR}/patches/
|
||||
repo --name=remote-base --cost=200 --baseurl=xxxHTTP_URLxxx/
|
||||
repo --name=remote-updates --cost=200 --baseurl=xxxHTTP_URLxxx/patches/
|
||||
EOF
|
||||
elif [ "${iso_check}" = true -a "${iso_mount}" = true ] ; then
|
||||
wlog "${KS} Packages will be retrieved from prestage iso"
|
||||
elif [ "${iso_check}" = true ] && [ "${iso_mount}" = true ] ; then
|
||||
wlog "${KS} Packages will be retrieved from prestage ISO. Proceeding with local (ISO) 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/
|
||||
|
@ -246,7 +247,7 @@ elif [ "${iso_check}" = true -a "${iso_mount}" = true ] ; then
|
|||
EOF
|
||||
else
|
||||
# Mirror remote software repositories
|
||||
wlog "${KS} Staging Repo"
|
||||
wlog "${KS} Staging Repo via ${feed_url}"
|
||||
|
||||
# Check for inst.noverifyssl
|
||||
if grep -q inst.noverifyssl /proc/cmdline; then
|
||||
|
@ -317,6 +318,7 @@ else
|
|||
repo --name=remote-updates --cost=200 --baseurl=xxxHTTP_URLxxx/patches/
|
||||
EOF
|
||||
fi
|
||||
wlog "Using repo config:\n$(cat /tmp/repo-include)"
|
||||
%end
|
||||
|
||||
# Repository arguments from %pre
|
||||
|
|
|
@ -15,11 +15,11 @@ KS="Prestaging post:"
|
|||
# much in-service controller function setup stuff.
|
||||
#
|
||||
# Therefore, it is added here to ensure that if the prestaging
|
||||
# ISO's pre_disk_aio.cfg 'created' the 'Platform Backup'
|
||||
# ISO's pre_disk_aio.cfg 'created' the 'Platform Backup/platform_backup'
|
||||
# partition then it will get labeled for prestaging group.
|
||||
#
|
||||
# This prestaging kickstart file uses the 'label' to find the
|
||||
# 'Platform Backup' partition for its prestaging function.
|
||||
# This prestaging kickstart file uses the GUID to find the
|
||||
# platform backup partition for its prestaging function.
|
||||
#
|
||||
change_guid=/tmp/backup-guid-change.sh
|
||||
if [ -f "$change_guid" ]; then
|
||||
|
@ -50,8 +50,8 @@ wlog "${KS} install source : $SOURCE_DIR"
|
|||
|
||||
export SW_VERSION=xxxPLATFORM_RELEASExxx
|
||||
export STAGING_DIR="platform-backup"
|
||||
export PRESTAGING_PART_LABEL=Platform\\x20Backup
|
||||
export PRESTAGING_DEVICE=/dev/disk/by-partlabel/${PRESTAGING_PART_LABEL}
|
||||
export BACKUP_PART_GUID="BA5EBA11-0000-1111-2222-000000000002"
|
||||
export BACKUP_DEVICE=
|
||||
export PRESTAGING_REPO_DIR="${SOURCE_DIR}/opt/${STAGING_DIR}"
|
||||
export PRESTAGING_LOCAL_DIR="/mnt/${STAGING_DIR}"
|
||||
|
||||
|
@ -75,59 +75,54 @@ elif [ ! -d "${PRESTAGING_REPO_DIR}/${SW_VERSION}" ] ; then
|
|||
report_prestaging_failure_with_msg "${msg}"
|
||||
fi
|
||||
|
||||
# Poll for the Platform Backup partition label.
|
||||
# TODO: Turn this into a function.
|
||||
found=false
|
||||
# Poll for the platform backup GUID
|
||||
for i in {1..6} ; do
|
||||
|
||||
files=$(ls /dev/disk/by-partlabel)
|
||||
for file in $files ; do
|
||||
if [ "$file" == "Platform\x20Backup" ] ; then
|
||||
if [ ${i} -gt 1 ] ; then
|
||||
wlog "${KS} prestaging partition label found in ${i} audit"
|
||||
fi
|
||||
found=true
|
||||
# Search for a backup partition, using GUID (which appears lower case in the blkid output):
|
||||
while read -r device_path; do
|
||||
if [ "$(blkid -p "${device_path}" | grep -c -i "${BACKUP_PART_GUID}")" -gt 0 ]; then
|
||||
BACKUP_DEVICE=${device_path}
|
||||
wlog "Found backup device: ${BACKUP_DEVICE}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
done <<<"$(lsblk --noheadings --list --path --output NAME)"
|
||||
|
||||
if [ "$found" = true ] ; then
|
||||
if [ -n "${BACKUP_DEVICE}" ] ; then
|
||||
break
|
||||
else
|
||||
wlog "${KS} searching for 'Platform\x20Backup' label ${i}"
|
||||
wlog "${KS} searching for backup partition ${BACKUP_PART_GUID} GUID [${i}/6]"
|
||||
sleep 10
|
||||
fi
|
||||
done
|
||||
|
||||
# if the label is not visable yet then we will see it in a mount failure
|
||||
if [ ! -d "${PRESTAGING_LOCAL_DIR}" ] ; then
|
||||
wlog "${KS} mounting ${PRESTAGING_LOCAL_DIR}"
|
||||
mkdir -p ${PRESTAGING_LOCAL_DIR}
|
||||
mount ${PRESTAGING_DEVICE} ${PRESTAGING_LOCAL_DIR}
|
||||
rc=$?
|
||||
if [ $rc -eq 0 ] ; then
|
||||
sleep 2
|
||||
if [ ! -d "${PRESTAGING_LOCAL_DIR}" ] ; then
|
||||
wlog "${KS} mount of staging '${PRESTAGING_LOCAL_DIR}' does not exist"
|
||||
error=true
|
||||
else
|
||||
error=false
|
||||
fi
|
||||
else
|
||||
wlog "${KS} mount of '${PRESTAGING_DEVICE}' to '${PRESTAGING_LOCAL_DIR}' failed rc:${rc}"
|
||||
error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$error" = true ] ; then
|
||||
msg="Unable to mount ${PRESTAGING_LOCAL_DIR}"
|
||||
if [ -z "${BACKUP_DEVICE}" ]; then
|
||||
msg="Could not find backup device from GUID ${BACKUP_PART_GUID}"
|
||||
wlog "${KS} Prestaging failed: ${msg}"
|
||||
report_prestaging_failure_with_msg "${msg}"
|
||||
fi
|
||||
|
||||
errmsg=
|
||||
if [ ! -d "${PRESTAGING_LOCAL_DIR}" ] ; then
|
||||
wlog "${KS} mounting ${PRESTAGING_LOCAL_DIR}"
|
||||
mkdir -p "${PRESTAGING_LOCAL_DIR}"
|
||||
mount "${BACKUP_DEVICE}" "${PRESTAGING_LOCAL_DIR}"
|
||||
rc=$?
|
||||
if [ $rc -eq 0 ] ; then
|
||||
sleep 2
|
||||
if [ ! -d "${PRESTAGING_LOCAL_DIR}" ] ; then
|
||||
errmsg="${KS} mount of staging '${PRESTAGING_LOCAL_DIR}' does not exist"
|
||||
fi
|
||||
else
|
||||
errmsg="${KS} mount of '${BACKUP_DEVICE}' to '${PRESTAGING_LOCAL_DIR}' failed rc:${rc}"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$errmsg" ] ; then
|
||||
wlog "${KS} Prestaging failed: ${errmsg}"
|
||||
report_prestaging_failure_with_msg "${errmsg}"
|
||||
fi
|
||||
|
||||
# nuke local prestaging dir - cleanup operation
|
||||
if [ -d ${PRESTAGING_LOCAL_DIR}/${SW_VERSION} ] ; then
|
||||
wlog "${KS} wiping prestaging dir '${PRESTAGING_LOCAL_DIR}/${SW_VERSION}'"
|
||||
wlog "${KS} cleanup; wiping existing prestaging dir '${PRESTAGING_LOCAL_DIR}/${SW_VERSION}'"
|
||||
rm -rf ${PRESTAGING_LOCAL_DIR}/${SW_VERSION}
|
||||
fi
|
||||
|
||||
|
@ -138,8 +133,14 @@ mkdir ${PRESTAGING_LOCAL_DIR}/${SW_VERSION}
|
|||
cd ${PRESTAGING_LOCAL_DIR}/${SW_VERSION}
|
||||
|
||||
# copy repo prestaging files to the local mount
|
||||
wlog "${KS} copy prestaging files"
|
||||
cp -a ${PRESTAGING_REPO_DIR}/${SW_VERSION} ${PRESTAGING_LOCAL_DIR}
|
||||
wlog "${KS} copy prestaging files: from '${PRESTAGING_REPO_DIR}/${SW_VERSION}' to '${PRESTAGING_LOCAL_DIR}'"
|
||||
cp -a "${PRESTAGING_REPO_DIR}/${SW_VERSION}" "${PRESTAGING_LOCAL_DIR}/"
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ] ; then
|
||||
msg="copy failed from '${PRESTAGING_REPO_DIR}/${SW_VERSION}' to '${PRESTAGING_LOCAL_DIR}/', rc=${rc}"
|
||||
wlog "${KS} Prestaging Failed: ${msg}"
|
||||
report_prestaging_failure_with_msg "${msg}"
|
||||
fi
|
||||
wlog "${KS} prestaging files copy done"
|
||||
|
||||
# loop over all the prestaged files
|
||||
|
|
|
@ -258,6 +258,7 @@ do
|
|||
# GPT partitions, they save partition info at the start and the end of the block.
|
||||
# Do this for each partition on the disk, as well.
|
||||
part_numbers=( $(parted -s $dev print | awk '$1 == "Number" {i=1; next}; i {print $1}') )
|
||||
wlog "WIPE_HDD: checking dev: $dev, part_numbers: $part_numbers, rootfs_device: $rootfs_device, boot_device: $boot_device"
|
||||
for part_number in "${part_numbers[@]}"; do
|
||||
part=$dev$part_number
|
||||
case $part in
|
||||
|
@ -267,12 +268,15 @@ do
|
|||
esac
|
||||
sgdisk_part_info=$(sgdisk -i $part_number $dev)
|
||||
part_type_guid=$(echo "$sgdisk_part_info" | grep "$part_type_guid_str" | awk '{print $4;}')
|
||||
if [ "$dev" == "$rootfs_device" ]; then
|
||||
if [ "$dev" = "$rootfs_device" ] || [ "$dev" = "$boot_device" ]; then
|
||||
wlog "Checking for backup partition: $part"
|
||||
part_fstype=$(exec_retry 5 0.5 "blkid -s TYPE -o value $part")
|
||||
if [ "$part_type_guid" == $BACKUP_PART_GUID -a "${part_fstype}" == "ext4" ]; then
|
||||
if [ "$part_type_guid" = "$BACKUP_PART_GUID" ] && [ "${part_fstype}" = "ext4" ]; then
|
||||
wlog "Skipping wipe backup partition $part"
|
||||
BACKUP_CREATED=1
|
||||
continue
|
||||
else
|
||||
wlog "Skipping part:$part_number $dev GUID: $part_type_guid"
|
||||
fi
|
||||
fi
|
||||
wlog "Wiping partition $part"
|
||||
|
|
|
@ -82,17 +82,17 @@ fi
|
|||
# it tries to reconfigure the partition in a later step. We delete the partition now so that
|
||||
# parted succeeds in the later step.
|
||||
|
||||
partition_id=$(parted -s ${rootfs_device} print | awk '/Platform Backup/ { print $1; }')
|
||||
# The backup partition may be labeled 'Platform Backup' (centos) or 'platform_backup' (debian)
|
||||
partition_id=$(parted -s ${rootfs_device} print | awk '/(Platform Backup|platform_backup)/ { print $1; }')
|
||||
|
||||
# if the partition id is not empty or zero, then the partition actually exists.
|
||||
# If the partition id is not empty or zero, then the partition actually exists.
|
||||
# Delete the partition.
|
||||
if [[ "${partition_id}" -ne '' && "${partition_id}" -ne "0" ]]; then
|
||||
if [ -n "${partition_id}" ] && [ "${partition_id}" -ne 0 ]; then
|
||||
wlog "Deleting platform backup at partition ${partition_id} on ${rootfs_device}"
|
||||
|
||||
# Delete the platform backup partition
|
||||
parted -s ${rootfs_device} rm ${partition_id}
|
||||
rc=$?
|
||||
|
||||
if [ "${rc}" -ne "0" ]; then
|
||||
wlog "Unable to delete platform backup at partition ${partition_id} on ${rootfs_device}: [exit code ${rc}]"
|
||||
exit -1
|
||||
|
|
|
@ -14,6 +14,11 @@ override_dh_auto_configure:
|
|||
|
||||
override_dh_install:
|
||||
install -d -m 755 $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart
|
||||
install -d -m 755 $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart/centos
|
||||
install -p -D -m 700 kickstart.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart
|
||||
install -p -D -m 700 miniboot.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart
|
||||
install -p -D -m 700 centos/miniboot_controller_ks.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart/centos
|
||||
install -p -D -m 700 centos/miniboot_smallsystem_ks.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart/centos
|
||||
install -p -D -m 700 centos/miniboot_smallsystem_lowlatency_ks.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart/centos
|
||||
install -p -D -m 700 centos/prestaged_installer_ks.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart/centos
|
||||
dh_install
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue