#!/bin/csh -f # # SYSINFO -- Display IRAF system diagnostic and configuration information. # # The intent of this program is to provide a means for IRAF site managers # to troubleshoot their IRAF installations by running numerous verification # tests on the iraf directory structure, networking setup, external package # installations, tape configurations, etc. Failed tests are not always # fatal but may indicate a problem in the way something was installed or # configured. # # Usage: sysinfo [ -G | -V | -N | -P | -D | -T | -h ] # # where: -G Print General Info only" # -V Do Verification tests only" # -N Do Networking tests only" # -P Do Extern Package tests only" # -D Do Display tests only" # -T Do Tape Device tests only" # -h Print this message" # # ---------------------------------------------------------------------------- unset noclobber unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort unalias uniq head sed tr which set path = ($path /sbin /usr/sbin /bin /usr/bin /usr/ucb /etc /usr/etc /usr/openwin/bin /usr/X11R6/bin /usr/X11/bin) onintr sysinfo_cleanup ############################################################################## # START OF MACHDEP DEFINITIONS. ############################################################################## # MACHDEP definitions which may be reset below. set hmach = "INDEF" set pciraf = 0 set suniraf = 0 set do_tapecaps = 0 set hilite = 0 # Utility aliases. alias BOLD_ON "(if ($hilite) tput bold)" alias BOLD_OFF "(if ($hilite) tput sgr0)" alias SO_ON "(if ($hilite) tput smso)" alias SO_OFF "(if ($hilite) tput rms0)" alias DO_OK "(echo -n '[ '; BOLD_ON; echo -n ' OK '; BOLD_OFF; echo ' ]')" alias DO_WARN "(echo -n '[ '; BOLD_ON; echo -n 'WARN'; BOLD_OFF; echo ' ]')" alias DO_FAIL "(echo -n '[ '; SO_ON; echo -n 'FAIL'; SO_OFF; echo ' ]')" alias MSG "(echo -n ' ';BOLD_ON;echo -n '*** ';BOLD_OFF; echo \!*)" alias MSGN "(echo -n ' ';BOLD_ON;echo -n '*** ';BOLD_OFF; echo -n \!*)" alias MSGB "(echo -n ' ';BOLD_ON;echo -n '*** ';echo \!*; BOLD_OFF)" alias MSGBN "(echo -n ' ';BOLD_ON;echo -n '*** ';echo -n \!*;BOLD_OFF)" alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ';BOLD_OFF; echo \!*)" alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)" alias NEWLINE "(echo '')" alias RM "rm -rf" # Determine platform architecture. set UNAME="" if (-e /usr/bin/uname) then set uname_cmd = /usr/bin/uname set UNAME=`/usr/bin/uname | tr '[A-Z]' '[a-z]'` else if (-e /bin/uname) then set uname_cmd = /bin/uname set UNAME=`/bin/uname | tr '[A-Z]' '[a-z]'` else WARNING "No 'uname' command found to determine architecture." exit 1 endif set pciraf = 0 set hmach = "INDEF" switch ($UNAME) case sunos: if (`$uname_cmd -m | cut -c2-` != "86pc") then setenv OSVERSION `uname -r | cut -c1` if ($OSVERSION == 5) then # Sparc Solaris set mach = "ssun" set hmach = "ssol" set TAPES = "/dev/rmt/[0-9]*" set shlib = "no" set LIBFILES = "" set LS = "/usr/ucb/ls -s" set LSDF = "-lLtg" else # Sparc SunOS 4.x set mach = "sparc" set hmach = "sparc" set TAPES = "/dev/*st[0-7]*" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLtg" endif else set mach = "sunos" # Intel Solaris set hmach = "sunos" set TAPES = "/dev/*st[0-7]*" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLt" set pciraf = 1 endif breaksw case linux: if (`$uname_cmd -m` == "x86_64") then # Linux64 set mach = "linux64" set hmach = "linux64" set TAPES = "/dev/*st[0-7]" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLt" else if (`$uname_cmd -m` == "ppc") then # LinuxPPC set mach = "linuxppc" set hmach = "linuxppc" set TAPES = "/dev/*st[0-7]" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLt" else if (-f /etc/redhat-release) then # RedHat Linux set mach = "redhat" set hmach = "redhat" set TAPES = "/dev/*st[0-7]" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLtg" else # Other Linux set mach = "linux" set hmach = "linux" set TAPES = "/dev/*st[0-7]" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLtg" endif endif set pciraf = 1 breaksw case darwin: # Mac OS X case macosx: case macintel: if (`$uname_cmd -m` == "x86_64") then # 64-bit set mach = "macintel" set hmach = "macintel" else set mach = "macosx" # 32-bit set hmach = "macosx" endif set TAPES = "/dev/*sa[0-7]" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLtg" set pciraf = 1 breaksw case freebsd: # FreeBSD set mach = "freebsd" set hmach = "freebsd" set TAPES = "/dev/*sa[0-7]" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLtg" set pciraf = 1 breaksw case hp-ux: # HP/UX 10.20 set mach = "hp700" set hmach = "hp700" set TAPES = "/dev/rmt/[0-7]*" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLt" breaksw case irix: # SGI IRIX 6.5 case irix64: set mach = "irix" set hmach = "irix" set TAPES = "/dev/tps[0-7]*" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLt" breaksw case aix: # IBM AIX V4 set mach = "rs6000" set hmach = "rs6000" set TAPES = "/dev/rmt[0-7]*" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLtg" breaksw case osf1: # Alpha Tru64 set mach = "alpha" set hmach = "alpha" set TAPES = "/dev/nrmt[0-7]* /dev/rmt[0-7]*" set shlib = "yes" set LIBFILES = "libiraf.so" set LS = "/bin/ls -s" set LSDF = "-lLtg" breaksw case ultrix: # DEC Ultrix set mach = "ultrix" set hmach = "ultrix" set TAPES = "/dev/[n]rmt[0-7]*" set shlib = "no" set LIBFILES = "" set LS = "/bin/ls -s" set LSDF = "-lLtg" breaksw default: # We don't want to be limited by the CYGWIN version numbering so # look for a truncated match here before punting. set os_mach = `echo $UNAME | cut -c1-6` if ("$os_mach" == "cygwin") then set mach = "cygwin" set hmach = "cygwin" set shlib = "no" set LIBFILES = "" set TAPES = "" # no tape support set do_tapecaps = 0 set do_tapes = 0 set do_pipes = 0 breaksw else ERRMSG "Unable to determine platform architecture. Please" ERRMSG "contact the forums at http://forums.iraf.net" NEWLINE exit 1 else endsw ###################### END OF MACHDEP DEFINITIONS. ######################## #============================================================================= # Initializations. #============================================================================= set errstat = 0 # initialize status counters set ok_count = 0 set err_count = 0 set warn_count = 0 set defstat = " OK " #============================================================================= # Process any command line arguments. #============================================================================= set early_exit = 0 set general = 0 set severe = 0 while ("$1" != "") switch ("$1") case -G: # Output General Info only set general = 1 set early_exit = 1 goto General breaksw case -V: # Verification Test Only set early_exit = 1 breaksw case -N: # Test Networking Only set early_exit = 1 goto Networking breaksw case -P: # Test Packages Only set early_exit = 1 goto External_Packages breaksw case -D: # Test Display Only set early_exit = 1 goto Image_Display breaksw case -T: # Test Tapes Only set early_exit = 1 goto Tape_Device breaksw case -hl: # disable highlighting NEWLINE echo "WARNING: Highlighting is not permitted by this script, ignoring." NEWLINE breaksw case +hl: # enable highlighting NEWLINE echo "WARNING: Highlighting is not permitted by this script, ignoring." NEWLINE breaksw case -help: case -h: goto Usage default: ERRMSG "SYSINFO: unknown argument $1" goto Usage endsw if ("$2" == "") then break else shift endif end #============================================================================= # General Information #============================================================================= General: NEWLINE BOLD_ON echo " General Information" echo " ===================" BOLD_OFF NEWLINE # Document the system information. echo "Host name: "`hostname` echo "Operating System: "`uname -a` echo "Architecture: "$mach echo "HSI architecture: "$hmach if ($pciraf && -e /etc/issue) then set issue = `cat /etc/issue` NEWLINE echo "PC Issue: " $issue endif NEWLINE # Check the iraf root directory stuff echo -n "IRAF environment path: " if ($?iraf == 1) then set env_iraf = $iraf echo "$iraf" else set env_iraf = "" echo "" endif echo -n "Checking for " if (-e /usr/include/iraf.h) then NEWLINE echo -n " IRAF path: " set ip = `grep "^#define IRAF" /usr/include/iraf.h | sed -e 's/\"//g'` if ("$ip" != "") then echo $ip[3] set irafh_iraf = $ip[3] else echo "not found" endif echo -n " HOST path: " set ip = `grep "^#define HOST" /usr/include/iraf.h | sed -e 's/\"//g'` if ("$ip" != "") then echo $ip[3] else echo "not found" endif echo -n " TMP path: " set ip = `grep "^#define TMP" /usr/include/iraf.h | sed -e 's/\"//g'` if ("$ip" != "") then echo $ip[3] else echo "not found" endif else echo " not found" NEWLINE echo " *** The file /usr/include/iraf.h was not found on this system" echo " *** which means the install script was not run on this machine." if ("$env_iraf" != "") then echo " *** Using environment definition: $env_iraf" endif NEWLINE set irafh_iraf = "" endif if ("$env_iraf" != "" && "$irafh_iraf" != "") then if ("$env_iraf" != "$irafh_iraf") then NEWLINE echo "WARNING: iraf environment and root directories differ." # First make sure we have a valid path. if ( !(-e $env_iraf/unix/hlib/zzsetenv.def)) then MSG "Environment definition looks incorrect." MSG "Using definition '$irafh_iraf'" # Strip off any trailing '/'. set iraf = `echo $irafh_iraf | sed -e 's+/\(["]*\)$+\1+'` else if ( !(-e $irafh_iraf/unix/hlib/zzsetenv.def)) then MSG " definition looks incorrect." MSG "Using environment definition '$env_iraf'" # Strip off any trailing '/'. set iraf = `echo $env_iraf | sed -e 's+/\(["]*\)$+\1+'` endif NEWLINE else if ("$env_iraf" != "") then set iraf = `echo $env_iraf | sed -e 's+/\(["]*\)$+\1+'` else set iraf = `echo $irafh_iraf | sed -e 's+/\(["]*\)$+\1+'` endif endif else if ("$env_iraf" == "" && "$irafh_iraf" == "") then NEWLINE MSG "No 'iraf' defined in the environment and there is no " MSG "file on this machine. Please specify an iraf path in the" MSG "environment or run the install script to proceed." NEWLINE exit 1 else if ("$env_iraf" == "") then # Strip off any trailing '/'. set iraf = `echo $irafh_iraf | sed -e 's+/\(["]*\)$+\1+'` else if ("$irafh_iraf" == "") then # Strip off any trailing '/'. set iraf = `echo $env_iraf | sed -e 's+/\(["]*\)$+\1+'` endif NEWLINE echo "Using iraf root path: $iraf" NEWLINE # Initialize for files we'll be checking later. set tapecap_file = "$iraf/dev/tapecap" set termcap_file = "$iraf/dev/termcap" set graphcap_file = "$iraf/dev/graphcap" # Get the motd header string. echo -n 'IRAF version: ' if (-e $iraf/unix/hlib/motd) then set motd = "$iraf/unix/hlib/motd" set ver = `head -1 $motd | sed -e 's/NOAO//g' -e 's/EXPORT//g'` echo $ver else echo "" endif NEWLINE # Get the last time the hlib$utime (install) was updated. echo -n "Install script last run: " if (-e $iraf/unix/hlib/utime) then set dat = `$LS $LSDF $iraf/unix/hlib/utime | head -2 | tail -1` set utime = `echo -n $dat | awk '{printf ("%3s %2s %-5s\t", $7, $8, $9)}'` echo $utime else echo "" endif # Look around for the local iraf commands directory. echo -n "IRAF command directories: " set clpath = `which cl` set lbins = "" if ("`echo $clpath | grep 'Command not found'`" == "") then set d_lbin = $clpath:h foreach p ($path) if (-d $p && -e $p/cl) then set lbin = $p set lbins = `echo $lbins $p` if ("$lbins" == "$lbin") then echo $p else echo " $p" endif endif end if ("$lbin" == "") then echo "not found" endif else echo "not found" endif # If we use a shared library see if it's in the path someplace. if ("$shlib" == "yes") then echo -n "IRAF shared lib directory: " set llib = "" set llibs = "" # Look around and come up with a likely candidate directory. set sysp = "/usr/local/lib /local/lib /usr/lib /var/shlib /lib" if ($?LD_LIBRARY_PATH) then set userp = `echo $LD_LIBRARY_PATH | sed -e 's/:/ /g'` else set userp = "" endif foreach p ($sysp $userp) if (-d $p) then foreach l ($LIBFILES) if (-e $p/$l) then set llib = $p set llibs = `echo $llibs $p` if ("$llibs" == "$llib") then echo $p else echo " $p" endif endif end endif end if ("$llib" == "") then echo "not found" endif endif # Get the default imdir from the mkiraf.csh echo -n "Default image storage dir: " set hlib = $iraf/unix/hlib/ if (-e $hlib/mkiraf.csh) then set p = `grep "^set imdir" $hlib/mkiraf.csh | sed -e 's/\"//g'` if ("$p" != "") then echo $p[4] set imdir = $p[4] else echo "not found" endif else echo "" endif # Print some interesting default system settings from hlib$zzsetenv.def. set WS = '[ ]' set ZZDEFS = "printer stdplot editor imtype stdimage cmbuflen min_lenuserarea graphcap termcap tapecap" NEWLINE echo 'Default settings in the hlib$zzsetenv.def file:' if (-e $hlib/zzsetenv.def) then foreach i ($ZZDEFS) set p = `grep "^set$WS$i" $hlib/zzsetenv.def | sed -e 's/\"//g'` if ("$p" != "") then set $i = '$p[4]' echo ${i}: $p[4] | awk '{ printf (" %-12s\t %s\n", $1, $2)}' # Save the *cap file for later use. if ("$i" == "termcap" && "$p[4]" != 'dev$termcap') then set termcap_file = $p[4] else if ("$i" == "graphcap" && "$p[4]" != 'dev$graphcap') then set graphcap_file = $p[4] else if ("$i" == "tapecap" && "$p[4]" != 'dev$tapecap') then set tapecap_file = $p[4] endif else echo ${i}: | awk '{ printf (" %-12s\tnot found\n", $1, $2)}' endif end else MSG 'hlib$zzsetenv.def file not found' set severe = 1 endif NEWLINE if ($pciraf) then NEWLINE echo "X Server Version information:" echo " "`X -version |& egrep "^XFree86"` echo " "`X -version |& egrep "^Release"` echo " "`X -version |& egrep "Operating"` endif NEWLINE echo "Compilers and Development Tools Available:" echo " (NOTE: duplicates are possible due to the search path" echo " used and symbolic links for commands.)" NEWLINE set found = 0 foreach d ($path) foreach i (cc gcc acc c89 f77 g77 f90 fort f2c yacc bison lex flex) if (-e $d/$i) then echo " "$d/$i set found = 1 endif end end if ($found == 0) then echo " None Found" NEWLINE endif if ($severe == 1) then NEWLINE NEWLINE BOLD_ON echo "======================================================================" echo "SYSINFO: Aborting due to severe errors." echo "======================================================================" BOLD_OFF NEWLINE exit 1 else if ($general == 1) then goto exit_early endif #============================================================================= # Installation Verification #============================================================================= Verification: echo; NEWLINE echo "======================= Verifying Installation =======================" NEWLINE ############################################################################## # # Step 1: VERIFICATION # # Run some simple checks to be sure the system was unpacked correctly # and the settings used are correct. Verification tests include: # # o Verify the machine type and document settings. # o Check iraf root directory looks correct. # o Check iraf root and imdir aren't the same # o Check iraf user exists in passwd file. # o Check iraf user login path in passwd file is iraf$local. # o Check iraf tree for proper structure. # o Check iraf tree is owned by 'iraf' # o Check binary dirs are both populated correctly. # o Check that the local bin directory exists. # o Check that the local lib directory exists. # # An error at this stage will cause the script to exit so we can reset and # try again. # ############################################################################## # ============================================ # The following is partially system dependent. # ============================================ # Set the BINDIRS pathnames - directories where the HSI executables go. set host = "$iraf/unix" set hbin = "$iraf/unix/bin.$hmach" set hlib = "$iraf/unix/hlib" set fbin = "$iraf/bin" # Replace any // by /. set host = `echo $host | sed -e "s+//+/+g"` set hbin = `echo $hbin | sed -e "s+//+/+g"` set fbin = `echo $fbin | sed -e "s+//+/+g"` set hlib = `echo $hlib | sed -e "s+//+/+g"` # Strip any trailing /. set host = `echo $host | sed -e 's+/\(["]*\)$+\1+'` set hbin = `echo $hbin | sed -e 's+/\(["]*\)$+\1+'` set fbin = `echo $fbin | sed -e 's+/\(["]*\)$+\1+'` set hlib = `echo $hlib | sed -e 's+/\(["]*\)$+\1+'` set BINDIRS = "$hbin $hlib $fbin $host" # The following file lists are partially system dependent. set PATHFILES = "mkiraf.csh libc/iraf.h cl.csh ../../local/.login" set MODEFILES = "cl.csh fc.csh mkiraf.csh mkfloat.csh mkmlist.csh $host/reboot generic.e mkpkg.e rmbin.e rmfiles.e rpp.e rtar.e wtar.e xc.e xpp.e xyacc.e sgidispatch.e $hbin/sgi2*.e" set LINKFILES = "cl.e mkiraf.csh mkmlist.csh generic.e mkpkg.e rmbin.e rmfiles.e rtar.e sgidispatch.e wtar.e rpp.e xpp.e xyacc.e xc.e" set CMDLINKS = "cl mkiraf mkmlist generic mkpkg rmbin rmfiles rtar sgidispatch wtar rpp xpp xyacc xc" # ------------------------------------------ # Check for file. echo -n "Checking for file ... " if (! (-e /usr/include/iraf.h)) then DO_FAIL ; set errstat = 1 ; set iraf_root_ok = 0 NEWLINE MSG "The file /usr/include/iraf.h was not found which means" MSG "the install script was not run on this machine." NEWLINE set err_count = `expr $err_count + 1` else DO_OK ; set iraf_root_ok = 1 set ok_count = `expr $ok_count + 1` endif # Check $iraf path in PATHFILES echo -n "Checking iraf path in system files ... " set err_seen = 0 foreach i ($PATHFILES) if (-e $iraf/unix/hlib/$i) then grep $iraf $iraf/unix/hlib/$i >& /dev/null endif if ($status == 1 || (! (-e $iraf/unix/hlib/$i))) then if ("$err_seen" == 0) then DO_FAIL set err_seen = 1 ; set err_count = `expr $err_count + 1` endif if (! -e $i) then MSG "File $i not found." else MSG "File $i contains the wrong iraf path" endif endif end if ("$err_seen" == 0) then BOLD_ON echo "[ $defstat ]" BOLD_OFF endif # Check that the specified local bin directory exists. echo -n "Checking that local command bin directory exists ... " if ("$lbin" == "") then DO_FAIL ; set errstat = 1 NEWLINE MSG "No local bin directory found on this machine which" MSG "implies that either your path does not include the" MSG "local bin dir or else the install script was not run" MSG "on this machine." NEWLINE set err_count = `expr $err_count + 1` else if (-d "$lbin") then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set errstat = 1 NEWLINE MSG "The specified local bin directory does not exist. This" MSG "directory should be a common local bin directory which " MSG "is found in all user's paths, e.g. /usr/local/bin." MSG "Please create the directory or else reset and try again." NEWLINE set err_count = `expr $err_count + 1` endif endif # Check that the specified local lib directory exists. if ("$shlib" == "yes") then echo -n "Checking that local lib directory exists ... " if (-d "$llib") then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set errstat = 1 NEWLINE MSG "The specified local lib directory does not exist. This" MSG "directory should be a common local lib directory which " MSG "is found in all user's paths, e.g. /usr/local/lib." MSG "This directory is required for the iraf shared library." MSG "Please create the directory or else reset and try again." NEWLINE set err_count = `expr $err_count + 1` endif endif # Check mode on MODEFILES echo -n "Checking iraf file permissions ... " set err_seen = 0 foreach i ($MODEFILES) set file = $i if (! -e $file) then foreach j ($BINDIRS) if (-e $j/$i) then set file = $j/$i break endif end endif if (-e $file) then if ("`$LS -l $file | grep '.rwxr.xr.x'`" == "") then if ("$err_seen" == 0) then DO_WARN set err_seen = 1 ; set err_count = `expr $err_count + 1` endif MSG "File $file:t not mode 0755." endif else if ("$err_seen" == 0) then DO_FAIL set err_seen = 1 ; set err_count = `expr $err_count + 1` endif MSG "File $file:t not found." endif end if ("$err_seen" == 0) then BOLD_ON echo "[ $defstat ]" BOLD_OFF endif # Check valid links on CMDLINKS echo "Checking iraf command links ..." set err_seen = 0 foreach p ($lbins) echo -n " Checking command dir $p ... " foreach cmd ($CMDLINKS) # Locate the file to be linked to. set file1 = $cmd:r foreach j ($BINDIRS) set file2 = $j/$file1.csh if (-e $file2) then break endif set file2 = $j/$cmd.e if (-e $file2) then break endif end # See first if it exists directly, or as a link to some other # valid file. if (! (-e $p/$cmd) && ! (-e $file2) ) then if ("$err_seen" == 0) then DO_FAIL set err_seen = 1 ; set err_count = `expr $err_count + 1` endif echo -n " " ; MSG "File $p/$cmd not found." # Then check that the link is correct else if ("`$LS -l $p/$file1 | grep $file2`" == "") then if ("$err_seen" == 0) then DO_FAIL set err_seen = 1 ; set err_count = `expr $err_count + 1` endif echo -n " " ; MSG "Link $p/$cmd is invalid." endif end if ("$err_seen" == 0) then BOLD_ON echo "[ $defstat ]" BOLD_OFF endif end if ($err_seen == 1) then NEWLINE MSG "1) A 'not found' error means that one or more of the commands" MSG " normally installed by the install script was not found." MSG " This may indicate a non-standard installation." MSG "2) A 'link is invalid' message means that the command link" MSG " was found but either points to a nonexistent file or to" MSG " the wrong file for this platform (e.g. the HSI bin.sparc" MSG " directory instead of bin.ssol)." MSG "3) Multiple local bin directories are not strictly an error" MSG " but may confuse users. Unneeded links should be removed." MSG "" MSG "The command links should be checked in either cases and the" MSG "install script rerun to clear the error." NEWLINE endif # Check iraf root directory looks correct. NEWLINE echo -n "Checking contents of iraf root directory ... " if (! ((-d $iraf/dev) && (-d $iraf/pkg) && (-d $iraf/noao))) then DO_FAIL ; set errstat = 1 ; set iraf_root_ok = 0 NEWLINE MSG "The definition of '$iraf' looks incorrect. The iraf root" MSG "directory is the place where the AS distribution was unpacked," MSG "it contains subdirectories such as 'dev', 'local', 'noao', and" MSG "'pkg' and the binary directory links." NEWLINE set err_count = `expr $err_count + 1` else DO_OK ; set iraf_root_ok = 1 set ok_count = `expr $ok_count + 1` endif # Cannot have iraf and imdir the same. echo -n "Checking iraf root and imdir directory ... " if ($iraf == $imdir) then DO_FAIL ; set errstat = 1 NEWLINE MSG "'imdir' should not be the same as the iraf root directory." NEWLINE set err_count = `expr $err_count + 1` else DO_OK set ok_count = `expr $ok_count + 1` endif # Check iraf user. echo -n "Checking for iraf user account ... " set pass = "" if ($pciraf && ($mach == "macosx" || $mach == "macintel")) then # Special-case user info check for OS X and systems where the /etc/passwd # file may not contain the user info. if (`id iraf |& grep -i 'no such user'` != "") then DO_FAIL ; set errstat = 1 NEWLINE MSG "No 'iraf' user was found on the system. The iraf user should" MSG "be created before installing the system to ensure all files" MSG "are owned by the iraf user, and the have the proper environment" MSG "defined for installation and maintanence." NEWLINE else DO_OK set ok_count = `expr $ok_count + 1` # Check iraf user login path and shell echo -n "Checking iraf user login directory ... " set v = `finger iraf |& egrep "^Directory"` set ihome = `echo $v[2] | sed -e 's+/\(["]*\)$+\1+'` set shel = `echo $v[4] | sed -e 's+/\(["]*\)$+\1+' | grep csh` if ("$ihome" != "$iraf/local" || $shel == "") then DO_FAIL ; set errstat = 1 NEWLINE MSG "The iraf user login info appears to be incorrect. For the" MSG "given iraf root this path should be '$iraf/local'," MSG "please run the 'chpass' command to change this. The iraf" MSG "user account should also be defined to use a C-shell." if ("$iraf_root_ok" == 0) then MSG "(This error may be related to the incorrect definition of" MSG "the iraf root directory seen above.)" endif NEWLINE else DO_OK set ok_count = `expr $ok_count + 1` endif endif else if (!(-r /etc/passwd)) then DO_FAIL ; set errstat = 1 NEWLINE MSG "The /etc/passwd file is not readable so I can't check for" MSG "and iraf user. This may also cause problems with IRAF MSG "networking when connecting to this machine." NEWLINE else set pass = `grep ^iraf: /etc/passwd` if ("$pass" == "") then DO_FAIL ; set errstat = 1 NEWLINE MSG "No 'iraf' user was found in the /etc/passwd file. The iraf" MSG "user should be created before installing the system to ensure" MSG "all files are owned by the iraf user, and the have the proper" MSG "environment defined for installation and maintanence." NEWLINE else DO_OK set ok_count = `expr $ok_count + 1` # Check iraf user login path in passwd file is iraf$local. echo -n "Checking iraf user login directory ... " set pass = `grep ^iraf: /etc/passwd | sed -e 's/[ \*]/_/g'|sed -e 's/:/ /g'` set c = `echo $pass | wc -w` set indx = `expr $c - 1` set ihome = `echo $pass[$indx] | sed -e 's+/\(["]*\)$+\1+'` set shel = `echo $pass[$c] | sed -e 's+/\(["]*\)$+\1+' | grep csh` if ("$ihome" != "$iraf/local" || $shel == "") then DO_FAIL ; set errstat = 1 NEWLINE MSG "The iraf user login directory appears to be incorrect." MSG "For the given iraf root this path should be '$iraf/local'," MSG "please edit the /etc/passwd file to change this. The iraf" MSG "user account should also be defined to use a C-shell." if ("$iraf_root_ok" == 0) then MSG "(This error may be related to the incorrect definition of" MSG "the iraf root directory seen above.)" endif NEWLINE else DO_OK set ok_count = `expr $ok_count + 1` endif endif endif # Check iraf tree for proper structure. set iraf_r = $iraf # iraf root directory set iraf_p = $iraf_r:h # iraf parent directory set iraf_b = $iraf_p/irafbin # irafbin directory set iraf_ib = $iraf_b/bin.$mach # irafbin IB directory set iraf_nb = $iraf_b/noao.bin.$mach # irafbin NB directory set iraf_tree_ok = 1 echo "Checking for proper iraf tree structure in $iraf_p ..." echo -n " Checking for 'iraf' subdir ... " if (-d "$iraf_p/iraf") then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0 set err_count = `expr $err_count + 1` endif echo -n " Checking for 'irafbin' subdir ... " if (-d "$iraf_p/irafbin") then DO_OK ; set ok_count = `expr $ok_count + 1` else set zztemp = $iraf_tree_ok echo " " ; set errstat = 1 ; set iraf_tree_ok = 0 # Look for a fallback to recover ... echo -n " Checking for fallback tree structure ... " set iraf_p = $iraf/../ set iraf_b = $iraf_p/irafbin # irafbin directory set iraf_ib = $iraf_b/bin.$mach # irafbin IB directory set iraf_nb = $iraf_b/noao.bin.$mach # irafbin NB directory if (-d "$iraf_p/irafbin") then DO_OK ; set errstat = 0 ; set iraf_tree_ok = $zztemp set ok_count = `expr $ok_count + 1` else DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0 set err_count = `expr $err_count + 1` endif endif echo -n " Checking for 'irafbin/bin.$mach' subdir ... " if (-d "$iraf_p/irafbin/bin.$mach") then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0 set err_count = `expr $err_count + 1` endif echo -n " Checking for 'irafbin/noao.bin.$mach' subdir ... " if (-d "$iraf_p/irafbin/noao.bin.$mach") then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0 set err_count = `expr $err_count + 1` endif if ("$iraf_tree_ok" == 0) then set back = $cwd ; chdir $iraf_p ; set iraf_p = $cwd; chdir $back NEWLINE MSG " An error was detected in the structure of the iraf tree." MSG " Your directory tree should look something like:" MSG "" MSG " $iraf_p" MSG " / \" MSG " (AS) /iraf /irafbin" MSG " / \" MSG " (IB) bin.$mach noao.bin.$mach (NB)" MSG "" MSG " The AS, IB, and NB distribution files are shown where they" MSG " should be unpacked." NEWLINE endif echo -n " Checking file ownerships ... " if ($mach == "hp700" || $mach == "rs6000" || $mach == "irix") then set downr = `$LS -lLd $iraf_p/iraf | awk '{print ($5)}'` set fownr = `$LS -lLd $iraf_p/iraf/mkpkg | awk '{print ($5)}'` else set downr = `$LS -lLd $iraf_p/iraf | awk '{print ($4)}'` set fownr = `$LS -lLd $iraf_p/iraf/mkpkg | awk '{print ($4)}'` endif if ("$downr" == "iraf" && "$fownr" == "iraf") then DO_OK set ok_count = `expr $ok_count + 1` else if ("$downr" == "tody" && "$fownr" == "tody") then # Special exemption for NOAO installations. DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL NEWLINE MSG "(root dir owned by $downr, iraf files owned by $fownr)" MSG "The iraf tree should be owned by the iraf user so it can" MSG "be updated and maintained properly." MSG "" MSG 'To fix this, login as root, set the iraf environment, and' MSG 'issue the commands:' MSG "" MSG " cd " `echo $iraf_p` MSG ' chown -R iraf . # change dir owner' MSG ' cd $hbin # go to HSI bin dir' MSG ' chown 0 alloc.e # fix alloc.e ownership' MSG ' chmod 4755 alloc.e # fix permissions' NEWLINE set errstat = 1 ; set err_count = `expr $err_count + 1` endif # Check that binary dirs are populated correctly. set archs = "" set back = $cwd ; chdir $iraf_p ; set iraf_p = $cwd; chdir $back NEWLINE ; NEWLINE echo "======================================================================" NEWLINE echo "Checking Core system binaries in $iraf_p/irafbin ..." # Do a special check that we have a bin directory for the current arch. echo -n " Checking for current platform arch... " if (! -e $iraf_ib) then DO_FAIL ; set errstat = 1 NEWLINE MSG "The core system binary directory, $iraf_ib, does" MSG "not exist for this platform." NEWLINE set err_count = `expr $err_count + 1` else DO_OK set ok_count = `expr $ok_count + 1` endif NEWLINE echo " Size Date" echo " ---- ----" # Check all of the bin directories in case we have a multi-arch system foreach i ($iraf_p/irafbin/bin.*) set dir = $i:t if ($dir:r == "bin") then set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')` echo -n $dir $sz | awk '{printf ("%18s\t%5d\t", $1, $2)}' if (`$LS -lL $i | wc -l` > 1) then set dat = `$LS $LSDF $i/* | head -2 | tail -1` echo -n $dat | awk '{printf ("%3s %2s %-5s\t\t\t", $7, $8, $9)}' if (! (-e "$i/cl.e" && -e "$i/x_system.e")) then DO_FAIL ; set errstat = 1 NEWLINE MSG "The core system binary directory, $i:t, does" MSG "not appear to contain the proper binaries. The IB dist-" MSG "ribution files should be unpacked in this directory." NEWLINE set err_count = `expr $err_count + 1` else DO_OK ; set ok_count = `expr $ok_count + 1` # Save the list of installed binaries, allow for changes between # the binary arch and HSI arch here (e.g. ssun->ssol). if ("$dir:e" == "ssun") then set archs = `echo $archs ssol` else set archs = `echo $archs $dir:e` endif endif else echo "< empty > [ FAIL ]" ; set errstat = 1 NEWLINE MSG "bin directory is empty or does not contain IRAF binaries." NEWLINE endif endif end NEWLINE NEWLINE echo "Checking NOAO Package binaries in $iraf_p/irafbin ..." # Do a special check that we have a bin directory for the current arch. echo -n " Checking for current platform arch... " if (! -e $iraf_nb) then DO_FAIL ; set errstat = 1 NEWLINE MSG "The NOAO package binary directory, $iraf_nb, does" MSG "not exist for this platform." NEWLINE set err_count = `expr $err_count + 1` else DO_OK set ok_count = `expr $ok_count + 1` endif NEWLINE NEWLINE echo " Size Date" echo " ---- ----" foreach i ($iraf_p/irafbin/noao.bin.*) set dir = $i:t if ($dir:r == "noao.bin") then set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')` echo -n $dir $sz | awk '{printf ("%18s\t%5d\t", $1, $2)}' if (`$LS -lL $i | wc -l` > 1) then set dat = `$LS $LSDF $i/* | head -2 | tail -1` echo -n $dat | awk '{printf ("%3s %2s %-5s\t\t\t", $7, $8, $9)}' if (! (-e "$i/x_apphot.e" && -e "$i/x_rv.e")) then DO_FAIL ; set errstat = 1 NEWLINE if (-e "$iraf_ib/x_apphot.e" && -e "$iraf_ib/x_rv.e") then NEWLINE MSG "The NOAO package binary directory, $iraf_nb, is" MSG "empty but the binaries appear to have been unpacked in" MSG "the core system directory, $iraf_ib. These will need to" MSG "be moved, please delete the binaries and start again, be" MSG "sure to unpack the NB distribution files in the $iraf_nb" MSG "directory and the core system file in the $iraf_ib" MSG "directory." else NEWLINE MSG "The NOAO package binary directory, $iraf_nb, does" MSG "not appear to contain the proper files. The NB dist-" MSG "ribution files should be unpacked in this directory." endif NEWLINE set err_count = `expr $err_count + 1` else DO_OK ; set ok_count = `expr $ok_count + 1` endif else echo "< empty > [ FAIL ]" ; set errstat = 1 NEWLINE MSG "bin directory is empty or does not contain NOAO binaries." NEWLINE endif else continue endif end # Check the HSI binaries. NEWLINE NEWLINE echo "Checking HSI system binaries in $iraf/unix ..." # Do a special check that we have a bin directory for the current arch. echo -n " Checking for current platform arch... " if (! -e $iraf/unix/bin.$hmach) then DO_FAIL ; set errstat = 1 NEWLINE MSG "The HSI binary directory, $iraf/unix/bin.$hmach, does" MSG "not exist for this platform." NEWLINE set err_count = `expr $err_count + 1` else if (! (-e "$iraf/unix/bin.$hmach/alloc.e")) then DO_FAIL ; set errstat = 1 NEWLINE MSG "The HSI binary directory, $iraf/unix/bin.$hmach, appears" MSG "to be empty." NEWLINE set err_count = `expr $err_count + 1` else DO_OK set ok_count = `expr $ok_count + 1` endif NEWLINE NEWLINE echo " Size Date" echo " ---- ----" set delete_bin = "" set empty_bin = "" foreach i ($iraf_p/iraf/unix/bin.*) set dir = $i:t if ($dir:r == "bin") then set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')` echo -n $dir $sz | awk '{printf ("%18s\t%5d\t", $1, $2)}' if (`$LS -lL $i | wc -l` > 1) then set d = `$LS $LSDF $i/* | head -2 | tail -1` echo -n $dat | awk '{printf ("%3s %2s %-5s\t\t\t", $7, $8, $9)}' if (! (-e "$i/alloc.e" && -e "$i/xc.e")) then DO_FAIL ; set errstat = 1 else DO_OK ; set ok_count = `expr $ok_count + 1` endif if ("`echo $archs | grep $dir:e`" == "") then set delete_bin = `echo $delete_bin $dir` endif else if ($sz < 8 && "`echo $archs | grep $dir:e`" == "") then BOLD_ON echo "< unused > [ OK ]" BOLD_OFF else BOLD_ON echo "< empty > [ WARNING ]" ; set errstat = 1 BOLD_OFF set warn_count = `expr $warn_count + 1` set empty_bin = `echo $empty_bin $dir` endif if ($sz > 8 && "`echo $archs | grep $dir:e`" == "") then set delete_bin = `echo $delete_bin $dir` endif endif else continue endif end NEWLINE if ("$delete_bin" != "") then NEWLINE MSG "The following bin directories were found to be" MSG "unneeded for this installation. If disk usage is a" MSG "concern the contents may be deleted to reclaim space:" MSG "" foreach i ($delete_bin) MSG " $iraf/unix/$i" end endif NEWLINE if ($early_exit == 1) then goto exit_early endif #============================================================================= # Networking Information #============================================================================= Networking: set net_errstat = 0 # initialize error status NEWLINE echo "======================= Networking Information =======================" NEWLINE set hname = `hostname` set lhost_abbr = `hostname | awk '{printf ("%16.16s\n", $1 ) }'` set ihosts = $iraf/dev/hosts set nhost_files = `$LS -1 $iraf/dev/hosts* | wc -l` echo 'Local host name: '$hname echo 'Truncated host name: '$lhost_abbr if (`echo $hname | grep "\."` != "") then # When using FQDN lnode may not be set.... set is_fqdn = yes set domain = `hostname | sed -e 's/^[a-zA-Z0-9_\-]*\.//g'` set lhost = `hostname | sed -e 's/\.[a-zA-Z0-9]*//g'` else set is_fqdn = no set domain = "" set lhost = $hname endif echo 'Domain name: '$domain echo 'No. of dev$host* files: '$nhost_files echo 'Using IRAF hosts file: '$ihosts NEWLINE echo -n 'Checking for iraf hosts file ... ' if (-e $ihosts) then DO_OK set ok_count = `expr $ok_count + 1` set nhosts = `grep irafks.e $ihosts | wc -l` set lnode = `grep irafks.e $ihosts | sort | grep $lhost | head -1` # The following madness is required to workaround shortcomings in the # GNU versions of the sed command (i.e. Linux/FreeBSD). Working sed # commands for Sun here. # # set n = `cat $ihosts | sort | grep $lhost | head -1` # set irafks = `echo $n | sed -e 's/^[a-zA-Z0-9 _\!\/\-\.:]*//g'` # set nalias = `echo $n | sed -e 's/:[a-zA-Z0-9 _\!\/\-\.]*//g'` # set rhs = `echo $n | sed -e 's/^[a-zA-Z0-9 _\!\-\.]*://g'` # set nnode = `echo $rhs | sed -e 's/\![a-zA-Z0-9 _\!\/\-\.]*//g'` set TEMP = "/tmp/_$$" echo $lnode | sed -e 's/\!/ /g' > $TEMP set line = `cat $TEMP` RM $TEMP set nalias = "" set irafks = "" set nnode = "" if ("$line" != "") then while ("$line[1]" != "") if ("$line[1]" == ":") then break else set nalias = `echo $nalias $line[1]` endif shift line end shift line set nnode = $line[1] ; shift line set irafks = $line[1] ; shift line endif # Print out the entry information found. echo ' No. nodes in hosts file: '$nhosts echo ' irafks.e pathname: '$irafks echo ' Node aliases: '$nalias echo ' Network node name: '$nnode NEWLINE # Make sure the node is in the file. echo -n ' Checking for local node in hosts file ... ' if ("`grep $lhost $ihosts | head -1`" != "") then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set net_errstat = 1 NEWLINE MSG "The local host, $lhost, was not found in the iraf hosts" MSG "file $iraf/dev/hosts. This means that IRAF networking" MSG "will not be available from this machine to others in the" MSG "iraf network." NEWLINE set err_count = `expr $err_count + 1` endif # See if the irafks.e path is correct on this machine. if ("$irafks" != "") then echo -n ' Checking for irafks.e binary ... ' if (-e $irafks) then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set net_errstat = 1 NEWLINE MSG "The named irafks.e binary was not found on this system." NEWLINE set err_count = `expr $err_count + 1` endif endif # Look for duplicate host names which may trigger a CL bug. echo -n ' Checking for duplicate hosts in dev$hosts file ... ' set dup_hosts = `grep irafks.e $ihosts | sort | awk '{print $1}' | uniq -d` if ("$#dup_hosts" == 0) then DO_OK set ok_count = `expr $ok_count + 1` else DO_WARN ; set net_errstat = 1 NEWLINE MSG 'Duplicate hosts found in dev$hosts file:' grep irafks.e $ihosts | \ sort | \ awk '{print $1}' | \ uniq -d | \ awk '{printf(" ***\t\t%s\n", $1)}' MSG "" MSG "Duplicate node names should be removed to ensure" MSG "networking and the CL operate properly." NEWLINE set warn_count = `expr $warn_count + 1` endif else DO_FAIL ; set net_errstat = 1 NEWLINE MSG "The IRAF hosts file, $ihosts, was not found." NEWLINE set err_count = `expr $err_count + 1` endif # See what NETSTATUS says about this setup. NEWLINE echo -n 'Verify NETSTATUS says iraf networking is enabled ... ' set system = $iraf/bin.$mach/x_system.e if (-e $system) then set net = `$system netstatus | grep -i "interface disabled"` if ("$net" == "") then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set net_errstat = 1 NEWLINE MSG "The NETSTATUS task claims that networking is disabled." NEWLINE set err_count = `expr $err_count + 1` endif else DO_FAIL ; set net_errstat = 1 NEWLINE MSG "The NETSTATUS task binary could not be executed." NEWLINE set err_count = `expr $err_count + 1` endif # See if we're in the trusted hosts file for rsh access. NEWLINE echo -n 'Checking for host in /etc/hosts.equiv ... ' set equiv = /etc/hosts.equiv if (-e $equiv) then if ("`grep $lhost $equiv | head -1`" != "") then DO_OK set ok_count = `expr $ok_count + 1` else DO_WARN ; set net_errstat = 1 NEWLINE MSG "The local host, '$lhost', is not present in the $equiv" MSG "file." MSG "" MSG "By default IRAF networking will try to use the 'rsh'" MSG "protocol for connecting to a remote machine. Without a" MSG "$equiv entry a networking attempt will fail and" MSG "a password prompt will be required since an rexec protocol" MSG "is the fallback. Some systems are not configured for rsh" MSG "access even with a $equiv file, or rsh is not a valid" MSG "command, and so some other protocol will be required." MSG "" MSG "A KSRSH unix environment variable may be defined to specify" MSG "a different command or protocol (e.g. remsh or ssh). This" MSG "is not a fatal error and will not prevent IRAF networking" MSG "from working, but can be used to avoid to password prompt." NEWLINE set warn_count = `expr $warn_count + 1` endif else DO_WARN ; set net_errstat = 1 NEWLINE MSG "The trusted hosts file, '$equiv', is not present on this" MSG "system. This may mean that the 'rsh' connection protocol" MSG "is not available and IRAF networking will require password" MSG "prompts." MSG "" MSG "By default IRAF networking will try to use the 'rsh'" MSG "protocol for connecting to a remote machine. Without a" MSG "$equiv entry a networking attempt will fail and" MSG "a password prompt will be required since an 'rexec' protocol" MSG "is the fallback. Some systems are not configured for rsh" MSG "access even with a $equiv file, or 'rsh' is not a valid" MSG "command, and so some other protocol will be required." MSG "" MSG "A 'KSRSH' unix environment variable may be defined to specify" MSG "a different command or protocol (e.g. 'remsh' or 'ssh'). This" MSG "is not a fatal error and will not prevent IRAF networking from" MSG "operating, but can be used to avoid to password prompt." NEWLINE set warn_count = `expr $warn_count + 1` endif # Print out the recommended dev$hosts entry for this machine. NEWLINE echo "----------------------------------------------------------------------" NEWLINE echo "Recommended $ihosts file entry for this machine: " NEWLINE echo -n " " if ("$is_fqdn" == "no") then echo $lhost " : "$hname"\!"$iraf/bin.$mach/irafks.e else echo $lhost $lhost_abbr " : " $nnode"\!"$iraf/bin.$mach/irafks.e endif NEWLINE if ($early_exit == 1) then goto exit_early endif #============================================================================= # Image Display Device Information #============================================================================= Image_Display: NEWLINE echo "===================== Image Display Device Info ======================" NEWLINE set DISPLAY_SERVERS = "ximtool ximtool-alt saoimage ds9 saotng" set GRAPHICS_TERMS = "xgterm xterm" set IMTOOLRC = /usr/local/lib/imtoolrc if (! ($?termcap_file)) then set termcap_file = "$iraf/dev/termcap" endif if (! ($?graphcap_file)) then set graphcap_file = "$iraf/dev/graphcap" endif echo -n "Display Servers Available: " set found = 0 set have_sockets = 0 set have_saoimage = 0 set have_ximtool = 0 foreach i ($DISPLAY_SERVERS) set p = `which $i |& grep -i "^\/"` if ($status == 0) then if ("$found" == 0) then DO_OK set ok_count = `expr $ok_count + 1` endif set d = `$LS $LSDF $p | head -2 | tail -1` echo $d | awk '{printf (" ( Date: %3s %2s %-5s )\t", $7, $8, $9) }' echo " "$p set found = 1 if ("$i" == "saoimage") set have_saoimage = 1 if ("$i" == "ximtool") set have_ximtool = 1 if ("$i" != "saoimage") set have_sockets = 1 endif end if ($found == 0) then DO_FAIL ; set errstat = 1 echo " None Found" NEWLINE MSG "No display servers were found on this machine or in the user" MSG "path. A display server such as XImtool/SAOimage/SAOtng/DS9" MSG "is required to be running on the local machine before an iraf" MSG "display command (e.g. DISPLAY/TVMARK/IMEXAMINE) will work." MSG "" MSG "Remote displays (i.e. the server on one machine and IRAF on" MSG "another) require either iraf networking be enabled or the X" MSG "'DISPLAY' variable be set so the server appears on the remote" MSG "machine." MSG "" MSG "XImtool can be downloaded from" MSG "" MSG " http://iraf.net/ftp/iraf/x11iraf" MSG "" MSG "or it's mirror sites. Contact http://iraf.net with questions." NEWLINE set err_count = `expr $err_count + 1` endif NEWLINE echo -n "Graphics Terminals Available: " set found = 0 foreach i ($GRAPHICS_TERMS) set p = `which $i |& grep "^\/"` if ($status == 0) then if ("$found" == 0) then DO_OK set ok_count = `expr $ok_count + 1` endif set d = `$LS $LSDF $p | head -2 | tail -1` echo $d | awk '{printf (" ( Date: %3s %2s %-5s )\t", $7, $8, $9) }' echo " "`which $i` set found = 1 endif end if ($found == 0) then DO_FAIL ; set errstat = 1 echo " None Found" NEWLINE MSG "No 'xterm' or 'xgterm' binary was found on this systen or" MSG "in the user path. IRAF graphics require some form of " MSG "graphics-enabled terminal window to be running or else" MSG "garbarge characters will appear on the screen. Windows" MSG "such as 'cmdtool', 'rxvt', 'aixterm', 'hpterm', 'decterm'" MSG "do not support graphics and should not be used for IRAF." MSG "" MSG "The default terminal type is set in the login.cl when" MSG "a user runs MKIRAF, this is the type of window they should" MSG "be running when starting IRAF. Users can use the 'show" MSG "terminal' command to see the current setting, or 'stty" MSG "xterm' or 'stty xgterm' command (or rerun MKIRAF and reset" MSG "the default terminal type) to change the default iraf terminal." MSG "" MSG "XGterm can be downloaded from" MSG "" MSG " http://iraf.net/ftp/iraf/x11iraf" MSG "" MSG "or it's mirror sites. Contact site support with questions." set err_count = `expr $err_count + 1` endif NEWLINE # Check for imtoolrc file and /usr/local/lib dir. set errstat = 0 NEWLINE echo -n "Checking for /usr/local/lib directory ... " if (-d /usr/local/lib) then DO_OK set ok_count = `expr $ok_count + 1` # Check for imtoolrc file... echo -n "Checking for imtoolrc file ... " if (-e $IMTOOLRC) then DO_OK set ok_count = `expr $ok_count + 1` set islink = `$LS -l $IMTOOLRC | grep "^l"` set file = $iraf/dev/imtoolrc if ("$islink" != "" && -e $file) then # Check for valid link echo -n "Checking for valid imtoolrc link ... " set tmp = `diff $IMTOOLRC $file | wc -l` if ("$tmp" == 0) then DO_OK set ok_count = `expr $ok_count + 1` else DO_FAIL ; set errstat = 1 NEWLINE MSG "The /usr/local/lib/imtoolrc link is invalid" NEWLINE set err_count = `expr $err_count + 1` endif endif else DO_FAIL ; set errstat = 1 NEWLINE MSG "The /usr/local/lib/imtoolrc file is missing." MSG "This normally gets created by the iraf install script" MSG "but only if /usr/local/lib already exists. Without" MSG "this file you won't be able to use ximtool with a buffer" MSG "larger than 512x512, to fix this just create the" MSG "/usr/local/lib dir and rerun the install script or" MSG "make the link by hand as the root user." NEWLINE set err_count = `expr $err_count + 1` endif # Check for imtoolcmap directory... if ($have_ximtool == 1) then echo -n "Checking for imtoolcmap directory ... " if (-d /usr/local/lib/imtoolcmap) then DO_OK set ok_count = `expr $ok_count + 1` else DO_WARN NEWLINE MSG "The /usr/local/lib/imtoolcmap directory is missing." MSG "This directory is not required but provides extra" MSG "colormap options for XImtool. The colormaps may be" MSG "be obtained from " MSG "" MSG " http://iraf.net/ftp/iraf/x11iraf/imtoolcmap.tar" MSG "" MSG "This should be unpacked as the /usr/local/lib/imtoolcmap" MSG "directory. This is not a fatal error." NEWLINE set warn_count = `expr $warn_count + 1` endif endif else DO_FAIL ; set errstat = 1 NEWLINE MSG "The /usr/local/lib directory does not exist." NEWLINE set err_count = `expr $err_count + 1` endif if ($errstat == 1) then MSG "The imtoolrc file is used by the display servers (XImtool," MSG "SAOimage, etc) to set various frame buffer sizes. Without" MSG "this file the server can only use a 512x512 frame buffer," MSG "and displays to larger buffers will result in the message" MSG "'attempt to write out of bounds on framebuf'. Sites can" MSG "rerun the install script or make the link by hand, users" MSG 'can copy the dev$imtoolrc file to their $HOME directory as' MSG "'.imtoolrc' as a workaround." endif if ($have_saoimage == 1) then echo -n "Checking file descriptor limits: " set ds = `limit descriptors | awk '{print ($2)}'` if ("$ds" != "64") then DO_WARN NEWLINE MSG "SAOimage has a hardwired restriction of 64 file descriptors," MSG "however this user shell allows more. When there are many" MSG "windws open SAOimage may fail, this warning applies only" MSG "to users of SAOimage. A 'limit descriptors 64' command" MSG "can be used to reset the limit." NEWLINE set warn_count = `expr $warn_count + 1` else DO_OK endif endif # See whether we have fifo pipes installed. set errstat = 0 if ( !($pciraf && ($mach == "macosx" || $mach == "macintel")) ) then foreach p (/dev/imt1i /dev/imt1o) echo -n "Checking for $p fifo pipe ... " if (-e $p) then if ("`$LS -l $p | grep '.rw.rw.rw.'`" == "") then if ($have_sockets == 1) then DO_WARN ; set errstat = 1 set warn_count = `expr $warn_count + 1` else DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` endif MSG "File $p not mode 666." else DO_OK set ok_count = `expr $ok_count + 1` endif else if ($have_sockets == 1) then DO_WARN ; set errstat = 1 set warn_count = `expr $warn_count + 1` else DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` endif MSG "The $p fifo pipe is missing." endif end echo -n "Checking for /dev/imt1 fifo pipe link ... " if (-e /dev/imt1) then if ("`$LS -l /dev/imt1 | grep imt1o`" != "") then DO_OK set ok_count = `expr $ok_count + 1` else if ($have_sockets == 1) then DO_WARN ; set errstat = 1 set warn_count = `expr $warn_count + 1` else DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` endif MSG "The /dev/imt1 fifo pipe link is invalid." endif else if ($have_sockets == 1) then DO_WARN ; set errstat = 1 set warn_count = `expr $warn_count + 1` else DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` endif MSG "The /dev/imt1 fifo pipe link is missing (but is not" MSG "strictly required for proper display). If it exists it" MSG "should be a symlink pointing to /dev/imt1o." endif if ($errstat == 1 && $have_sockets == 0) then NEWLINE MSG "The /dev fifo pipes are used only by SAOimage as a default" MSG "communication with IRAF or as a fallback for other display" MSG "servers such as XImtool. Except for SAOimage or in the case" MSG "of some other mechanism such as a private graphcap file or" MSG "IMTDEV environment variable, missing /dev pipes should not be" MSG "fatal for image display. A 'Cannot open device' message may" MSG "simply mean there is no display server running, or the 'node'" MSG "CL environment variable has been set to an invalid node or" MSG "iraf networking is not enabled on the host. The pipes are" MSG "created by the install script (which can be run on this host)" MSG "or they can be created by hand as root with the 'mknod' or" MSG "'mkfifo' command." NEWLINE endif endif # Make sure there are entries in the the termcap and graphcap files for xgterm # and imtool. echo -n "Checking termcap file for an XGterm entry ... " set temp = `grep -l xgterm $termcap_file | grep -v "^#"` if ("$temp" == "") then DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` else DO_OK set ok_count = `expr $ok_count + 1` endif echo -n "Checking graphcap file for XGterm/imtool entries ... " set gcok = yes foreach i (xgterm imtool) set temp = `grep -l $i $graphcap_file | grep -v "^#"` if ("$temp" == "" && "$gcok" == "yes") then DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` set gcok = no endif end if ($gcok == yes) then DO_OK set ok_count = `expr $ok_count + 1` endif if ($early_exit == 1) then goto exit_early endif #============================================================================= # Tape Device Information #============================================================================= Tape_Device: NEWLINE echo "====================== Tape Device Information =======================" NEWLINE set errstat = 0 if (! ($?tapecap_file)) then set tapecap_file = "$iraf/dev/tapecap" endif # Check the alloc.e binary. NEWLINE set file = "$iraf/unix/bin.$hmach/alloc.e" echo -n 'Checking for hbin$alloc.e binary ... ' if (-e $file) then DO_OK set ok_count = `expr $ok_count + 1` echo -n 'Checking hbin$alloc.e ownership ... ' if (-e $file) then if ("`$LS -l $file | grep 'root'`" == "") then DO_FAIL set errstat = 1 ; set err_count = `expr $err_count + 1` echo " *** File $file:t not owned by root." else DO_OK set ok_count = `expr $ok_count + 1` endif endif echo -n 'Checking hbin$alloc.e binary permissions ... ' if (-e $file) then if ("`$LS -l $file | grep '.rwsr.xr.x'`" == "") then DO_FAIL set errstat = 1 ; set err_count = `expr $err_count + 1` echo " *** File $file:t not mode 4755." else DO_OK set ok_count = `expr $ok_count + 1` endif endif if ($errstat == 1) then NEWLINE MSG "The alloc.e binary is used to allocate tape devices" MSG "for exclusive access by the user. It does this by" MSG "changing the ownership and permissions on the /dev" MSG "files associated with each device. For this reason" MSG "it must be owned by root with setuid permissions so" MSG "it can execute properly. Tape devices are not required" MSG "to be allocated before they are used but executing the" MSG "ALLOC command w/in iraf will result in an error." MSG "This error can be cleared by running the IRAF install" MSG "script as root, or issuing the commands:" MSG "" MSG " # cd $hbin" MSG " # chown 0 alloc.e ; chmod 4755 alloc.e" NEWLINE endif else DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` MSG "File $file not found." endif # Check for a tapecap file. set errstat = 0 NEWLINE echo -n 'Checking for tapecap file ... ' if (-e $iraf/dev/tapecap.`hostname`) then DO_OK set ok_count = `expr $ok_count + 1` echo " Using file: $iraf/dev/tapecap.`hostname`" else if (-e $tapecap_file) then DO_OK set ok_count = `expr $ok_count + 1` echo " Using tapecap file: $tapecap_file" else DO_FAIL ; set errstat = 1 set err_count = `expr $err_count + 1` endif endif if ($errstat == 1) then NEWLINE MSG 'No tapecap file found on this system.' NEWLINE MSG 'IRAF will first attempt to find a file in the iraf$dev' MSG 'directory called "tapecap.\", if that fails it will' MSG 'fallback to use the dev$tapecap file (or whichever file is' MSG 'named by the 'tapecap' variable in the hlib$zzsetenv.def file).' MSG '' MSG 'Not all IRAF distributions come with a default tapecap file' MSG 'appropriate for the given machine. For example, the default' MSG 'dev$tapecap for Sun/IRAF is for SunOS and will not generally' MSG 'work for Solaris. The PC-IRAF distribution comes with generic' MSG 'tapecap.linux, tapecap.freebsd, etc files which must be renamed' MSG '"tapecap" to be used. Generic device entries are provided with' MSG 'each tapecap file (e.g. mtp for a DAT on unit 0) but in most' MSG 'cases the tapecap file must be installed and/or configured' MSG 'before devices will be accessible.' MSG '' MSG 'Further information on configuring tapecaps can be found in' MSG 'the last IRAF Newsletter at:' MSG '' MSG ' http://iraf.noao.edu/irafnews/apr98/irafnews.1f.html' MSG '' MSG 'or by contacting http://iraf.net' NEWLINE endif NEWLINE echo "Tape Device Template: $TAPES" set nloks = `$LS -lL /tmp/*.lok |& grep -v -i "no match" | wc -l` if ($nloks == 0) then set nloks = "" endif echo "Lok Files on this machine: $nloks" if ("$nloks" != '') then $LS -lL /tmp/*.lok endif NEWLINE set ntapes = `$LS -lL $TAPES |& grep -v -i "no match" | wc -l` if ($ntapes == 0) then set ntapes = "" endif echo "Tape Devices Available: $ntapes" NEWLINE if ("$ntapes" != '') then NEWLINE echo " ******************************************************************" echo " ** More tape devices files may be defined than there are actual **" echo " ** devices on the machine. For those file which correspond to **" echo " ** a physical device the file should have mode 666 and be owned **" echo " ** by root. **" echo " ******************************************************************" NEWLINE ls -lL $TAPES endif if ($early_exit == 1) then goto exit_early endif #============================================================================= # External Package Information #============================================================================= External_Packages: NEWLINE echo "=================== External Package Information =====================" NEWLINE # Check the iraf root directory stuff if ($?iraf == 1) then set hlib = $iraf/unix/hlib else if (-e /usr/include/iraf.h) then set ip = `grep "^#define IRAF" /usr/include/iraf.h |sed -e 's/\"//g'` if ("$ip" != "") then set iraf = $ip[3] endif set hlib = $iraf/unix/hlib else MSG "No 'iraf' defined in your environment and no " MSG "file found on this system." MSG "" MSG "Aborting..." endif endif # Strip off any trailing '/'. set iraf = `echo $iraf | sed -e 's+/\(["]*\)$+\1+'` set epkg = $hlib/extern.pkg # Get the helpdb string. set helpdb = `cat $epkg | grep -v "^#" | grep helpdb` # Get the list of tasks defined in the extern.pkg file. set t = `cat $epkg | grep -v "^#" | grep task | sed -e 's/task//g' -e 's/=//g' -e 's/\.pkg//g' -e 's/\$//g'` set tasks = "" while ("$t[1]" != "") set tasks = `echo $tasks $t[1]` shift t ; shift t if ("$#t" == "0") then break endif end # Get the variables and paths declared, includes data directories. cat $epkg | grep -v "^#" | grep -v helpdb | grep ^set > /tmp/_ext$$ cat $epkg | grep -v "^#" | grep -v helpdb | grep ^reset >> /tmp/_ext$$ set l = `cat /tmp/_ext$$ | sed -e 's/reset//g' -e 's/set//g' -e 's/=//g'` set pkg = "" set ppath = "" while ("$l[1]" != "") set pkg = `echo $pkg $l[1]` set ppath = `echo $ppath $l[2]` shift l; shift l if ("$#l" == "0") then break endif end RM /tmp/_ext$$ NEWLINE echo " 1) The 'Path' check verifies that the extern.pkg path exists and is" echo " not located in the iraf root directory (NOAO excepted)." echo " 2) The 'Helpdb' check verifies that the package is declared in the" echo " helpdb string. A warning here indicates the helpdb.mip file is" echo " out of date w.r.t the package .hd files. Help database files may" echo " be updated using the SOFTOOLS.MKHELPDB task." echo " 3) The 'Binaries' check prints the most recent file date for the" echo " installed binaries. A failed test indicates no binaries for" echo " the current architecture." echo " 4) The date given is the date of the most recent file in the named" echo " bin directory. Dates before 12/99 indicate binaries which should" echo " be recompiled for Y2K compliance (assuming IRAF V2.11.3 or later" echo " is available on the machine)." NEWLINE NEWLINE echo "Number of declared packages: " $#tasks echo "Number of logical directories: " $#ppath NEWLINE echo "Checking packages ..." NEWLINE echo " Package Path Helpdb Binaries Date" echo " ------- ---- ------ -------- ----" #NEWLINE set CL = $iraf/bin.$mach/cl.e if (! -e $CL) then echo "ERROR: CL executable not found, skipping package checks..." set err_count = `expr $err_count + 1` goto exit_early endif set lp = "" set lpath = "" set delpak = () set delpak_p = () foreach p ($pkg) set decl = `cat $epkg | grep task | grep $p` set pat = $ppath[1] if ("$decl" != "") then # See if this is an iraf logical path and resolve it. echo $pat | egrep '\$' >& /dev/null if ($status == 0) then set cmd = `echo $pat | awk '{printf("=osfn(\"%s\");logout\n", $1)}'` echo "#\!$CL -f" > /tmp/_cmd$$ echo $cmd >> /tmp/_cmd$$ chmod 755 /tmp/_cmd$$ set pat = `/tmp/_cmd$$` rm -rf /tmp/_cmd$$ endif # Check that the path exists. if (-d $pat) then echo $p | awk '{printf ("%12.12s", $1 ) }' if ("$p" == "noao") then BOLD_ON echo -n " [ OK ]" BOLD_OFF set ok_count = `expr $ok_count + 1` else if (`echo $pat | grep $iraf` == "") then BOLD_ON echo -n " [ OK ]" BOLD_OFF set ok_count = `expr $ok_count + 1` else if (`echo $pat | grep $iraf | grep "/\.\."` != "") then BOLD_ON echo -n " [ OK ]" BOLD_OFF set ok_count = `expr $ok_count + 1` else BOLD_ON echo " [FAIL] " ; set errstat = 1 BOLD_OFF echo " *** invalid path: $p = $pat" echo " *** package should not be in iraf root dir" set err_count = `expr $err_count + 1` set delpak = ($delpak $p) set delpak_p = ($delpak_p $pat) goto pkg_err endif endif else set delpak = ($delpak $p) set delpak_p = ($delpak_p $pat) set err_count = `expr $err_count + 1` goto pkg_err endif # See if the package was declared with help. echo $helpdb | grep $p >& /dev/null if ($status == 0) then # The package has help but we'll assume the standard help # database name and look to see if the helpdb itself is current. # The helpdb.mip file should be newer than any .hd files in # the package tree. if (-e $pat/lib/helpdb.mip) then set pkgp = `echo $pat | sed -e 's+/\(["]*\)$+\1+'` set hdbfile = "$pkgp/lib/helpdb.mip" set hdfiles = `find $pkgp -name \*.hd -a -newer $hdbfile -print` if ("$hdfiles" != "") then echo -n " [WARN] " set warn_count = `expr $warn_count + 1` else echo -n " [ OK ] " set ok_count = `expr $ok_count + 1` endif else echo -n " [ OK ] " set ok_count = `expr $ok_count + 1` endif else echo -n " [FAIL] " ; set errstat = 1 set err_count = `expr $err_count + 1` endif # See if binaries exist for this platform. set dir = $pat/bin.$mach if (-d $dir) then if (`$LS -lL $dir | wc -l` > 1) then set d = `$LS $LSDF $pat/bin.$mach/* | head -2 | tail -1` set dat = `echo $d |awk '{printf("%s %s %s",$7,$8,$9)}'` #echo -n "[ OK ]" if ("`echo $dat | grep 199 | grep Dec`" == "") then if ("`echo $dat | grep 200`" == "" && "`echo $dat | grep ':'`" == "") then echo -n "[WARN]" set warn_count = `expr $warn_count + 1` else echo -n "[ OK ]" set ok_count = `expr $ok_count + 1` endif else echo -n "[ OK ]" set ok_count = `expr $ok_count + 1` endif echo $d | awk '{printf ("\t%3s %2s %-5s", $7, $8, $9) }' echo " "bin.$mach else echo -n "[FAIL] " ; set errstat = 1 set err_count = `expr $err_count + 1` echo " "bin.$mach #goto pkg_err endif else echo -n "[FAIL] " ; set errstat = 1 echo " "bin.$mach set err_count = `expr $err_count + 1` endif # Check for other architectures installed if (-e $pat/bin) then if (-e $pat/bin.$mach) then foreach dir ($pat/bin.*) set b = $dir:t if ("$b" != "bin.generic" && "$b" != "bin.$mach") then if (`$LS -l $dir | wc -l` > 1) then set d = `$LS $LSDF $pat/$b/* | head -2 | tail -1` set dat = `echo $d |awk '{printf("%s %s %s",$7,$8,$9)}'` echo -n " " if ("`echo $dat | grep 199 | grep Dec`" == "") then if ("`echo $dat | grep 200`" == "" && "`echo $dat | grep ':'`" == "") then echo -n " [WARN] " set warn_count = `expr $warn_count + 1` else echo -n " [ OK ] " set ok_count = `expr $ok_count + 1` endif else echo -n " [ OK ] " set ok_count = `expr $ok_count + 1` endif echo $d |awk '{printf ("%3s %2s %-5s", $7, $8, $9)}' echo " "$b endif endif end endif endif #NEWLINE else set lp = `echo $lp $p` set lpath = `echo $lpath $pat` endif pkg_err: shift ppath end # Report unnecessary packages or logical dirs. set npack = $#delpak if ($npack != 0) then NEWLINE NEWLINE MSG "The folowing packages were declared but do not exist on the" MSG 'current platform and can be removed from the hlib$extern.pkg' MSG "file:" MSG "" set i = 1 while ($i <= $npack) echo $delpak[$i] $delpak_p[$i] | \ awk '{printf (" ***\t%16s = %s\n", $1, $2)}' set i = `expr $i + 1` end MSG "" endif # Now check logical directories defined in the file. set dellog = () set dellog_p = () if ("$lp" != "") then NEWLINE NEWLINE echo "Checking logical directories ..." NEWLINE echo " Logical Directory Path" echo " ----------------- ----" foreach p ($lp) set pat = $lpath[1] echo $p | awk '{printf ("%20.20s", $1 ) }' # See if this is an iraf logical path and resolve it. echo $pat | egrep '\$' >& /dev/null if ($status == 0) then set cmd = `echo $pat | awk '{printf("=osfn(\"%s\");logout\n", $1)}'` echo "#\!$CL -f" > /tmp/_cmd$$ echo $cmd >> /tmp/_cmd$$ chmod 755 /tmp/_cmd$$ set pat = `/tmp/_cmd$$` rm -rf /tmp/_cmd$$ endif if (-d $pat) then echo " [ OK ]" set ok_count = `expr $ok_count + 1` else echo -n " [ FAIL ]" ; set errstat = 1 echo " *** invalid path" set dellog = ($dellog $p) set dellog_p = ($dellog_p $pat) set err_count = `expr $err_count + 1` endif shift lpath end endif set nlog = $#dellog if ($nlog != 0) then NEWLINE NEWLINE MSG "The folowing logical directories were found to be invalid for" MSG 'current platform and can be removed from the hlib$extern.pkg' MSG "file:" MSG "" set i = 1 while ($i <= $nlog) echo $dellog[$i] $dellog_p[$i] | \ awk '{printf (" ***\t%16s = %s\n", $1, $2)}' set i = `expr $i + 1` end MSG "" endif exit_early: NEWLINE NEWLINE echo "======================================================================" NEWLINE echo "SYSINFO completed with: Tests Passed: $ok_count" echo " Warnings: $warn_count" echo " Errors: $err_count" if ($err_count > 0) then NEWLINE echo " Not all errors listed here will be fatal but may indicate a" echo " problem with some aspect of the system, or will reveal the" echo " likely cause of a problem currently being seen." NEWLINE echo " Users should contact http://iraf.net if help is needed with" echo " correcting any problems, or with suggestions/comments for" echo " future versions of this diagnostic script." endif NEWLINE echo "======================================================================" NEWLINE sysinfo_cleanup: RM /tmp/_cmd$$ RM /tmp/_ext$$ exit 0 # Print usage information. We will not get here unless the "-help" flag # was issued. Usage: NEWLINE echo "Usage: sysinfo [ -G | -V | -N | -P | -D | -T | -help ]" NEWLINE echo " where: -G Print General Info only" echo " -V Do Verification tests only" echo " -N Do Networking tests only" echo " -P Do Extern Package tests only" echo " -D Do Display tests only" echo " -T Do Tape Device tests only" echo " -h Print this message" NEWLINE