#!/bin/sh
#---------------------------------------------------------------
# Project : hardware4linux.info
# File : osinfo
# Author : Frederic Lepied
# Created On : Thu Feb 2 09:03:03 2006
# Purpose : return the os name, version and arch
# License : GPL
#---------------------------------------------------------------
prog=$0
xml=0
name=0
arch=0
rel=0
knl=0
all=1
usage() {
echo "`basename $prog` [-x] [-n] [-a] [-r] [-h] [-t
]" 1>&2
echo " Display operating system informations. Options:" 1>&2
echo " -x: output in xml format" 1>&2
echo " -n: display name info" 1>&2
echo " -a: display arch info" 1>&2
echo " -r: display release info" 1>&2
echo " -k: display kernel version" 1>&2
echo " -t : use as the root of the filesystem" 1>&2
echo " -h: display this help message" 1>&2
echo " -v: display version" 1>&2
}
version() {
echo '1.9'
}
top=
while getopts hxnarkvt: arg; do
case $arg in
x) xml=1;all=0;;
n) name=1;all=0;;
a) arch=1;all=0;;
r) rel=1;all=0;;
k) knl=1;all=0;;
h) usage; exit 0;;
v) version; exit 0;;
t) top="$OPTARG";;
*) usage; exit 1;;
esac
done
# tested on:
# Mandriva Linux release 2006.0 on x86_64
if [ -r $top/etc/mandrake-release ]; then
n=`sed 's/\(.*\) release.*/\1/' < $top/etc/mandrake-release`
a=`sed 's/.* for \(.*\)/\1/' < $top/etc/mandrake-release`
r=`sed 's/.* release \([0-9.]*\).*/\1/' < $top/etc/mandrake-release`
# tested on:
elif [ -r $top/etc/puppyversion ]; then
n="Puppy Linux"
r=`sed 's/\([0-9]*\)\([0-9][0-9]\)/\1.\2/' < $top/etc/puppyversion`
# tested on:
elif [ -r $top/etc/knoppix-version ]; then
r=`sed 's/^\([0-9.]*\) .*/\1/' < $top/etc/knoppix-version`
n=Knoppix
# tested on:
elif [ -r $top/etc/pld-release ]; then
r=`sed 's/^\([0-9.]*\) .*/\1/' < $top/etc/pld-release`
n=`sed 's/^[0-9.]* *\([^(]*\) .*/\1/' < $top/etc/pld-release`
# tested on:
elif [ -r $top/etc/pardus-release ]; then
n=`sed 's/\([^0-9.]*\) [0-9.]*.*/\1/' < $top/etc/pardus-release`
r=`sed 's/.* \([0-9.]*\.[0-9.]*\).*/\1/' < $top/etc/pardus-release`
# tested on:
# Xandros Server 1.0
# Xandros Desktop OS 4.0 Home Premium Edition
elif [ -r $top/etc/xandros-desktop-version ]; then
n=`grep -a ^Version $top/etc/xandros-desktop-version | sed 's/^Version: \([a-zA-Z ]*\) [0-9]*\.[0-9]*\(.*\)/\1\2/'`
r=`grep -a ^Version $top/etc/xandros-desktop-version | sed 's/^Version: [a-zA-Z ]*\([0-9]*\.[0-9]*\).*/\1/'`
# tested on:
# Ubuntu release 6.06 on i386 (2.6.15-25-686)
# Ubuntu release 5.10 on i386 (2.6.12-10-386)
# Debian release 3.1 on i386 (2.6.8-2-686)
# Debian release lenny/sid on i386 (2.6.21.1dedibox-r7)
# Ubuntu release 7.04 on i386 (2.6.20-16-generic)
elif [ -r $top/etc/debian_version ]; then
n=Debian
r=`cat $top/etc/debian_version`
# Handle Ubuntu
if [ "$r" = testing/unstable ]; then
n=`head -1 $top/etc/issue | sed 's/\(.*\) [0-9].*/\1/'`
r=`head -1 $top/etc/issue | sed 's/[^0-9]* \([0-9.]*\).*/\1/'`
elif [ -r $top/etc/lsb-release ]; then
. $top/etc/lsb-release
[ "$DISTRIB_ID" ] && n="$DISTRIB_ID"
[ "$DISTRIB_RELEASE" ] && r="$DISTRIB_RELEASE"
fi
# tested on:
# Gentoo release 1.6.14 on i386 (2.6.16-gentoo-r7)
# Gentoo release 1.12.0_pre19 on i386 (2.6.16-mm1-ubik)
# Gentoo release 1.12.1 on AuthenticAMD (2.6.16-suspend2-r8)
elif [ -r $top/etc/gentoo-release ]; then
n=Gentoo
r=`sed 's/.* version \([0-9.]*\)/\1/' < $top/etc/gentoo-release`
# tested on:
elif [ -r $top/etc/arch-release ]; then
n="Arch Linux"
r=`sed 's/.* \([0-9.]*\) .*/\1/' < $top/etc/arch-release`
if [ -z "$r" ]; then
r=`grep Arch $top/etc/issue | sed -r 's/^Arch Linux \(([^\)]*)\).*$/\1/'`
fi
if [ -z "$r" ]; then
r=`pacman -Qi pacman | grep "^Version " | sed 's/^.*: \(.*\)$/\1/'`
fi
if [ -z "$r" ]; then
r=Unspecified
fi
# tested on:
elif [ -r $top/etc/slackware-version ]; then
n=`sed 's/\([^0-9.]*\) [0-9.]*.*/\1/' < $top/etc/slackware-version`
r=`sed 's/.* \([0-9.]*\.[0-9.]*\).*/\1/' < $top/etc/slackware-version`
a=`sed 's/.*(\(.*\)).*/\1/' < $top/etc/slackware-version`
# tested on:
elif [ -r $top/etc/zenwalk-version ]; then
n="Zenwalk"
r=`sed 's/.* \([0-9.]*\).*/\1/' < $top/etc/zenwalk-version`
# tested on:
# SUSE LINUX Enterprise Server release 9 on ppc
# SUSE LINUX release 10.0 on i586 (2.6.13-15-default)
elif [ -r $top/etc/SuSE-release ]; then
n=`head -1 $top/etc/SuSE-release | sed 's/\(.*\) [0-9].*/\1/'`
a=`head -1 $top/etc/SuSE-release | sed 's/.*(\(.*\)).*/\1/'`
r=`grep VERSION $top/etc/SuSE-release | sed 's/VERSION = \(.*\)/\1/'`
# tested on:
# Fedora Core release 3 on x86_64
# Fedora Core release 4 on ppc (2.6.16-1.2115_FC4)
# Fedora Core release 5 on i386 (2.6.17-1.2139_FC5)
elif [ -r $top/etc/redhat-release ]; then
n=`sed 's/\(.*\) release.*/\1/' < $top/etc/redhat-release`
r=`sed 's/.* release \([0-9.]*\).*/\1/' < $top/etc/redhat-release`
# tested on:
# Solaris release 9 on x86
elif [ -r $top/etc/release ]; then
n=`head -1 $top/etc/release | sed 's/ *\([^0-9]*\) [0-9].*/\1/'`
a=`head -1 $top/etc/release | sed 's/.* \([^ ]*\)$/\1/'`
r=`head -1 $top/etc/release | sed 's/.* \([0-9.]*\) .*/\1/'`
# tested on:
# Mac OS X release 10.4.9 (8P135) on powerpc (Darwin 8.9.0)
elif [ -r /usr/bin/sw_vers ]; then
s=`/usr/bin/sw_vers | grep ProductName | sed 's/ProductName\:\(.*\)/\1/' | /usr/bin/tr -d "\t"`
if [ "$s" = "Mac OS X" ]; then
n=$s
a=`uname -p` # /usr/bin/machine is more specific: returns 'ppc7450' instead of 'ppc'
r=`/usr/bin/sw_vers | grep ProductVersion | sed 's/ProductVersion\:\(.*\)/\1/' | /usr/bin/tr -d "\t"`
b=`/usr/bin/sw_vers | grep BuildVersion | sed 's/BuildVersion\:\(.*\)/\1/' | /usr/bin/tr -d "\t"`
#r="$r ($b)"
k=`uname -sr`
fi
# tested on:
elif [ -r $top/etc/lsb-release ]; then
. $top/etc/lsb-release
[ "$DISTRIB_ID" ] && n="$DISTRIB_ID"
[ "$DISTRIB_RELEASE" ] && r="$DISTRIB_RELEASE"
fi
# try to guess the arch if not already set
if [ -z "$a" ]; then
if [ -r $top/etc/unamei.osinfo ]; then
a=`cat $top/etc/unamei.osinfo`
else
a=`uname -i 2> /dev/null`
fi
if [ "$a" = unknown -o -z "$a" ]; then
if [ -r $top/etc/unamem.osinfo ]; then
a=`cat $top/etc/unamem.osinfo`
else
a=`uname -m 2> /dev/null`
fi
fi
case "$a" in
i?86) a=i386;;
esac
fi
if [ -z "$k" ]; then
if [ -r $top/etc/unamer.osinfo ]; then
k=`cat $top/etc/unamer.osinfo`
else
k=`uname -r`
fi
fi
# try a generic method
if [ -z "$n" -o -z "$r" ]; then
f=`ls $top/etc/*-release 2>/dev/null`
if [ -r "$f" ]; then
if grep -q ' ' "$f" 2> /dev/null; then
n=`sed 's/\([^0-9.]*\)\s\{1,\}[0-9.].*/\1/' < $f | sed -e 's/\(release\|version\)//' -e 's/\s*$//'`
r=`sed 's/[^0-9.]*\([0-9.]*\).*/\1/' < $f`
else
n=`basename "$f" | sed 's/-release//'`
r=`cat "$f"`
fi
fi
fi
if [ -z "$a" -o -z "$n" -o -z "$r" ]; then
echo "Unsupported operating system" 1>&2
exit 1
fi
if [ $all = 1 ]; then
echo "$n release $r on $a ($k)"
exit 0
fi
if [ $name = 1 ]; then
echo "$n"
fi
if [ $rel = 1 ]; then
echo "$r"
fi
if [ $arch = 1 ]; then
echo "$a"
fi
if [ $knl = 1 ]; then
echo "$k"
fi
if [ $xml = 1 ]; then
cat <
$n
$r
$a
$k
EOF
fi
# osinfo ends here