diff -Nur debsmolt/usr/share/smolt/client/software.py debsmolt2/usr/share/smolt/client/software.py --- smolt/usr/share/smolt/client/software.py 2007-05-22 23:40:31.000000000 +0200 +++ debsmolt/usr/share/smolt/client/software.py 2007-09-09 11:36:48.000000000 +0200 @@ -26,23 +26,63 @@ return '' initdefault_re = re.compile(r':(\d+):initdefault:') +initdefaultupstart_re = re.compile(r'telinit\D(\d+)') def read_runlevel(): defaultRunlevel = 'Unknown' - try: - inittab = file('/etc/inittab').read() - match = initdefault_re.search(inittab) - if match: - defaultRunlevel = match.group(1) - except IOError: - sys.stderr.write('Unable to read /etc/inittab.') + if os.path.exists('/etc/inittab'): + try: + inittab = file('/etc/inittab').read() + match = initdefault_re.search(inittab) + if match: + defaultRunlevel = match.group(1) + except IOError: + sys.stderr.write('Unable to read /etc/inittab.') + elif os.path.exists('/etc/event.d/rc-default'): + try: + upstart = file('/etc/event.d/rc-default').read() + match = initdefaultupstart_re.search(upstart) + if match: + defaultRunlevel = match.group(1) + except IOError: + sys.stderr.write('Unable to read /etc/event.d/rc-default.') return defaultRunlevel.strip() def read_os(): try: - return file('/etc/redhat-release').read().strip() - except IOError: - try: + if os.path.exists('/etc/redhat-release'): + return file('/etc/redhat-release').read().strip() + elif os.path.exists('/etc/SuSE-release'): return file('/etc/SuSE-release').read().split('\n')[0].strip() - except IOError: - return 'Unknown' + elif os.path.exists('/etc/lsb-release'): + # there is a bug in lsb-release in ubuntu, + # https://bugs.launchpad.net/ubuntu/+source/lsb-release/+bug/66914 + + lsbRelease = file('/etc/lsb-release').read().split('\n') + for line in lsbRelease: + values = line.split('=', 2) + if values[0] == "DISTRIB_ID": + id = values[1] + elif values[0] == "DISTRIB_RELEASE": + release = values[1] + elif values[0] == "DISTRIB_CODENAME": + codename = values[1] + OS = "" + if id != "": + OS = id.capitalize() + if release != "": + OS = OS + " " + release + if codename != "": + OS = OS + " (" + codename.capitalize() + ")" + if OS == "": + return "Unknown" + else: + return OS + elif os.path.exists('/etc/debian_version'): + # Ubuntu also contains debian_version, but lsb-release should be + # considered first + return "Debian " + file('/etc/debian_version').read().strip() + else: + return "Unknown" + except IOError: + return 'Unknown'