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