Linux Explorer ( LINUXexplo ) is a script that collects information about a linux server for support purposes, similar to the Solaris explorer ( SUNWexplo ) , Redhat’s “sysreport” and SuSE’s “siga” script.
The script is designed to help collect as much information as possible to help support linux and have a common set of scripts for collecting information about linux no matter what distro users are using.
The information is stored in seperated directories, once all the information has been collected it then tar’s up those directories into a single gzip tar file which can then be attached to an email for your support organization or copied to a remote server for safe keeping.
The script is designed to help collect as much information as possible to help support linux and have a common set of scripts for collecting information about linux no matter what distro users are using.
The information is stored in seperated directories, once all the information has been collected it then tar’s up those directories into a single gzip tar file which can then be attached to an email for your support organization or copied to a remote server for safe keeping.
#!/bin/bash ############################################################################## # # # FILE : linux-explorer.sh # Last Change Date : 30-03-2015 # Author(s) : Joe Santoro # Date Started : 15th April, 2004 # Email : linuxexplo [ at ] unix-consultants.com # Web : http://www.unix-consultants.com/examples/scripts/linux/linux-explorer # # Usage : ./linux-explorer.sh [option] # -d Target directory for explorer files # -k Do not delete files created by this script # -t [hardware] [software] [configs] [cluster] [disks] [network] [all] # -v Verbose output # -s Verify Package Installation # -h This help message # -V Version Number of LINUXEXPLO # ############################################################################## # # Purpose : This script is a linux version of the Solaris explorer # (SUNWexplo) script. # # Used to collect information about a linux system build for # remote support purposes. # This script is a general purpose script for ALL linux # systems and therefore NOT tied into any one distro. # ############################################################################## # # J.S UNIX CONSULTANTS LTD MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE # SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT # LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE, OR NON-INFRINGEMENT. J.S UNIX CONSULTANTS LTD SHALL # NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, # MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. # ############################################################################## COPYRIGHT="Copyright (c) J.S Unix Consultants Ltd" MYVERSION="0.206" MYDATE="$(/bin/date +'%Y.%m.%d.%m.%H.%M')" # Date and time now MYNAME=$(basename $0) WHOAMI=$(/usr/bin/whoami) # The user running the script HOSTID=$(/usr/bin/hostid) # The Hostid of this server MYHOSTNAME=$(/bin/uname -n) # The hostname of this server MYSHORTNAME=$(echo $MYHOSTNAME | cut -f 1 -d'.') TMPFILE="/tmp/$(basename $0).$$" # Tempory File TOPDIR="/opt/LINUXexplo" # Top level output directory CHECKTYPE="" # Nothing selected CWDIR="" # VERBOSE=0 # Set to see the scripts progress used # only if connected to a terminal session. FULLSOFT=0 # Set to Verify Software installation # this takes a very long time KEEPFILES="0" # Default to remove files created by this script unset GZIP # Ensure that GZIP is unset for later use. # Set the path for the script to run. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:$PATH export PATH EXPLCFG=/etc/linuxExplo.cfg ############################################################################## # # Function : spinningCursor # Parameters : # Output : # Notes : # ############################################################################## spinningCursor() { case $toggle in 1) echo -n $1" [ \ ]" echo -ne "\r" toggle="2" ;; 2) echo -n $1" [ | ]" echo -ne "\r" toggle="3" ;; 3) echo -n $1" [ / ]" echo -ne "\r" toggle="4" ;; *) echo -n $1" [ - ]" echo -ne "\r" toggle="1" ;; esac } ############################################################################## # # Function : MakeDir # Parameters : # Output : # Notes : # ############################################################################## function MakeDir { myDir="$1" if [ ! -d $myDir ] ; then $MKDIR -p $myDir if [ $? -ne 0 ] ; then echo "ERROR: Creating directory $LOGDIR" exit 1 fi else $CHMOD 750 $myDir fi } ############################################################################## # # Function : config_function # Parameters : # Output : # Notes : # ############################################################################## function config_functions { boot_section } ############################################################################## # # Function : cluster_functions # Parameters : # Output : # Notes : # ############################################################################## function cluster_functions { MakeDir ${LOGDIR}/clusters redhat_cluster_info veritas_cluster_info pacemake_cluster_info } ############################################################################## # # Function : disk_functions # Parameters : # Output : # Notes : # ############################################################################## function disk_functions { MakeDir ${LOGDIR}/hardware/disks MakeDir ${LOGDIR}/hardware/disks/raid disk_info brtfs_info lvm_info zfs_info filesystem_info raid_info disk_dm_info nfs_info emc_powerpath_info netapp_info veritas_vm } ############################################################################## # # Function : backup_products_functions # Parameters : # Output : # Notes : # ############################################################################## function backup_products_functions { netbackup } ############################################################################## # # Function : hardware_functions # Parameters : # Output : # Notes : # ############################################################################## function hardware_functions { MakeDir ${LOGDIR}/hardware hardware_checks disk_functions network_functions } ############################################################################## # # Function : log_functions # Parameters : # Output : # Notes : # ############################################################################## function log_functions { MakeDir ${LOGDIR}/logs selinux_info system_logs_info proc_sys_info } ############################################################################## # # Function : network_functions # Parameters : # Output : # Notes : # ############################################################################## function network_functions { MakeDir ${LOGDIR}/networks network_info iptables_info ipchains_info ethtool_info yp_info } ############################################################################## # # Function : software_functions # Parameters : # Output : # Notes : # ############################################################################## function software_functions { MakeDir ${LOGDIR}/software rpm_info deb_info pacman_info suse_zypper_info gentoo_pkgs_info spacewalk_info rhn_info samba_info apache_info } ############################################################################## # # Function : virt_functions # Parameters : # Output : # Notes : # ############################################################################## function virt_functions { MakeDir ${LOGDIR}/virtual VIRT=${LOGDIR}/virtual xen_info libvirt_info docker_info } ############################################################################## # # Function : general_functions # Parameters : # Output : # Notes : # ############################################################################## function general_functions { # Create the default directories I'm going to use. MakeDir ${LOGDIR}/boot MakeDir ${LOGDIR}/clusters MakeDir ${LOGDIR}/etc MakeDir ${LOGDIR}/hardware MakeDir ${LOGDIR}/hardware/disks MakeDir ${LOGDIR}/lp MakeDir ${LOGDIR}/logs MakeDir ${LOGDIR}/mail MakeDir ${LOGDIR}/system MakeDir ${LOGDIR}/software MakeDir ${LOGDIR}/var MakeDir ${LOGDIR}/virtual system_logs_info printing_info postfix_info exim_info dovecot_info time_info apache_info samba_info x11_info } ############################################################################## # # Function : myselection # Parameters : # Output : # Notes : # ############################################################################## function myselection { mywhich findCmds systemd_info performance_info installation_details case $1 in configs) Echo "You have selected \"configs\" " config_functions ;; clusters) Echo "You have selected \"clusters\" " cluster_functions ;; disks) Echo "You have selected \"disks\" " disk_functions ;; hardware) Echo "You have selected \"hardware\" " hardware_functions ;; logs) Echo "You have selected \"logs\" " log_functions ;; network) Echo "You have selected \"network\" " network_functions ;; software) Echo "You have selected \"software\" " software_functions ;; virtualization) Echo "You have selected \"virtualization\" " virt_functions ;; general) Echo "You have selected \"virtualization\" " general_functions ;; all|*) Echo "You have selected \"ALL\" " config_functions cluster_functions disk_functions hardware_functions log_functions network_functions virt_functions software_functions general_functions ;; esac } ############################################################################## # # Function : Usage # # Notes : N/A # ############################################################################## function ShowUsage { #------------------------------------------------------------------- # Show help message #------------------------------------------------------------------- echo echo "$MYNAME Version $MYVERSION - $COPYRIGHT " echo echo " usage: $MYNAME [option] " echo echo " -d Target directory for explorer files" echo " -k Keep files created by this script" echo " -t [hardware] [software] [configs] [cluster] [all] [disks] [network]" echo " -v Verbose output" echo " -s Verify Package Installation" echo " -h This help message" echo " -V Version Number of LINUXEXPLO" echo exit 1 } ############################################################################## # # Function : Echo # Parameters : String to display what function is about to run # Output : Print what section we are about to collect data for # Notes : N/A # ############################################################################## function Echo () { if [ -t 0 ] ; then if [ ${VERBOSE} -ne 0 ] ; then echo "[*] $*" echo "=============================================" fi if [ ${VERBOSE} -gt 1 ] ; then echo "Press Return to Continue.........." read A fi fi } ############################################################################## # # Function : mywhich # # Parameters : name of program # # Output : path of executable # # Notes : Return back the location of the executable # I need this as not all linux distros have the files # in the same location. # ############################################################################## function mywhich () { local command="$1" if [ "$command" = "" ] ; then return fi local mypath=$(which $command 2>/dev/null) if [ "$mypath" = "" ] ; then echo "Command $command not found" >> $NOTFNDLOG echo "NOT_FOUND" elif [ ! -x "$mypath" ] ; then echo "Command $command not executable" >> $NOTFNDLOG echo "NOT_FOUND" else echo "$mypath" fi } ############################################################################## # # Function : findCmds # # Parameters : None # # Output : None # # Notes : Goes and find each of the commands I want to use and # stores the information into the various variables which # is the uppercase version of the command itself. # # I need this as not all linux distros have the files # in the same location. # ############################################################################## function findCmds { if [ ${VERBOSE} -gt 0 ] ; then echo "[*] Section - Finding Commands" echo "=============================================" fi # Standard commands AWK=$(mywhich awk ) BASENAME=$(mywhich basename ) CAT=$(mywhich cat ) CHKCONFIG=$(mywhich chkconfig ) CP=$(mywhich cp ) CUT=$(mywhich cut ) CHMOD=$(mywhich chmod ) COLUMN=$(mywhich column ) DATE=$(mywhich date ) DF=$(mywhich df ) DMESG=$(mywhich dmesg ) ECHO=$(mywhich echo ) EQUERY=$(mywhich equery ) FILE=$(mywhich file ) FIND=$(mywhich find ) FREE=$(mywhich free ) GREP=$(mywhich grep ) GPG=$(mywhich gpg ) EGREP=$(mywhich egrep ) JOURNALCTL=$(mywhich journalctl) LS=$(mywhich ls ) LOGGER=$(mywhich logger ) LSB_RELEASE=$(mywhich lsb_release ) LN=$(mywhich ln ) MKDIR=$(mywhich mkdir ) LAST=$(mywhich last ) LOCALE=$(mywhich locale ) PSTREE=$(mywhich pstree ) PS=$(mywhich ps ) RM=$(mywhich rm ) SLEEP=$(mywhich sleep ) SYSTEMCTL=$(mywhich systemctl ) MOUNT=$(mywhich mount ) MD5SUM=$(mywhich md5sum ) MV=$(mywhich mv ) SAR=$(mywhich sar ) SORT=$(mywhich sort ) TAIL=$(mywhich tail ) UNAME=$(mywhich uname ) UPTIME=$(mywhich uptime ) WHO=$(mywhich who ) ZIP=$(mywhich zip ) GZIP=$(mywhich gzip ) GAWK=$(mywhich gawk ) SED=$(mywhich sed ) GUNZIP=$(mywhich gunzip ) SPACERPT=$(mywhich 'spacewalk-report' ) UNIQ=$(mywhich uniq ) WC=$(mywhich wc ) # Selinux SESTATUS=$(mywhich sestatus ) GETSEBOOL=$(mywhich getsebool ) SEMANAGE=$(mywhich semanage ) # Samba TESTPARM=$(mywhich testparm ) PDBEDIT=$(mywhich pdbedit ) WBINFO=$(mywhich wbinfo ) # Systemd SYSTEMD=$(mywhich systemd ) SYSTEMCTL=$(mywhich systemctl ) SYSTEMDCGLS=$(mywhich systemd-cgls ) SYSTEMDLOGINCTL=$(mywhich systemd-loginctl) # Printing LPC=$(mywhich lpc ) LPQ=$(mywhich lpq ) LPSTAT=$(mywhich lpstat ) LPQ_CUPS=$(mywhich lpq.cups ) # Apache APACHECTL=$(mywhich apachectl ) APACHE2CTL=$(mywhich apache2ctl ) # Packages APTCONFIG=$(mywhich apt-config ) RPM=$(mywhich rpm ) ZYPPER=$(mywhich zypper ) DPKG=$(mywhich dpkg ) DPKG_QUERY=$(mywhich dpkg-query ) EMERGE=$(mywhich emerge ) YUM=$(mywhich yum ) PACMAN=$(mywhich pacman ) # Kernel Info MODINFO=$(mywhich modinfo ) SYSCTL=$(mywhich sysctl ) KSYMS=$(mywhich ksyms ) SLABTOP=$(mywhich slabtop ) # H/W Info ACPI=$(mywhich acpi ) BIOSDEVNAME=$(mywhich biosdevname ) CARDCTL=$(mywhich cardclt ) DUMPE2FS=$(mywhich dumpe2fs ) DMIDECODE=$(mywhich dmidecode ) FDISK=$(mywhich fdisk ) BLKID=$(mywhich blkid ) HDPARM=$(mywhich hdparm ) HOSTNAME=$(mywhich hostname ) HWINFO=$(mywhich hwinfo ) HWCLOCK=$(mywhich hwclock ) LSMOD=$(mywhich lsmod ) LSPCI=$(mywhich lspci ) LSPNP=$(mywhich lspnp ) LSBLK=$(mywhich lsblk ) LSSCSI=$(mywhich lsscsi ) IPVSADM=$(mywhich ipvsadm ) LSUSB=$(mywhich lsusb ) LSDEV=$(mywhich lsdev ) LSHAL=$(mywhich lshal ) LSRAID=$(mywhich lsraid ) MDADM=$(mywhich mdadm ) PROCINFO=$(mywhich procinfo ) POWERMT=$(mywhich powermt ) SMARTCTL=$(mywhich smartclt ) SFDISK=$(mywhich sfdisk ) HWPARM=$(mywhich hwparm ) SCSI_ID=$(mywhich scsi_id ) ISCSIADM=$(mywhich iscsiadm ) MULTIPATH=$(mywhich multipath ) DMSETUP=$(mywhich dmsetup ) NTPQ=$(mywhich ntpq ) SYSP=$(mywhich sysp ) _3DDIAG=$(mywhich 3Ddiag ) LSHW=$(mywhich lshw ) SYSTOOL=$(mywhich systool ) SWAPON=$(mywhich swapon ) # Netapp Tools SAN_UTIL_DIR=/opt/netapp/santools SAN_UTIL_PROG=sanlun SANLUN=$SAN_UTIL_DIR/$SAN_UTIL_PROG # Disks BTRFS=$(mywhich btrfs ) DEBUGREISERFS=$(mywhich debugreiserfs ) EXPORTFS=$(mywhich exportfs ) HDPARM=$(mywhich hdparm ) LVM=$(mywhich lvm ) LVDISPLAY=$(mywhich lvdisplay ) LVMDISKSCAN=$(mywhich lvmdiskscan ) PVSCAN=$(mywhich pvs ) VGS=$(mywhich vgs ) VGSCAN=$(mywhich vgscan ) VGDISPLAY=$(mywhich vgdisplay ) PVSCAN=$(mywhich pvscan ) PVS=$(mywhich pvs ) REPQUOTA=$(mywhich repquota ) TUNE2FS=$(mywhich tune2fs ) # ZFS ZFS=$(mywhich zfs ) ZPOOL=$(mywhich zpool ) # Veritas FS PVDISPLAY=$(mywhich pvdisplay ) VXDG=$(mywhich vxdg ) VXDISK=$(mywhich vxdisk ) VXPRINT=$(mywhich vxprint ) VXLICREP=$(mywhich vxlicrep ) # Veritas Cluster HASTATUS=$(mywhich hastatus ) HARES=$(mywhich hares ) HAGRP=$(mywhich hagrp ) HATYPE=$(mywhich hatype ) HAUSER=$(mywhich hauser ) LLTSTAT=$(mywhich lltstat ) GABCONFIG=$(mywhich gabconfig ) HACF=$(mywhich hacf ) # Redhat Cluster CLUSTAT=$(mywhich clustat ) CLUSVCADM=$(mywhich clusvcadm ) MKQDISK=$(mywhich mkqdisk ) CMAN_TOOL=$(mywhich cman_tool ) # CRM Cluster CRM=$(mywhich crm ) CRM_MON=$(mywhich crm_mon ) CRM_VERIFY=$(mywhich crm_verify ) CIBADMIN=$(mywhich cibadmin ) # Network IFCONFIG=$(mywhich ifconfig ) IWCONFIG=$(mywhich iwconfig ) NETSTAT=$(mywhich netstat ) NFSSTAT=$(mywhich nfsstat ) ROUTE=$(mywhich route ) YPWHICH=$(mywhich ypwhich ) IP=$(mywhich ip ) MIITOOL=$(mywhich mii-tool ) IPTABLES=$(mywhich iptables ) IPCHAINS=$(mywhich ipchains ) ETHTOOL=$(mywhich ethtool ) BRCTL=$(mywhich brctl ) ARP=$(mywhich arp ) # Tuning IOSTAT=$(mywhich iostat ) VMSTAT=$(mywhich vmstat ) IPCS=$(mywhich ipcs ) MODPROBE=$(mywhich modprobe ) DEPMOD=$(mywhich depmod ) # Other DOVECOT=$(mywhich dovecot ) EXIM=$(mywhich exim ) RUNLEVEL=$(mywhich runlevel ) LSOF=$(mywhich lsof ) TAR=$(mywhich tar ) XVINFO=$(mywhich xvinfo ) POSTCONF=$(mywhich postconf ) # Virtual Server XM=$(mywhich xm ) VIRSH=$(mywhich virsh ) DOCKER=$(mywhich docker ) # Gentoo RC_UPDATE=$(mywhich rc-update ) } ############################################################################## # # Function : proc_sys_info # Parameters : # Output : # Notes : Collecting information from the proc directory # ############################################################################## function proc_sys_info { Echo "Section - Collecting /proc and /sys Info" MakeDir ${LOGDIR}/proc $FIND /proc -type f -print 2>/dev/null | \ $GREP -v "/proc/kcore" | \ $GREP -v "/proc/bus/usb" | \ $GREP -v "/proc/xen/xenbus" | \ $GREP -v "/proc/acpi/event" | \ $GREP -v "pagemap" | \ $GREP -v "clear_refs" | \ $GREP -v "kpagecount" | \ $GREP -v "kpageflags" | \ $GREP -v "use-gss-proxy" | \ $GREP -v "/proc/kmsg" > $TMPFILE for i in $($CAT $TMPFILE) do Dirname=$(dirname $i) Filename=$(basename $i) MakeDir ${LOGDIR}${Dirname} if [ -e "$i" ] ; then if [[ -t 0 && ${VERBOSE} -ne 0 ]] ; then spinningCursor fi $CAT "$i" > ${LOGDIR}${Dirname}/${Filename} 2>&1 fi if [[ -t 0 && ${VERBOSE} -ne 0 ]] ; then spinningCursor fi done echo $RM -f $TMPFILE } ############################################################################## # # Function : netbackup # Parameters : # Output : # Notes : Collect lots of Netbackup information if installed # ############################################################################## function netbackup { Echo "Section - Netbackup " # Basic Netbackup collection NETBACKUPDIR="/usr/openv/netbackup" if [ ! -d $NETBACKUPDIR ] ; then NBACKUPDIR=${LOGDIR}/backups/netbackup MakeDir $NBACKUPDIR else return fi PATH=$PATH:$NETBACKUPDIR export PATH bpstulist -L >> $NBACKUPDIR/bpstulist_-L.out bppllist > $NBACKUPDIR/bppllist.out cat $NBACKUPDIR/bppllist.out | while read line do bppllist $line -U > $NBACKUPDIR/bppllist_${line}_-U.out done bpps -a > $NBACKUPDIR/bpps_-a.out bpconfig -l > $NBACKUPDIR/bpconfig_-l.out bpconfig -L > $NBACKUPDIR/bpconfig_-L.out vmquery -a > $NBACKUPDIR/vmquery_-a.out tpconfig -d > $NBACKUPDIR/tpconfig_-d.out bpmedia > $NBACKUPDIR/bpmedia.out bpmedialist > $NBACKUPDIR/bpmedialist.out available_media > $NBACKUPDIR/available_media.out bperror -U -backstat -hoursago 48 > $NBACKUPDIR/bperror_-U_-backstat_-hoursago_48.out MakeDir $NBackupDir/configs cp /usr/openv/netbackup/*.conf $NBACKUPDIR/configs } ############################################################################## # # Function : hardware_checks # Parameters : # Output : # Notes : Collect Hardware Information # ############################################################################## function hardware_checks { Echo "Section - Hardware Info" if [ -x $CARDCTL ] ; then $CARDCTL info > ${LOGDIR}/hardware/cardctl-info.out 2>&1 $CARDCTL status > ${LOGDIR}/hardware/cardctl-status.out 2>&1 # $CARDCTL ident > ${LOGDIR}/hardware/cardctl-ident.out 2>&1 fi MakeDir ${LOGDIR}/hardware/lspci if [ -x $LSPCI ] ; then $LSPCI > ${LOGDIR}/hardware/lspci/lspci.out 2>&1 $LSPCI -n > ${LOGDIR}/hardware/lspci/lspci-n.out 2>&1 $LSPCI -knn > ${LOGDIR}/hardware/lspci/lspci-knn.out 2>&1 $LSPCI | while read line do Bus=$(/bin/echo $line 2>/dev/null | awk '{ print $1 }') $LSPCI -vv -s $Bus > ${LOGDIR}/hardware/lspci/lspci_-vv_-s_${Bus}.out 2>&1 done fi # Get the port names from the HDA cards for i in /sys/class/scsi_host/host*/device/fc_host\:host*/port_name do if [ -f $i ] ; then name=$( echo $i | sed 's/\//_/g' | sed 's/^_//g') echo "Port Name : $(cat $i )" >> ${LOGDIR}/hardware/lspci/cat_${name}.out fi done # Get a listing of the /dev directory MakeDir ${LOGDIR}/dev $LS -laR /dev > ${LOGDIR}/dev/ls_-laR_dev.out if [ -x "$LSUSB" ] ; then $LSUSB -xv > ${LOGDIR}/hardware/lsusb_-xv.out 2>&1 $LSUSB -tv > ${LOGDIR}/hardware/lsusb_-tv.out 2>&1 fi if [ -x "$LSDEV" ] ; then $LSDEV -type adaptor > ${LOGDIR}/hardware/lsdev_-type_adaptor.out 2>&1 fi if [ -x "$ACPI" ] ; then $ACPI -V > ${LOGDIR}/hardware/acpi-V.out 2>&1 fi if [ -x $FREE ] ; then $FREE > ${LOGDIR}/hardware/free.out $FREE -k > ${LOGDIR}/hardware/free_-k.out fi $LS -laR /dev > ${LOGDIR}/hardware/ls-laR_dev.out if [ -d /udev ] ; then $LS -laR /udev > ${LOGDIR}/hardware/ls-laR_udev.out fi # Global Devices list if [ -x "$LSHAL" ] ; then $LSHAL > ${LOGDIR}/hardware/lshal.out fi if [ -x /usr/share/rhn/up2date_client/hardware.py ] ; then /usr/share/rhn/up2date_client/hardware.py > ${LOGDIR}/hardware/hardware.py.out 2>&1 fi if [ -x "$SMARTCTL" ] ; then for device in $( $LS /dev/[a-z]d[a-z] /dev/st[0-9] /dev/sg[0-9] 2> /dev/null) do name=$( echo $device | sed 's/\//_/g' ) ${SMARTCTL} -a $device 2>/dev/null 1> ${LOGDIR}/hardware/smartctl-a_${name}.out done fi ############################################################################## # Collect Hardware information from the hwinfo program if installed ############################################################################## if [ -x $HWINFO ] ; then $HWINFO > ${LOGDIR}/hardware/hwinfo.out 2>&1 $HWINFO --isapnp > ${LOGDIR}/hardware/hwinfo_--isapnp.out 2>&1 $HWINFO --scsi > ${LOGDIR}/hardware/hwinfo_--scsi.out 2>&1 $HWINFO --framebuffer > ${LOGDIR}/hardware/hwinfo_--framebuffer.out 2>&1 fi if [ -x "$PROCINFO" ] ; then $PROCINFO > ${LOGDIR}/hardware/procinfo.out 2>&1 fi if [ -x "$DMIDECODE" ] ; then $DMIDECODE > ${LOGDIR}/hardware/dmidecode.out 2>&1 fi if [ -x $LSHW ] ; then $LSHW > ${LOGDIR}/hardware/lshw.out 2>&1 fi $CAT /proc/cpuinfo > ${LOGDIR}/hardware/proc_cpuinfo.out 2>&1 $CAT /proc/meminfo > ${LOGDIR}/hardware/proc_meminfo.out 2>&1 $CAT /proc/mdstat > ${LOGDIR}/hardware/proc_mdstat.out 2>&1 $CAT /proc/interrupts > ${LOGDIR}/hardware/proc_interrupts.out 2>&1 $CAT /proc/filesystem > ${LOGDIR}/hardware/proc_filesystems.out 2>&1 $CAT /proc/devices > ${LOGDIR}/hardware/proc_devices.out 2>&1 $CAT /proc/iomem > ${LOGDIR}/hardware/proc_iomem.out 2>&1 $CAT /proc/ioports > ${LOGDIR}/hardware/proc_ioports.out 2>&1 $CAT /proc/partitions > ${LOGDIR}/hardware/proc_partitions.out 2>&1 $CAT /proc/slabinfo > ${LOGDIR}/hardware/proc_slabinfo.out 2>&1 $CAT /proc/softirqs > ${LOGDIR}/hardware/proc_softirqs.out 2>&1 physicalCPUs=$( $CAT /proc/cpuinfo | grep "physical id" | $SORT | $UNIQ | $WC -l ) cpuCores=$( $CAT /proc/cpuinfo | grep "cpu cores" | $UNIQ ) cpuProcessors=$( $CAT /proc/cpuinfo | grep "^processor" | $UNIQ ) echo "Physical CPU : $physicalCPUs" >> ${LOGDIR}/hardware/cpu_details.txt echo "CPU Cores : $cpuCores" >> ${LOGDIR}/hardware/cpu_details.txt echo "CPU Processors : $cpuCores" >> ${LOGDIR}/hardware/cpu_details.txt } ############################################################################## # # Function : boot_section # Parameters : # Output : # Notes : Capture the files required to boot the system # ############################################################################## function boot_section { Echo "Section - Boot Info" if [ -x "/sbin/lilo" ] ; then /sbin/lilo -q > $LOGDIR/system/lilo_-q 2>&1 fi $LS -alR /boot > ${LOGDIR}/system/ls-alR_boot.out 2>&1 MakeDir ${LOGDIR}/boot/grub MakeDir ${LOGDIR}/software MakeDir ${LOGDIR}/system for i in /boot/grub/menu.lst /boot/grub/grub.conf \ /boot/grub.conf /boot/grub/device.map do if [ -f ${i} ] ; then $CP -p ${i} ${LOGDIR}/${i} fi done if [ -x "$CHKCONFIG" ] ; then $CHKCONFIG --list > ${LOGDIR}/software/chkconfig_--list.out 2>&1 fi if [ -x "$SYSTEMCTL" ] ; then $SYSTEMCTL --full --no-pager > ${LOGDIR}/system/systemctl_--full_--nopager fi } ############################################################################## # # Function : performance_info # Parameters : # Output : # Notes : some general information about performance # ############################################################################## function performance_info { Echo "Section - Performance/System " MakeDir ${LOGDIR}/system/performance $PS auxw > ${LOGDIR}/system/ps_auxw.out $PS -lef > ${LOGDIR}/system/ps_-elf.out $HOSTNAME > ${LOGDIR}/system/hostname.out if [ -e /proc/stat ] ; then $CAT /proc/stat > ${LOGDIR}/system/stat.out fi if [ -x $DATE ] ; then $DATE > ${LOGDIR}/system/date.out fi if [ -x $FREE ] ; then $FREE > ${LOGDIR}/system/free.out fi if [ -x $PSTREE ] ; then $PSTREE > ${LOGDIR}/system/pstree.out fi if [ -x $IPCS ] ; then $IPCS -a > ${LOGDIR}/system/ipcs_-a.out $IPCS -u > ${LOGDIR}/system/ipcs_-u.out $IPCS -l > ${LOGDIR}/system/ipcs_-l.out fi $UPTIME > ${LOGDIR}/system/uptime.out ulimit -a > ${LOGDIR}/system/ulimit_-a.out if [ -x $VMSTAT ] ; then $VMSTAT -s > ${LOGDIR}/system/performance/vmstat_-s.out fi if [ "$LSOF" != "" ] ; then $LSOF > ${LOGDIR}/system/lsof.out 2>&1 fi if [ -d /var/log/sa ] ; then $CP -p /var/log/sa/sa* ${LOGDIR}/system/performance/ fi if [ -e /proc/loadavg ] ; then $CAT /proc/loadavg > ${LOGDIR}/system/performance/loadavg.out fi } ############################################################################## # # Function : kernel_info # Parameters : # Output : # Notes : Kernel information # ############################################################################## function kernel_info { Echo "Section - Kernel info" $SYSCTL -A > ${LOGDIR}/etc/sysctl_-A.out 2>&1 $UNAME -a > ${LOGDIR}/system/uname_-a.out $RUNLEVEL > ${LOGDIR}/system/runlevel.out $WHO -r > ${LOGDIR}/system/who_-r.out $SLABTOP -o > ${LOGDIR}/system/slabtop_-o.out if [ ! -d ${LOGDIR}/kernel/info ] ; then MakeDir ${LOGDIR}/kernel/info fi $LSMOD > ${LOGDIR}/kernel/lsmod.out 2>&1 $LSMOD | while read line do kernmod=$( echo $line | $AWK '{ print $1 }' ) $MODINFO $kernmod > ${LOGDIR}/kernel/info/${kernmod}.out 2>&1 done if [ -x $KSYMS ] ; then $KSYMS > ${LOGDIR}/kernel/ksyms.out 2>&1 fi $CP -p /lib/modules/$($UNAME -r)/modules.dep ${LOGDIR}/kernel/modules.dep $MODPROBE -n -l -v > ${LOGDIR}/kernel/modprobe_-n-l-v.out 2>&1 $DEPMOD -av > ${LOGDIR}/kernel/depmod_-av.out 2>&1 $CAT /proc/modules > ${LOGDIR}/kernel/modules.out 2>&1 ############################################################################## # Get the kernel configuration details from a 2.6 kernel ############################################################################## if [ -f /proc/config.gz ] ; then $GUNZIP -c /proc/config.gz > ${LOGDIR}/kernel/config fi } ############################################################################## # # Function : disk_info # Parameters : # Output : # Notes : Collect general information about the disks on this system # ############################################################################## function disk_info { Echo "Section - Disk Section Checks" local Dirname MakeDir ${LOGDIR}/hardware/disks # Check to see what is mounted $DF -k > ${LOGDIR}/hardware/disks/df_-k.out 2>&1 $DF -h > ${LOGDIR}/hardware/disks/df_-h.out 2>&1 $DF -ki > ${LOGDIR}/hardware/disks/df_-ki.out 2>&1 $DF -aki > ${LOGDIR}/hardware/disks/df_-aki.out 2>&1 $DF -akih > ${LOGDIR}/hardware/disks/df_-akih.out 2>&1 if [ -x $SWAPON ] ; then $SWAPON -s > ${LOGDIR}/hardware/disks/swapon_-s.out 2>&1 fi $MOUNT > ${LOGDIR}/hardware/disks/mount.out 2>&1 $MOUNT -l > ${LOGDIR}/hardware/disks/mount_-l.out 2>&1 $CAT /proc/mounts > ${LOGDIR}/hardware/disks/mounts.out 2>&1 # Display any quotas that my have been set $REPQUOTA -av > ${LOGDIR}/hardware/disks/repquota_-av 2>&1 ############################################################################## # Disk Format Information ############################################################################## DISKLIST=$($FDISK -l 2>/dev/null | grep "^/dev" | sed 's/[0-9]//g' | awk '{ print $1 }' | sort -u) if [ -x $FDISK ] ; then $FDISK -l > ${LOGDIR}/hardware/disks/fdisk_-l.out 2>&1 fi if [ -x $SFDISK ] ; then $SFDISK -l > ${LOGDIR}/hardware/disks/sfdisk_-l.out 2>&1 $SFDISK -s > ${LOGDIR}/hardware/disks/sfdisk_-s.out 2>&1 fi if [ -x $BLKID ] ; then $BLKID > ${LOGDIR}/hardware/disks/blkid.out 2>&1 fi if [ -x $LSBLK ] ; then $LSBLK -f > ${LOGDIR}/hardware/disks/lsblk_-f.out 2>&1 fi if [ -x $LSSCSI ] ; then $LSSCSI -l > ${LOGDIR}/hardware/disks/lsscsi_-l.out 2>&1 $LSSCSI -g > ${LOGDIR}/hardware/disks/lsscsi_-g.out 2>&1 fi for DISK in $DISKLIST do Dirname=$(dirname $DISK) if [ "$Dirname" = "/dev/mapper" ] ; then if [ ! -L $DISK ] ; then continue fi fi NEWDISK=$(/bin/echo $DISK | sed s'/\/dev\///g' ) MakeDir ${LOGDIR}/hardware/disks/${NEWDISK} if [ -x $HDPARM ] ; then $HDPARM -vIi $DISK > ${LOGDIR}/hardware/disks/${NEWDISK}/hdparm_-vIi_${NEWDISK}.out 2>&1 fi if [ -x $SFDISK ] ; then $SFDISK -l $DISK > ${LOGDIR}/hardware/disks/${NEWDISK}/sfdisk_-l_${NEWDISK}.out 2>&1 fi if [ -x $FDISK ] ; then $FDISK -l $DISK > ${LOGDIR}/hardware/disks/${NEWDISK}/fdisk_-l_${NEWDISK}.out 2>&1 fi done if [ -x "$DUMPE2FS" ] ; then MakeDir ${LOGDIR}/hardware/disks/dumpe2fs PARTS=$($FDISK -l 2>/dev/null | grep "^/dev" | awk '{ print $1 }') for parts in $PARTS do name=$(/bin/echo $parts | sed 's/\//_/g') $DUMPE2FS $parts > ${LOGDIR}/hardware/disks/dumpe2fs/fdisk_-l_${name}.out 2>&1 done fi ############################################################################## # Collect Detailed SCSI information about the disks ############################################################################## if [ -x "$SCSI_ID" ] ; then for i in $($LS [a-z]d[a-z] 2>/dev/null) do if [ -b /dev/${i} ] ; then disk_name=$(/bin/echo /dev/${i} | sed 's/\//_/g') $SCSI_ID -g -p 0x80 -d /dev/${i} -s /block/${i} \ > ${LOGDIR}/hardware/disks/scsi_id_-g_-p_0x80_${disk_name}.out 2>&1 $SCSI_ID -g -p 0x83 -d /dev/${i} -s /block/${i} \ > ${LOGDIR}/hardware/disks/scsi_id_-g_-p_0x83_${disk_name}.out 2>&1 fi done for disk in $($LS /dev/[a-z]d[a-z]) do wwid=`$SCSI_ID -g -u $disk` if [ "$wwid" != "" ] ; then $ECHO -e "Disk:" $disk_short "\tWWID:" $wwid >> ${LOGDIR}/hardware/disks/disk_mapping-wwid.out fi done fi if [ -x $SYSTOOL ] ; then $SYSTOOL -c scsi_host -v > ${LOGDIR}/hardware/disks/systool_-c_scsi_host_-v.out 2>&1 fi ############################################################################## # If we are using multi-pathings then print out the # multi-pathing information ############################################################################## if [ -x "$MULTIPATH" ] ; then $MULTIPATH -ll > ${LOGDIR}/hardware/disks/multipath_-ll.out 2>&1 $MULTIPATH -v4 > ${LOGDIR}/hardware/disks/multipath_-v2.out 2>&1 fi if [ -x "$DMSETUP" ] ; then MakeDir ${LOGDIR}/hardware/disks/dmsetup $DMSETUP ls > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_ls.out 2>&1 $DMSETUP ls --tree > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_ls--info.out 2>&1 $DMSETUP info > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_info.out 2>&1 $DMSETUP info > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_info-C.out 2>&1 $DMSETUP deps > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_deps.out 2>&1 $DMSETUP targets > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_targets.out 2>&1 fi # Check to see what iscsi devices have if [ -x "$ISCSIADM" ] ; then $ISCSIADM -m session > ${LOGDIR}/hardware/disks/iscsiadm_-m_session.out 2>&1 fi } ############################################################################## # # Function : emc_powerpath_info # Parameters : # Output : # Notes : If Powerpath is installed then get some information # ############################################################################## function emc_powerpath_info { Echo "Section - EMC Powerpath checks" if [ ! -d ${LOGDIR}/hardware/disks/emcpower ] ; then MakeDir ${LOGDIR}/hardware/disks/emcpower fi EMCPOWER=${LOGDIR}/hardware/disks/emcpower # Check to see what emc powerpath devices we have if [ ! -x "$POWERMT" ] ; then $ECHO "No $POWERMT Program found" > ${EMCPOWER}/Readme.out return fi $POWERMT check_registration >${EMCPOWER}/powermt_check_registration.out 2>&1 $POWERMT display path >${EMCPOWER}/powermt_display_path.out 2>&1 $POWERMT display ports >${EMCPOWER}/powermt_display_ports.out 2>&1 $POWERMT display paths class=all >${EMCPOWER}/powermt_display_paths_class=all.out 2>&1 $POWERMT display ports dev=all >${EMCPOWER}/powermt_display_ports_dev=all.out 2>&1 $POWERMT display dev=all >${EMCPOWER}/powermt_display_dev=all.out 2>&1 # Get the partition details for the EMC devices for emcdevice in $(ls /dev/emcpower*) do emc_disk_name=$(/bin/echo ${emcdevice} | sed 's/\//_/g') $FDISK -l $emcdevice >${EMCPOWER}/fdisk_-l_${emc_disk_name}.out 2>&1 done } ############################################################################## # # Function : netapp_info # Parameters : # Output : # Notes : Check if we have netapp software installed - collect info # ############################################################################## function netapp_info { if [ ! -x $SANLUN ] ; then $ECHO "No $SANLUN Program found" > ${NETAPPDIR}/Readme.out return fi if [ ! -d ${LOGDIR}/hardware/disks/netapp ] ; then MakeDir ${LOGDIR}/hardware/disks/netapp fi Echo "Section - Netapp checks" NETAPPDIR=${LOGDIR}/hardware/disks/netapp MakeDir $NETAPPDIR $SANLUN version > ${NETAPPDIR}/sanlun_version 2>&1 $SANLUN lun show -v all > ${NETAPPDIR}/sanlun_lun_show_-v_all 2>&1 $SANLUN fcp show adapter -v all > ${NETAPPDIR}/sanlun_fcp_show_adapter_-v_all 2>&1 $SANLUN lun show -v all > ${NETAPPDIR}/sanlun_lun_show-v_all 2>&1 $SANLUN fcp show adapter -v all > ${NETAPPDIR}/sanlun_fcp_show_adapter_-v_all 2>&1 } ############################################################################## # # Function : veritas_vm # Parameters : # Output : # Notes : Collect information about veritas volume manager # ############################################################################## function veritas_vm { Echo "Section - Veritas Volume Manager checks" if [ -d /dev/vx ] ; then if [ ! -d ${LOGDIR}/disks/vxvm ] ; then MakeDir ${LOGDIR}/hardware/disks/vxvm MakeDir ${LOGDIR}/hardware/disks/vxvm/logs MakeDir ${LOGDIR}/hardware/disks/vxvm/disk_groups fi $LS -laR /dev/vx > ${LOGDIR}/hardware/disks/vxvm/ls-lR_dev_vx.out 2>&1 if [ -x $VXDISK ] ; then $VXDISK list > ${LOGDIR}/hardware/disks/vxvm/vxdisk_list.out 2>&1 $VXDISK -o alldgs list > ${LOGDIR}/hardware/disks/vxvm/vxdisk_-o_alldgs_list.out 2>&1 $VXPRINT -Ath > ${LOGDIR}/hardware/disks/vxvm/vxprint_-Ath.out 2>&1 $VXPRINT -h > ${LOGDIR}/hardware/disks/vxvm/vxprint_-h.out 2>&1 $VXPRINT -hr > ${LOGDIR}/hardware/disks/vxvm/vxprint_-hr.out 2>&1 $VXPRINT -th > ${LOGDIR}/hardware/disks/vxvm/vxprint_-th.out 2>&1 $VXPRINT -thrL > ${LOGDIR}/hardware/disks/vxvm/vxprint_-thrL.out 2>&1 fi if [ -x $VXDG ] ; then $VXDG -q list > ${LOGDIR}/hardware/disks/vxvm/vxdg_-q_-list.out 2>&1 fi #------------------------------------------------------------------------ # Collect individual volume information #------------------------------------------------------------------------ for i in $($VXDG -q list|awk '{print $1}') do $VXDG list $i > ${LOGDIR}/hardware/disks/vxvm/disk_groups/vxdg_list_${i}.out $VXDG -g $i free > ${LOGDIR}/hardware/disks/vxvm/disk_groups/vxdg_-g_free_${i}.out $VXPRINT -vng $i > ${LOGDIR}/hardware/disks/vxvm/disk_groups/vxprint_-vng_${i}.out VOL=$(cat ${LOGDIR}/hardware/disks/vxvm/disk_groups/vxprint_-vng_${i}.out) $VXPRINT -hmQqg $i $VOL \ > ${LOGDIR}/hardware/disks/vxvm/disk_groups/vxprint_-hmQqg_4vxmk=${i}.out 2>&1 $VXPRINT -hmQqg $i \ > ${LOGDIR}/hardware/disks/vxvm/disk_groups/vxprint_-hmQqg=${i}.out 2>&1 done fi } ############################################################################## # # Function : filesystem_info # Parameters : # Output : # Notes : General Filesystem information # ############################################################################## function filesystem_info { Echo "Section - Filesystem checks" MakeDir ${LOGDIR}/hardware/disks/tunefs for i in $($DF -kl | grep ^/dev | awk '{ print $1 }') do if [ -x $TUNE2FS ] ; then name=$(/bin/echo $i | sed 's/\//_/g') $TUNE2FS -l $i > ${LOGDIR}/hardware/disks/tunefs/tunefs_-l_${name}.out 2>&1 fi done } ############################################################################## # # Function : nfs_info # Parameters : # Output : # Notes : Get some information about the NFS service # ############################################################################## function nfs_info { Echo "Section - NFS checks" # lets see what we have really exported if [ -x $EXPORTFS ] ; then $EXPORTFS -v > ${LOGDIR}/hardware/disks/exportfs_-v.out 2>&1 fi if [ -x "$NFSSTAT" ] ; then $NFSSTAT -a > ${LOGDIR}/hardware/disks/nfsstat_-a.out 2>&1 fi } ############################################################################## # # Function : raid_info # Parameters : # Output : # Notes : Check raid used on this system # ############################################################################## function raid_info { Echo "Section - Disk Raid checks" MakeDir ${LOGDIR}/hardware/disks/raid if [ -x "$LSRAID" ] ; then for i in $( $LS /dev/md[0-9]* 2>/dev/null ) do name=$(/bin/echo $i | sed 's/\//_/g') $LSRAID -a $i > ${LOGDIR}/hardware/disks/raid/lsraid_-a_${name}.out > /dev/null 2>&1 done fi if [ -x "$MDADM" ] ; then for i in $( $LS /dev/md[0-9]* 2>/dev/null ) do name=$( echo $i | sed 's/\//_/g' ) $MDADM --detail $i > ${LOGDIR}/hardware/disks/raid/mdadm_--detail_${name}.out > /dev/null 2>&1 if [ ! -s ${LOGDIR}/hardware/disks/raid/mdadm--detail_${name}.out ] ; then $RM -f ${LOGDIR}/hardware/disks/raid/mdadm--detail_${name}.out fi done fi } ############################################################################## # # Function : brtfs_info # Parameters : # Output : # Notes : Lets look at BRTS - new Linux filesystem # ############################################################################## function brtfs_info { Echo "Section - btrfs Section" MakeDir ${LOGDIR}/hardware/disks/btrfs # Scan all devices if [ -x $BTRFS ] ; then ${BRTFS} filesystem show > ${LOGDIR}/hardware/disks/btrfs/btrfs_filesystem_show.out > /dev/null 2>&1 $DF -h -t btrfs 2>/dev/null | grep -v Filesystem | while read line do FS=$(echo $line | awk '{print $6}') FSN=$( echo $FS | sed 's/\//_/g' ) if [ "$FS" = "/" ] ; then FSN="root" fi $BTRFS filesystem df $FS > ${LOGDIR}/hardware/disks/btrfs/btrfs_filesystem_df_$FSN 2>&1 $BTRFS subvolume list $FS > ${LOGDIR}/hardware/disks/btrfs/btrfs_subvolume_list_$FSN 2>&1 done $BTRFS fi show > ${LOGDIR}/hardware/disks/btrfs/btrfs_fi_show.out fi } ############################################################################## # # Function : zfs_info # Parameters : # Output : # Notes : Solaris - ZFS Volume Manager - collect details # ############################################################################## function zfs_info { if [ -x "$ZPOOL" ] ; then Echo "Section - ZFS " ZFSDIR=${LOGDIR}/hardware/disks/zfs MakeDir ${ZFSDIR} $ZPOOL status -v > ${ZFSDIR}/zpool_status_-v.out 2>&1 $ZPOOL status -D > ${ZFSDIR}/zpool_status_-D.out 2>&1 $ZPOOL history > ${ZFSDIR}/zpool_history.out 2>&1 $ZPOOL list > ${ZFSDIR}/zpool_list.out 2>&1 $ZFS list > ${ZFSDIR}/zfs_list.out 2>&1 $ZFS list -o space > ${ZFSDIR}/zfs_list_-o_space.out 2>&1 $ZFS list -t snapshots > ${ZFSDIR}/zfs_list_-t_snapshots.out 2>&1 $ZFS get all > ${ZFSDIR}/zfs_get_all.out 2>&1 for poolname in $($ZPOOL list | grep -v NAME | $AWK '{print $1}') do $ZFS get all $poolname > ${ZFSDIR}/zfs_get_all_$poolname.out 2>&1 $ZPOOL status $poolname > ${ZFSDIR}/zpool_status_$poolname.out 2>&1 done fi } ############################################################################## # # Function : lvm_info # Parameters : # Output : # Notes : Logical Volume Manager - collect details # ############################################################################## function lvm_info { Echo "Section - LVM " LVMDIR=${LOGDIR}/hardware/disks/lvm MakeDir ${LVMDIR} if [ -x "$LVDISPLAY" ] ; then $LVDISPLAY -vv > ${LVMDIR}/lvdisplay_-vv.out 2>&1 $VGDISPLAY -vv > ${LVMDIR}/vgdisplay_-vv.out 2>&1 $VGSCAN -vv > ${LVMDIR}/vgscan_-vv.out 2>&1 $LVMDISKSCAN -v > ${LVMDIR}/lvmdiskscan_-v.out 2>&1 $PVSCAN -v > ${LVMDIR}/pvscan_-v.out 2>&1 $PVDISPLAY -v > ${LVMDIR}/pvdisplay_-v.out 2>&1 $VGS -v > ${LVMDIR}/vgs-v.out 2>&1 $PVSCAN -v > ${LVMDIR}/pvscan-v.out 2>&1 # Map every DM device to a disk $LVDISPLAY 2>/dev/null | \ $AWK '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}' \ > ${LVMDIR}/devices.out 2>&1 fi if [ -x "$LVM" ] ; then $LVM dumpconfig > ${LVMDIR}/lvm_dumpconfig.out 2>&1 $LVM lvs > ${LVMDIR}/lvm_lvs.out 2>&1 $LVM pvs -o +lv_name,lv_size,seg_all > ${LVMDIR}/pvs_-o_+lv_name:lv_size:seg_all.out 2>&1 fi } ############################################################################## # # Function : disk_dm_info # Parameters : # Output : # Notes : Collect more Disk information # ############################################################################## function disk_dm_info { Echo "Section - Disk DM Info " # Work out which dm device is being used by each filesystem grep dm-[0-9] /proc/diskstats | awk '{print $1, $2, $3}' | while read line do Major=$(echo $line | awk '{print $1}' ) Minor=$(echo $line | awk '{print $2}' ) Device=$(echo $line | awk '{print $3}' ) List=$(ls -la /dev/mapper | grep "${Major}, ${Minor}" | awk '{print $(NF)}') echo "$Device = $List " >> ${LOGDIR}/hardware/disks/dm-info.out done } ############################################################################## # # Function : rpm_info # Parameters : # Output : # Notes : Check all packages installed # ############################################################################## function rpm_info { if [ -x "$RPM" ] ; then Echo "Section - rpm package information " MakeDir ${LOGDIR}/software/rpm/rpm-packages # # Short Description of all packages installed # echo "Package_Name Version Size Description" > ${LOGDIR}/software/rpm/rpm-qa--queryformat.out echo "===================================================================================" >> ${LOGDIR}/software/rpm/rpm-qa--queryformat.out $RPM -qa --queryformat '%-25{NAME} %-16{VERSION} %-10{RELEASE} %-10{DISTRIBUTION} %-10{SIZE} %-10{INSTALLTIME:date} %{SUMMARY}\n' | sort >> ${LOGDIR}/software/rpm/rpm-qa--queryformat.out 2>&1 # # Long Description of all packages installed # $RPM -qa > ${LOGDIR}/software/rpm/rpm_-qa 2>&1 $CAT ${LOGDIR}/software/rpm/rpm_-qa | while read line do $RPM -qi $line > ${LOGDIR}/software/rpm/rpm-packages/${line}.out 2>&1 if [ $? -ne 0 ] ; then echo "ERROR: ${line} problem" fi done # print a list os installed packages sorted by install time: $RPM -qa -last | tac > ${LOGDIR}/software/rpm/rpm_-qa_-last.out ############################################################# # If you enable verification then this then it's going to # take a some time to complete........ ############################################################# if [ ${FULLSOFT} -gt 0 ] ; then $RPM -Va > ${LOGDIR}/software/rpm/rpm-Va.out 2>&1 fi fi if [ -f /usr/lib/rpm/rpmrc ] ; then $CP -p /usr/lib/rpm/rpmrc ${LOGDIR}/software/rpm/rpmrc fi # Make a copy of the yum config files so that we can compare them YUMDIR=${LOGDIR}/software/yum MakeDir ${YUMDIR} if [ -x "$YUM" ] ; then $YUM list installed > ${YUMDIR}/yum_list_installed.out 2>&1 $YUM info installed > ${YUMDIR}/yum_info_installed.out 2>&1 $YUM -v repolist all > ${YUMDIR}/yum_-v_repolist_all.out 2>&1 $YUM repolist enabled > ${YUMDIR}/yum_repolist_enabled.out 2>&1 $YUM repolist disabled > ${YUMDIR}/yum_repolist_disabled.out 2>&1 $YUM -v repolist all > ${YUMDIR}/yum_-v_repolist_all.out 2>&1 $YUM -v repolist enabled > ${YUMDIR}/yum_-v_repolist_enabled.out 2>&1 $YUM -v repolist disabled > ${YUMDIR}/yum_-v_repolist_disabled.out 2>&1 fi } ############################################################################## # # Function : pacman_info # Parameters : # Output : # Notes : Check all packages installed ( used by ArchLinux/OpenFiler ) # ############################################################################## function pacman_info { if [ -x "$PACMAN" ] ; then Echo "Section - pacman Checks " MakeDir ${LOGDIR}/software/packman $PACMAN -qa > ${LOGDIR}/software/packman/pacman_-qa 2>&1 $PACMAN -Qi > ${LOGDIR}/software/packman/pacman_-Qi 2>&1 $PACMAN -Qdt > ${LOGDIR}/software/packman/pacman_-Qdt 2>&1 fi } ############################################################################## # # Function : systemd_info # Parameters : # Output : # Notes : Get information about SystemD # ############################################################################## function systemd_info { if [ -x "$SYSTEMCTL" ]; then Echo "Section - Systemd Checks " MakeDir ${LOGDIR}/system/systemd # systemd checks if [ -x "$SYSTEMD" ]; then $SYSTEMD --dump-configuration-items > ${LOGDIR}/system/systemd/systemd_--dump-configuration-items.out 2>&1 $SYSTEMD --test > ${LOGDIR}/system/systemd/systemd_--test.out 2>&1 fi # systemd-cgls tree if [ -x "$SYSTEMDCGLS" ]; then $SYSTEMDCGLS > ${LOGDIR}/system/systemd/systemd-cgls.out 2>&1 fi if [ -x "$SYSTEMDLOGINCTL" ]; then $SYSTEMDLOGINCTL --all > ${LOGDIR}/system/systemd/systemd-loginctl_--all.out 2>&1 $SYSTEMDLOGINCTL show-seat > ${LOGDIR}/system/systemd/systemd-loginctl_show-seat.out 2>&1 $SYSTEMDLOGINCTL show-user > ${LOGDIR}/system/systemd/systemd-loginctl_show_user.out 2>&1 fi $SYSTEMCTL > ${LOGDIR}/system/systemd/systemctl.out 2>&1 $SYSTEMCTL --all > ${LOGDIR}/system/systemd/systemctl_--all.out 2>&1 $SYSTEMCTL show-environment > ${LOGDIR}/system/systemd/systemctl_show-environment.out 2>&1 $SYSTEMCTL --version > ${LOGDIR}/system/systemd/systemctl_--version.out 2>&1 $SYSTEMCTL list-unit-files > ${LOGDIR}/system/systemd/systemctl_list-unit-files.out 2>&1 $SYSTEMCTL list-jobs > ${LOGDIR}/system/systemd/systemctl_list-jobs.out 2>&1 $SYSTEMCTL list-unit-files --type=service > ${LOGDIR}/system/systemd/systemctl_list--unit-files_--type=service.out 2>&1 fi } ############################################################################## # # Function : deb_info # Parameters : # Output : # Notes : Collect information above Debian packages # ############################################################################## function deb_info { if [ -f /var/lib/dpkg/available ] ; then Echo "Section - deb package information " MakeDir ${LOGDIR}/var/lib/dpkg if [ -f /var/lib/dpkg/status ] ; then $CP -p /var/lib/dpkg/status ${LOGDIR}/var/lib/dpkg/status fi MakeDir ${LOGDIR}/software/dpkg if [ -x "$DPKG" ] ; then $DPKG --list > ${LOGDIR}/software/dpkg/dpkg_--list.out $DPKG -al > ${LOGDIR}/software/dpkg/dpkg_-al.out $DPKG --get-selections > ${LOGDIR}/software/dpkg/dpkg_-get-selections.out fi if [ -x "$DPKG_QUERY" ] ; then $DPKG_QUERY -W > ${LOGDIR}/software/dpkg/dpkg-query_-W.out fi if [ -x /usr/bin/apt-config ] ; then /usr/bin/apt-config dump > ${LOGDIR}/software/dpkg/apt-config_dump.out fi fi } ############################################################################## # # Function : suse_zypper_info # Parameters : # Output : # Notes : Collect information above Suse packages # ############################################################################## function suse_zypper_info { if [ -x "$ZYPPER" ] ; then Echo "Section - Suse Zypper Info " MakeDir ${LOGDIR}/software/zypper $ZYPPER repos > ${LOGDIR}/software/zypper/zypper_repos 2>&1 $ZYPPER locks > ${LOGDIR}/software/zypper/zypper_locks 2>&1 $ZYPPER patches > ${LOGDIR}/software/zypper/zypper_patches 2>&1 $ZYPPER packages > ${LOGDIR}/software/zypper/zypper_packages 2>&1 $ZYPPER patterns > ${LOGDIR}/software/zypper/zypper_patterns 2>&1 $ZYPPER products > ${LOGDIR}/software/zypper/zypper_products 2>&1 $ZYPPER services > ${LOGDIR}/software/zypper/zypper_services 2>&1 $ZYPPER licenses > ${LOGDIR}/software/zypper/zypper_licenses 2>&1 $ZYPPER targetos > ${LOGDIR}/software/zypper/zypper_targetos 2>&1 $ZYPPER list-updates > ${LOGDIR}/software/zypper/zypper_list-updates 2>&1 fi } ############################################################################## # # Function : gentoo_pkgs_info # Parameters : # Output : # Notes : This Section is for Gentoo - so we can work out what # packages are installed- Provided by Adam Bills # ############################################################################## function gentoo_pkgs_info { if [ -d /var/db/pkg ] ; then Echo "Section - Gentoo Packages Info " MakeDir ${LOGDIR}/software/gentoo GENTOPKGS=${LOGDIR}/software/gentoo/gento_kgs.out ( find /var/db/pkg -type f -name environment.bz2 | while read x; do bzcat $x | \ awk -F= '{ if ($1 == "CATEGORY"){ printf "%s ", $2; } if ($1 == "PN"){ printf "%s ",$2; } if ($1 == "PV"){ print $2; } }' ; done ) >> $GENTOPKGS if [ -x $EQUERY ] ; then $EQUERY list > ${LOGDIR}/software/gentoo/equery_list.out fi fi # Show the bootup info if [ -x $RC_UPDATE ] ; then $RC_UPDATE show > ${LOGDIR}/software/gentoo/rc-update_show.out fi } ############################################################################## # # Function : spacewalk_info # Parameters : # Output : # Notes : See if we have spacewalk installed # ############################################################################## function spacewalk_info { if [ -x $SPACERPT ] ; then Echo "Section - Spacewalk " MakeDir ${LOGDIR}/satellite for info in users channels errata-list entitlements inventory users-systems errata-systems do $SPACERPT $info > ${LOGDIR}/satellite/${SPACERPT}_${info} 2>&1 done fi } ############################################################################## # # Function : rhn_info # Parameters : # Output : # Notes : Collect Redhat Network Information # ############################################################################## function rhn_info { if [ -d /etc/sysconfig/rhn ] ; then Echo "Section - RedHat Network " RDIR=${LOGDIR}/rhn MakeDir ${RDIR} if [ -d /etc/rhn ] ; then if [ -f /etc/sysconfig/rhn/systemid ] ; then if [ -x /usr/bin/xsltproc ] ; then /usr/bin/xsltproc $UTILDIR/text.xsl $RDIR/systemid \ > $ROOT/$RHNDIR/systemid 2>&1 fi fi fi fi } ############################################################################## # # Function : system_logs_info # Parameters : # Output : # Notes : Take a copy of the latest logs # ############################################################################## function system_logs_info { Echo "Section - Systems Log " $CP -R -p /var/log/* ${LOGDIR}/logs $DMESG > ${LOGDIR}/logs/dmesg.out $LAST > ${LOGDIR}/logs/lastlog if [ -d /var/crash ] ; then for i in $( $FIND /var/crash -name "*.txt" ) do dirname="$(dirname $i)" filename="$(basename $i)" if [ ! -d ${LOGDIR}/${dirname} ] ; then MakeDir ${LOGDIR}/${dirname} fi $CP -p $i ${LOGDIR}/${dirname}/${filename} 2>/dev/null done fi if [ -x $JOURNALCTL ] ; then $JOURNALCTL --all --no-pager > ${LOGDIR}/logs/journalctl_--all_--no-pager.out fi } ############################################################################## # # Function : selinux_info # Parameters : # Output : # Notes : selinux info # ############################################################################## function selinux_info { Echo "Section - SElinux Section checks" SELINUXDIR=${LOGDIR}/selinux MakeDir ${SELINUXDIR} if [ -x $SESTATUS ] ; then $SESTATUS > ${SELINUXDIR}/sestatus.out 2>&1 $SESTATUS -bv > ${SELINUXDIR}/sestatus_-bv.out 2>&1 fi if [ -x $SEMANAGE ] ; then $SEMANAGE port -l > ${SELINUXDIR}/semanage_port_-l.out 2>&1 $SEMANAGE login -l > ${SELINUXDIR}/semanage_login_-l.out 2>&1 $SEMANAGE user -l > ${SELINUXDIR}/semanage_user_-l.out 2>&1 $SEMANAGE node -l > ${SELINUXDIR}/semanage_node_-l.out 2>&1 $SEMANAGE interface -l > ${SELINUXDIR}/semanage_interface_-l.out 2>&1 $SEMANAGE boolean -l > ${SELINUXDIR}/semanage_boolean_-l.out 2>&1 fi if [ -x $GETSEBOOL ] ; then $GETSEBOOL -a > ${LOGDIR}/selinux/getsebool_-a.out 2>&1 else echo "getsebool not installed " > ${LOGDIR}/selinux/getsebool_-a.out 2>&1 fi } ############################################################################## # # Function : xen_info # Parameters : # Output : # Notes : XEN VM information # ############################################################################## function xen_info { if [ -d /etc/xen ] ; then Echo "Section - xen Section checks" MakeDir ${VIRT}/xen if [ -x $XM ] ; then $XM list > $VIRT/xen/xm_list.out 2>&1 $XM info > $VIRT/xen/xm_info.out 2>&1 $XM logs > $VIRT/xen/xm_log.out 2>&1 $XM dmesg > $VIRT/xen/xm_dmesg.out 2>&1 $XM vcpu-list > $VIRT/xen/xm_vcpu-list.out 2>&1 for myHost in $($XM list 2>/dev/null | egrep -v "VCPUs |^Domain-0") do $XM network-list $myHost > $VIRT/xen/xm_network-list_${myHost}.out 2>&1 $XM uptime $myHost > $VIRT/xen/xm_uptime_${myHost}.out 2>&1 $VIRSH dominfo $myHost > $VIRT/xen/virsh_dominfo_${myHost}.out 2>&1 done fi fi } ############################################################################## # # Function : libvirt_info # Parameters : # Output : # Notes : Virt-manager type information # ############################################################################## function libvirt_info { if [ -x $VIRSH ] ; then Echo "Section - libvirt Section " MakeDir ${VIRT}/libvirt MakeDir ${VIRT}/vm_configs $VIRSH list --all > ${VIRT}/libvirt/virsh_list_--all.out 2>&1 $VIRSH net-list --all > ${VIRT}/libvirt/virsh_net-list_--all.out 2>&1 $VIRSH -c qemu:///system capabilities \ > ${VIRT}/libvirt/virsh_-c_qemu:___system_capabilities.out 2>&1 # Next Dump out all the running configs for each of the VMs List=$( $VIRSH list --all 2>/dev/null | egrep -v "State|^-" | awk '{print $2}' | sed '/^$/d') for i in $List do $VIRSH dumpxml $i > ${VIRT}/vm_configs/${i}.xml 2>&1 done fi } ############################################################################## # # Function : docker_info # Parameters : # Output : # Notes : docer information # ############################################################################## function docker_info { if [ -x $DOCKER ] ; then Echo "Section - Docker" DockerDir=${VIRT}/docker MakeDir $DockerDir $DOCKER ps > $DockerDir/docker_ps.out 2>&1 $DOCKER ps -a > $DockerDir/docker_ps_-a.out 2>&1 $DOCKER ps -l > $DockerDir/docker_ps_-l.out 2>&1 $DOCKER images > $DockerDir/images.out 2>&1 # $DOCKER events > $DockerDir/images.out 2>&1 for containerID in $($DOCKER ps -l | grep -v STATUS | awk '{print $1}' ) do $DOCKER inspect $containerID > $DockerDir/docker_inspect_${containerID}.out 2>&1 $DOCKER port $containerID > $DockerDir/docker_port_${containerID}.out 2>&1 $DOCKER logs $containerID > $DockerDir/docker_logs_${containerID}.out 2>&1 done for imageID in $($DOCKER ps -l | grep -v STATUS | awk '{print $1}' ) do $DOCKER history $imageID > $DockerDir/docker_history_${imageID}.out 2>&1 done fi } ############################################################################## # # Function : yp_info # Parameters : # Output : # Notes : Yellow Pages information - not used that much these days # ############################################################################## function yp_info { if [ -x "$YPWHICH" ] ; then Echo "Section - NIS/YP Services " YPDIR=${LOGDIR}/yp MakeDir ${YPDIR} $YPWHICH -m > ${YPDIR}/ypwhich-m.out 2>&1 fi } ############################################################################## # # Function : network_info # Parameters : # Output : # Notes : Collect lots of network information # ############################################################################## function network_info { Echo "Section - Networking " MakeDir ${LOGDIR}/network $IFCONFIG -a > ${LOGDIR}/network/ifconfig_-a.out 2>&1 $NETSTAT -rn > ${LOGDIR}/network/netstat_-rn.out 2>&1 $NETSTAT -lan > ${LOGDIR}/network/netstat_-lan.out 2>&1 $NETSTAT -lav > ${LOGDIR}/network/netstat_-lav.out 2>&1 $NETSTAT -tulpn > ${LOGDIR}/network/netstat_-tulpn.out 2>&1 $NETSTAT -ape > ${LOGDIR}/network/netstat_-ape.out 2>&1 $NETSTAT -uan > ${LOGDIR}/network/netstat_-uan.out 2>&1 $NETSTAT -s > ${LOGDIR}/network/netstat_-s.out 2>&1 $NETSTAT -in > ${LOGDIR}/network/netstat_-in.out 2>&1 $ROUTE -nv > ${LOGDIR}/network/route_-nv.out 2>&1 $ARP -a > ${LOGDIR}/network/arp_-a.out 2>&1 if [ -x "$IP" ] ; then $IP add > ${LOGDIR}/network/ip_add.out 2>&1 $IP route > ${LOGDIR}/network/ip_route.out 2>&1 $IP link > ${LOGDIR}/network/ip_link.out 2>&1 $IP rule > ${LOGDIR}/network/ip_rule.out 2>&1 fi if [ -x "$IWCONFIG" ] ; then $IWCONFIG > ${LOGDIR}/network/iwconfig.out 2>&1 fi if [ -x "${MIITOOL}" ] ; then ${MIITOOL} > ${LOGDIR}/network/mii-tool.out 2>&1 fi if [ -x $BIOSDEVNAME ] ; then $BIOSDEVNAME -d > ${LOGDIR}/network/biosdevname_-d.out 2>&1 fi # # Collect bridging information # if [ -x "${BRCTL}" ] ; then $BRCTL show > ${LOGDIR}/network/brctl_show.out 2>&1 for myBridge in $($BRCTL show | grep -v "STP enabled" | grep ^[a-zA-Z] | awk '{ print $1}') do $BRCTL showmacs $myBridge > ${LOGDIR}/network/btctl_showmacs_${myBridge}.out 2>&1 $BRCTL showstp $myBridge > ${LOGDIR}/network/btctl_showstp_${myBridge}.out 2>&1 done fi } ############################################################################## # # Function : iptables_info # Parameters : # Output : # Notes : Collect iptables information # ############################################################################## function iptables_info { if [ -x "$IPTABLES" ] ; then Echo "Section - iptables check" $IPTABLES -L > ${LOGDIR}/network/iptables-L.out $IPTABLES -t filter -nvL > ${LOGDIR}/network/iptables-t_filter-nvL.out $IPTABLES -t mangle -nvL > ${LOGDIR}/network/iptables-t_mangle-nvL.out $IPTABLES -t nat -nvL > ${LOGDIR}/network/iptables_-t_nat_-nvL.out else echo "no iptables in kernel" > ${LOGDIR}/network/iptables-NO-IP-TABLES fi } ############################################################################## # # Function : ipchains_info # Parameters : # Output : # Notes : ipchains not use much these days - replaced by iptables # ############################################################################## function ipchains_info { if [ -x "$IPCHAINS" ] ; then Echo "Section - ipchains check" $IPCHAINS -L -n > ${LOGDIR}/network/ipchains_-L_-n.out fi } ############################################################################## # # Function : ethtool_info # Parameters : # Output : # Notes : More networking information # ############################################################################## function ethtool_info { if [ -x "$ETHTOOL" ] ; then Echo "Section - ethtool checks" for version in 4 6 do INTERFACES=$( cat /proc/net/dev | grep "[0-9]:" | awk -F: '{print $1 }' ) for i in $INTERFACES do $ETHTOOL $i > ${LOGDIR}/network/ethtool_ipv${version}_${i}.out 2>&1 $ETHTOOL -i $i >> ${LOGDIR}/network/ethtool_ipv${version}_-i_${i}.out 2>&1 $ETHTOOL -S $i >> ${LOGDIR}/network/ethtool_ipv${version}_-S_${i}.out 2>&1 done done fi } ############################################################################## # # Function : redhat_cluster_info # Parameters : # Output : # Notes : Collect information about Redhat Cluster # ############################################################################## function redhat_cluster_info { if [ -x $CLUSTAT ] ; then Echo "Section - Redhat Cluster checks" MyClusterDir=${CLUSTERDIR}/redhat MakeDir ${CLUSTERDIR}/redhat $CLUSTAT > $MyClusterDir/clustat.out 2>&1 $CLUSTAT -f > $MyClusterDir/clustat_-f.out 2>&1 $CLUSTAT -l > $MyClusterDir/clustat_-l.out 2>&1 $CLUSTAT -I > $MyClusterDir/clustat_-I.out 2>&1 $CLUSTAT -v > $MyClusterDir/clustat_-v.out 2>&1 $CLUSTAT -x > $MyClusterDir/clustat_-x.out 2>&1 $CLUSVCADM -v > $MyClusterDir/clusvcadm_-x.out 2>&1 $CLUSVCADM -S > $MyClusterDir/clusvcadm_-S.out 2>&1 # # List out Quorum devices and CMAN_TOOL # if [ -x $MKQDISK ] ; then $MKQDISK -L >> $MyClusterDir/mkqdisk_-L.out 2>&1 fi # added by Ruggero Ruggeri if [ -x $CMAN_TOOL ] ; then $CMAN_TOOL status >> $MyClusterDir/cman_tool_status.out 2>&1 $CMAN_TOOL nodes >> $MyClusterDir/cman_tool_nodes.out 2>&1 fi fi } ############################################################################## # # Function : veritas_cluster_info # Parameters : # Output : # Notes : Collect information about Veritas Cluster # ############################################################################## function veritas_cluster_info { if [ -d /opt/VRTSvcs/bin ] ; then PATH=$PATH:/opt/VRTSvcs/bin fi if [ -f /etc/VRTSvcs/conf/config/main.cf ] ; then Echo "Section - Veritas Cluster Checks" VCSDIR=${CLUSTERDIR}/veritas MakeDir ${VCSDIR} if [ -d /var/VRTSvcs/log ] ; then MakeDir ${LOGDIR}/var/VRTSvcs/log $CP -p /var/VRTSvcs/log/* ${LOGDIR}/var/VRTSvcs/log fi $HASTATUS -sum > ${VCSDIR}/hastatus_-sum.out 2>&1 $HARES -list > ${VCSDIR}/hares_-list.out 2>&1 $HAGRP -list > ${VCSDIR}/hagrp_-list.out 2>&1 $HATYPE -list > ${VCSDIR}/hatype_-list.out 2>&1 $HAUSER -list > ${VCSDIR}/hauser_-list.out 2>&1 $LLTSTAT -vvn > ${VCSDIR}/lltstat_-vvn.out 2>&1 $GABCONFIG -a > ${VCSDIR}/gabconfig_-a.out 2>&1 if [ -f /etc/VRTSvcs/conf/config/main.cf ] ; then $HACF -verify /etc/VRTSvcs/conf/config/main.cf > ${VCSDIR}/hacf-verify.out 2>&1 fi fi } ############################################################################## # # Function : pacemake_cluster_info # Parameters : # Output : # Notes : Pacemaker cluster information collection # ############################################################################## function pacemake_cluster_info { if [ -x $CRM_MON ] ; then Echo "Section - CRM Cluster checks" CRMDIR=${CLUSTERDIR}/crm MakeDir ${CRMDIR} $CRM_MON --version > ${CRMDIR}/crm_mon_--version.out if [ -x $CRM ] ; then $CRM status > ${CRMDIR}/crm_status.out $CRM configure show > ${CRMDIR}/crm_configure_show.out $CRM configure show xml > ${CRMDIR}/crm_configure_show_xml.out $CRM ra classes > ${CRMDIR}/crm_ra_classes.out $CRM ra list ocf heartbeat > ${CRMDIR}/crm_ra_list_ocf_heartbeat.out $CRM ra list ocf pacemaker > ${CRMDIR}/crm_ra_list_ocf_pacemaker.out fi if [ -x $CRM_VERIFY ] ; then $CRM_VERIFY -L > ${CRMDIR}/crm_verify_-L.out fi if [ -x $CIBADMIN ] ; then $CIBADMIN -Ql > ${CRMDIR}/cibadmin_-Ql.out fi fi } ############################################################################## # # Function : printing_info # Parameters : # Output : # Notes : Collectin information about print jobs and printers # ############################################################################## function printing_info { Echo "Section - Printer Checks" PRINTDIR=${LOGDIR}/lp MakeDir ${PRINTDIR} MakeDir ${PRINTDIR}/general if [ -x $LPSTAT ] ; then $LPSTAT -t > ${PRINTDIR}/lpstat_-t.out 2>&1 fi if [ -x $LPC ] ; then $LPC status > ${PRINTDIR}/lpstat_status.out 2>&1 fi $LPQ > ${PRINTDIR}/general/lpq.out 2>&1 if [ -x $LPQ_CUPS ] ; then $LPQ_CUPS > ${PRINTDIR}/lpq.cups.out 2>&1 fi } ############################################################################## # # Function : postfix_info # Parameters : # Output : # Notes : Collect information about postfix # ############################################################################## function postfix_info { if [ -d /etc/postfix ] ; then Echo "Section - Postfix " POSTDIR=${LOGDIR}/etc/postfix MakeDir $POSTDIR POSTTOPDIR=${LOGDIR}/mail/postfix MakeDir $POSTTOPDIR $POSTCONF -v > ${POSTTOPDIR}/postconf_-v.out 2>&1 $POSTCONF -l > ${POSTTOPDIR}/postconf_-l.out 2>&1 fi } ############################################################################## # # Function : exim_info # Parameters : # Output : # Notes : Collect information about exim # ############################################################################## function exim_info { if [ -d /etc/exim ] ; then Echo "Section - Exim checks" EXIMTOPDIR=${LOGDIR}/mail/exim MakeDir $EXIMTOPTDIR $EXIM -bV > ${LOGDIR}/mail/exim/exim_-bV.out $EXIM -bp > ${LOGDIR}/mail/exim/exim_-bp.out fi } ############################################################################## # # Function : dovecot_info # Parameters : # Output : # Notes : Collect information about dovecote # ############################################################################## function dovecot_info { if [ -d /etc/dovecot ] ; then Echo "Section - Dovecot checks" DOVETOPDIR=${LOGDIR}/mail/dovecot MakeDir $DOVETOPTDIR $DOVECOTE -a > ${LOGDIR}/mail/dovecot/dovecote_-a.out fi } ############################################################################## # # Function : time_info # Parameters : # Output : # Notes : General time information # ############################################################################## function time_info { Echo "Section - NTP" TIMEDIR=${LOGDIR}/etc/time MakeDir ${TIMEDIR} $DATE > ${TIMEDIR}/date if [ -f /usr/share/zoneinfo ] ; then $CP -p /usr/share/zoneinfo ${TIMEDIR}/zoneinfo fi if [ -x $HWCLOCK ] ; then $HWCLOCK --show > ${TIMEDIR}/hwclock_--show.out fi if [ -x $NTPQ ] ; then $NTPQ -p > ${TIMEDIR}/ntpq_-p.out 2>&1 fi } ############################################################################## # # Function : apache_info # Parameters : # Output : # Notes : Collect any Apache Files # ############################################################################## function apache_info { if [ -d /etc/httpd ] ; then APACHEDIR=${LOGDIR}/httpd else APACHEDIR=${LOGDIR}/apache fi if [ ! -d $APACHEDIR ] ; then Echo "Section - Apache" MakeDir ${APACHEDIR} fi if [ -x $APACHECTL ] ; then $APACHECTL status > ${APACHEDIR}/apachectl_status.out 2>&1 fi if [ -x $APACHE2CTL ] ; then $APACHE2CTL status > ${APACHEDIR}/apache2ctl_status.out 2>&1 fi } ############################################################################## # # Function : samba_info # Parameters : # Output : # Notes : Collect some SAMBA information ( needs updating for Samba4) # ############################################################################## function samba_info { Echo "Section - Samba" SAMBADIR=${LOGDIR}/hardware/disks/samba if [ ! -d ${SAMBADIR} ] ; then MakeDir ${SAMBADIR} fi if [ -x $TESTPARM ] ; then echo "y" | $TESTPARM > ${SAMBADIR}/testparm.out 2>&1 fi if [ -x $WBINFO ] ; then $WBINFO -g > ${SAMBADIR}/wbinfo_-g.out 2>&1 $WBINFO -u > ${SAMBADIR}/wbinfo_-g.out 2>&1 fi if [ -x $PDBEDIT ] ; then $PDBEDIT -L ${SAMBADIR}/pdbedit_-L.out 2>&1 fi } ############################################################################## # # Function : x11_info # Parameters : # Output : # Notes : X11 # ############################################################################## function x11_info { Echo "Section - X11" XDIR=${LOGDIR}/X MakeDir $XDIR if [ -x $SYSP ] ; then $SYSP -c > ${XDIR}/sysp_-c.out $SYSP -s mouse > ${XDIR}/sysp_-s_mouse.out $SYSP -s keyboard > ${XDIR}/sysp_-s_keyboard.out fi if [ -x $_3DDIAG ] ; then $_3DDIAG > ${XDIR}/3Ddiag.out fi } ############################################################################## # # Function : taritup_info # Parameters : # Output : # Notes : tar up all the files that are going to be sent to support # ############################################################################## function taritup_info { if [ "$CWDIR" != "" ] ; then cd $CWDIR else cd $LOGDIR fi $TAR czf ${TARFILE} . > /dev/null 2>&1 if [ $? -ne 0 ] ; then if [ -x $LOGGER ] ; then $LOGGER -s "[ERROR]: creating the linux-explorer $TARFILE" else echo "[ERROR]: creating the linux-explorer $TARFILE" fi exit 1 fi if [ -t 0 ] ; then Sum=$($MD5SUM ${TARFILE} | $AWK '{print $1}' ) echo echo "A support file has been created for support purposes" echo echo echo "The MD5sum is : $Sum" echo "The Support File is : ${TARFILE}" echo echo "Please send this file and the MD5sum details to your support representative. " echo fi } ############################################################################## # # Function : RemoveDir # Parameters : None # Output : None # Notes : Remove directories # ############################################################################## function RemoveDir { local myDIR=$1 if [ -d "$myDIR" ] ; then if [[ "${myDIR}" != "/" && \ "${myDIR}" != "/var" && \ "${myDIR}" != "/usr" && \ "${myDIR}" != "/home" ]] ; then if [ ${VERBOSE} -gt 0 ] ; then Echo "Removing Old Directory : ${myDIR}" fi $RM -rf ${myDIR} fi fi } ############################################################################## # # Function : System_Info # Parameters : None # Output : None # Notes : Print out brief information about the system # ############################################################################## function System_Info { if [ ! -t 0 ] ; then return fi if [ -f $EXPLCFG ] ; then Echo "Section - Found $EXPLCFG file" # Customer Contact Name NAME=$(grep ^EXP_USER_NAME $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) # Customer Name COMPANY=$(grep ^EXP_CUSTOMER_NAME $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) # Customer Contact Phone Number TELEPHONE=$(grep ^EXP_PHONE $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) # Customer Contact Email EMAIL=$(grep ^EXP_USER_EMAIL $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) # Customer Contact City CITY=$(grep ^EXP_ADDRESS_CITY $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) # Customer Contact Country COUNTRY=$(grep ^EXP_ADDRESS_COUNTRY $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) # Customer Contact Zip ZIPCODE=$(grep ^EXP_ADDRESS_ZIP $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) # Where LINUXexplo output should be mailed SUPPORT=$(grep ^EXP_EMAIL $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' ) else echo echo "$MYNAME - $MYVERSION" echo echo "This program will gather system information and can take several" echo "minutes to finish." echo echo "You must complete some questions before start." echo "It will produce a .tgz or .tgz.gpg file output and a directory" echo "on your /opt/LINUXexplo/linux/ directory". echo echo "Please follow the support instruction for submit this information" echo "For contact the support please send a email to <$SUPPORT>" echo echo "**********************************************************************" echo "Personal information" echo "**********************************************************************" read -p "Company : " COMPANY read -p "Your name : " NAME read -p "Email : " EMAIL read -p "Telephone : " TELEPHONE read -p "City : " CITY read -p "Zipcode : " ZIPCODE read -p "Country : " COUNTRY echo echo "**********************************************************************" echo "System information" echo "**********************************************************************" read -p "Problem description : " PROBLEM read -p "System description : " SYSTEM read -p "Environment (test/dev/prod) : " ENVIRONMENT echo read -p "Are you sure to continue? (Y/n) : " REPLY if [[ "$REPLY" = [Yy] ]]; then Echo "Starting support gathering process." else Echo "Aborting." exit 0 fi fi systemPlatform=$($UNAME -m) kernelVersion=$($UNAME -r) Mem=$(cat /proc/meminfo | grep ^MemTotal: | awk '{print $2}') MEMINFO=$(echo $(($Mem / 1000000))) if [ -x $LSB_RELEASE ] ; then LSB_RELEASE_INFO=$(${LSB_RELEASE} -a ) else LSB_RELEASE_INFO="Could not find LSB_RELEASE info" fi if [ -x $DMIDECODE ] ; then SYSTEM=$($DMIDECODE -t 1 | grep "Product Name:" | awk -F\: '{print $2}') else SYSTEM="Unknown" fi /bin/cat <<- EOF > /tmp/README ----------------------------------------------------------------------------- $MYNAME - $MYVERSION ----------------------------------------------------------------------------- This directory contains system configuration information. Information was gathered on $MYDATE Contact support made by: $NAME from $COMPANY ----------------------------------------------------------------------------- CONTACT INFORMATION ----------------------------------------------------------------------------- Company : $COMPANY Name : $NAME Email : $EMAIL Telephone : $TELEPHONE City : $CITY Zipcode : $ZIPCODE Country : $COUNTRY ---------------------------------------------------------------------------- SYSTEM INFORMATION ---------------------------------------------------------------------------- Date : $MYDATE Command Line : $0 $@ Hostname : $MYHOSTNAME Host Id : ${HOSTID} System type : $SERVER System platform : $systemPlatform Kernel Version : $kernelVersion Server Memory : ${MEMINFO}GB Environment : $ENVIRONMENT System description : $SYSTEM Problem description: $PROBLEM ---------------------------------------------------------------------------- $LSB_RELEASE_INFO ---------------------------------------------------------------------------- Uptime: $(${UPTIME}) swapon -s: $($SWAPON -s | $GREP -v "Filename") vmstat: $($VMSTAT 2 5 | $SED '1d' | $COLUMN -t 2> /dev/null ) df: $($DF -h ) Network: $($IFCONFIG -a ) ---------------------------------------------------------------------------- EOF # Create support information so we don't have to ask the customer each time. if [ ! -f $EXPLCFG ] ; then cat <<- EOF > $EXPLCFG # Customer Contact Name EXP_USER_NAME="$NAME" # Customer Name EXP_CUSTOMER_NAME="$COMPANY" # Customer Contact Phone Number EXP_PHONE="$TELEPHONE" # Customer Contact Email EXP_USER_EMAIL="$EMAIL" # Customer Contact City EXP_ADDRESS_CITY="$CITY" # Customer Contact Country EXP_ADDRESS_COUNTRY="$COUNTRY" # Customer Contact Zip EXP_ADDRESS_ZIP="$ZIPCODE" # Where LINUXexplo output should be mailed EXP_EMAIL="$SUPPORT" # Default list of modules to run EXP_WHICH="all" EOF fi } ############################################################################## # # Function : copy_etc # Parameters : # Output : # Notes : Make a copy of the /etc directory so that we have all files # ############################################################################## function copy_etc { Echo "Section - Copy etc" if [ ! -d "${LOGDIR}/etc" ]; then MakeDir "${LOGDIR}/etc" $CP -Rp /etc/* ${LOGDIR}/etc/ if [ -f ${LOGDIR}/etc/shadow ] ; then $RM -f ${LOGDIR}/etc/shadow fi fi } ############################################################################## # # Function : Installation_details # Parameters : None # Output : None # Notes : Collection information about installation # ############################################################################## function installation_details { Echo "Section - Installation info" if [ -f "/root/anaconda-ks.cfg" ]; then MakeDir "${LOGDIR}/system/Installation" $CP -p "/root/anaconda-ks.cfg" ${LOGDIR}/system/Installation/anaconda-ks.cfg fi } ############################################################################## # MAIN ############################################################################## # # Ensure that we are the root user # if [ ${UID} -ne 0 ] ; then echo echo "ERROR: Sorry only the root user can run this script" echo exit 1 fi # Remove any temporary files we create trap '$RM -f $TMPFILE >/dev/null 2>&1; exit' 0 1 2 3 15 ############################################################################## # Check the command line options ############################################################################## while getopts ":d:k:t:vhV" OPT do case "$OPT" in d) if [ $OPTARG = "/" ] ; then echo "ERROR: root directory selected as target! " echo "Exiting." exit 1 elif [ $OPTARG != "" ] ; then TOPDIR=${OPTARG%%/} echo "DEBUG: TOPDIR <$TOPDIR>" CWDIR=$(pwd) fi ;; k) KEEPFILES="1" ;; t) CHECKTYPE="$OPTARG" # echo "DEBUG: checktype : $CHECKTYPE" ;; v) VERBOSE="1" ;; D) DEBUG="1" ;; s) FULLSOFT="1" ;; h) ShowUsage ;; V) echo echo "LINUXexplo Version : $MYVERSION" echo exit 0 ;; esac done if [ ${VERBOSE} -gt 0 ] ; then if [ -t 0 ] ; then tput clear fi fi LOGTOP="${TOPDIR}/linux" LOGDIR="${LOGTOP}/explorer.${HOSTID}.${MYSHORTNAME}-${MYDATE}" TARFILE="${LOGDIR}.tar.gz" NOTFNDLOG="${LOGDIR}/command_not_found.out" CLUSTERDIR=${LOGDIR}/clusters if [ ! -d $LOGDIR ] ; then /bin/mkdir -p $LOGDIR fi # find ALL my commands for this script findCmds System_Info Echo "Creating Explorer Directory : $LOGDIR" RemoveDir ${LOGTOP} # echo "LOGDIR : \"${TOPDIR}/linux/${MYHOSTNAME}-${DATE}/output\" " # make sure this is a linux system if [ "$($UNAME -s)" != "Linux" ] ; then echo "ERROR: This script is only for Linux systems " exit 1 fi # Make the directory I'm going to store all the files if [ ! -d $LOGDIR ] ; then MakeDir $LOGDIR fi if [ -f /tmp/README ] ; then mv /tmp/README ${LOGDIR}/README fi echo "$MYVERSION" > ${LOGDIR}/rev copy_etc myselection "$CHECKTYPE" taritup_info # Remove all the files tared up in $LOGDIR ( except tar file ) if [ $KEEPFILES -eq 1 ] ; then RemoveDir ${LOGDIR} fi ############################################################################## # That's ALL Folks !!! ##############################################################################
No comments:
Post a Comment