| Adriana Kobylak | f3dfe65 | 2019-10-08 11:35:55 -0500 | [diff] [blame^] | 1 | #!/bin/sh | 
 | 2 |  | 
 | 3 | update_symlinks() { | 
 | 4 |   PNOR_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/" | 
 | 5 |   PNOR_RO_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/ro" | 
 | 6 |   PNOR_RO_PREFIX="/media/pnor-ro-" | 
 | 7 |   PNOR_RW_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/rw" | 
 | 8 |   PNOR_RW_PREFIX="/media/pnor-rw-" | 
 | 9 |   PNOR_PRSV_ACTIVE_PATH="/var/lib/phosphor-software-manager/pnor/prsv" | 
 | 10 |   PNOR_PRSV="/media/pnor-prsv" | 
 | 11 |   PERSISTENCE_PATH="/var/lib/obmc/openpower-pnor-code-mgmt/" | 
 | 12 |   PNOR_PATCH_LOCATION="/usr/local/share/pnor/" | 
 | 13 |  | 
 | 14 |   # Get a list of all active PNOR versions | 
 | 15 |   data="$(ls -d ${PNOR_RO_PREFIX}*)" | 
 | 16 |   IFS=$'\n'  array=(${data}) | 
 | 17 |  | 
 | 18 |   currentVersion="" | 
 | 19 |   lowestPriority=255 | 
 | 20 |   for element in ${array[@]}; do | 
 | 21 |     #Remove the PNOR_RO_PREFIX from the path to get version ID. | 
 | 22 |     versionId="${element#${PNOR_RO_PREFIX}}" | 
 | 23 |  | 
 | 24 |     # Get the priority of active versions from persistence files. | 
 | 25 |     if [[ -f "${PERSISTENCE_PATH}${versionId}" ]]; then | 
 | 26 |       data="$(grep -r "priority" ${PERSISTENCE_PATH}${versionId})" | 
 | 27 |       priority="${data: -1}" | 
 | 28 |       if [[ priority -le lowestPriority  ]]; then | 
 | 29 |         lowestPriority=${priority} | 
 | 30 |         currentVersion=${versionId} | 
 | 31 |       fi | 
 | 32 |     fi | 
 | 33 |   done | 
 | 34 |  | 
 | 35 |   # Return if no active version found | 
 | 36 |   if [ -z $currentVersion ]; then | 
 | 37 |     return 0; | 
 | 38 |   fi | 
 | 39 |  | 
 | 40 |   if [ ! -d "${PNOR_ACTIVE_PATH}" ]; then | 
 | 41 |         mkdir -p "${PNOR_ACTIVE_PATH}" | 
 | 42 |   fi | 
 | 43 |  | 
 | 44 |   # If the RW or RO active links doesn't point to the version with | 
 | 45 |   # lowest priority, then remove the symlink and create new ones. | 
 | 46 |   if [[ $(readlink -f "${PNOR_RO_ACTIVE_PATH}") != ${PNOR_RO_PREFIX}${currentVersion}  ]]; then | 
 | 47 |     rm -f ${PNOR_RO_ACTIVE_PATH} | 
 | 48 |     rm -rf ${PNOR_PATCH_LOCATION}* | 
 | 49 |     ln -sfv ${PNOR_RO_PREFIX}${currentVersion} ${PNOR_RO_ACTIVE_PATH} | 
 | 50 |   fi | 
 | 51 |  | 
 | 52 |   if [[ $(readlink -f "${PNOR_RW_ACTIVE_PATH}") != ${PNOR_RW_PREFIX}${currentVersion}  ]]; then | 
 | 53 |     rm -f ${PNOR_RW_ACTIVE_PATH} | 
 | 54 |     ln -sfv ${PNOR_RW_PREFIX}${currentVersion} ${PNOR_RW_ACTIVE_PATH} | 
 | 55 |   fi | 
 | 56 |  | 
 | 57 |   if [[ ! -h ${PNOR_PRSV_ACTIVE_PATH}  ]]; then | 
 | 58 |     ln -sfv ${PNOR_PRSV} ${PNOR_PRSV_ACTIVE_PATH} | 
 | 59 |   fi | 
 | 60 | } | 
 | 61 |  | 
 | 62 | case "$1" in | 
 | 63 |   updatesymlinks) | 
 | 64 |     update_symlinks | 
 | 65 |     ;; | 
 | 66 |   *) | 
 | 67 |     echo "Invalid argument" | 
 | 68 |     exit 1 | 
 | 69 |     ;; | 
 | 70 | esac | 
 | 71 | rc=$? | 
 | 72 | if [ ${rc} -ne 0 ]; then | 
 | 73 |   echo "$0: error ${rc}" | 
 | 74 |   exit ${rc} | 
 | 75 | fi |