home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / update701 / install / request < prev    next >
Text File  |  1998-08-12  |  31KB  |  1,110 lines

  1. #ident  "@(#)request    17.8    98/08/12"
  2. #copyright    "%c%"
  3. #!/usr/bin/sh
  4.  
  5. # Variables which can be set in /tmp/${PKGINST}.vars
  6. #
  7. # SILENT_INSTALL=true   Install the update without any prompts
  8. # UPDATE_BACKUP=true    Backup to disk (or skip if false) without prompts
  9. # SKIP_CHECK_SPACE=true Assume enough space to install update without prompts
  10. # UPDATE_ALL=true    Update installed packages even if already updated
  11.  
  12. [ -f /tmp/${PKGINST}.vars ] && . /tmp/${PKGINST}.vars
  13.  
  14. if    [ "${SILENT_INSTALL}" = "true" ]
  15. then    UPDATE_BACKUP=${UPDATE_BACKUP:-"true"}
  16.     SKIP_CHECK_SPACE=${SKIP_CHECK_SPACE:-"true"}
  17.     UPDATE_ALL=${UPDATE_ALL:-"true"}
  18. fi
  19.  
  20. #
  21. # Notes:
  22. #
  23. # Since CLASSES var is not properly passed due to a bug, make sure it is
  24. # sent to response file $1 to work around it.
  25. #
  26.  
  27. #
  28. # Define any variables needed during package installation
  29. #
  30.  
  31. BIN=/usr/bin
  32. USBIN=/usr/sbin
  33. CONFDIR=/etc/conf
  34. CONFBIN=${CONFDIR}/bin
  35. CPIOFILE=update.cpio
  36. TTY=/dev/tty
  37. UPD_INUM=`echo ${PKG} | ${BIN}/sed -e "s/update//"`
  38. UPD_NUM=${RELEASE}
  39. UPDINST=${REQDIR}
  40. UPDLOGFILE=/var/sadm/install/logs/${PKGINST}.out
  41. UPDTMP=/tmp/${PKGINST}
  42. UPDVARFILE=${1}
  43. UPDBKUPDIR=/var/sadm/bkup/${PKGINST}
  44. UPDCNTFILE=${UPDBKUPDIR}/upd.cnt
  45. UPDMENUANS=${UPDTMP}/results
  46. UPDMENUDIR=${UPDINST}
  47. UPDPKGDIR=/var/sadm/pkg/${PKGINST}
  48. #
  49. # Export any vars we may need in child scripts
  50. #
  51. export BIN USBIN CONFDIR CONFBIN CPIOFILE DeskTopOwn LANG TTY
  52. export UPD_INUM UPD_NUM UPDINST UPDLANG UPDLOGFILE UPDTMP UPDVARFILE
  53. export UPDBKUPDIR UPDCNTFILE UPDMENUANS UPDMENUDIR UPDPKGDIR
  54. export UPD_INSTRM UPD_instrm UPD_INSTRMED UPD_BKUPREST UPD_NUM UPD_INUM
  55. export ProcMsg GenericProcMsg
  56. export SILENT_INSTALL
  57.  
  58. #
  59. # Define the backup deletion routine for when an interrupting signal comes in
  60. #
  61. DeleteBackupExit ()
  62. {
  63.     LogMsg "DeleteBackupExit: `GetText STARTED`"
  64.     DbgMsg "DeleteBackupExit: STARTED"
  65.     UPDCNT=999999
  66.     [ -f ${UPDCNTFILE} ] && . ${UPDCNTFILE}
  67.     UPDCNT=`expr ${UPDCNT} + 1`
  68.     if [ "${UPDCNT}" -eq 0 ]
  69.     then    ${BIN}/rm -rf ${UPDBKUPDIR}
  70.     else    ${BIN}/rm -rf ${UPDBKUPDIR}/bkup${UPDCNT}
  71.     fi
  72.     LogMsg "DeleteBackupExit: `GetText EXITED` - ${1}"
  73.     DbgMsg "DeleteBackupExit: EXITED - ${1}"
  74.     RmExit ${1}
  75. }
  76.  
  77. #
  78. # Define the routine to run when an interrupting signal is received
  79. #
  80. TrapCmd ()
  81. {
  82.     MsgHandler 1 UpdIntrMsg
  83.     DeleteBackupExit 3
  84. }
  85.  
  86. #
  87. # Load RC Script
  88. #
  89. . ${UPDINST}/updpkg.rc
  90. DbgMsg "\n\nPKGADD OF ${NAME} BEGUN `date`\n\n"
  91. LogMsg "request: `GetText STARTED`"
  92. DbgMsg "request: STARTED"
  93. DbgMsg "  request: loaded updpkg.rc procedures"
  94. DbgMsg "  request: Variables initially set:"
  95. DbgMsg "    NAME='${NAME}'"
  96. DbgMsg "    PKG='${PKG}'"
  97. DbgMsg "    ARCH='${ARCH}'"
  98. DbgMsg "    RELEASE='${RELEASE}'"
  99. DbgMsg "    IRELEASE='${IRELEASE}'"
  100. DbgMsg "    VERSION='${VERSION}'"
  101. DbgMsg "    CATEGORY='${CATEGORY}'"
  102. DbgMsg "    VENDOR='${VENDOR}'"
  103. DbgMsg "    BASEDIR='${BASEDIR}'"
  104. DbgMsg "    PKGSAV='${PKGSAV}'"
  105. DbgMsg "    CLASSES='${CLASSES}'"
  106. DbgMsg "    BIN='${BIN}'"
  107. DbgMsg "    USBIN='${USBIN}'"
  108. DbgMsg "    CONFDIR='${CONFDIR}'"
  109. DbgMsg "    CONFBIN='${CONFBIN}'"
  110. DbgMsg "    CPIOFILE='${CPIOFILE}'"
  111. DbgMsg "    TTY='${TTY}'"
  112. DbgMsg "    UPD_INUM='${UPD_INUM}'"
  113. DbgMsg "    UPD_NUM='${UPD_NUM}'"
  114. DbgMsg "    UPDINST='${UPDINST}'"
  115. DbgMsg "    UPLOGFILE='${UPDLOGFILE}'"
  116. DbgMsg "    UPDTMP='${UPDTMP}'"
  117. DbgMsg "    UPVARFILE='${UPDVARFILE}'"
  118. DbgMsg "    UPDBKUPDIR='${UPDBKUPDIR}'"
  119. DbgMsg "    UPDCNTFILE='${UPDCNTFILE}'"
  120. DbgMsg "    UPDMENUANS='${UPDMENUANS}'"
  121. DbgMsg "    UPDMENUDIR='${UPDMENUDIR}'"
  122. DbgMsg "    UPDPKGDIR='${UPDPKGDIR}'"
  123.  
  124. #
  125. # Create a temporary work directory and backup directory
  126. #
  127. DbgMsg "  request: remake dir UPDTMP=${UPDTMP}"
  128. ${BIN}/rm -rf ${UPDTMP} 2> /dev/null
  129. ${BIN}/mkdir -p ${UPDTMP}
  130.  
  131.  
  132. #
  133. # Subroutine to setup and process the language selection screen if LANG was
  134. # set to an invalid language for the install
  135. #
  136. # $1 - input is the LANG setting without extensions, i.e. base language.
  137. ValidateLang ()
  138. {
  139.     LogMsg "ValidateLang: `GetText STARTED`"
  140.     DbgMsg "ValidateLang: STARTED - try lang ${1}"
  141.     DbgMsg "    UPDSupportedLang='${UPDSupportedLang}'"
  142.     #
  143.     # Validate against the supported listof languages
  144.     #
  145.     for lg in ${UPDSupportedLang}
  146.     do
  147.         if [ "${1}" = "${lg}" ]
  148.         then
  149.             UPDLANG=${1}
  150.             LogMsg "ValidateLang: `GetText COMPLETED` - UPDLANG=${UPDLANG}"
  151.             DbgMsg "ValidateLang: COMPLETED - Valid Lang - UPDLANG=${UPDLANG}"
  152.             return 0
  153.         fi
  154.     done
  155.  
  156.     # If silent install is being done, and we have an invalid LANG,
  157.     #   set it to C
  158.     if [ "$SILENT_INSTALL" = "true" ]
  159.     then
  160.         UPDLANG="C"
  161.         return 0
  162.     fi
  163.  
  164.     #
  165.     # Load Common locale menu color functions.
  166.     #
  167.     DbgMsg "  ValidateLang: dot in /etc/inst/locale/C/menus/menu_colors.sh"
  168.     . /etc/inst/locale/C/menus/menu_colors.sh
  169.  
  170.     #
  171.     # Display language selection menu.
  172.     #
  173.     UpdLangSel=${1}
  174.     DbgMsg "    UpdLangSel=${UpdLangSel}"
  175.     export UpdLangSel UPDLangSelect UpdLangChoices
  176.  
  177.     menu_colors regular
  178.     DbgMsg "  ValidateLang: run menu updlang.menu"
  179.     DbgMsg "    UPDINST=${UPDINST}"
  180.     DbgMsg "    UPDMENUANS=${UPDMENUANS}"
  181.     LANG=C ${USBIN}/menu -r -f ${UPDINST}/updlang.menu -o ${UPDMENUANS} 1>${TTY} 2>/dev/null <${TTY}
  182.  
  183.     #
  184.     # Process language selection.
  185.     #
  186.     . ${UPDMENUANS}
  187.     UPDLANG=${UpdLangChoices}
  188.  
  189.     unset lg UpdLangSel UPDLangSelect UpdLangChoices
  190.     LogMsg "ValidateLang: `GetText COMPLETED` - UPDLANG=${UPDLANG}"
  191.     DbgMsg "ValidateLang: COMPLETED - Selected Lang - UPDLANG=${UPDLANG}"
  192.     return 0
  193. }
  194.  
  195. #
  196. # Setup language information
  197. #
  198. DbgMsg "  request: Enter lang determination: LANG=${LANG}"
  199. if [ -z "${LANG}" ]
  200. then
  201.     # Default to Common.
  202.     LANG="C"
  203.     UPDLANG=${LANG}
  204. else
  205.     DbgMsg "  request: undefined LANG, so exec ValidateLang"
  206.     # Strip out country if present.
  207.     ValidateLang `echo ${LANG} | ${BIN}/sed -e 's/_.*$//'`
  208.     LANG=${UPDLANG}
  209.     DbgMsg "  request: ValidateLang set LANG to ${LANG}"
  210. fi
  211. DbgMsg "  request: LANG=${LANG}, UPDLANG=${UPDLANG}, should be equal"
  212.  
  213. MenuLang
  214. #
  215. # Trap any interrupting signals, which will terminate the install
  216. #
  217. trap 'TrapCmd' 2 3 15
  218.  
  219. UPD_INSTRM="${UPD_INSTRM_i}"
  220. UPD_instrm="${UPD_instrm_i}"
  221. UPD_INSTRMED="${UPD_INSTRMED_i}"
  222. UPD_BKUPREST="${UPD_BKUPREST_i}"
  223. export UPD_INSTRM UPD_instrm UPD_INSTRMED UPD_BKUPREST
  224. unset UPD_INSTRM_i UPD_instrm_i UPD_INSTRMED_i UPD_BKUPREST_i
  225. unset UPD_INSTRM_r UPD_instrm_r UPD_INSTRMED_r UPD_BKUPREST_r
  226. DbgMsg "    UPD_INSTRM=${UPD_INSTRM}"
  227. DbgMsg "    UPD_instrm=${UPD_instrm}"
  228. DbgMsg "    UPD_INSTRMED=${UPD_INSTRMED}"
  229. DbgMsg "    UPD_BKUPREST=${UPD_BKUPREST}"
  230. DbgMsg "    ProcMsg=${ProcMsg}"
  231. DbgMsg "    GenericProcMsg=${GenericProcMsg}"
  232.  
  233. #
  234. # Find out who the desktop owners are
  235. #
  236. DbgMsg "  request: exec GetDeskTopOwners"
  237. GetDeskTopOwners
  238. DbgMsg "  request: After GetDeskTopOwners, DeskTopOwn=${DeskTopOwn}"
  239.  
  240. #
  241. # Check if an unsuccessful removal of the update was done.  If so, abort
  242. #
  243. DbgMsg "  request: check for existence of ${UPDPKGDIR}/removing"
  244. DbgMsg "    this indicates an unsuccessful removal was done, and if so, abort"
  245. DbgMsg "    UPDPKGDIR=${UPDPKGDIR}"
  246. if [ -f ${UPDPKGDIR}/removing ]
  247. then
  248.     DbgMsg "  request: ${UPDPKGDIR}/removing exists, so abort"
  249.     MsgHandler 3 UpdRemovalMsg
  250.     LogMsg "\nUpdRemovalMsg:\n${UpdRemovalMsg}"
  251.     LogMsg "request: `GetText COMPLEXIT` - 1\n"
  252.     DbgMsg "  request: COMPLEXIT - 1\n"
  253.     RmExit 1
  254. fi
  255.  
  256. #
  257. # Is this update installation an overlay?
  258. #
  259. DbgMsg "  request:  run '/usr/bin/pkginfo ${PKGINST}' to see if it pre-exists"
  260. DbgMsg "    PKGINST=${PKGINST}"
  261. ${BIN}/pkginfo ${PKGINST} >/dev/null 2>&1
  262. if [ ${?} -eq 0 ]
  263. then
  264.     # This is an overlay installation.
  265.     LogMsg "request: `GetText ISOVERLAY`"
  266.     DbgMsg "  request: Package ${PKGINST} already exists, so it is overlay"
  267.     UPDOVERLAY=true
  268. else
  269.     LogMsg "request: `GetText NOTOVERLAY`"
  270.     DbgMsg "  request: Package ${PKGINST} does not exist, so it is update"
  271.     UPDOVERLAY=false
  272. fi
  273.  
  274. #
  275. # If this is an overlay, is the current version of the Update installed the
  276. # same as the version being installed?  If not, abort the installation.
  277. # Different versions of the Update can not be installed in overlay mode,
  278. # since different files may be installed or backed up.
  279. #
  280. if [ "${UPDOVERLAY}" = "true" ]
  281. then
  282.     DbgMsg "    Overlay, so make sure we are overlaying same version."
  283.     # Change the locale information to C
  284.     if [ "${LANG}" != "C" -a "${LANG}" != "en" ]
  285.     then
  286.         SetCLocale
  287.     fi
  288.     Version=`${BIN}/pkginfo -l ${PKGINST} 2>/dev/null | \
  289.         ${BIN}/grep "VERSION:" | ${BIN}/cut -d':' -f2 | \
  290.         ${BIN}/sed -e "s/^ *//g"`
  291.     RestoreLocale
  292.     unset langchg
  293.     DbgMsg "  request: Compare installed and installing versions, flag as error if diff"
  294.     DbgMsg "    request: Version=${Version}, VERSION=${VERSION}"
  295.     if [ "${VERSION}" != "${Version}" ]
  296.     then
  297.         export Version
  298.         MsgHandler 3 UpdVersionMsg
  299.         LogMsg "\nUpdVersionMsg:\n${UpdVersionMsg}"
  300.         LogMsg "request: `GetText COMPLEXIT` - 1"
  301.         DbgMsg "  request: Not allowed to overlay differing versions"
  302.         DbgMsg "  request: COMPLEXIT - 1\n"
  303.         RmExit 1
  304.     fi
  305.     unset Version
  306. else
  307.     DbgMsg "    They do not, so the update or overlay may proceed"
  308. fi
  309.  
  310. #
  311. # Make sure Update Package is compatible with Operating System.
  312. #
  313. DbgMsg "  request: exec OSBaseChk"
  314. OSBaseChk
  315.  
  316. #
  317. # Make sure the kernel tools are available.
  318. #
  319. DbgMsg "  request: exec KernelToolsChk"
  320. KernelToolsChk
  321.  
  322. if [ "${UPDATE_ALL}" = "true" -o "${UPDOVERLAY}" != "true" ]
  323. then
  324.     ${BIN}/rm -rf /etc/inst/locale/*/menus/${PKGINST} 2> /dev/null
  325. fi
  326.  
  327. #
  328. # Setup where menus and text files will be found for the specified language
  329. #
  330. DbgMsg "  request: set lang specific menu and text file dir"
  331. if [ "${UPDLANG}" = "en" ]
  332. then    UPDMENUDIR=/etc/inst/locale/C/menus/${PKGINST}
  333. else    UPDMENUDIR=/etc/inst/locale/${UPDLANG}/menus/${PKGINST}
  334. fi
  335. if [ "${SILENT_INSTALL}" != "true" ]
  336. then    ${BIN}/rm -f ${UPDMENUDIR}/working.kill 2>/dev/null
  337. fi
  338. if [ ! -x ${UPDMENUDIR}/menucmd ]
  339. then    ${BIN}/mkdir -p ${UPDMENUDIR} 2>/dev/null
  340.     ${BIN}/cp ${UPDINST}/menucmd ${UPDMENUDIR}/menucmd
  341.     ${BIN}/chmod 555 ${UPDMENUDIR}/menucmd
  342. #jillp debug
  343.         DbgMsg "  request: copied ${UPDINST}/menucmd ${UPDMENUDIR}/menucmd"
  344. fi
  345. # And get the working menu now in case others want to use it
  346. if [ ! -f ${UPDMENUDIR}/wrking.menu ]
  347. then
  348.     SrcMenu=${UPDINST}/wrking.menu.${UPDLANG}.Z
  349.     [ -f ${SrcMenu} ] || SrcMenu=${UPDINST}/wrking.menu.Z
  350.     ${BIN}/zcat ${SrcMenu} | ${BIN}/sed -e '/^#ident/d' \
  351.         > ${UPDMENUDIR}/wrking.menu
  352.     unset SrcMenu
  353. fi
  354. export UPDMENUDIR
  355. DbgMsg "  request: UPDMENUDIR=${UPDMENUDIR}"
  356.  
  357. #
  358. # Silent install stuff for Compaq
  359. #
  360. DbgMsg "  request:  If Compaq SmartStart install, /tmp/unixware.dat will exist"
  361. if [ -f /tmp/unixware.dat ]
  362. then
  363.     DbgMsg "    It does, so it is Compaq SmartStart install"
  364.     LogMsg "request: `GetText COMPAQINST` `GetText STARTED`"
  365.     ${BIN}/chmod +rx /tmp/unixware.dat
  366.     eval "`${BIN}/cat /tmp/unixware.dat | grep -v '\[' | ${BIN}/sed 's/export \([^=]*\)\(.*\)/\1\2 \; export \1/'`"
  367.     LogMsg "request: `GetText COMPAQINST` `GetText COMPLETED`"
  368.     DbgMsg "      All vars in /tmp/unixware.dat exported for install"
  369. else
  370.     DbgMsg "    It does not, so not Compaq SmartStart install"
  371. fi
  372.  
  373. #
  374. # Select CLASSES to reflect only those packages which are installed on this
  375. # system, and are a valid release to install on top of
  376. #
  377. DbgMsg "  request: Update CLASSES to reflect only those installed on the system"
  378. DbgMsg "    as well as having valid releases"
  379. NEW_CLASSES=""
  380. DbgMsg "    before: CLASSES='${CLASSES}'"
  381. for pkg in ${CLASSES}
  382. do
  383.     if [ -f /var/sadm/pkg/${pkg}/pkginfo -a \
  384.        ! -f /var/sadm/pkg/${pkg}/!I-Lock! -a \
  385.        ! -f /var/sadm/pkg/${pkg}/!R-Lock! ]
  386.     then
  387.         ${BIN}/rm -f ${UPDTMP}/goodver
  388.         Ver=`grep "^VERSION=" /var/sadm/pkg/${pkg}/pkginfo | cut -f2 -d'='`
  389. # bl15.3v1s VERSION=7  bl15.3v1t VERSION=7.0.0t  uw7L VERSION=7.0.0u
  390.         if [ "${Ver}" = "7" ]
  391.         then
  392.             > ${UPDTMP}/goodver
  393.         else
  394.             DbgMsg "  request: check non 7 pkg version"
  395.             DbgMsg "    pkg='${pkg}', ver='${Ver}'"
  396.             vver=""
  397.             while read x
  398.             do
  399.                 vpkg=`echo "${x}" | cut -d'=' -f1`
  400.                 DbgMsg "        vpkg='${vpkg}'"
  401.                 if [ "${vpkg}" = "${pkg}" ]
  402.                 then
  403.                     vver=`echo "${x}" | cut -d'=' -f2-`
  404.                     DbgMsg "        vver='${vver}'"
  405.                     if [ "${vver}" = "${Ver}" ]
  406.                     then
  407.                         > ${UPDTMP}/goodver
  408.                         DbgMsg "        Found it!"
  409.                         break
  410.                     fi
  411.                 fi
  412.             done < ${UPDINST}/Versions
  413.         fi
  414.         if [ -f ${UPDTMP}/goodver ]
  415.         then
  416.             NEW_CLASSES="${NEW_CLASSES} ${pkg}"
  417.         else
  418. #                   Legitimate for nics package version to be greater than
  419. #                   7, so force addition of nics to CLASSES
  420.                     if [ "${pkg}" = "nics" ]
  421.                     then
  422.                         NEW_CLASSES="${NEW_CLASSES} ${pkg}"
  423.                         DbgMsg "    request: forced addition of nics to CLASSES"
  424.                     else
  425.                         DbgMsg "    request: bad class: pkg=${pkg}, ver=${Ver}"
  426.                         # We're not updating this, but mark it as dealt with
  427.                         echo "no" > /var/sadm/pkg/${pkg}/${PKGINST}
  428.                     fi
  429.         fi
  430.     fi
  431. done
  432. DbgMsg "    inbetween: NEW_CLASSES='${NEW_CLASSES}'"
  433. unset pkg vpkg vver Ver x
  434. ${BIN}/rm -f ${UPDTMP}/goodver
  435.  
  436.  
  437. #
  438. # Sweep out already updated classes, and add pseudo-classes.
  439. #
  440. if [ "${UPDATE_ALL}" = "true" -o "${UPDOVERLAY}" != "true" ]
  441. then
  442.     ${BIN}/rm -f /var/sadm/pkg/*/${PKGINST} 2> /dev/null
  443. fi
  444. CLASSES=""
  445. for pkg in $NEW_CLASSES
  446. do
  447.     newer_pkginfo=`find /var/sadm/pkg/${pkg}/pkginfo -newer \
  448.         /var/sadm/pkg/${pkg}/${PKGINST} 2> /dev/null`
  449.     [ "$?" != "0" -o "$newer_pkginfo" != "" ] || continue
  450. #    #
  451. #    # Note: cases below assume CLASSES in alphabetical order
  452. #    #
  453.     case ${pkg} in
  454.     *)    CLASSES="${CLASSES} ${pkg}" ;;
  455.     esac
  456. done
  457. export CLASSES
  458. DbgMsg "    after: CLASSES=${CLASSES}"
  459. unset NEW_CLASSES newer_pkginfo
  460.  
  461. # Fix bkrs permissions before we decide that there's no more to do...
  462. # Would prefer to say "-c OAM_extended" but installf prohibits it
  463. case " ${CLASSES} " in
  464. *\ bkrs\ *)
  465.     ${BIN}/chmod 0111 /usr/sbin/urestore >/dev/null 2>&1
  466.          ${USBIN}/installf bkrs /usr/sbin/urestore \
  467.         f 111 '?' '?' '?' '?' '?' >/dev/null 2>&1
  468.     ${USBIN}/installf -f bkrs >/dev/null 2>&1
  469.     > /var/sadm/pkg/bkrs/${PKGINST}
  470.     [ "${CLASSES}" = " bkrs" ] && CLASSES=""
  471.     ;;
  472. esac
  473.  
  474. if [ -z "${CLASSES}" ]
  475. then
  476.     LogMsg "  request: `GetText COMPLEXIT`"
  477.     DbgMsg "  request: nothing to update, exit"
  478.     MsgHandler 1 UpdNoneMsg
  479.     RmExit 77
  480. fi
  481.  
  482.  
  483. #
  484. # Update the number of update packages that have been overlayed
  485. #
  486. DbgMsg "  request: Check if this is an overlay"
  487. if [ "${UPDOVERLAY}" = "true" -o -f ${UPDCNTFILE} ]
  488. then
  489.     UPDCNT=999999
  490.     [ -f ${UPDCNTFILE} ] && . ${UPDCNTFILE}
  491.     UPDCNT=`${BIN}/expr ${UPDCNT} + 1`
  492. else
  493.     ${BIN}/rm -rf ${UPDBKUPDIR}
  494.     ${BIN}/mkdir -p ${UPDBKUPDIR}
  495.     echo "UPDCNT=-1" >${UPDCNTFILE}
  496.     UPDCNT=0
  497. fi
  498. DbgMsg "  request: UPDCNT=${UPDCNT}"
  499.  
  500. #
  501. # Create variables based on the backup directory
  502. #
  503. UPDBACKUP=${UPDBKUPDIR}/bkup${UPDCNT}
  504. UPDCONTENTS=${UPDBACKUP}/contents
  505. UPDFILELIST=${UPDBACKUP}/filelist
  506. UPDBKUPFILE=${UPDBACKUP}/${CPIOFILE}
  507. DbgMsg "  request: define vars based on bkup dir"
  508. DbgMsg "    UPDBACKUP=${UPDBACKUP}"
  509. DbgMsg "    UPDCONTENTS=${UPDCONTENTS}"
  510. DbgMsg "    UPDFILELIST=${UPDFILELIST}"
  511. DbgMsg "    UPDBKUPFILE=${UPDBKUPFILE}"
  512.  
  513. #
  514. # Create the backup directory
  515. #
  516. DbgMsg "  request: Create a backup dir - ${UPDBACKUP}"
  517. ${BIN}/rm -rf ${UPDBACKUP}
  518. ${BIN}/mkdir -p ${UPDBACKUP}
  519.  
  520. [ -f ${UPDBKUPDIR}/classes  ] || > ${UPDBKUPDIR}/classes
  521. [ -f ${UPDBKUPDIR}/filelist ] || > ${UPDBKUPDIR}/filelist
  522. [ -f ${UPDBKUPDIR}/contents ] || > ${UPDBKUPDIR}/contents
  523.  
  524. # Reset the ulimit for a large cpio file
  525. DbgMsg "    UPD_ULIMIT=${UPD_ULIMIT}"
  526. [ $UPD_ULIMIT ] || UPD_ULIMIT=81920
  527. DbgMsg "  request: UPD_ULIMIT=${UPD_ULIMIT}"
  528.  
  529. #
  530. # Create environment variable list for use by the packaging scripts.
  531. #
  532. DbgMsg "  request: create env var list"
  533. ${BIN}/cat > ${UPDVARFILE} <<!
  534. BIN=${BIN}
  535. CLASSES="${CLASSES}"
  536. CONFDIR=${CONFDIR}
  537. CONFBIN=${CONFBIN}
  538. DeskTopOwn=${DeskTopOwn}
  539. TTY=${TTY}
  540. UPD_INUM=${UPD_INUM}
  541. UPD_NUM=${UPD_NUM}
  542. UPD_ULIMIT=${UPD_ULIMIT}
  543. UPDBACKUP=${UPDBACKUP}
  544. UPDBKUPDIR=${UPDBKUPDIR}
  545. UPDBKUPFILE=${UPDBKUPFILE}
  546. UPDCNT=${UPDCNT}
  547. UPDCNTFILE=${UPDCNTFILE}
  548. UPDINST=${UPDINST}
  549. UPDLANG=${UPDLANG}
  550. UPDLOGFILE=${UPDLOGFILE}
  551. UPDMENUANS=${UPDMENUANS}
  552. UPDMENUDIR=${UPDMENUDIR}
  553. UPDPKGDIR=${UPDPKGDIR}
  554. UPDTMP=${UPDTMP}
  555. USBIN=${USBIN}
  556. !
  557. DbgMsg "  request: ${UPDVARFILE} start:"
  558. DbgAddFile ${UPDVARFILE}
  559. DbgMsg "  request: ${UPDVARFILE} end:"
  560.  
  561. #
  562. # ALL THE BACKUP STUFF IS BELOW HERE
  563. #
  564. # THE BACKUP ROUTINES ARE BELOW
  565. #
  566.  
  567. #
  568. # The actual backup routine via cpio
  569. # $1 = the device or dir to output to
  570. # $2 = dmsg, only if this is a disk backup
  571. #
  572. DeviceBackup ()
  573. {
  574.     LogMsg "Devicebackup: `GetText STARTED`"
  575.     DbgMsg "Devicebackup: STARTED arg1=${1}, arg2=${2}"
  576.  
  577.     # Must be in the root directory to take a backup.
  578.     cd /
  579.  
  580.     # Files used below.
  581.     CFERR=${UPDTMP}/upd.cpio.err
  582.     CFOUT=${UPDTMP}/upd.cpio.out
  583.     CMPERR=${UPDTMP}/upd.cmp.err
  584.     CFINPUT=${UPDTMP}/updbkup.list
  585.     ${BIN}/rm -f ${CFERR} ${CFOUT} ${CMPERR} ${CFINPUT}
  586.     DbgMsg "    CFERR=${CFERR}"
  587.     DbgMsg "    CFOUT=${CFOUT}"
  588.     DbgMsg "    CMPERR=${CMPERR}"
  589.     # Create backup list.
  590.     DbgMsg "  DeviceBackup: creates a relative path list of files"
  591.     DbgMsg "    UPDFILELIST=${UPDFILELIST}"
  592.     ${BIN}/sed -e '1,$s;^/;;' ${UPDFILELIST} | \
  593.         ${BIN}/sort -u >${CFINPUT}
  594.     DbgMsg "  DeviceBackup: ${CFINPUT} CONTENTS - used for bkup:"
  595.     DbgAddFile "${CFINPUT}"
  596.     DbgMsg "  DeviceBackup: ${CFINPUT} CONTENTS end:"
  597.  
  598.     # Sync before starting the backup.
  599.     /sbin/sync
  600.  
  601.     DbgMsg "  DeviceBackup: run the cpio to disk dir ${1}"
  602.     ${BIN}/cpio -ocuBd < ${CFINPUT} 2>${CFERR} | \
  603.     ${BIN}/compress -f 2>${CMPERR} > ${1}.Z
  604.     burc=${?}
  605.     DbgMsg "  DeviceBackup: cpio rc=${burc}"
  606.     ${BIN}/grep "ERROR" ${CFERR} >/dev/null 2>&1
  607.     greprc=${?}
  608.     if [ ${burc} -ne 0 -o ${greprc} -eq 0 -o -s ${CMPERR} ]
  609.     then
  610.         UPD_CPIOERR="${CFERR}\n${CMPERR}"
  611.         export UPD_CPIOERR
  612.         if [ "$SILENT_INSTALL" != "true" ]
  613.         then
  614.             MenuCmd error mederr
  615.         fi
  616.         unset UPD_CPIOERR
  617.         LogMsg "DeviceBackup: cpio `GetText FAILED`"
  618.         DbgMsg "  DeviceBackup: cpio FAILED"
  619.         LogMsg "DeviceBackup: `GetText COMPLRET` - 2"
  620.         LogMsg "DeviceBackup: COMPLRET - 2"
  621.         return 2    # return to previous menu to retry.
  622.     fi
  623.  
  624.     ${BIN}/rm -f ${CFERR} ${CFOUT} ${CMPERR} ${CFINPUT}
  625.     unset greprc CFERR CFOUT CMPERR CFINPUT
  626.  
  627.     # Create the space file for the actual disk space
  628.     # used by the update backup.
  629.     DbgMsg "    UPDBACKUP=${UPDBACKUP}"
  630.     DbgMsg "    UPDBKUPDIR=${UPDBKUPDIR}"
  631.     size=`${BIN}/du -s ${UPDBACKUP} | ${BIN}/cut -f1`
  632.     DbgMsg "  Devicebackup: size of this backup: ${size}"
  633.     if [ -f ${UPDBKUPDIR}/space ]
  634.     then
  635.         # Add space together to get grand total.
  636.         DbgMsg "  Devicebackup: add size of this backup to ${UPDBKUPDIR}/space"
  637.         . ${UPDBKUPDIR}/space
  638.         UPDSPACEREQ=`${BIN}/expr ${UPDSPACEREQ} + ${size}`
  639.         echo "UPDSPACEREQ=${UPDSPACEREQ}" > ${UPDBKUPDIR}/space
  640.         DbgMsg "   new size in ${UPDBKUPDIR}/space = ${UPDSPACEREQ}"
  641.     else
  642.         # First installation.
  643.         echo "UPDSPACEREQ=${size}" > ${UPDBKUPDIR}/space
  644.         DbgMsg "   size in ${UPDBKUPDIR}/space = ${size}"
  645.     fi
  646.     ${BIN}/chmod 744 ${UPDBKUPDIR}/space
  647.     DbgMsg "    ${UPDBKUPDIR}/space CONTENTS START:"
  648.     DbgAddFile ${UPDBKUPDIR}/space
  649.     DbgMsg "    ${UPDBKUPDIR}/space CONTENTS END"
  650.  
  651.         if [ "$SILENT_INSTALL" != "true" ]
  652.         then
  653.         # Display backup successful message.
  654.         DbgMsg "  DeviceBackup: display brsucc.menu"
  655.         MenuCmd regular brsucc
  656.         ${BIN}/sleep 3
  657.     fi
  658.     LogMsg "DeviceBackup: `GetText COMPLRET` - ${burc}"
  659.     DbgMsg "DeviceBackup: COMPLRET - ${burc}"
  660.     return ${burc}
  661. }
  662.  
  663. #
  664. # Do the backup to disk
  665. #
  666. BackupToDir ()
  667. {
  668.     LogMsg "BackupToDir: `GetText STARTED`"
  669.     DbgMsg "BackupToDir: STARTED"
  670.         if [ "$SILENT_INSTALL" != "true" ]
  671.         then
  672.         MenuCmd regular brmsg
  673.     fi
  674.  
  675.     # Increase ulimit for creating a very large cpio file.
  676.     DbgMsg "    UPD_ULIMIT=${UPD_ULIMIT}"
  677.     ulimit ${UPD_ULIMIT}
  678.  
  679.     # Perform backup to disk.
  680.     DbgMsg "  BackupToDir: exec DeviceBackup"
  681.     DeviceBackup ${UPDBKUPFILE} dmsg
  682.     cpiorc=${?}
  683.     DbgMsg "  BackupToDir: DeviceBackup rc=${cpiorc}"
  684.     if [ ${cpiorc} -ne 0 ]
  685.     then
  686.         LogMsg "BackupToDir: `GetText COMPLRET` - ${cpiorc}"
  687.         DbgMsg "BackupToDir: backup failed COMPLRET - ${cpiorc}"
  688.         return ${cpiorc}
  689.     fi
  690.     DbgMsg "  BackupToDir: backup succeeded, mark with file ${UPDBACKUP}/bkup.disk"
  691.     ${BIN}/touch ${UPDBACKUP}/bkup.disk >/dev/null 2>&1
  692.  
  693.     # Compress the cpio file to save disk space, if it was
  694.     # not compressed during backup using cpio command.
  695.     DbgMsg "  BackupToDir: compress backup if not compressed"
  696.     DbgMsg "    UPDBACKUP=${UPDBACKUP}"
  697.     DbgMsg "    UPDBKUPFILE=${UPDBKUPFILE}"
  698.     cd ${UPDBACKUP}
  699.     if [ ! -f ${UPDBKUPFILE}.Z ]
  700.     then
  701.         ${BIN}/compress ${UPDBKUPFILE} >/dev/null 2>&1
  702.         rc=${rc}
  703.         if [ ${rc} -ne 0 ]
  704.         then
  705.             # Installation is not dependent on compress
  706.             # to succeed.  Log a message indicating
  707.             # the failure.
  708.             LogMsg "BackupToDir: compress `GetText FAILED` - rc=${rc}"
  709.             DbgMsg "  BackupToDir: compress FAILED - rc=${rc}"
  710.             ${BIN}/rm -f ${UPDBKUPFILE}.Z
  711.         fi
  712.     fi
  713.  
  714.     cd /
  715.         if [ "$SILENT_INSTALL" != "true" ]
  716.         then
  717.         MenuClear
  718.     fi
  719.     LogMsg "BackupToDir: `GetText COMPLRET` - ${cpiorc}"
  720.     DbgMsg "BackupToDir: COMPLRET - ${cpiorc}"
  721.     return ${cpiorc}
  722. }
  723.  
  724.  
  725. #
  726. # The actual main backup routine, which ends up calling the others
  727. #
  728. BackupMain ()
  729. {
  730.     LogMsg "BackupMain: `GetText STARTED`"
  731.     DbgMsg "BackupMain: STARTED"
  732.  
  733.         DbgMsg "  BackupMain: Check SILENT_INSTALL='${SILENT_INSTALL}'"
  734.         if [ "$SILENT_INSTALL" = "true" ]
  735.         then
  736.             DbgMsg "  BackupMain: exec silent BackupToDir"
  737.         else
  738.             DbgMsg "  BackupMain: exec BackupToDir"
  739.         fi
  740.  
  741.         #
  742.         # If filelist is empty, then don't even make a record of
  743.         # this backup, since there nothing will get backed up.
  744.         #
  745.                 if [ -s ${UPDFILELIST} ]
  746.                 then
  747.             BackupToDir
  748.             case ${?} in
  749.             0)      # Backup successful
  750.                 DbgMsg "  BackupMain: backup succeeded"
  751.                 loop=0
  752.                 ;;
  753.             *)      # Give up
  754. #                MenuClear
  755.                 MsgHandler 3 SilBkupFailMsg
  756.                 LogMsg "BackupMain: `GetText COMPLEXIT` - 1"
  757.                 DbgMsg "BackupMain: backup failed, exit"
  758.                 DeleteBackupExit 1
  759.                 ;;
  760.             esac
  761.         fi
  762.     LogMsg "BackupMain: `GetText COMPLETED`"
  763.     DbgMsg "BackupMain: COMPLETED"
  764. }
  765.  
  766. #
  767. # Create Software Installation Database information for the files being
  768. # replaced by the update information for possible restore at some
  769. # future date
  770. #
  771. CreateSIDB ()
  772. {
  773.     LogMsg "CreateSIDB: `GetText STARTED`"
  774.     DbgMsg "CreateSIDB: STARTED"
  775.  
  776.     if [ ! -s ${UPDFILELIST} ]
  777.     then    > ${UPDCONTENTS}
  778.         DbgMsg "  CreateSIDB: Empty filelist to empty contents"
  779.         LogMsg "CreateSIDB: `GetText COMPLETED`"
  780.         DbgMsg "CreateSIDB: COMPLETED"
  781.         return
  782.     fi
  783.  
  784.     # Save the current setting of CLASSES.  Need to unset
  785.     # so that the pkgchk command does not use it to limit
  786.     # its search of the SIDB.  Restore and export the CLASSES
  787.     # variable after the pkgchk is done.
  788.     SAV_CLASSES="${CLASSES}"
  789.     unset CLASSES
  790.  
  791.     # Need the C locale for the keywords in the awk script
  792.     # below to be found and parsed properly.
  793.     SetCLocale
  794.  
  795.     # Extract file contents information for restore purposes.
  796.     # All together, there are too many files, so we must break them up.
  797.     DbgMsg "    UPDFILELIST=${UPDFILELIST}"
  798.     DbgMsg "    UPDINST=${UPDINST}"
  799.     DbgMsg "    UPDMENUDIR=${UPDMENUDIR}"
  800.     DbgMsg "    UPDTMP=${UPDTMP}"
  801.     DbgMsg "    UPD_INUM=${UPD_INUM}"
  802.     DbgMsg "    UPDCONTENTS=${UPDCONTENTS}"
  803.     DbgMsg "  request: run split on ${UPDFILELIST}"
  804.     [ -x ${UPDMENUDIR}/split ] || {
  805.         ${BIN}/cp ${UPDINST}/split ${UPDMENUDIR}/split
  806.         ${BIN}/chmod 555 ${UPDMENUDIR}/split
  807.     }
  808.     ${UPDMENUDIR}/split -l 50 ${UPDFILELIST} ${UPDTMP}/filelist.
  809.     for file in ${UPDTMP}/filelist.*
  810.     do
  811.         ${USBIN}/pkgchk -l -i ${file} | ${BIN}/awk '
  812.         {
  813.             if (ref == 1) {
  814.                 pkg=1
  815.                 ref = 0
  816.                 while (pkg <= NF) {
  817.                     if (typ == "l" || typ == "s") {
  818.                         if (typ == "s") {
  819.                             printf("%s %s=%s s\n", $pkg, fi, lf)
  820.                         } else {
  821.                             if (substr(lf, 1, 1) == "/") {
  822.                                 printf("%s %s=%s l\n", $pkg, fi, lf)
  823.                             } else {
  824.                                 printf("%s %s=/%s l\n", $pkg, fi, lf)
  825.                             }
  826.                         }
  827.                     } else {
  828.                         printf("%s %s %s %s %s %s %s %s %s\n", $pkg, fi, typ, mode, owner, grp, level, fixed, inh)
  829.                     }
  830.                     pkg++
  831.                 }
  832.             }
  833.             if ($1 ~/Pathname/)
  834.                 fi=$2
  835.             if($1 ~/Type/) {
  836.                 if ($2 ~/volatile/)
  837.                     typ="v"
  838.                 else if ($2 ~/linked/)
  839.                     typ="l"
  840.                 else if ($2 ~/symbolic/)
  841.                     typ="s"
  842.                                 else if ($2 ~/directory/)
  843.                                         typ="d"
  844.                 else
  845.                     typ="f"
  846.             }
  847.             if ($1 ~/Source/)
  848.                 lf=$4
  849.             if($2 ~/mode/)
  850.                 mode=$3
  851.             if($2 ~/owner/)
  852.                 owner=$3
  853.             if($2 ~/group/)
  854.                 grp=$3
  855.             if($3 ~/level/)
  856.                 level=$6
  857.             if($2 ~/fixed/)
  858.                 fixed=$6
  859.             if($2 ~/inheritable/)
  860.                 inh=$6
  861.             if($0 ~/Referenced/) {
  862.                 ref=1
  863.             }
  864.         }' | ${BIN}/sed -e "/^update${UPD_INUM} /d" >>${UPDCONTENTS}
  865.         rc=${?}
  866.         DbgMsg "  request:  pkgchk of ${file} had rc=${rc}"
  867.         ${BIN}/rm -f ${file}
  868.     done
  869.  
  870.     # Restore CLASSES to its original settings.
  871.     CLASSES="${SAV_CLASSES}"
  872.     export CLASSES
  873.     unset SAV_CLASSES
  874.  
  875.     # Restore the Locale to it original setting.
  876.     RestoreLocale
  877.     DbgMsg "  CreateSIDB: Updated file extraction rc - ${rc}"
  878.  
  879.     LogMsg "CreateSIDB: `GetText COMPLETED`"
  880.     DbgMsg "CreateSIDB: COMPLETED"
  881. }
  882.  
  883. MakeFileList ()
  884. {
  885.     LogMsg "MakeFileList: `GetText STARTED`"
  886.     DbgMsg "MakeFileList: STARTED"
  887.     DbgMsg "  MakeFileList: create backup file list ${UPDFILELIST} from ${UPDINST}/Files"
  888.  
  889.     #
  890.     # If we already have a backup of the class, omit it.
  891.     # Unsatisfactory, but problems either way - we need
  892.     # to avoid backing up New files added by a previous
  893.     # application of the update to the class (UPDATE_ALL,
  894.     # or package added, updated, removed, reupdated).
  895.     # The O/N distinction (which could have helped some)
  896.     # has become unreliable, Ns have been wilfully changed
  897.     # to Os to avoid the earlier bug when this code made
  898.     # no attempt to backup Ns (there from 2.1.1 or PTFs).
  899.     #
  900.     for pkg in ${CLASSES}
  901.     do    ${BIN}/grep "^${pkg}$" ${UPDBKUPDIR}/classes >/dev/null &&
  902.             continue
  903.         ${BIN}/grep -h "    ${pkg}    " \
  904.             ${UPDINST}/Files ${UPDINST}/Backup.add
  905.     done | ${BIN}/cut -f5 -d'    ' | ${BIN}/sort -u >${UPDFILELIST}.tmp
  906.  
  907.     for pkg in ${CLASSES}
  908.     do    echo ${pkg}
  909.     done | ${BIN}/sort -u >${UPDBACKUP}/classes
  910.  
  911.     #
  912.     # Now, make sure each file is installed on the system.
  913.     # If it is not, then it is removed from the list
  914.     #
  915.     DbgMsg "  MakeFileList: Make sure each file exists"
  916.     while read inp
  917.     do    [ -r "${inp}" -o -h "${inp}" ] && echo "${inp}"
  918.     done < ${UPDFILELIST}.tmp > ${UPDFILELIST}
  919.     ${BIN}/rm -f ${UPDFILELIST}.tmp
  920.     unset pkg inp key
  921.  
  922.     LogMsg "MakeFileList: `GetText COMPLETED`"
  923.     DbgMsg "MakeFileList: COMPLETED"
  924. }
  925.  
  926. MakeTempFiles ()
  927. {
  928.     LogMsg "MakeTempFiles: `GetText STARTED`"
  929.     DbgMsg "MakeTempFiles: STARTED"
  930.     # Go through the list of files, checking if it is a tmp file or not
  931.     # Make a link between the object already on the target and the temporary staging
  932.     # position for the file. This is so that the original file can be backed up but
  933.     # under the 'tmp' directory path. The postinstall and postremove scripts
  934.     # manipulate the 'tmp' versions of files up a directory level to the proper place.
  935.     ${BIN}/grep -h "^.T" ${UPDINST}/Files ${UPDINST}/Backup.add > ${UPDTMP}/TFiles
  936.     while read PFILE
  937.     do
  938.         if ${BIN}/grep "    ${PFILE}$" ${UPDTMP}/TFiles >/dev/null
  939.         then
  940.             FILE=`echo "${PFILE}" | ${BIN}/sed 's%^/.*/%%g'| ${BIN}/sed 's%^/%%'`
  941.             DIR=`echo "${PFILE}" | ${BIN}/sed 's%/[^/]*$%%g'`
  942.             TDIR="${DIR}/tmp"
  943.             DbgMsg "  ${PFILE} - temp ${TDIR}/${FILE}"
  944.             ${BIN}/mkdir -p ${TDIR} > /dev/null 2>&1
  945.             ${BIN}/ln -f ${PFILE} ${TDIR}/${FILE} 1>/dev/null 2>&1
  946.             echo "${TDIR}/${FILE}"
  947.         else
  948.             DbgMsg "  ${PFILE} - normal"
  949.             echo "${PFILE}"
  950.         fi
  951.     done < ${UPDFILELIST}.tmp > ${UPDFILELIST}
  952.  
  953.     ${BIN}/rm -f ${UPDTMP}/TFiles
  954.     LogMsg "MakeTempFiles: `GetText COMPLETED`"
  955.     DbgMsg "MakeTempFiles: COMPLETED"
  956. }
  957.  
  958. #
  959. # Determine disk space required
  960. #
  961. GOTSPACE=yes
  962. DF=1
  963. UPD_BKUP_KB=X
  964.  
  965. if [ "${SKIP_CHECK_SPACE}" != "true"  ]
  966. then
  967.     DbgMsg "  request: exec CheckSpace"
  968.     CheckSpace || GOTSPACE=no
  969.  
  970.     # DF=1 if there is enough disk space for backup on to disk
  971.     # UPD_BKUP_KB Kilo Bytes required for backup on disk
  972.  
  973.     DbgMsg "  GOTSPACE=${GOTSPACE}"
  974.     DbgMsg "  DF=${DF}"
  975.     DbgMsg "  UPD_BKUP_KB=${UPD_BKUP_KB}"
  976. fi
  977.  
  978. export DF UPD_BKUP_KB 
  979.  
  980. if [ "$SILENT_INSTALL" != "true" -a "${SKIP_CHECK_SPACE}" != "true" ]
  981. then
  982.     MenuCmd regular space ${UPDMENUANS}
  983.     # Get answer
  984.     . ${UPDMENUANS}
  985.     if [ "${RETURN_VALUE}" = "2" ]
  986.     then
  987.         MenuClear
  988.         LogMsg "  request: `GetText USERTERM`"
  989.         DbgMsg "  request: User terminated at space menu"
  990.         DeleteBackupExit 3
  991.     fi
  992. fi
  993.  
  994. if [  "${GOTSPACE}" = "no" ]
  995. then
  996.     MenuClear
  997.     MsgHandler 3 InstNoSpace
  998.     DbgMsg "  request: exited, since there is not enough install space"
  999.     DeleteBackupExit 1
  1000. fi
  1001.  
  1002.  
  1003. # If we have selected to skip the backup, skip the rest
  1004. if [ "${UPDATE_BACKUP}" = "false" ]
  1005. then    DbgMsg "  request: UPDATE_BACKUP=${UPDATE_BACKUP} skips backup"
  1006. fi
  1007. if [ "${UPDCNT}" -gt 0 ]
  1008. then    PREVCNT=`expr ${UPDCNT} - 1`
  1009.     if [ ! -d ${UPDBKUPDIR}/bkup${PREVCNT} ]
  1010.     then    DbgMsg "  request: bkup${PREVCNT} was skipped before"
  1011.         UPDATE_BACKUP=false
  1012.     fi
  1013. fi
  1014. if [ "${UPDATE_BACKUP}" = "false" ]
  1015. then
  1016.     DbgMsg "    Skipping backup, so remove dir UPDBACKUP=${UPDBACKUP}"
  1017.     DbgMsg "    UPDMENUANS=${UPDMENUANS}"
  1018.     DbgMsg "    UPDBACKUP=${UPDBACKUP}"
  1019.     DbgMsg "    UPDVARFILE=${UPDVARFILE}"
  1020.     ${BIN}/rm -rf ${UPDMENUANS} ${UPDBACKUP}
  1021.     LogMsg "Request: `GetText BUSKIPPED`"
  1022.     LogMsg "Request: `GetText COMPLEXIT`"
  1023.     DbgMsg "Request: COMPLETED"
  1024.         if [ "$ISL_INSTALL" != "true" ]
  1025.         then
  1026.         MenuClear
  1027.     fi
  1028.     exit 0
  1029. fi
  1030.  
  1031. #
  1032. # Set some vars which will help determine backup status
  1033. #
  1034. AUX=0
  1035. export AUX
  1036. DbgMsg "    AUX=${AUX}"
  1037.  
  1038. if [ "$SILENT_INSTALL" != "true" ]
  1039. then
  1040.     # Display a status menu.
  1041.     DbgMsg "  request: display flist.menu"
  1042.     MenuCmd regular flist
  1043. fi
  1044.  
  1045. # Create a file list of the files to be saved during
  1046. # the backup.
  1047. DbgMsg "  request: exec MakeFileList"
  1048. MakeFileList
  1049.  
  1050. # Save software installation database information for
  1051. # files being replaced.
  1052. DbgMsg "  request: exec CreateSIDB"
  1053. CreateSIDB
  1054.  
  1055. # Do whatever is necessary for tmp files, marked in Files
  1056. # Temporarily copy over the file list as a save
  1057. ${BIN}/mv -f ${UPDFILELIST} ${UPDFILELIST}.tmp 2>/dev/null
  1058.  
  1059. DbgMsg "  request: exec MakeTempFiles"
  1060. MakeTempFiles
  1061.  
  1062. # Clear status menu.
  1063. if [ "$SILENT_INSTALL" != "true" ]
  1064. then
  1065.     MenuClear
  1066. fi
  1067.  
  1068. # Perform backup procedures.
  1069. DbgMsg "  request: exec BackupMain"
  1070. BackupMain
  1071.  
  1072. # Restore the file list
  1073. ${BIN}/mv ${UPDFILELIST}.tmp ${UPDFILELIST} 2>/dev/null
  1074.  
  1075. if [ -s "${UPDFILELIST}" ]
  1076. then
  1077.     DbgMsg "  Successful backup, updating total contents and filelist"
  1078.     ${BIN}/sort -u ${UPDBKUPDIR}/classes ${UPDBACKUP}/classes \
  1079.         >${UPDBKUPDIR}/classes.tmp
  1080.     ${BIN}/sort -u ${UPDBKUPDIR}/filelist ${UPDFILELIST} \
  1081.         >${UPDBKUPDIR}/filelist.tmp
  1082.     ${BIN}/sort -u ${UPDBKUPDIR}/contents ${UPDCONTENTS} \
  1083.         >${UPDBKUPDIR}/contents.tmp
  1084.     echo "UPDCNT=${UPDCNT}" >${UPDCNTFILE}
  1085.     ${BIN}/mv -f ${UPDBKUPDIR}/contents.tmp ${UPDBKUPDIR}/contents
  1086.     ${BIN}/mv -f ${UPDBKUPDIR}/classes.tmp ${UPDBKUPDIR}/classes
  1087.     ${BIN}/mv -f ${UPDBKUPDIR}/filelist.tmp ${UPDBKUPDIR}/filelist
  1088.     DbgMsg "  Successful UPDCNT=${UPDCNT} now fixed in ${UPDCNTFILE}"
  1089. else
  1090.     DbgMsg "  Empty filelist, removing dir ${UPDBACKUP}"
  1091.     ${BIN}/rm -rf ${UPDBACKUP}
  1092.     UPDCNT=`${BIN}/expr ${UPDCNT} - 1`
  1093.     echo "UPDCNT=${UPDCNT}" >>${UPDVARFILE}
  1094.     DbgMsg "  Previous UPDCNT=${UPDCNT} will remain in ${UPDCNTFILE}"
  1095. fi
  1096.  
  1097. #
  1098. # Final steps of the request script
  1099. #
  1100. DbgMsg "    UPDMENUANS=${UPDMENUANS}"
  1101. ${BIN}/rm -f ${UPDMENUANS}
  1102. if [ "$SILENT_INSTALL" != "true" ]
  1103. then
  1104.     MenuClear
  1105. fi
  1106.  
  1107. LogMsg "request: `GetText COMPLEXIT` - 0"
  1108. DbgMsg "request: COMPLEXIT - 0"
  1109. exit 0
  1110.