home *** CD-ROM | disk | FTP | other *** search
/ tusportal.tus.k12.pa.us / tusportal.tus.k12.pa.us.tar / tusportal.tus.k12.pa.us / Wyse / latest-image.raw / 0.img / usr / sbin / thinclient-include < prev    next >
Text File  |  2012-08-08  |  5KB  |  201 lines

  1.  
  2. #======================================
  3. # importFile
  4. #--------------------------------------
  5. function importFile {
  6.     # /.../
  7.     # import the config.<MAC> style format. the function
  8.     # will export each entry of the file as variable into
  9.     # the current shell environment
  10.     # ----
  11.     IFS="
  12.     "
  13.     while read line;do
  14.         [ "x${line:0:1}" = "x#" ] && continue
  15.         key=`echo "$line" | cut -d '=' -f1`
  16.         item=`echo "$line" | cut -d '=' -f2- | tr -d "\'" | tr -d "\""`
  17.         if [ -z "$key" ] || [ -z "$item" ];then
  18.             continue
  19.         fi
  20.         eval export "$key\=\"$item\""
  21.     done
  22. }
  23.  
  24. function LocalUpdate ()
  25. {
  26.     echo $UPDATE_URL | grep "^file:///" > /dev/null
  27.     return $?
  28. }
  29.  
  30. function getLocalsrcPatch ()
  31. {
  32.     echo $1 | sed "s#^file://##g"
  33. }
  34.  
  35. function fetch ()
  36. {
  37.     src=$1
  38.     dest=$2
  39.  
  40.     if LocalUpdate; then
  41.         localsrcpatch=`getLocalsrcPatch $src`
  42.         cp $localsrcpatch $dest
  43.         retval=$?
  44.     else
  45.         local CURL_OPTIONS
  46.         local CURL_TIMEOUT=$(/usr/sbin/thinclient-config --get-curl-timeout)
  47.         if [ -n "$CURL_TIMEOUT" ]; then
  48.             CURL_OPTIONS=( --connect-timeout $CURL_TIMEOUT )
  49.         else
  50.             CURL_OPTIONS=( --connect-timeout 10 )
  51.         fi
  52.         if [ "$UPDATE_REQUIRES_AUTH" = "yes" ]; then
  53.             UPDATE_USER=$(/usr/sbin/thinclient-config --get-update-user)
  54.             UPDATE_PASSWORD=$(/usr/sbin/thinclient-config --get-update-password)
  55.             CURL_OPTIONS+=( -u "$UPDATE_USER:$UPDATE_PASSWORD" )
  56.         fi
  57.  
  58.         curl -g -k -f "${CURL_OPTIONS[@]}" -o $dest -# $src 2>&1
  59.         retval=$?
  60.     fi
  61.  
  62.     return $retval
  63. }
  64.  
  65. function fetchAddonDirectory ()
  66. {
  67.     directoryUrl="${ADDONS_URL}/directory"
  68.     directoryFile=`mktemp`
  69.  
  70.     if ! fetch $directoryUrl $directoryFile >/dev/null 2>&1; then
  71.         echo "Failed to download add-on directory file" >> /dev/stderr
  72.         return 1
  73.     fi
  74.  
  75.     dos2unix --quiet $directoryFile
  76.     echo $directoryFile
  77. }
  78.  
  79. function getRpmName()
  80. {
  81.     echo $1 | sed "s/\(.*\)-\(.*\)-\(.*\)\..*\.rpm/\\1/"
  82. }
  83.  
  84. function getRpmVersion()
  85. {
  86.     echo $1 | sed "s/\(.*\)-\(.*\)-\(.*\)\..*\.rpm/\\2-\\3/"
  87. }
  88.  
  89. function isAddonAvailable ()
  90. {
  91.     name=$1
  92.     availableName=`getRpmName $name`
  93.  
  94.     installedVersion=`rpm -q --queryformat "%{VERSION}-%{RELEASE}\n" $availableName 2>/dev/null`
  95.     if [ -z "$installedVersion" ]; then
  96.         echo "WARNING: Unable to determine version for '$availableName'" >/dev/stderr
  97.         return 1
  98.     fi
  99.  
  100.     availableVersion=`getRpmVersion $name`
  101.     if [ -z "$availableVersion" ]; then
  102.         echo "WARNING: Unable to determine version for '$name'" >/dev/stderr
  103.         return 1
  104.     fi
  105.  
  106.     if [ "$availableVersion" = "$installedVersion" ]; then
  107.         return 1
  108.     fi
  109.  
  110.     return 0
  111. }
  112.  
  113. function NeedImageUpdate()
  114. {
  115.     LATEST_IMAGE_PATH="/latest-image.raw"
  116.     LATEST_IMAGE_INFO_PATH="${LATEST_IMAGE_PATH}.info"
  117.     infoFile="/tmp/image-info"
  118.     if ! fetch "${UPDATE_URL}/${LATEST_IMAGE_INFO_PATH}" $infoFile >/dev/null 2>&1; then
  119.         # Failed to download latest image information
  120.         return 1 
  121.     fi
  122.  
  123.     importFile < $infoFile
  124.     if [ -z "$IMAGE_VERSION_HASH" ]; then
  125.         # Failed to get available image version hash
  126.         return 1
  127.     elif [ -z "$IMAGE_SIZE" ]; then
  128.         # WARNING: Failed to get available image size
  129.         return 1
  130.     elif [ -z "$IMAGE_MD5SUM" ]; then
  131.         # Failed to get available image MD5 sum
  132.         return 1
  133.     fi
  134.  
  135.     currentHash=`cat /read-only/.profile | grep versionHash | sed -e "s/versionHash=\(.*\)/\\1/" 2>/dev/null`
  136.     if [ "$IMAGE_VERSION_HASH" != "$currentHash" ]; then
  137.         # no need to do more check if version is not same
  138.         return 0
  139.     fi 
  140.  
  141.     if [ ! -f /read-write/.raw.info ] ; then
  142.         # no info file, no update
  143.         return 1
  144.     fi
  145.  
  146.     currentRawHash=`cat /read-write/.raw.info | grep IMAGE_VERSION_HASH | cut -d'=' -f2 2>/dev/null`
  147.     currentRawMD5=`cat /read-write/.raw.info | grep IMAGE_MD5SUM | cut -d'=' -f2 2>/dev/null`
  148.  
  149.     # info file corrupt?
  150.     [ "$currentRawHash" = "$currentHash" -a "$IMAGE_MD5SUM" != "$currentRawMD5" ]
  151.     return $?
  152. }
  153.  
  154. function NeedAddonUpdate()
  155. {
  156.     ADDONS_URL="${UPDATE_URL}/addons"
  157.     if ! availableAddons=$(fetchAddonDirectory); then
  158.         return 1
  159.     fi
  160.     installedAddons=`rpm -qa --queryformat "%{NAME}\n" 2>/dev/null`
  161.     tmpFile=`mktemp`
  162.     echo "$(echo "$installedAddons" | tr ' ' '\n')" > $tmpFile
  163.     updatedAddons=`grep -Ff $tmpFile $availableAddons`
  164.     rm -fr $tmpFile
  165.     if [ -z "$updatedAddons" ]; then
  166.         return 1
  167.     fi
  168.     for updatedAddon in $updatedAddons; do
  169.         if ! isAddonAvailable $updatedAddon; then
  170.             # No update for add-on '$installed' is available
  171.             continue
  172.         fi
  173.         return 0
  174.     done
  175.     return 1
  176. }
  177.  
  178. function NeedUpdate()
  179. {
  180. . /etc/sysconfig/thinclient
  181.     if [ -z "$UPDATE_URL" ]; then
  182.         # No update url is specified. 
  183.         return 1
  184.     fi
  185.     if [ -z "$UPDATE_MODE" ]; then
  186.         # No update mode is specified. 
  187.         return 1
  188.     fi
  189.     if [ x"$FORCE_IMAGE_UPDATE" = xyes ]; then
  190.         return 0
  191.     fi
  192.     if [ "$UPDATE_MODE" = "image" ] || [ "$UPDATE_MODE" = "both" ] && NeedImageUpdate; then
  193.         return 0
  194.     fi
  195.     if [ "$UPDATE_MODE" = "addons" ] || [ "$UPDATE_MODE" = "both" ] && NeedAddonUpdate; then
  196.         return 0
  197.     fi
  198.     return 1
  199. }
  200.  
  201.