#!/bin/sh
# Before running this script please ensure that your PATH is
# typical as you use for compilation/istallation. I use
# /bin /sbin /usr/bin /usr/sbin /usr/local/bin, but it may
# differ on your system.

PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH

tst_cmd_available()
{
	if type command > /dev/null 2>&1; then
		command -v $1 > /dev/null 2>&1 || return 1
	else
		which $1 > /dev/null 2>&1
		if [ $? -eq 0 ]; then
			return 0
		else
			return 1
		fi
	fi
}

tst_cmd_run()
{
	local cmd="$1"
	shift
	tst_cmd_available $cmd && eval "$cmd $@"
}

is_enabled()
{
	[ -f "$1" ] && [ "$(cat $1)" = "Y" -o "$(cat $1)" = "1" ]
}

echo 'If some fields are empty or look unusual you may have an old version.'
echo 'Compare to the current minimal requirements in Documentation/Changes.'

echo
echo "`ls /etc/*release 2> /dev/null`"
cat /etc/*release 2> /dev/null
if [ $? = 1 ]; then
   echo "`ls /usr/lib/*release 2> /dev/null`"
   cat /usr/lib/*release 2> /dev/null
fi
if [ $? = 1 ]; then
   echo '/etc/issue:'
   cat /etc/issue 2> /dev/null
fi
if [ $? = 1 ]; then
	echo 'lsb_release -a'
	lsb_release -a 2> /dev/null
fi

echo
echo 'uname:'
uname -a

echo
echo '/proc/cmdline'
cat /proc/cmdline

echo

echo "Gnu C                 " `gcc --version 2>/dev/null | head -n 1`
echo "Clang                 " `clang --version 2>/dev/null | head -n 1`

make --version 2>&1 | awk -F, '{print $1}' | awk \
      '/GNU Make/{print "Gnu make              ",$NF}'

ld -v 2>&1 | awk -F\) '{print $1}' | awk \
      '/BFD/{print "binutils              ",$NF}'

mkswap -V 2>&1 | awk '{print "util-linux            ", $NF}'

mount --version 2>&1 | awk -F\- '{print "mount                 ", $NF}'

insmod -V  2>&1 | awk 'NR==1 {print "modutils              ",$NF}'

tune2fs 2>&1 | grep "^tune2fs" | sed 's/,//' |  awk \
'NR==1 {print "e2fsprogs             ", $2}'

reiserfsck 2>&1 | grep reiserfsprogs | awk \
'NR==1{print "reiserfsprogs         ", $NF}'

cardmgr -V 2>&1| grep version | awk \
'NR==1{print "pcmcia-cs             ", $3}'

pppd --version 2>&1| grep version | awk \
'NR==1{print "PPP                   ", $3}'

isdnctrl 2>&1 | grep version | awk \
'NR==1{print "isdn4k-utils          ", $NF}'

ls -l `ldd /bin/sh | awk '/libc/{print $3}'` | sed \
-e 's/\.so$//' | awk -F'[.-]'   '{print "Linux C Library        " \
$(NF-2)"."$(NF-1)"."$NF}'

ldd -v > /dev/null 2>&1 && ldd -v || ldd --version |head -n 1 | awk \
'NR==1{print "Dynamic linker (ldd)  ", $NF}'

ls -l /usr/lib/lib{g,stdc}++.so  2>/dev/null | awk -F. \
       '{print "Linux C++ Library      " $4"."$5"."$6}'

ps --version 2>&1 | awk 'NR==1{print "Procps                ", $NF}'

ifconfig --version 2>&1 | grep tools | awk \
'NR==1{print "Net-tools             ", $NF}'

ip -V 2>&1 | awk \
'NR==1{print "iproute2              ", $NF}'

ping -V 2>&1 | awk \
'NR==1{print "iputils               ", $NF}'

ethtool --version | grep version 2>&1 | awk \
'NR==1{print "ethtool               ", $NF}'

# Kbd needs 'loadkeys -h',
loadkeys -h 2>&1 | awk \
'(NR==1 && ($3 !~ /option/)) {print "Kbd                   ", $3}'

# while console-tools needs 'loadkeys -V'.
loadkeys -V 2>&1 | awk \
'(NR==1 && ($2 ~ /console-tools/)) {print "Console-tools         ", $3}'

expr --v 2>&1 | awk 'NR==1{print "Sh-utils              ", $NF}'

if [ -e /proc/modules ]; then
    X=`cat /proc/modules | sed -e "s/ .*$//"`
    echo "Modules Loaded         "$X
fi

echo
echo 'free reports:'
free

echo
echo 'cpuinfo:'
tst_cmd_run lscpu || cat /proc/cpuinfo

echo
if is_enabled /sys/module/apparmor/parameters/enabled; then
	echo 'AppArmor enabled'
	tst_cmd_run aa-status
else
	echo 'AppArmor disabled'
fi

echo

if ! tst_cmd_run sestatus; then
	printf 'SELinux mode: '
	tst_cmd_run getenforce || echo 'unknown'
fi
