Files
Arquivotheca.SunOS-4.1.4/usr.etc/showrev.sh
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

269 lines
7.4 KiB
Bash

#!/bin/sh
#
# @(#)showrev.sh 1.1 10/31/94 SMI
#
# showrev - tells things about this system for user reporting a bug
#
# use absolute paths - the system/PATH may be hosed!
#
check_dir_to_dir_symlink()
{
thispath=$real_path
current_dir=`/usr/bin/dirname $real_path`
perm=`/usr/bin/ls -ld $real_path|(read perm nlink owner sz dm dd\
dt dir pt link;/usr/bin/echo $perm)`
link=`/usr/bin/ls -ld $real_path|(read perm nlink owner sz dm dd\
dt dir pt link;/usr/bin/echo $link)`
case $perm in
l*) symlink=yes
dir_to_dir_link=yes
case $link in
/*) real_path=$link;;
*) real_path=$current_dir/${link} # relative to current_dir
case $real_path in
//*) real_path=`/usr/bin/echo $real_path|/usr/bin/tr -s '/' '/'`;;
esac;;
esac
/usr/bin/echo " \"$thispath\" Symbolic link to $real_path"
keep_tracing_the_path=yes
for p in $all_paths
do
if [ $real_path = "$p" ]; then
keep_tracing_the_path=no
fi
done
if [ $keep_tracing_the_path = "yes" ]; then
check_dir_to_dir_symlink
fi;;
*) dir_to_dir_link=no
check_file_to_file_symlink
esac
}
check_file_to_file_symlink()
{
thispath=$real_path
current_dir=$real_path
perm=`/usr/bin/ls -ld $real_path/$file|(read perm nlink owner sz dm dd\
dt dir pt link;/usr/bin/echo $perm)`
link=`/usr/bin/ls -ld $real_path/$file|(read perm nlink owner sz dm dd\
dt dir pt link;/usr/bin/echo $link)`
case $perm in
l*) symlink=yes
case $link in
/*) real_path=`/usr/bin/dirname $link`
file=`/usr/bin/basename $link`
check_dir_to_dir_symlink;;
*) real_path=`/usr/bin/dirname $current_dir/$link` # relative to current_\dir
file=`/usr/bin/basename $link`
case $real_path in
//*) real_path=`/usr/bin/echo $real_path|/usr/bin/tr -s '/' '/'`;;
esac;;
esac
/usr/bin/echo " \"$thispath/$file\" Symbolic link to $link"
check_dir_to_dir_symlink;;
*) all_real_pathnames="${all_real_pathnames} ${real_path}/${file}";;
esac
}
findfile()
{
if [ -f $thispath/$file ]; then
case $symlink in
yes) ;; # doesn't count found yet, need to follow links
no) /usr/bin/echo
/usr/bin/echo "* -- \"$file\" found in \"$thispath\" --";;
esac
real_path=$thispath
check_dir_to_dir_symlink
if [ -f $real_path/$file ]; then
foundinthepath="yes"
fi
fi
}
general_sys_rev_info()
{
hostname=`/sbin/hostname`
/usr/bin/echo "* Hostname: \"${hostname}\""
# check to see if set, check against /etc/hosts
# note: [ ] contains a space and a tab
egrep "([ ]${hostname}[ ])|([ ]${hostname}\$)" /etc/hosts > /dev/null
if [ $? -ne 0 ]; then
/usr/bin/echo "ERROR: the hostname doesn't match with /etc/hosts"
fi
hostid=`hostid`
/usr/bin/echo "* Hostid: \"${hostid}\""
karch=`/usr/bin/arch -k`
/usr/bin/echo "* Kernel Arch: \"${karch}\""
aarch=`/usr/bin/arch`
/usr/bin/echo "* Application Arch: \"${aarch}\""
kline=`/usr/ucb/strings /vmunix | /usr/bin/grep SunOS | (read junk1 junk2 the_rest; /usr/bin/echo $the_rest)`
/usr/bin/echo "* Kernel Revision:"
/usr/bin/echo " $kline"
# try to find /usr/sys/conf.common/RELEASE
#
# HACK ATTACK - The change here is ONLY for 4.1.3_U1 Rev B! This should
# go back to the commented version subsequently!!!!
#
#if [ -f /usr/sys/conf.common/RELEASE ]; then
# /usr/bin/echo "* Release: `/usr/bin/cat /usr/sys/conf.common/RELEASE`"
#elif [ -f /etc/install/release ]; then
# /usr/bin/echo "* Release: `/usr/bin/cat /etc/install/release`"
#fi
if [ -f /usr/sys/conf.common/RELEASE ]; then
/usr/bin/echo "* Release: `/usr/bin/cat /usr/sys/conf.common/RELEASE` Version B"
elif [ -f /etc/install/release ]; then
/usr/bin/echo "* Release: `/usr/bin/cat /etc/install/release` Version B"
fi
if [ -f /usr/kvm/showrev.dat ]; then
/usr/bin/echo "* `/usr/bin/cat /usr/kvm/showrev.dat`"
fi
}
print_info()
{
/usr/bin/echo " a) Library information:"
/usr/bin/echo "`/usr/bin/ldd ${real_path_dir}/${real_path_file}`"
/usr/bin/echo " b) Sccs Id: `/usr/ucb/what ${real_path_dir}/${real_path_file}`"
/usr/bin/echo -n " c) Permission: "
w1=`/usr/bin/ls -ldg ${real_path_dir}/${real_path_file} | (read w1 w2 w3 w4 junk; /usr/bin/echo $w1)`
w2=`/usr/bin/ls -ldg ${real_path_dir}/${real_path_file} | (read w1 w2 w3 w4 junk; /usr/bin/echo $w2)`
w3=`/usr/bin/ls -ldg ${real_path_dir}/${real_path_file} | (read w1 w2 w3 w4 junk; /usr/bin/echo $w3)`
w4=`/usr/bin/ls -ldg ${real_path_dir}/${real_path_file} | (read w1 w2 w3 w4 junk; /usr/bin/echo $w4)`
/usr/bin/echo " $w1 $w2 $w3 $w4"
/usr/bin/echo " d) Sum: `/usr/bin/sum ${real_path_dir}/${real_path_file}`"
/usr/bin/echo
}
command_rev_info()
{
all_paths=`/usr/bin/echo $PATH | /usr/bin/tr ':' ' '`
found=no
found_no=0
file=$1
for thispath in $all_paths
do
foundinthepath=no
symlink=no
file=$1
findfile
case $foundinthepath in
yes) found=yes;;
no) if test $symlink = yes
then /usr/bin/echo "$file doesn't exist in point to path"
fi;;
esac
done
case $found in
no) /usr/bin/echo " \"$file\" is not found";;
yes) path_printed=""
for path in $all_real_pathnames
do
if [ "$path" != "$path_printed" ]; then
/usr/bin/echo
/usr/bin/echo " $path"
real_path_dir=`/usr/bin/dirname $path`
real_path_file=`/usr/bin/basename $path`
print_info
path_printed=$path
fi
done;;
esac
/usr/bin/echo
if [ "`/usr/bin/echo $LD_LIBRARY_PATH`" = "" ]; then
/usr/bin/echo "* LD_LIBRARY_PATH not set"
else /usr/bin/echo "* LD_LIBRARY_PATH is: "
/usr/bin/echo $LD_LIBRARY_PATH
fi
/usr/bin/echo
/usr/bin/echo "* Path is: "
/usr/bin/echo $PATH
}
patches_info()
{
/usr/bin/echo
/usr/bin/echo "* Patch:"
for i in /etc/install/patch*; do
if [ -f ${i} ]; then
/usr/bin/cat ${i} | /usr/bin/sed s/\^/" "/g
else
/usr/bin/echo " No patch information found."
fi
done
}
all_sys_info()
{
general_sys_rev_info
if [ "`/usr/bin/echo $OPENWINHOME`" = "" ]; then
OPENWINHOME=/usr/openwin
export OPENWINHOME
fi
if [ -f $OPENWINHOME/etc/NeWS/basics.ps ]; then
owrelease=`cat $OPENWINHOME/etc/NeWS/basics.ps | /usr/bin/grep OpenWin | /usr/bin/awk '{print $2}' | /usr/bin/tr '()' ' '`
/usr/bin/echo "* OpenWindows: OW$owrelease"
else
/usr/bin/echo "* OpenWindows:"
/usr/bin/echo " OpenWindows path information not found."
fi
if [ -f /usr/bin/sunview ]; then
/usr/bin/echo "* SunView:"
ldd /usr/bin/sunview | /usr/bin/awk '{print $2$3}' | /usr/bin/sed s/\.so\./" :"/g | /usr/bin/sed s/\=\>/" "/g | /usr/ucb/head -3
ldd /usr/bin/sunview | /usr/bin/awk '{print $2$3}' | /usr/bin/sed s/\.so\./" :"/g | /usr/bin/sed s/\=\>/" "/g | /usr/ucb/tail -2 | sed s/:/" :"/g
fi
patches_info
}
#===================== MAIN ======================
/usr/bin/echo
/usr/bin/echo "*************** showrev version 1.1 *****************"
#
flag_set=0
aflag=0
cflag=0
pflag=0
#
# parse options
while getopts apc: c
do
case $c in
p) pflag=1
flag_set=1;;
c) cflag=1
flag_set=1
c_arg=$OPTARG;;
a) aflag=1
flag_set=1;;
\?) # XXX may need to add more options
/usr/bin/echo "usage: showrev [ -a ] [ -p ] [ [-c] command ]"
exit 1
esac
done
shift `expr $OPTIND - 1`
arg=$1
#
# no flags are set
if [ $flag_set -eq 0 ]; then
if [ "$arg" = "" ]; then
general_sys_rev_info
else command_rev_info $arg
fi
fi
#
#
if [ $pflag -eq 1 ]; then
patches_info
fi
if [ $cflag -eq 1 ]; then
command_rev_info $c_arg
fi
if [ $aflag -eq 1 ]; then
all_sys_info
fi
/usr/bin/echo
/usr/bin/echo "*******************************************************"