%pre --erroronfail # Get the FD used by subshells to log output exec {stdout}>&1 # Source common functions . /tmp/ks-functions.sh wlog "pre prestaging install check" # First, parse /proc/cmdline to find the boot args set -- `cat /proc/cmdline` for I in $*; do case "$I" in *=*) eval $I 2>/dev/null;; esac; done for J in $*; do case "$J" in force_install) force_install=${J};; esac; done if [ -e /run/install/repo/ks-setup.cfg ]; then source /run/install/repo/ks-setup.cfg fi # if force_install is set, install anyway. Ignore the remainder of this section. if [ -z ${force_install} ]; then if [ -z "$rootfs_device" ]; then rootfs_device=$(get_disk_dev) fi orig_rootfs_device=$rootfs_device by_path_rootfs_device=$(get_by_path $rootfs_device) rootfs_device=$(get_disk $by_path_rootfs_device) wlog "Found rootfs $orig_rootfs_device on: $by_path_rootfs_device->$rootfs_device." part_numbers=( $(parted -s ${rootfs_device} print | awk '$1 == "Number" {i=1; next}; i {print $1}') ) # print the partnumber info for informational purposes for i in ${part_numbers[@]}; do wlog "partnumber: ${i}" done # Get the correct rootfs prefix ROOTFS_PART_PREFIX=${rootfs_device} # check if rootfs part is nvme (eg. /dev/nvme0n1). The partitions have a "p" in the part prefix. # for example, /dev/nvme0n1p1 # so we need to add the letter "p" to get the prefix. # The part numbers will be used later in the code. case $rootfs_device in *"nvme"*) ROOTFS_PART_PREFIX=${ROOTFS_PART_PREFIX}p ;; esac # temporary mount directory temp_mount=/mnt wlog "Searching for existing installation..." for part in "${part_numbers[@]}"; do device=${ROOTFS_PART_PREFIX}${part} wlog "Searching on ${device}" # mount this part at a temporary mount point mount ${device} ${temp_mount} if [ $? -ne 0 ]; then wlog "unable to mount ${device}" continue fi # Check for the presence of install_uuid in one of the partitions on # the root device if [ -e ${temp_mount}/var/www/pages/feed/rel-xxxPLATFORM_RELEASExxx/install_uuid ]; then wlog "Found valid installation on ${device}" umount ${temp_mount} # do not modify the system in any way report_pre_failure_with_msg "Prestage rejected. Existing installation detected. Please eject the media before rebooting." fi umount ${temp_mount} done wlog "Installing Prestaged content. No existing installation found." else # force install inspite of existing installation wlog "Force install the prestage content" wlog "Installing Prestaged content. All existing installations will be lost." fi %end