Drop support for ddcprobe which is deprecated since ages
[grml-hwinfo.git] / grml-hwinfo
index 5c2c997..a9b77b8 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # Filename:      grml-hwinfo
 # Purpose:       get hardware information
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 UNAME="$(uname -r)"
 PN="$(basename $0)"
 [ -n "$WORKING_DIR" -a -d "$WORKING_DIR" ] || WORKING_DIR=$(pwd)
-VERSION='0.4.1'
+VERSION='***UNRELEASED***'
+
+# data collection should not be affected by user locale
+export LANG=C
+export LC_ALL=C
+
 TIMESTAMP='+%F--%H-%M-%S-%Z'
-TIMESTAMP_NANO='+%F--%H-%M-%S-%N-%Z'
+DATE="$(date $TIMESTAMP)"
+
+echo "$PN ${VERSION} - collect hardware information"
 
 GENERATE_FILE='1'
 GENERATE_DIRECTORY=''
 
 while getopts "hdf" args; do
   case "$args" in
-  h) echo "$PN - collect hardware information
-
+  h) echo "
 This tool collects information of the hardware this tool is being executed
 on.  It can be executed as normal user to collect some basic information or
 with root permissions to collect as much information as possible.  By
@@ -34,11 +40,10 @@ you can have it create a directory with all information.
 
 Options:
 
--h  :  Display this help
--f  :  Create grml-hwinfo-TIMESTAMP.tar.bz2
--d  :  Create grml-hwinfo-TIMESTAMP/
-
--fd :  Create both a file and a directory
+  -h    Display this help message
+  -f    Create grml-hwinfo-TIMESTAMP.tar.bz2
+  -d    Create grml-hwinfo-TIMESTAMP as a directory
+  -df   Create both, the directory and the file
 "
 
   exit 0;;
@@ -55,25 +60,22 @@ Options:
   esac
   done
 
+# Generate output/temporary directory name & path, and output file path
+OUTFILE=""
+OUTDIRNAME="grml-hwinfo-${DATE}"
+OUTDIR="${WORKING_DIR}/${OUTDIRNAME}"
+mkdir "${OUTDIR}" || { echo 'Directory "'${OUTDIR}'" already exists, aborting.'>&2 ; exit 1; }
 
-TMPDIR=$(mktemp -d) || { echo "Error creating a temporary directory, can not continue. Exiting.">&2 ; exit 1; }
-INFODIR="info"
-
-bailout() {
-  [ -d "$TMPDIR" ] && rm -rf "$TMPDIR"
-  [ -n "$1" ] && exit 1 || exit 0
-}
-
-DATE="$(date $TIMESTAMP)"
-[ -n "$INFOFILE" ] || INFOFILE="grml-hwinfo-$DATE.tar.bz2"
-INFOFILE="${WORKING_DIR}/${INFOFILE}"
-[ -n "$INFOOUTDIR" ] || INFOOUTDIR="grml-hwinfo-$DATE"
-INFOOUTDIR="${WORKING_DIR}/${INFOOUTDIR}"
+if [ -n "$GENERATE_FILE" ] ; then
+   OUTFILE_="${OUTDIR}.tar.bz2"
+   [ -e "${OUTFILE_}" ] && { echo 'File "'${OUTFILE_}'" already exists, aborting.'>&2 ; rm -r "${OUTDIR}"; exit 1; }
+   OUTFILE=${OUTFILE_}
+   touch "${OUTFILE}"
+fi
 
 if [ "$(id -u)" != "0" ] ; then
    NOTROOT=1
-   echo "Notice: you are running $PN without root permissions. Not all information will be collected."
-   echo
+   echo "W: Running without root permissions. Not all data will be collected."
 fi
 
 # check whether a binary is available and executable
@@ -82,7 +84,12 @@ if [ -z "$1" ] ; then
    echo 'Usage: exectest <binary>'>&2
    return 1
 else
-   test -e "$(which $1)" && return 0 || return 1
+   if test -e "$(which $1)" ; then
+     return 0
+   else
+     grep -q "^$1"'$' missing_tools 2>/dev/null || echo "$1" >> missing_tools
+     return 1
+   fi
 fi
 }
 
@@ -118,15 +125,12 @@ disk_info() {
     disklist=`list_disks $device_size`
 }
 
-echo "Running grml-hwinfo ${VERSION} - collecting hardware information."
 
