home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / ictha / install / postinstall < prev    next >
Text File  |  1998-08-19  |  7KB  |  282 lines

  1. #ident    "@(#)pkg.ihvhba:i386/pkg/ihvhba/ictha/postinstall    1.2"
  2.  
  3. do_extract () {
  4.  
  5.     ###
  6.     # Extract Driver.o from loadable module
  7.     ###
  8.     mv /tmp/$PKGINST/$PKGINST /tmp/$PKGINST/Driver.o
  9.  
  10.     for sec in data data1 rodata rodata1 text
  11.     do
  12.         mcs -n .drv_$sec -d Driver.o
  13.         mcs -n .rel.drv_$sec -d Driver.o
  14.     done
  15.  
  16.     mcs -n .mod_dep -d Driver.o
  17.     mcs -n .rel.mod_dep -d Driver.o
  18.  
  19.     ###
  20.     # remove .comment because it is now about 2k.  Really it should be 
  21.     # pstamped note that all our loadable drivers have large .comment 
  22.     # sections that should be pstamped.
  23.     ###
  24.  
  25.     mcs -d Driver.o
  26. }
  27.  
  28. abort_install () {
  29.  
  30.     message -d ${FAIL_INST}
  31.     exit ${FAILURE}
  32. }
  33.  
  34. do_install () {
  35.  
  36.     ${CONFBIN}/idinstall -P ${PKGINST} -a ${1} > ${ERR} 2>&1
  37.     RET=$?
  38.     if [ ${RET} != 0 ]
  39.     then
  40.         OVERLAY=1
  41.  
  42.         (
  43.         if [ ! -d /var/sadm/hba.save/$PKGINST ] 
  44.         then
  45.             SVDIR=/var/sadm/hba.save/$PKGINST
  46.             noexist=1
  47.         fi
  48.  
  49.         cd /etc/conf/pack.d/$PKGINST
  50.         if [ noexist ]
  51.         then
  52.             mkdir -p $SVDIR/pack.d 2>&1 >/dev/null
  53.             for FILE in Driver.o space.c disk.cfg
  54.             do
  55.                 if [ noexist ]
  56.                 then 
  57.                     mv /etc/conf/pack.d/$PKGINST/$FILE $SVDIR/pack.d
  58.                 fi
  59.                 if [ "$FILE" = "space.c" ]
  60.                 then
  61.                    mv /tmp/$PKGINST/Space.c space.c
  62.                 else
  63.                    mv /tmp/$PKGINST/$FILE $FILE
  64.                 fi
  65.                 [ $? -ne 0 ] && abort_install
  66.             done
  67.         fi
  68.  
  69.         cd /etc/conf/drvmap.d
  70.         if [ noexist ]
  71.         then
  72.             mkdir $SVDIR/drvmap.d 2>&1 >/dev/null
  73.             mv $PKGINST $SVDIR/drvmap.d
  74.             mv /tmp/$PKGINST/Drvmap $PKGINST
  75.             [ $? -ne 0 ] && abort_install
  76.         fi
  77.  
  78.         cd /etc/conf/mdevice.d
  79.         if [ noexist ]
  80.         then
  81.             mkdir $SVDIR/mdevice.d 2>&1 >/dev/null
  82.             mv $PKGINST $SVDIR/mdevice.d
  83.             mv /tmp/$PKGINST/Master $PKGINST
  84.             [ $? -ne 0 ] && abort_install
  85.         fi
  86.         )
  87.     else
  88.         rm -f ${ERR}
  89.         mv disk.cfg /etc/conf/pack.d/${1}
  90.         chown bin /etc/conf/pack.d/${1}/disk.cfg 
  91.         chgrp bin /etc/conf/pack.d/${1}/disk.cfg
  92.     fi
  93.     mv ${1}.h /usr/include/sys
  94.     chown bin /usr/include/sys/${1}.h
  95.     chgrp bin /usr/include/sys/${1}.h
  96.  
  97.     if [ "${1}" = "ide" ]
  98.     then
  99.         install -f /usr/include/sys -u bin -g bin ata_ha.h
  100.         install -f /usr/include/sys -u bin -g bin ide_ha.h
  101.         install -f /usr/include/sys -u bin -g bin mc_esdi.h
  102.     fi
  103. }
  104.  
  105. do_ide_update() {
  106.     if [ ! -f /etc/conf/sdevice.d/athd -o \
  107.         ! -f /etc/conf/sdevice.d/mcesdi -o \
  108.         ! -f /etc/conf/sdevice.d/dcd ]
  109.     then
  110.         return
  111.     fi
  112.  
  113.     # Create System file for ide driver from the dcd System file.  The io
  114.     # addresses and dma channel numbers are taken from the athd or mcesdi
  115.     # System files with unit numbers matched with the dcd System file.
  116.     IDE_UPDATE=1
  117.     TMPFILE=/tmp/${PKGINST}/tmpfile
  118.     rm -f $TMPFILE
  119.     awk '
  120.         BEGIN { OFS = "\t"; icount = 0; }
  121.         $1 == "athd" || $1 == "mcesdi" {
  122.             if ($2 == "Y") {
  123.                 unit[icount] = $3
  124.                 iostart[icount] = $7
  125.                 ioend[icount] = $8
  126.                 dmachan[icount] = $11
  127.                 icount++
  128.             }
  129.             output = ""
  130.             next
  131.         }
  132.         $1 == "dcd" {
  133.             $1 = "ide"
  134.             if ($2 == "Y") {
  135.                 for (i = 0; (i < icount) && (unit[i] != $3); i++)
  136.                     ;
  137.                 if (i < icount) {
  138.                     $7 = iostart[i]
  139.                     $8 = ioend [i]
  140.                     $11 = dmachan [i]
  141.                 }
  142.             }
  143.         }
  144.         { output = output $0 "\n" }
  145.         END { printf "%s", output }
  146.     ' /etc/conf/sdevice.d/athd \
  147.       /etc/conf/sdevice.d/mcesdi \
  148.       /etc/conf/sdevice.d/dcd > ${TMPFILE}
  149.  
  150.     # Delete athd, mcesdi, and dcd entries in the in-core resmgr database.
  151.     ${CONFBIN}/idresadd -d -f athd
  152.     ${CONFBIN}/idresadd -d -f mcesdi
  153.     ${CONFBIN}/idresadd -d -f dcd
  154.  
  155.     # Set up the merged ide System file right before force adding the ide
  156.     # entries to the in-core resmgr database.  This is done to avoid an
  157.     # idresadd side-effect of dis-configurating other modules' System file
  158.     # entries which are not in the in-core resmgr database.
  159.     mv ${TMPFILE} /etc/conf/sdevice.d/ide
  160.     ${CONFBIN}/idresadd -f ide
  161.  
  162.     # Update /stand/resmgr configuration file and system files according to
  163.     # the in-core resmgr database.
  164.     ${CONFBIN}/idconfupdate -f
  165. }
  166.  
  167. register() {
  168. if [ $OVERLAY ]
  169. then
  170. installf -c none $PKGINST - << !!EOF
  171. /etc/conf/pack.d/$PKGINST/Driver.o
  172. /etc/conf/pack.d/$PKGINST/disk.cfg
  173. /etc/conf/pack.d/$PKGINST/space.c
  174. /etc/conf/drvmap.d/$PKGINST
  175. /etc/conf/mdevice.d/$PKGINST
  176. !!EOF
  177. else
  178. installf -c none $PKGINST - << !!EOF
  179. /etc/conf/pack.d/${PKGINST}/disk.cfg
  180. /usr/include/sys/${PKGINST}.h
  181. /etc/loadmods
  182. !!EOF
  183. if [ "$PKGINST" = "ide" ]
  184. then
  185. installf -c none ide - << !!EOF
  186. /usr/include/sys/ata_ha.h
  187. /usr/include/sys/ide_ha.h
  188. /usr/include/sys/mc_esdi.h
  189. !!EOF
  190. fi
  191. fi
  192. if [ $IDE_UPDATE ]
  193. then
  194. installf -c none $PKGINST - << !!EOF
  195. /etc/conf/sdevice.d/$PKGINST
  196. !!EOF
  197. fi
  198. installf -f $PKGINST
  199. }
  200.  
  201. # Messaging related stuff
  202. PKGMSG=hba.pkg
  203. LOCALE=${LC_ALL:-${LC_MESSAGES:-${LANG:-"C"}}}
  204. # Check if we're installing during initial system installation.
  205. # If so, set ROOT=/mnt; otherwise ROOT is null.  Make sure that
  206. # we're not pkgadd'ing over a pkg that was installed during that
  207. # first system installation (i.e., check UPDATE).
  208. ROOT=
  209. [ "$SETNAME" = "from_loadhba" -a "$UPDATE" != "yes" ] && ROOT="/mnt"
  210. LC_MESSAGES=$ROOT/usr/lib/locale/$LOCALE
  211.  
  212. if [ ! -f ${LC_MESSAGES}/LC_MESSAGES/${PKGMSG} ]
  213. then
  214.     if [ -f ${REQDIR}/inst/locale/${LOCALE}/$PKGMSG} -a \
  215.         -d ${ROOT}/usr/lib/locale/${LOCALE}/LC_MESSAGES ]
  216.     then
  217.         cp ${REQDIR}/inst/locale/${LOCALE}/${PKGMSG} \
  218.             ${LC_MESSAGES}/LC_MESSAGES
  219.     fi
  220. fi
  221. FAIL_INST=`pfmt -s ERROR -g ${PKGMSG}:2 "The installation cannot be completed due to an error in the driver installation during the installation of the %s module.  The file %s contains the errors." "${PKGINST}" "${ERR}" 2>&1`
  222.  
  223.  
  224. FAILURE=1    # fatal error
  225.  
  226. CONFDIR=/etc/conf
  227. CONFBIN=${CONFDIR}/bin
  228. ERR=/tmp/err.out
  229.  
  230. cd /tmp/${PKGINST}
  231. [ -f /tmp/${PKGINST}/Driver.o ] || do_extract
  232. do_install ${PKGINST}
  233. [ "$PKGINST" = "ide" ] && do_ide_update
  234.  
  235. if test -f /bin/grep
  236. then
  237.     grep $PKGINST /etc/loadmods >/dev/null
  238.     [ $? -ne 0 ] &&
  239.         cat /tmp/$PKGINST/loadmods >>/etc/loadmods
  240. else
  241.     cat /tmp/$PKGINST/loadmods >>/etc/loadmods
  242. fi
  243.  
  244. # Register changes made to system into the contents file
  245. register
  246.  
  247. # Cleanup temporary files and directories
  248. rm -fr /tmp/${PKGINST} /tmp/hba.cpio.z >/dev/null 2>&1
  249. removef ${PKGINST} /tmp /tmp/${PKGINST} /tmp/${PKGINST}/Drvmap \
  250.     /tmp/${PKGINST}/mod.cpio.z /tmp/hba.cpio.z /tmp/${PKGINST}/Master \
  251.     /tmp/${PKGINST}/System >/dev/null 2>&1
  252. removef -f ${PKGINST} >/dev/null 2>&1
  253.  
  254. # If this package is being added as an add-on package (not being installed 
  255. # from the initial system installation via loadhba), then for non-ISA cards
  256. # which have boardids run 'dcu -s'.
  257. if [ "$ROOT" != "/mnt" ]
  258. then
  259.     cat /etc/conf/drvmap.d/${PKGINST} | awk -F'|' '
  260.         BEGIN {
  261.             BOARDID = 1
  262.         }
  263.     
  264.         {
  265.             if (NF > 1) {
  266.                 if ($2 !~ /Y/)
  267.                     if ($2 !~ /N/)
  268.                         if($3 != "") {
  269.                             BOARDID = 0
  270.                             exit
  271.                         }
  272.             }
  273.         }
  274.     
  275.         END {
  276.             exit BOARDID 
  277.         }'
  278.     [ $? -eq 0 ] && /sbin/dcu -s
  279. fi
  280. /etc/conf/bin/idbuild
  281. exit 0
  282.