blob: 25e67265b651567ec4dbd6a51c255edf26d6a574 [file] [log] [blame]
Adriana Kobylakf3dfe652019-10-08 11:35:55 -05001#!/bin/sh
2
3update_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
62case "$1" in
63 updatesymlinks)
64 update_symlinks
65 ;;
66 *)
67 echo "Invalid argument"
68 exit 1
69 ;;
70esac
71rc=$?
72if [ ${rc} -ne 0 ]; then
73 echo "$0: error ${rc}"
74 exit ${rc}
75fi