collect linux info

Upload: mai-le-khanh

Post on 23-Feb-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 Collect Linux Info

    1/61

    #!/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 serverMYHOSTNAME=$(/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 directoryCHECKTYPE="" # Nothing selectedCWDIR="" #

    VERBOSE=0 # Set to see the scripts progress used # only if connected to a terminal sessi

    on.

  • 7/24/2019 Collect Linux Info

    2/61

    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:$PATHexport 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 :#

  • 7/24/2019 Collect Linux Info

    3/61

    ##############################################################################

    function MakeDir{

    myDir="$1"

    if [ ! -d $myDir ] ; then$MKDIR -p $myDirif [ $? -ne 0 ] ; then

    echo "ERROR: Creating directory $LOGDIR"exit 1

    fielse

    $CHMOD 750 $myDirfi

    }

    ################################################################################ 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_infoveritas_cluster_infopacemake_cluster_info

    }

    ################################################################################ Function : disk_functions# Parameters :# Output :# Notes :###############################################################################

  • 7/24/2019 Collect Linux Info

    4/61

    function disk_functions{

    MakeDir ${LOGDIR}/hardware/disksMakeDir ${LOGDIR}/hardware/disks/raid

    disk_infobrtfs_infolvm_infozfs_infofilesystem_inforaid_infodisk_dm_infonfs_infoemc_powerpath_infonetapp_infoveritas_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_checksdisk_functions

    network_functions

    }

    ################################################################################ Function : log_functions# Parameters :# Output :

  • 7/24/2019 Collect Linux Info

    5/61

    # Notes :###############################################################################

    function log_functions{

    MakeDir ${LOGDIR}/logs

    selinux_infosystem_logs_infoproc_sys_info

    }

    ################################################################################ Function : network_functions# Parameters :# Output :# Notes :###############################################################################

    function network_functions{

    MakeDir ${LOGDIR}/networks

    network_infoiptables_infoipchains_infoethtool_infoyp_info

    }

    ###############################################################################

    # Function : software_functions# Parameters :# Output :# Notes :###############################################################################

    function software_functions{

    MakeDir ${LOGDIR}/software

    rpm_info

    deb_infopacman_infosuse_zypper_infogentoo_pkgs_infospacewalk_inforhn_infosamba_infoapache_info

    }

  • 7/24/2019 Collect Linux Info

    6/61

    ################################################################################ Function : virt_functions# Parameters :# Output :# Notes :###############################################################################

    function virt_functions{

    MakeDir ${LOGDIR}/virtualVIRT=${LOGDIR}/virtual

    xen_infolibvirt_infodocker_info

    }

    ###############################################################################

    # Function : general_functions# Parameters :# Output :# Notes :###############################################################################

    function general_functions{

    # Create the default directories I'm going to use.MakeDir ${LOGDIR}/bootMakeDir ${LOGDIR}/clusters

    MakeDir ${LOGDIR}/etcMakeDir ${LOGDIR}/hardwareMakeDir ${LOGDIR}/hardware/disksMakeDir ${LOGDIR}/lpMakeDir ${LOGDIR}/logsMakeDir ${LOGDIR}/mailMakeDir ${LOGDIR}/systemMakeDir ${LOGDIR}/softwareMakeDir ${LOGDIR}/varMakeDir ${LOGDIR}/virtual

    system_logs_infoprinting_info

    postfix_infoexim_infodovecot_infotime_infoapache_infosamba_infox11_info

    }

  • 7/24/2019 Collect Linux Info

    7/61

    ################################################################################ Function : myselection# Parameters :# Output :# Notes :###############################################################################

    function myselection{

    mywhichfindCmdssystemd_infoperformance_infoinstallation_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\" "

  • 7/24/2019 Collect Linux Info

    8/61

    config_functionscluster_functionsdisk_functionshardware_functionslog_functionsnetwork_functionsvirt_functionssoftware_functionsgeneral_functions;;

    esac

    }

    ################################################################################ Function : Usage#

    # Notes : N/A###############################################################################

    function ShowUsage{

    #------------------------------------------------------------------- # Show help message #-------------------------------------------------------------------

    echoecho "$MYNAME Version $MYVERSION - $COPYRIGHT "

    echoecho " usage: $MYNAME [option] "echoecho " -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"echoexit 1

    }

    ################################################################################ Function : Echo# Parameters : String to display what function is about to run

  • 7/24/2019 Collect Linux Info

    9/61

    # Output : Print what section we are about to collect data for# Notes : N/A###############################################################################

    function Echo (){

    if [ -t 0 ] ; then

    if [ ${VERBOSE} -ne 0 ] ; thenecho "[*] $*"echo "============================================="

    fi

    if [ ${VERBOSE} -gt 1 ] ; thenecho "Press Return to Continue.........."read A

    fifi

    }

    ################################################################################ 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" = "" ] ; thenreturn

    fi

    local mypath=$(which $command 2>/dev/null)

    if [ "$mypath" = "" ] ; thenecho "Command $command not found" >> $NOTFNDLOGecho "NOT_FOUND"

    elif [ ! -x "$mypath" ] ; thenecho "Command $command not executable" >> $NOTFNDLOGecho "NOT_FOUND"

    elseecho "$mypath"

    fi

  • 7/24/2019 Collect Linux Info

    10/61

    }

    ################################################################################ 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 ] ; thenecho "[*] 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 )

  • 7/24/2019 Collect Linux Info

    11/61

    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 )

  • 7/24/2019 Collect Linux Info

    12/61

    # 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 ToolsSAN_UTIL_DIR=/opt/netapp/santoolsSAN_UTIL_PROG=sanlunSANLUN=$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 )

  • 7/24/2019 Collect Linux Info

    13/61

    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 )

  • 7/24/2019 Collect Linux Info

    14/61

    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)

  • 7/24/2019 Collect Linux Info

    15/61

    MakeDir ${LOGDIR}${Dirname}

    if [ -e "$i" ] ; then

    if [[ -t 0 && ${VERBOSE} -ne 0 ]] ; then spinningCursor

    fi

    $CAT "$i" > ${LOGDIR}${Dirname}/${Filename} 2>&1fi

    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 collectionNETBACKUPDIR="/usr/openv/netbackup"

    if [ ! -d $NETBACKUPDIR ] ; thenNBACKUPDIR=${LOGDIR}/backups/netbackupMakeDir $NBACKUPDIR

    elsereturn

    fi

    PATH=$PATH:$NETBACKUPDIRexport PATH

    bpstulist -L >> $NBACKUPDIR/bpstulist_-L.out

    bppllist > $NBACKUPDIR/bppllist.out

    cat $NBACKUPDIR/bppllist.out | while read linedo

    bppllist $line -U > $NBACKUPDIR/bppllist_${line}_-U.out

  • 7/24/2019 Collect Linux Info

    16/61

    done

    bpps -a > $NBACKUPDIR/bpps_-a.outbpconfig -l > $NBACKUPDIR/bpconfig_-l.outbpconfig -L > $NBACKUPDIR/bpconfig_-L.outvmquery -a > $NBACKUPDIR/vmquery_-a.outtpconfig -d > $NBACKUPDIR/tpconfig_-d.outbpmedia > $NBACKUPDIR/bpmedia.outbpmedialist > $NBACKUPDIR/bpmedialist.outavailable_media > $NBACKUPDIR/available_media.out

    bperror -U -backstat -hoursago 48 > $NBACKUPDIR/bperror_-U_-backstat_-hoursago_48.out

    MakeDir $NBackupDir/configscp /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.out2>&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 linedo

    Bus=$(/bin/echo $line 2>/dev/null | awk '{ print $1 }')$LSPCI -vv -s $Bus > ${LOGDIR}/hardware/lspci/lspci_-vv_

    -s_${Bus}.out 2>&1done

    fi

  • 7/24/2019 Collect Linux Info

    17/61

    # Get the port names from the HDA cardsfor i in /sys/class/scsi_host/host*/device/fc_host\:host*/port_namedo

    if [ -f $i ] ; thenname=$( echo $i | sed 's/\//_/g' | sed 's/^_//g')echo "Port Name : $(cat $i )" >> ${LOGDIR}/hardware/lspc

    i/cat_${name}.outfi

    done

    # Get a listing of the /dev directoryMakeDir ${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>&1fi

    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 listif [ -x "$LSHAL" ] ; then

    $LSHAL > ${LOGDIR}/hardware/lshal.outfi

    if [ -x /usr/share/rhn/up2date_client/hardware.py ] ; then/usr/share/rhn/up2date_client/hardware.py > ${LOGDIR}/hardware/h

    ardware.py.out 2>&1fi

    if [ -x "$SMARTCTL" ] ; thenfor 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' )

  • 7/24/2019 Collect Linux Info

    18/61

    ${SMARTCTL} -a $device 2>/dev/null 1> ${LOGDIR}/hardware/smartctl-a_${name}.out

    donefi

    ##############################################################################

    # 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_--framebuffe

    r.out 2>&1fi

    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.out2>&1

    $CAT /proc/meminfo > ${LOGDIR}/hardware/proc_meminfo.out2>&1

    $CAT /proc/mdstat > ${LOGDIR}/hardware/proc_mdstat.out2>&1

    $CAT /proc/interrupts > ${LOGDIR}/hardware/proc_interrupts.out2>&1

    $CAT /proc/filesystem > ${LOGDIR}/hardware/proc_filesystems.out2>&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

  • 7/24/2019 Collect Linux Info

    19/61

    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/grubMakeDir ${LOGDIR}/softwareMakeDir ${LOGDIR}/system

    for i in /boot/grub/menu.lst /boot/grub/grub.conf \ /boot/grub.conf /boot/grub/device.map

    doif [ -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_--f

    ull_--nopager

  • 7/24/2019 Collect Linux Info

    20/61

    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.outfi

    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.outfi

    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.outulimit -a > ${LOGDIR}/system/ulimit_-a.out

    if [ -x $VMSTAT ] ; then$VMSTAT -s > ${LOGDIR}/system/performance/vmstat_-s

    .outfi

    if [ "$LSOF" != "" ] ; then$LSOF > ${LOGDIR}/system/lsof.out 2>&1

    fi

  • 7/24/2019 Collect Linux Info

    21/61

    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.o

    utfi

    }

    ################################################################################ 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 ] ; thenMakeDir ${LOGDIR}/kernel/infofi

    $LSMOD > ${LOGDIR}/kernel/lsmod.out 2>&1

    $LSMOD | while read linedo

    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.out2>&1

  • 7/24/2019 Collect Linux Info

    22/61

    $DEPMOD -av > ${LOGDIR}/kernel/depmod_-av.out2>&1

    $CAT /proc/modules > ${LOGDIR}/kernel/modules.out2>&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.out2>&1

    # Display any quotas that my have been set$REPQUOTA -av > ${LOGDIR}/hardware/disks/repquota_-av 2>&1

  • 7/24/2019 Collect Linux Info

    23/61

    ##############################################################################

    # 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>&1fi

    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 $DISKLISTdo

    Dirname=$(dirname $DISK)

    if [ "$Dirname" = "/dev/mapper" ] ; then

    if [ ! -L $DISK ] ; thencontinue

    fifi

    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/${NEW

    DISK}/sfdisk_-l_${NEWDISK}.out 2>&1fi

    if [ -x $FDISK ] ; then

  • 7/24/2019 Collect Linux Info

    24/61

    $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 $PARTSdo

    name=$(/bin/echo $parts | sed 's/\//_/g')$DUMPE2FS $parts > ${LOGDIR}/hardware/disks/dumpe

    2fs/fdisk_-l_${name}.out 2>&1done

    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

    fidone

    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

  • 7/24/2019 Collect Linux Info

    25/61

    fidone

    fi

    if [ -x $SYSTOOL ] ; then$SYSTOOL -c scsi_host -v > ${LOGDIR}/hardware/disks/systool_-c_

    scsi_host_-v.out 2>&1fi

    ##############################################################################

    # 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" ] ; thenMakeDir ${LOGDIR}/hardware/disks/dmsetup$DMSETUP ls > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_l

    s.out 2>&1$DMSETUP ls --tree > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_l

    s--info.out 2>&1$DMSETUP info > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_i

    nfo.out 2>&1$DMSETUP info > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_i

    nfo-C.out 2>&1

    $DMSETUP deps > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_deps.out 2>&1$DMSETUP targets > ${LOGDIR}/hardware/disks/dmsetup/dmsetup_t

    argets.out 2>&1

    fi

    # Check to see what iscsi devices haveif [ -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#

  • 7/24/2019 Collect Linux Info

    26/61

    ##############################################################################

    function emc_powerpath_info{

    Echo "Section - EMC Powerpath checks"

    if [ ! -d ${LOGDIR}/hardware/disks/emcpower ] ; thenMakeDir ${LOGDIR}/hardware/disks/emcpower

    fi

    EMCPOWER=${LOGDIR}/hardware/disks/emcpower

    # Check to see what emc powerpath devices we haveif [ ! -x "$POWERMT" ] ; then

    $ECHO "No $POWERMT Program found" > ${EMCPOWER}/Readme.outreturn

    fi

    $POWERMT check_registration >${EMCPOWER}/powermt_check_registration.out 2>&1

    $POWERMT display path >${EMCPOWER}/powermt_display_pat

    h.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 devicesfor 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>&1done

    }

    ################################################################################ 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}/R

  • 7/24/2019 Collect Linux Info

    27/61

    eadme.outreturn

    fi

    if [ ! -d ${LOGDIR}/hardware/disks/netapp ] ; thenMakeDir ${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 ] ; thenMakeDir ${LOGDIR}/hardware/disks/vxvmMakeDir ${LOGDIR}/hardware/disks/vxvm/logsMakeDir ${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/dis

    ks/vxvm/vxdisk_list.out 2>&1$VXDISK -o alldgs list > ${LOGDIR}/hardware/dis

    ks/vxvm/vxdisk_-o_alldgs_list.out 2>&1

  • 7/24/2019 Collect Linux Info

    28/61

    $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/dis

    ks/vxvm/vxdg_-q_-list.out 2>&1fi

    #------------------------------------------------------------------------

    # 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/vxpr

    int_-hmQqg_4vxmk=${i}.out 2>&1

    $VXPRINT -hmQqg $i \> ${LOGDIR}/hardware/disks/vxvm/disk_groups/vxpr

    int_-hmQqg=${i}.out 2>&1

    done

    fi

    }

    ################################################################################ Function : filesystem_info# Parameters :# Output :# Notes : General Filesystem information#

  • 7/24/2019 Collect Linux Info

    29/61

    ##############################################################################

    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

    fidone

    }

    ################################################################################ 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 exportedif [ -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

  • 7/24/2019 Collect Linux Info

    30/61

    if [ -x "$LSRAID" ] ; thenfor 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>&1done

    fi

    if [ -x "$MDADM" ] ; thenfor i in $( $LS /dev/md[0-9]* 2>/dev/null )do

    name=$( echo $i | sed 's/\//_/g' ) $MDADM --detail $i > ${LOGDIR}/hardware/disks/raid/m

    dadm_--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

    fidone

    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 devicesif [ -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

    doFS=$(echo $line | awk '{print $6}')

    FSN=$( echo $FS | sed 's/\//_/g' )

    if [ "$FS" = "/" ] ; thenFSN="root"

    fi

    $BTRFS filesystem df $FS > ${LOGDIR}/hardware/disks/btrfs/btrfs_filesystem_df_$FSN 2>&1

  • 7/24/2019 Collect Linux Info

    31/61

    $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/zfsMakeDir ${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_$poolnam

    e.out 2>&1$ZPOOL status $poolname > ${ZFSDIR}/zpool_status_$poolna

    me.out 2>&1done

    fi

    }

    ################################################################################ Function : lvm_info# Parameters :# Output :# Notes : Logical Volume Manager - collect details#

  • 7/24/2019 Collect Linux Info

    32/61

    ##############################################################################

    function lvm_info{

    Echo "Section - LVM "

    LVMDIR=${LOGDIR}/hardware/disks/lvmMakeDir ${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>&1fi

    if [ -x "$LVM" ] ; then$LVM dumpconfig > ${LVMDIR}/lvm_dumpconf

    ig.out 2>&1$LVM lvs > ${LVMDIR}/lvm_lvs.out

    2>&1$LVM pvs -o +lv_name,lv_size,seg_all > ${LVMDIR}/pvs_-o_+lv_n

    ame:lv_size:seg_all.out 2>&1fi

    }

    ################################################################################ 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 filesystemgrep dm-[0-9] /proc/diskstats | awk '{print $1, $2, $3}' | while read li

    nedo

  • 7/24/2019 Collect Linux Info

    33/61

    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.outecho "===================================================================================" >> ${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 linedo

    $RPM -qi $line > ${LOGDIR}/software/rpm/rpm-packages/${line}.out 2>&1

    if [ $? -ne 0 ] ; thenecho "ERROR: ${line} problem"

    fi

  • 7/24/2019 Collect Linux Info

    34/61

    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

    fifi

    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 themYUMDIR=${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.out2>&1$YUM -v repolist enabled > ${YUMDIR}/yum_-v_repolist_enabled.ou

    t 2>&1$YUM -v repolist disabled > ${YUMDIR}/yum_-v_repolist_disabled.o

    ut 2>&1fi

    }

    ################################################################################ Function : pacman_info

    # Parameters :# Output :# Notes : Check all packages installed ( used by ArchLinux/OpenFiler )###############################################################################

    function pacman_info{

    if [ -x "$PACMAN" ] ; then

  • 7/24/2019 Collect Linux Info

    35/61

    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 checksif [ -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>&1fi

    # 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/sy

    stemd-loginctl_--all.out 2>&1$SYSTEMDLOGINCTL show-seat > ${LOGDIR}/system/systemd/sy

    stemd-loginctl_show-seat.out 2>&1$SYSTEMDLOGINCTL show-user > ${LOGDIR}/system/systemd/sy

    stemd-loginctl_show_user.out 2>&1fi

    $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

  • 7/24/2019 Collect Linux Info

    36/61

    _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/sy

    stemd/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/statu

    sfi

    MakeDir ${LOGDIR}/software/dpkg

    if [ -x "$DPKG" ] ; then$DPKG --list > ${LOGDIR}/software/dpk

    g/dpkg_--list.out$DPKG -al > ${LOGDIR}/software/dpk

    g/dpkg_-al.out$DPKG --get-selections > ${LOGDIR}/software/dpk

    g/dpkg_-get-selections.outfi

    if [ -x "$DPKG_QUERY" ] ; then$DPKG_QUERY -W > ${LOGDIR}/software/dpk

    g/dpkg-query_-W.outfi

    if [ -x /usr/bin/apt-config ] ; then/usr/bin/apt-config dump > ${LOGDIR}/software/dpk

    g/apt-config_dump.outfi

    fi}

  • 7/24/2019 Collect Linux Info

    37/61

    ################################################################################ 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>&1fi

    }

    ################################################################################ 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

  • 7/24/2019 Collect Linux Info

    38/61

    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

    fifi

    # Show the bootup infoif [ -x $RC_UPDATE ] ; then

    $RC_UPDATE show > ${LOGDIR}/software/gentoo/rc-update_show.outfi

    }

    ################################################################################ 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}_${in

  • 7/24/2019 Collect Linux Info

    39/61

    fo} 2>&1done

    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}/rhnMakeDir ${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

    fifi

    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 ] ; thenfor i in $( $FIND /var/crash -name "*.txt" )

  • 7/24/2019 Collect Linux Info

    40/61

    dodirname="$(dirname $i)"filename="$(basename $i)"

    if [ ! -d ${LOGDIR}/${dirname} ] ; thenMakeDir ${LOGDIR}/${dirname}

    fi

    $CP -p $i ${LOGDIR}/${dirname}/${filename} 2>/dev/null

    donefi

    if [ -x $JOURNALCTL ] ; then$JOURNALCTL --all --no-pager > ${LOGDIR}/logs/journalctl_--all

    _--no-pager.outfi

    }

    ##############################################################################

    ## 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_interfa

    ce_-l.out 2>&1$SEMANAGE boolean -l > ${SELINUXDIR}/semanage_boolean

    _-l.out 2>&1fi

  • 7/24/2019 Collect Linux Info

    41/61

    if [ -x $GETSEBOOL ] ; then$GETSEBOOL -a > ${LOGDIR}/selinux/getsebool_-a.out 2>&1

    elseecho "getsebool not installed " > ${LOGDIR}/selinux/getsebool_-

    a.out 2>&1fi

    }

    ################################################################################ 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.out2>&1

    for myHost in $($XM list 2>/dev/null | egrep -v "VCPUs|^Domain-0")

    do$XM network-list $myHost > $VIRT/xen/xm_n

    etwork-list_${myHost}.out 2>&1$XM uptime $myHost > $VIRT/xen/xm_u

    ptime_${myHost}.out 2>&1$VIRSH dominfo $myHost > $VIRT/xen/virs

    h_dominfo_${myHost}.out 2>&1done

    fifi

    }

    ################################################################################ Function : libvirt_info# Parameters :# Output :

  • 7/24/2019 Collect Linux Info

    42/61

    # Notes : Virt-manager type information###############################################################################

    function libvirt_info{

    if [ -x $VIRSH ] ; then

    Echo "Section - libvirt Section "

    MakeDir ${VIRT}/libvirtMakeDir ${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:___s

    ystem_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 $Listdo

    $VIRSH dumpxml $i > ${VIRT}/vm_configs/${i}.xml 2>&1done

    fi}

    ################################################################################ Function : docker_info# Parameters :# Output :# Notes : docer information###############################################################################

    function docker_info{

    if [ -x $DOCKER ] ; then

    Echo "Section - Docker"

    DockerDir=${VIRT}/dockerMakeDir $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

  • 7/24/2019 Collect Linux Info

    43/61

    # $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>&1done

    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}/ypMakeDir ${YPDIR}

    $YPWHICH -m > ${YPDIR}/ypwhich-m.out 2>&1fi

    }

    ################################################################################ Function : network_info# Parameters :# Output :

  • 7/24/2019 Collect Linux Info

    44/61

    # 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

  • 7/24/2019 Collect Linux Info

    45/61

    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_f

    ilter-nvL.out $IPTABLES -t mangle -nvL > ${LOGDIR}/network/iptables-t_mangle-nvL.out

    $IPTABLES -t nat -nvL > ${LOGDIR}/network/iptables_-t_nat_-nvL.out

    elseecho "no iptables in kernel" > ${LOGDIR}/network/iptables-NO-I

    P-TABLESfi

    }

    ################################################################################ Function : ipchains_info# Parameters :# Output :# Notes : ipchains not use much these days - replaced by iptables###############################################################################

    function ipchains_info{

    if [ -x "$IPCHAINS" ] ; thenEcho "Section - ipchains check"$IPCHAINS -L -n > ${LOGDIR}/network/ipchains_-L_-n.out

    fi}

    ###############################################################################

  • 7/24/2019 Collect Linux Info

    46/61

    # Function : ethtool_info# Parameters :# Output :# Notes : More networking information###############################################################################

    function ethtool_info{

    if [ -x "$ETHTOOL" ] ; then

    Echo "Section - ethtool checks"

    for version in 4 6do

    INTERFACES=$( cat /proc/net/dev | grep "[0-9]:" | awk -F: '{print $1 }' )

    for i in $INTERFACESdo

    $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

    donedone

    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

  • 7/24/2019 Collect Linux Info

    47/61

    $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>&1fi

    # added by Ruggero Ruggeriif [ -x $CMAN_TOOL ] ; then

    $CMAN_TOOL status >> $MyClusterDir/cman_tool_status.out2>&1

    $CMAN_TOOL nodes >> $MyClusterDir/cman_tool_nodes.out2>&1

    fi

    fi}

    ################################################################################ Function : veritas_cluster_info# Parameters :# Output :# Notes : Collect information about Veritas Cluster###############################################################################

    function veritas_cluster_info{

    if [ -d /opt/VRTSvcs/bin ] ; thenPATH=$PATH:/opt/VRTSvcs/binfi

    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

  • 7/24/2019 Collect Linux Info

    48/61

    $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}/h

    acf-verify.out 2>&1fi

    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}/crmMakeDir ${CRMDIR}

    $CRM_MON --version > ${CRMDIR}/crm_mon_--version.out

    if [ -x $CRM ] ; then$CRM status > ${CRMDIR}/crm_status.o

    ut

    $CRM configure show > ${CRMDIR}/crm_configure_show.out$CRM configure show xml > ${CRMDIR}/crm_configur

    e_show_xml.out$CRM ra classes > ${CRMDIR}/crm_ra_class

    es.out$CRM ra list ocf heartbeat > ${CRMDIR}/crm_ra_list_

    ocf_heartbeat.out$CRM ra list ocf pacemaker > ${CRMDIR}/crm_ra_list_

    ocf_pacemaker.outfi

    if [ -x $CRM_VERIFY ] ; then$CRM_VERIFY -L > ${CRMDIR}/crm_verify_-L.out

    fi

    if [ -x $CIBADMIN ] ; then$CIBADMIN -Ql > ${CRMDIR}/cibadmin_-Ql.out

    fifi

    }

  • 7/24/2019 Collect Linux Info

    49/61

    ################################################################################ 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>&1fi

    $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/postfixMakeDir $POSTDIR

    POSTTOPDIR=${LOGDIR}/mail/postfixMakeDir $POSTTOPDIR

  • 7/24/2019 Collect Linux Info

    50/61

    $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/eximMakeDir $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

    }

    ###############################################################################

  • 7/24/2019 Collect Linux Info

    51/61

    # 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 ] ; thenAPACHEDIR=${LOGDIR}/httpd

    else

    APACHEDIR=${LOGDIR}/apachefi

    if [ ! -d $APACHEDIR ] ; then

    Echo "Section - Apache"

    MakeDir ${APACHEDIR}fi

  • 7/24/2019 Collect Linux Info

    52/61

    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} ] ; thenMakeDir ${SAMBADIR}

    fi

    if [ -x $TESTPARM ] ; thenecho "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>&1fi

    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"

  • 7/24/2019 Collect Linux Info

    53/61

    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" != "" ] ; thencd $CWDIR

    elsecd $LOGDIR

    fi

    $TAR czf ${TARFILE} . > /dev/null 2>&1

    if [ $? -ne 0 ] ; then

    if [ -x $LOGGER ] ; then$LOGGER -s "[ERROR]: creating the linux-explorer $TARFIL

    E"else

    echo "[ERROR]: creating the linux-explorer $TARFILE"fi

    exit 1fi

    if [ -t 0 ] ; then

    Sum=$($MD5SUM ${TARFILE} | $AWK '{print $1}' )

    echoecho "A support file has been created for support purposes"echoechoecho "The MD5sum is : $Sum"

  • 7/24/2019 Collect Linux Info

    54/61

    echo "The Support File is : ${TARFILE}"echoecho "Please send this file and the MD5sum details to your suppo

    rt 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 ] ; thenreturn

    fi

    if [ -f $EXPLCFG ] ; then

    Echo "Section - Found $EXPLCFG file"

    # Customer Contact Name

  • 7/24/2019 Collect Linux Info

    55/61

    NAME=$(grep ^EXP_USER_NAME $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' )

    # Customer NameCOMPANY=$(grep ^EXP_CUSTOMER_NAME $EXPLCFG | cut -f2 -d'=' | sed s'/\"//

    g' )

    # Customer Contact Phone NumberTELEPHONE=$(grep ^EXP_PHONE $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' )

    # Customer Contact EmailEMAIL=$(grep ^EXP_USER_EMAIL $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' )

    # Customer Contact CityCITY=$(grep ^EXP_ADDRESS_CITY $EXPLCFG | cut -f2 -d'=' | sed s'/\"//g' )

    # Customer Contact CountryCOUNTRY=$(grep ^EXP_ADDRESS_COUNTRY $EXPLCFG | cut -f2 -d'=' | sed s'/\"

    //g' )

    # Customer Contact ZipZIPCODE=$(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

    echoecho "$MYNAME - $MYVERSION"echoecho "This program will gather system information and can take several"echo "minutes to finish."echoecho "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 "echoecho "******************************************************************

    ****"echo "Personal information"echo "******************************************************************

    ****"read -p "Company : " COMPANYread -p "Your name : " NAMEread -p "Email : " EMAILread -p "Telephone : " TELEPHONEread -p "City : " CITY

    read -p "Zipcode : " ZIPCODEread -p "Country : " COUNTRYechoecho "******************************************************************

    ****"echo "System information"echo "******************************************************************

    ****"read -p "Problem description : " PROBLEMread -p "System description : " SYSTEM

  • 7/24/2019 Collect Linux Info

    56/61

    read -p "Environment (test/dev/prod) : " ENVIRONMENTechoread -p "Are you sure to continue? (Y/n) : " REPLY

    if [[ "$REPLY" = [Yy] ]]; thenEcho "Starting support gathering process."

    elseEcho "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 ] ; thenLSB_RELEASE_INFO=$(${LSB_RELEASE} -a )

    elseLSB_RELEASE_INFO="Could not find LSB_RELEASE info"

    fi

    if [ -x $DMIDECODE ] ; thenSYSTEM=$($DMIDECODE -t 1 | grep "Product Name:" | awk -F\: '{print $2}')

    elseSYSTEM="Unknown"

    fi

    /bin/cat

  • 7/24/2019 Collect Linux Info

    57/61

    System type : $SERVERSystem platform : $systemPlatformKernel Version : $kernelVersionServer Memory : ${MEMINFO}GBEnvironment : $ENVIRONMENTSystem description : $SYSTEMProblem 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

  • 7/24/2019 Collect Linux Info

    58/61

    # Default list of modules to runEXP_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

    fifi

    }

    ################################################################################ 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/ana

    conda-ks.cfgfi

    }

    ############################################################################### MAIN##############################################################################

  • 7/24/2019 Collect Linux Info

    59/61

    ## Ensure that we are the root user#if [ ${UID} -ne 0 ] ; then echo

    echo "ERROR: Sorry only the root user can run this script"echoexit 1

    fi

    # Remove any temporary files we createtrap '$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" ind) if [ $OPTARG = "/" ] ; then

    echo "ERROR: root directory selected as target!"

    echo "Exiting."exit 1

    elif [ $OPTARG != "" ] ; thenTOPDIR=${OPTARG%%/}echo "DEBUG: 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

  • 7/24/2019 Collect Linux Info

    60/61

    ;;esac

    done

    if [ ${VERBOSE} -gt 0 ] ; then

    if [ -t 0 ] ; thentput clear

    fifi

    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 $LOGDIRfi

    # find ALL my commands for this scriptfindCmds

    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" ] ; thenecho "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 ] ; thenMakeDir $LOGDIR

    fi

    if [ -f /tmp/README ] ; thenmv /tmp/README ${LOGDIR}/README

    fi

    echo "$MYVERSION" > ${LOGDIR}/rev

  • 7/24/2019 Collect Linux Info

    61/61

    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 !!!##############################################################################