#
# butil.py - get architecture type from anaconda
#
# Erik Troan <
[email protected]>
#
# Copyright 2001, 2002 Red Hat, Inc.
#
# This software may be freely redistributed under the terms of the GNU
# library public license.
#
# You should have received a copy of the GNU Library Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
import os
def getArch ():
arch = os.uname ()[4]
if (len (arch) == 4 and arch[0] == 'i' and
arch[2:4] == "86"):
arch = "i386"
if arch == "sparc64":
arch = "sparc"
if arch == "ppc64":
arch = "ppc"
if arch == "s390x":
arch = "s390"
return arch
# return the ppc machine variety type
def getPPCMachine():
machine = None
# ppc machine hash
ppcType = { 'Mac' : 'PMac',
'Book' : 'PMac',
'CHRP IBM' : 'pSeries',
'iSeries' : 'iSeries',
'PReP' : 'PReP',
'CHRP' : 'pSeries',
'Amiga' : 'APUS',
'Gemini' : 'Gemini',
'Shiner' : 'ANS',
'BRIQ' : 'BRIQ',
'Teron' : 'Teron',
'AmigaOne' : 'Teron'
}
if getArch() != "ppc":
return 0
f = open('/proc/cpuinfo', 'r')
lines = f.readlines()
f.close()
for line in lines:
if line.find('machine') != -1:
machine = line.split(':')[1]
break
if machine is None:
return
for type in ppcType.items():
if machine.find(type[0]) != -1:
return type[1]
return 0
# return the pmac machine id
def getPPCMacID():
machine = None
if getArch() != "ppc":
return 0
if getPPCMachine() != "PMac":
return 0
f = open('/proc/cpuinfo', 'r')
lines = f.readlines()
f.close()
for line in lines:
if line.find('machine') != -1:
machine = line.split(':')[1]
machine = machine.strip()
return machine
return 0
# return the pmac generation
def getPPCMacGen():
# XXX: should NuBus be here?
pmacGen = ['OldWorld', 'NewWorld', 'NuBus']
if getArch() != "ppc":
return 0
if getPPCMachine() != "PMac":
return 0
f = open('/proc/cpuinfo', 'r')
lines = f.readlines()
f.close()
gen = None
for line in lines:
if line.find('pmac-generation') != -1:
gen = line.split(':')[1]
break
for type in pmacGen:
if gen.find(type) != -1:
return type
return 0
# return if pmac machine is it an iBook/PowerBook
def getPPCMacBook():
if getArch() != "ppc":
return 0
if getPPCMachine() != "PMac":
return 0
f = open('/proc/cpuinfo', 'r')
lines = f.readlines()
f.close()
for line in lines:
if not string.find(string.lower(line), 'book') == -1:
return 1
return 0
def getSparcMachine():
machine = None
if getArch() != "sparc":
return None
f = open('/proc/cpuinfo', 'r')
lines = f.readlines()
f.close()
for line in lines:
if line.find('type') != -1:
machine = line.split(':')[1].strip()
return machine
return None
# returns a product name to use for the boot loader string
def getProductName():
# try redhat-release first
if os.access("/etc/redhat-release", os.R_OK):
f = open("/etc/redhat-release", "r")
lines = f.readlines()
f.close()
for buf in lines:
relidx = buf.find(" release")
if relidx != -1:
return buf[:relidx]
if os.access("/tmp/product/.buildstamp", os.R_OK):
path = "/tmp/product/.buildstamp"
elif os.access("/.buildstamp", os.R_OK):
path = "/.buildstamp"
else:
path = None
if path is not None:
f = open(path, "r")
lines = f.readlines()
f.close()
if len(lines) >= 2:
return lines[1][:-1]
# fall back
return "Red Hat Linux"