| #!/bin/ksh |
| SBIN=/usr/sbin |
| debug=echo |
| undo=0 |
| |
| update() { |
| echo "UPDATE $1 $2 $3" |
| base=$1 |
| dir=$2 |
| file=$3 |
| Z=$IFS |
| IFS=: |
| set $file |
| if [[ -z $2 ]] ; then |
| o=$1 |
| n=$1 |
| else |
| o=$1 |
| n=$2 |
| fi |
| set $dir |
| sdir=$1 |
| ddir=$2 |
| IFS=$Z |
| |
| if [[ -z ${sdir} && ! -d ${base}/${ddir} ]] ; then |
| ddir= |
| fi |
| |
| sprog=${cpudir}/${sdir}/${n} |
| dprog=${base}/${ddir}/${o} |
| |
| if [[ $undo -eq 0 ]] ; then |
| if [[ -d ${base}/${ddir} ]] ; then |
| if [[ ! -f ${dprog}.dist ]] ; then |
| $debug /bin/mv ${dprog} ${dprog}.dist |
| $debug /bin/cp -p ${dprog}.dist ${dprog} |
| fi |
| $debug /bin/cp ${sprog} ${dprog} |
| else |
| links=$(/bin/ls -dl ${dprog} | awk ' { print $2; } ' -) |
| if [[ $links -eq 1 ]] ; then |
| if [[ ! -f ${dprog}.dist ]] ; then |
| $debug /bin/mv ${dprog} ${dprog}.dist |
| $debug /bin/cp -p ${dprog}.dist ${dprog} |
| fi |
| $debug /bin/cp ${sprog} ${dprog} |
| fi |
| fi |
| else |
| if [[ -f ${dprog}.dist ]] ; then |
| $debug /bin/mv -f ${dprog}.dist ${dprog} |
| fi |
| fi |
| } |
| |
| while [[ $# -gt 0 ]] ; do |
| case $1 in |
| undo) |
| undo=1 |
| ;; |
| -f) |
| debug= |
| ;; |
| -d) |
| debug=echo |
| ;; |
| esac |
| shift |
| done |
| |
| case $(pwd) in |
| */SunOS5) |
| ;; |
| */SunOS5/*) |
| exit 1 |
| ;; |
| *) |
| cd SunOS5 |
| ;; |
| esac |
| cpu=`uname -p` |
| cpudir=${cpu}-`uname -r` |
| |
| if [[ -d ${cpudir}/amd64 ]] ; then |
| big=amd64 |
| fi |
| if [[ -d ${cpudir}/sparcv9 ]] ; then |
| big=sparcv9 |
| fi |
| if [[ -d ${cpudir}/i86 ]] ; then |
| small=i86 |
| fi |
| if [[ -d ${cpudir}/sparc ]] ; then |
| small=sparc |
| fi |
| echo "$cpudir.$big.$small." |
| |
| if [[ -n ${big} ]] ; then |
| for i in ipf:ipf.exe ipfs ipfstat ipmon ipnat ippool; do |
| update $SBIN ${big}:${big} $i |
| done |
| update /usr/lib/ipf ${big}:${big} ipftest |
| update /usr/kernel/drv ${big}:${big} ipf |
| fi |
| if [[ -n ${small} ]] ; then |
| for i in ipf:ipf.exe ipfs ipfstat ipmon ipnat ippool; do |
| update $SBIN ${small}:${small} $i |
| done |
| update /usr/lib/ipf ${small}:${small} ipftest |
| update /usr/kernel/drv ":" ipf |
| fi |
| if [[ -z ${small} && -z ${big} ]] ; then |
| if [[ -z ${small} ]] ; then |
| case ${cpu} in |
| i386) |
| small=i86 |
| ;; |
| sparc) |
| small=sparc |
| ;; |
| esac |
| fi |
| for i in ipf:ipf.exe ipfs ipfstat ipmon ipnat ippool; do |
| update $SBIN :${small} $i |
| done |
| update /usr/lib/ipf :${small} ipftest |
| update /usr/kernel/drv :${small} ipf |
| fi |
| exit 0 |