system_information.sh 3.56 KB
#!/bin/dash

##
# This creates function that will gather some system informations
# and propagate them as environment variables.
#

. ./utils.sh

##
# start guessing the system type via uname and export it.
#
get_host_info() {
	OS="$(${UNAME} -o)"
	KERNEL="$(${UNAME} -s)"
	VERSION="$(${UNAME} -r)"
	PLATFORM="$(${UNAME} -m)"
	HOSTNAME="$(${UNAME} -n)"
	CLASSES="$(${ECHO} -e "${OS}\n${KERNEL}\n${VERSION}\n${PLATFORM}\n${HOSTNAME}" |\
		${SORT} -u | ${TR} "\n" " ")"

	export OS KERNEL VERSION PLATFORM HOSTNAME CLASSES
}

##
# if we are on a linux try to figure out wich distribution we are
# running.
# First look what kind of realease file we have:
#   
#   00 01 - Novell SuSE   ---> /etc/SuSE-release
#   00 02 - Red Hat       ---> /etc/redhat-release, /etc/redhat_version
#   00 04 - Fedora        ---> /etc/fedora-release
#   00 08 - Slackware     ---> /etc/slackware-release, /etc/slackware-version
#   00 10 - Debian        ---> /etc/debian_release, /etc/debian_version
#   00 20 - Mandrake      ---> /etc/mandrake-release
#   00 40 - Yellow dog    ---> /etc/yellowdog-release
#   00 80 - Sun JDS       ---> /etc/sun-release
#   01 00 - Solaris/Sparc ---> /etc/release
#   02 00 - Gentoo        ---> /etc/gentoo-release
#
# Here I follow a pessimistic way because I prefere to have no
# identification at all over a wrong one...so I check for all these files.
# If I can't find any or find multiple of them I assume this system
# as unidentified. Anyway when I found one I still check the content...
# Here I need some help as I don't know the valid content of these files.
# For now I assume that at least the name of the distribution is in
# the file.
#
get_dist_info() {
	[ -z "${KERNEL}" ] && get_host_info

	if [ "Linux" = "${KERNEL}" ]
	then
		local SUSE=1
		local REDHAT=2
		local FEDORA=4
		local SLACKWARE=8
		local DEBIAN=16
		local MANDRAKE=32
		local YELLOWDOG=64
		local SUNJDS=128
		local GENTOO=256
		local SOLARIS=512

		local LAST=${SOLARIS}

		local CHK=$((SUSE|REDHAT|FEDORA|SLACKWARE|DEBIAN|MANDRAKE|\
			YELLOWDOG|SUNJDS|GENTOO|SOLARIS))

		eval local FILES_${SUSE}=\'/etc/SuSE-release\'
		eval local FILES_${REDHAT}=\'/etc/redhat-release /etc/redhat_version\'
		eval local FILES_${FEDORA}=\'/etc/fedora-release\'
		eval local FILES_${SLACKWARE}=\'/etc/slackware-release /etc/slackware-version\'
		eval local FILES_${DEBIAN}=\'/etc/debian_release /etc/debian_version\'
		eval local FILES_${MANDRAKE}=\'/etc/mandrake-release\'
		eval local FILES_${YELLOWDOG}=\'/etc/yellowdog-release\'
		eval local FILES_${SUNJDS}=\'/etc/sun-release\'
		eval local FILES_${GENTOO}=\'/etc/gentoo-release\'
		eval local FILES_${SOLARIS}=\'/etc/release\'

		local CUR=1
		while [ ${CUR} -le ${LAST} ]
		do
			local DIR

			eval local FILES=\"\${FILES_${CUR}}\"

			for DIR in ${FILES}
			do
				[ -f ${DIR} ] || CHK=$((CHK&~CUR))
			done

			CUR=$((CUR*2))
		done

		DIST="Unknown"

		[ ${CHK} -eq ${SUSE} ]      && DIST="Suse"
		[ ${CHK} -eq ${REDHAT} ]    && DIST="Redhat"
		[ ${CHK} -eq ${FEDORA} ]    && DIST="Fedora"
		[ ${CHK} -eq ${SLACKWARE} ] && DIST="Slakware"
		[ ${CHK} -eq ${DEBIAN} ]    && DIST="Debian"
		[ ${CHK} -eq ${MANDRAKE} ]  && DIST="Mandrake"
		[ ${CHK} -eq ${YELLOWDOG} ] && DIST="Yellowdog"
		[ ${CHK} -eq ${SUNJDS} ]    && DIST="Sun"
		[ ${CHK} -eq ${GENTOO} ]    && DIST="Gentoo"
		[ ${CHK} -eq ${SOLARIS} ]   && DIST="Solaris"

		if [ 'Unknown' != "${DIST}" ]
		then
			eval ${GREP} -iq ${DIST} \${FILES_${CHK}} || DIST="Unknown"
		fi

		CLASSES="${CLASSES}${DIST} "
	else
		DIST="${OS}"
	fi

	export DIST CLASSES
}

##
# autorun this if sourced.
#

[ -z "${DIST}" ] && get_dist_info

# vim: set ts=4 sw=4: