#!/bin/bash ############################################################################## # # # FILE : linux-explorer.sh # Last Change Date : 04-07-2016 # 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. # ############################################################################## MYVERSION="0.210" LICENSE="GLPv2" 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 ) 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 smartctl ) 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 2>&1 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/cat_proc-mounts.out 2>&1 # Display any quotas that my have been set if [ -x $REPQUOTA ] ; then $REPQUOTA -av > ${LOGDIR}/hardware/disks/repquota_-av 2>&1 fi ############################################################################## # 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 $LSBLK -a > ${LOGDIR}/hardware/disks/lsblk_-a.out 2>&1 $LSBLK -p > ${LOGDIR}/hardware/disks/lsblk_-p.out 2>&1 $LSBLK -t > ${LOGDIR}/hardware/disks/lsblk_-t.out 2>&1 $LSBLK -S > ${LOGDIR}/hardware/disks/lsblk_-S.out 2>&1 $LSBLK --list > ${LOGDIR}/hardware/disks/lsblk_--list.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/\//-/g' | sed 's/^-//'g ) if [ -x $HDPARM ] ; then $HDPARM -vIi $DISK > ${LOGDIR}/hardware/disks/hdparm_-vIi_${NEWDISK}.out 2>&1 fi if [ -x $SFDISK ] ; then $SFDISK -l $DISK > ${LOGDIR}/hardware/disks/sfdisk_-l_${NEWDISK}.out 2>&1 fi if [ -x $FDISK ] ; then $FDISK -l $DISK > ${LOGDIR}/hardware/disks/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 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 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 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 $2}' ) do containerIDName=$( echo $containerID | sed 's/\//_/g') $DOCKER inspect $containerID > $DockerDir/docker_inspect_${containerIDName}.out 2>&1 $DOCKER port $containerID > $DockerDir/docker_port_${containerIDName}.out 2>&1 $DOCKER logs $containerID > $DockerDir/docker_logs_${containerIDName}.out 2>&1 done for imageID in $($DOCKER ps -l | grep -v STATUS | awk '{print $2}' ) do imageIDName=$( echo $imageID | sed 's/\//_/g') $DOCKER history $imageID > $DockerDir/docker_history_${imageIDName}.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 !!! ##############################################################################