-mkdir "${TMPDIR}/${INFODIR}"
-cd "${TMPDIR}/${INFODIR}" || bailout 1
+cd "${OUTDIR}" || exit 1
 (
-  cd "${TMPDIR}/${INFODIR}"
-
-  [ -n "$GENERATE_FILE" ]      && echo "Output file:      $INFOFILE"
-  [ -n "$GENERATE_DIRECTORY" ] && echo "Output directory: $INFOOUTDIR"
+  [ -n "$GENERATE_FILE" ]      && echo "Output file:      $OUTFILE"
+  [ -n "$GENERATE_DIRECTORY" ] && echo "Output directory: $OUTDIR"
+  echo
   echo "This might take a few seconds/minutes. Please be patient..."
 
 # some sysinfo
@@ -150,6 +154,7 @@ cd "${TMPDIR}/${INFODIR}" || bailout 1
   for i in free lsmod mount lsdev ; do
       exectest $i  && $i > $i
   done
+  swapon -s > swapon 2>swapon.error
 
 # proc stuff
   for i in cpuinfo interrupts cmdline devices dma fb iomem ioports \
@@ -165,6 +170,7 @@ cd "${TMPDIR}/${INFODIR}" || bailout 1
 # hwinfo
   exectest discover && discover -v --type-summary --enable-bus all > discover 2> discover.2
   exectest hwinfo   && hwinfo log=hwinfo
+  exectest numactl  && numactl --hardware > numactl
   exectest x86info  && x86info > x86info 2>x86info.2
 
 # net stuff
@@ -220,7 +226,6 @@ else
    echo "running as root" > root
    disk_info
    exectest sfdisk     && sfdisk -d > sfdisk 2>sfdisk.error
-   exectest ddcprobe   && ddcprobe  > ddcprobe
    exectest dmidecode  && dmidecode > dmidecode
 
    exectest dconf && dconf -o dconf
@@ -229,54 +234,44 @@ else
       /usr/share/doc/lm-sensors/examples/eeprom/decode-dimms.pl > decode-dimms 2>decode-dimms.error
    fi
 
+   exectest mdadm && mdadm --detail /dev/md[0-9]* >> mdadm 2>mdadm.error
+
+   # LVM
+   exectest pvs && pvs > pvs 2>pvs.error
+   exectest vgs && vgs > vgs 2>vgs.error
+   exectest lvs && lvs > lvs 2>lvs.error
+   exectest lvdisplay && lvdisplay > lvdisplay 2>lvdisplay.error
+
+   exectest dmsetup && dmsetup ls > dmsetup_ls 2>dmsetup_ls.error
+
    for disk in $disklist; do
       exectest smartctl  && echo "smartctl -a /dev/$disk :\n" >> smartctl && smartctl -a /dev/$disk       >> smartctl             && echo "\n\n" >> smartctl
       exectest hdparm    && echo "hdparm -iv  /dev/$disk :\n" >> hdparm   && hdparm -iv  /dev/$disk       >> hdparm               && echo "\n\n" >> hdparm
       exectest fdisk     && echo "fdisk -lu   /dev/$disk :\n" >> fdisk    && fdisk -lu   /dev/$disk       >> fdisk 2>>fdisk.error && echo "\n\n" >> fdisk
       exectest parted    && echo "parted -s   /dev/$disk :\n" >> parted   && parted -s   /dev/$disk print >> parted               && echo "\n\n" >> parted
-      LC_ALL=C file -s /dev/$disk?* | grep -v ": empty" >> file_disk
+      file -s /dev/$disk?* | grep -v ": empty" >> file_disk
    done
 fi
 )
 
-if [ -n "$GENERATE_DIRECTORY" ] ; then
-  if [ -e "${INFOOUTDIR}" ] ; then
-     # falling back onto nanoseconds as tie-breaker
-     DATE="$(date $TIMESTAMP_NANO)"
-     NEW_INFOOUTDIR="${WORKING_DIR}/grml-hwinfo-$DATE"
-     echo
-     echo "Warning: $INFOOUTDIR exists already, using $NEW_INFOOUTDIR instead.">&2
-     INFOOUTDIR="$NEW_INFOOUTDIR" # adjust variable for final info message
-  fi
+echo
 
-  cd "${TMPDIR}"
-  cp -ax "${TMPDIR}/info" "${INFOOUTDIR}"
-
-  echo
-  [ -r "$INFOOUTDIR" ] && echo "$INFOOUTDIR has been generated."
-  echo
-fi
+cd "${WORKING_DIR}"
 
+# create tarball
 if [ -n "$GENERATE_FILE" ] ; then
-  # finally create the tarball
-  if [ -e "${INFOFILE}" ] ; then
-     # falling back onto nanoseconds as tie-breaker
-     DATE="$(date $TIMESTAMP_NANO)"
-     NEW_INFOFILE="${WORKING_DIR}/grml-hwinfo-$DATE.tar.bz2"
-     echo
-     echo "Warning: $INFOFILE exists already, using $NEW_INFOFILE instead.">&2
-     INFOFILE="$NEW_INFOFILE" # adjust variable for final info message
-  fi
-
-  cd "${TMPDIR}"
-  tar jcf "${INFOFILE}" "${INFODIR}"
-  cd "${WORKING_DIR}"
+  tar jcf "${OUTFILE}" "${OUTDIRNAME}"
+  [ -r "$OUTFILE" ] && echo "$OUTFILE ("$(ls -ahl "$OUTFILE" | awk '{print $5}')") has been generated."
+fi
 
-  echo
-  [ -r "$INFOFILE" ] && echo "$INFOFILE ("$(ls -ahl "$INFOFILE" | awk '{print $5}')") has been generated."
-  echo
+# remove (temporary) output directory if needed, else keep it, as it doubles
+# as the real output directory.
+if [ -z "$GENERATE_DIRECTORY" ] ; then
+  rm -r "${OUTDIR}"
+else
+  [ -r "${OUTDIR}" ] && echo "${OUTDIR} has been generated."
 fi
 
-bailout
+exit 0
 
 ## END OF FILE##################################################################