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,13 +268,16 @@ 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
|
||||
fi
|
||||
else
|
||||
wlog "Skipping part:$part_number $dev GUID: $part_type_guid"
|
||||
fi
|
||||
fi
|
||||
wlog "Wiping partition $part"
|
||||
if [[ $WIPE_CEPH_OSDS == "true" && ( "$part_type_guid" == $CEPH_REGULAR_JOURNAL_GUID || "$part_type_guid" == $CEPH_MPATH_JOURNAL_GUID ) ]]; then
|
||||
|
@ -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
|
||||
|
1803
kickstart/files/centos/miniboot_controller_ks.cfg
Normal file
1803
kickstart/files/centos/miniboot_controller_ks.cfg
Normal file
File diff suppressed because it is too large
Load Diff
1981
kickstart/files/centos/miniboot_smallsystem_ks.cfg
Normal file
1981
kickstart/files/centos/miniboot_smallsystem_ks.cfg
Normal file
File diff suppressed because it is too large
Load Diff
1980
kickstart/files/centos/miniboot_smallsystem_lowlatency_ks.cfg
Normal file
1980
kickstart/files/centos/miniboot_smallsystem_lowlatency_ks.cfg
Normal file
File diff suppressed because it is too large
Load Diff
1553
kickstart/files/centos/prestaged_installer_ks.cfg
Normal file
1553
kickstart/files/centos/prestaged_installer_ks.cfg
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user