Skip to content

Instantly share code, notes, and snippets.

@felipepodesta
Forked from chrisfu/linux-explorer.sh
Created March 19, 2022 03:03
Show Gist options
  • Save felipepodesta/b02c032159b6c4dd2ed90852d0d22dd7 to your computer and use it in GitHub Desktop.
Save felipepodesta/b02c032159b6c4dd2ed90852d0d22dd7 to your computer and use it in GitHub Desktop.
Linux Explorer system information script
#!/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 !!!
##############################################################################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment