---
bootloader.py | 11 ++++++--
booty/alpha.py | 26 ++++++++++++-------
booty/bootloaderInfo.py | 37 ++++++++++++++++++----------
booty/ia64.py | 18 +++++++------
booty/ppc.py | 28 +++++++++++++--------
booty/s390.py | 25 +++++++++++-------
booty/sparc.py | 18 +++++++------
booty/x86.py | 61 +++++++++++++++++++++++++++-------------------
8 files changed, 136 insertions(+), 88 deletions(-)
diff --git a/bootloader.py b/bootloader.py
index 0c28c8a..eb28e0a 100644
--- a/bootloader.py
+++ b/bootloader.py
@@ -199,11 +199,16 @@ def writeBootloader(anaconda):
dosync()
try:
- anaconda.id.bootloader.write(anaconda.rootPath, anaconda.id.bootloader,
- kernelList, otherList, defaultDev,
- justConfigFile)
+ rc = anaconda.id.bootloader.write(anaconda.rootPath, anaconda.id.bootloader,
+ kernelList, otherList, defaultDev,
+ justConfigFile)
if not justConfigFile:
w.pop()
+
+ if rc and anaconda.intf:
+ anaconda.intf.messageWindow(_("Warning"),
+ _("There was an error installing the bootloader. "
+ "Your system may not be bootable."))
except booty.BootyNoKernelWarning:
if not justConfigFile:
w.pop()
diff --git a/booty/alpha.py b/booty/alpha.py
index efe4446..33cef82 100644
--- a/booty/alpha.py
+++ b/booty/alpha.py
@@ -111,10 +111,12 @@ class alphaBootloaderInfo(bootloaderInfo):
# to and the second argument is a path to the bootstrap loader
# file.
args = [("/dev/%s" % wbd), "/boot/bootlx"]
- iutil.execWithRedirect ('/sbin/swriteboot', args,
- root = instRoot,
- stdout = "/dev/tty5",
- stderr = "/dev/tty5")
+ rc = iutil.execWithRedirect ('/sbin/swriteboot', args,
+ root = instRoot,
+ stdout = "/dev/tty5",
+ stderr = "/dev/tty5")
+ if rc:
+ return rc
# Calling abootconf to configure the installed aboot. The
# first argument is the disk to use, the second argument is
@@ -122,10 +124,14 @@ class alphaBootloaderInfo(bootloaderInfo):
# It's always the boot partition whether it's / or /boot (with
# the mount point being omitted.)
args = [("/dev/%s" % wbd), str (bdpn)]
- iutil.execWithRedirect ('/sbin/abootconf', args,
- root = instRoot,
- stdout = "/dev/tty5",
- stderr = "/dev/tty5")
+ rc = iutil.execWithRedirect ('/sbin/abootconf', args,
+ root = instRoot,
+ stdout = "/dev/tty5",
+ stderr = "/dev/tty5")
+ if rc:
+ return rc
+
+ return 0
def write(self, instRoot, bl, kernelList, chainList,
@@ -133,8 +139,8 @@ class alphaBootloaderInfo(bootloaderInfo):
if len(kernelList)< 1:
raise BootyNoKernelWarning
- self.writeAboot(instRoot, bl, kernelList,
- chainList, defaultDev, justConfig)
+ return self.writeAboot(instRoot, bl, kernelList,
+ chainList, defaultDev, justConfig)
def __init__(self, storage):
bootloaderInfo.__init__(self, storage)
diff --git a/booty/bootloaderInfo.py b/booty/bootloaderInfo.py
index a1a27b7..8e09c50 100644
--- a/booty/bootloaderInfo.py
+++ b/booty/bootloaderInfo.py
@@ -405,15 +405,17 @@ class bootloaderInfo:
def write(self, instRoot, bl, kernelList, chainList,
defaultDev, justConfig):
+ rc = 0
+
if len(kernelList)>= 1:
config = self.getBootloaderConfig(instRoot, bl,
kernelList, chainList,
defaultDev)
- config.write(instRoot + self.configfile, perms = self.perms)
+ rc = config.write(instRoot + self.configfile, perms = self.perms)
else:
raise booty.BootyNoKernelWarning
- return ""
+ return rc
def getArgList(self):
args = []
@@ -533,9 +535,11 @@ class efiBootloaderInfo(bootloaderInfo):
# XXX wouldn't it be nice to have a real interface to use efibootmgr from?
def removeOldEfiEntries(self, instRoot):
p = os.pipe()
- iutil.execWithRedirect('/usr/sbin/efibootmgr', [],
- root = instRoot, stdout = p[1])
+ rc = iutil.execWithRedirect('/usr/sbin/efibootmgr', [],
+ root = instRoot, stdout = p[1])
os.close(p[1])
+ if rc:
+ return rc
c = os.read(p[0], 1)
buf = c
@@ -550,10 +554,14 @@ class efiBootloaderInfo(bootloaderInfo):
continue
if string.join(fields[1:], " ") == productName:
entry = fields[0][4:8]
- iutil.execWithRedirect('/usr/sbin/efibootmgr',
- ["-b", entry, "-B"],
- root = instRoot,
- stdout="/dev/tty5", stderr="/dev/tty5")
+ rc = iutil.execWithRedirect('/usr/sbin/efibootmgr',
+ ["-b", entry, "-B"],
+ root = instRoot,
+ stdout="/dev/tty5", stderr="/dev/tty5")
+ if rc:
+ return rc
+
+ return 0
def addNewEfiEntry(self, instRoot):
try:
@@ -581,16 +589,19 @@ class efiBootloaderInfo(bootloaderInfo):
argv = [ "/usr/sbin/efibootmgr", "-c" , "-w", "-L",
productName, "-d", "/dev/%s" % bootdisk,
"-p", bootpart, "-l", "\\EFI\\redhat\\" + self.bootloader ]
- iutil.execWithRedirect(argv[0], argv[1:], root = instRoot,
- stdout = "/dev/tty5",
- stderr = "/dev/tty5")
+ rc = iutil.execWithRedirect(argv[0], argv[1:], root = instRoot,
+ stdout = "/dev/tty5",
+ stderr = "/dev/tty5")
+ return rc
def installGrub(self, instRoot, bootDevs, grubTarget, grubPath,
target, cfPath):
if not iutil.isEfi():
raise EnvironmentError
- self.removeOldEfiEntries(instRoot)
- self.addNewEfiEntry(instRoot)
+ rc = self.removeOldEfiEntries(instRoot)
+ if rc:
+ return rc
+ return self.addNewEfiEntry(instRoot)
def __init__(self, storage, initialize = True):
if initialize:
diff --git a/booty/ia64.py b/booty/ia64.py
index b9646d3..6c9cdc2 100644
--- a/booty/ia64.py
+++ b/booty/ia64.py
@@ -11,25 +11,27 @@ class ia64BootloaderInfo(efiBootloaderInfo):
config.addEntry("relocatable")
return config
-
+
def writeLilo(self, instRoot, bl, kernelList,
chainList, defaultDev, justConfig):
config = self.getBootloaderConfig(instRoot, bl,
kernelList, chainList, defaultDev)
- config.write(instRoot + self.configfile, perms = 0755)
+ return config.write(instRoot + self.configfile, perms = 0755)
- return ""
-
def write(self, instRoot, bl, kernelList, chainList,
defaultDev, justConfig):
if len(kernelList)>= 1:
- out = self.writeLilo(instRoot, bl, kernelList,
- chainList, defaultDev, justConfig)
+ rc = self.writeLilo(instRoot, bl, kernelList,
+ chainList, defaultDev, justConfig)
+ if rc:
+ return rc
else:
raise BootyNoKernelWarning
- self.removeOldEfiEntries(instRoot)
- self.addNewEfiEntry(instRoot)
+ rc = self.removeOldEfiEntries(instRoot)
+ if rc:
+ return rc
+ return self.addNewEfiEntry(instRoot)
def makeInitrd(self, kernelTag):
return "/boot/efi/EFI/redhat/initrd%s.img" % kernelTag
diff --git a/booty/ppc.py b/booty/ppc.py
index 4633f07..8cd4275 100644
--- a/booty/ppc.py
+++ b/booty/ppc.py
@@ -141,34 +141,40 @@ class ppcBootloaderInfo(bootloaderInfo):
isys.sync()
ybinargs = [ yabootProg, "-f", "-C", cf ]
-
+
if not flags.test:
- iutil.execWithRedirect(ybinargs[0],
- ybinargs[1:],
- stdout = "/dev/tty5",
- stderr = "/dev/tty5",
- root = instRoot)
+ rc = iutil.execWithRedirect(ybinargs[0],
+ ybinargs[1:],
+ stdout = "/dev/tty5",
+ stderr = "/dev/tty5",
+ root = instRoot)
+ if rc:
+ return rc
if (not os.access(instRoot + "/etc/yaboot.conf", os.R_OK) and
os.access(instRoot + "/boot/etc/yaboot.conf", os.R_OK)):
os.symlink("../boot/etc/yaboot.conf",
instRoot + "/etc/yaboot.conf")
-
- return ""
+
+ return 0
def setPassword(self, val, isCrypted = 1):
# yaboot just handles the password and doesn't care if its crypted
# or not
self.password = val
-
+
def write(self, instRoot, bl, kernelList, chainList,
defaultDev, justConfig):
if len(kernelList)>= 1:
- out = self.writeYaboot(instRoot, bl, kernelList,
- chainList, defaultDev, justConfig)
+ rc = self.writeYaboot(instRoot, bl, kernelList,
+ chainList, defaultDev, justConfig)
+ if rc:
+ return rc
else:
raise BootyNoKernelWarning
+ return 0
+
def __init__(self, storage):
bootloaderInfo.__init__(self, storage)
self.useYabootVal = 1
diff --git a/booty/s390.py b/booty/s390.py
index 717f50f..9b62600 100644
--- a/booty/s390.py
+++ b/booty/s390.py
@@ -153,19 +153,24 @@ class s390BootloaderInfo(bootloaderInfo):
f.close()
if not justConfigFile:
- iutil.execWithRedirect("/sbin/zipl", [], root = instRoot,
- stdout = "/dev/stdout",
- stderr = "/dev/stderr")
-
- return ""
+ rc = iutil.execWithRedirect("/sbin/zipl", [], root = instRoot,
+ stdout = "/dev/stdout",
+ stderr = "/dev/stderr")
+ if rc:
+ return rc
+
+ return 0
def write(self, instRoot, bl, kernelList, chainList,
defaultDev, justConfig):
- out = self.writeZipl(instRoot, bl, kernelList,
- chainList, defaultDev,
- justConfig | (not self.useZiplVal))
- out = self.writeChandevConf(bl, instRoot)
-
+ rc = self.writeZipl(instRoot, bl, kernelList,
+ chainList, defaultDev,
+ justConfig | (not self.useZiplVal))
+ if rc:
+ return rc
+
+ return self.writeChandevConf(bl, instRoot)
+
def __init__(self, storage):
bootloaderInfo.__init__(self, storage)
self.useZiplVal = 1 # only used on s390
diff --git a/booty/sparc.py b/booty/sparc.py
index 39b84f1..b12b207 100644
--- a/booty/sparc.py
+++ b/booty/sparc.py
@@ -94,18 +94,20 @@ class sparcBootloaderInfo(bootloaderInfo):
sbinargs += ["-U"]
if not flags.test:
- iutil.execWithRedirect(sbinargs[0],
- sbinargs[1:],
- stdout = "/dev/tty5",
- stderr = "/dev/tty5",
- root = instRoot)
+ rc = iutil.execWithRedirect(sbinargs[0],
+ sbinargs[1:],
+ stdout = "/dev/tty5",
+ stderr = "/dev/tty5",
+ root = instRoot)
+ if rc:
+ return rc
if (not os.access(instRoot + "/etc/silo.conf", os.R_OK) and
os.access(instRoot + "/boot/etc/silo.conf", os.R_OK)):
os.symlink("../boot/etc/silo.conf",
instRoot + "/etc/silo.conf")
- return ""
+ return 0
def setPassword(self, val, isCrypted = 1):
# silo just handles the password unencrypted
@@ -114,8 +116,8 @@ class sparcBootloaderInfo(bootloaderInfo):
def write(self, instRoot, bl, kernelList, chainList,
defaultDev, justConfig):
if len(kernelList)>= 1:
- self.writeSilo(instRoot, bl, kernelList, chainList,
- defaultDev, justConfig)
+ return self.writeSilo(instRoot, bl, kernelList, chainList,
+ defaultDev, justConfig)
else:
raise BootyNoKernelWarning
diff --git a/booty/x86.py b/booty/x86.py
index 5d52c31..8ba5d23 100644
--- a/booty/x86.py
+++ b/booty/x86.py
@@ -67,10 +67,12 @@ class x86BootloaderInfo(efiBootloaderInfo):
syncDataToDisk(bootDev, "/", instRoot)
# copy the stage files over into /boot
- iutil.execWithRedirect("/sbin/grub-install",
- ["--just-copy"],
- stdout = "/dev/tty5", stderr = "/dev/tty5",
- root = instRoot)
+ rc = iutil.execWithRedirect("/sbin/grub-install",
+ ["--just-copy"],
+ stdout = "/dev/tty5", stderr = "/dev/tty5",
+ root = instRoot)
+ if rc:
+ return rc
# really install the bootloader
for cmd in cmds:
@@ -85,20 +87,22 @@ class x86BootloaderInfo(efiBootloaderInfo):
else:
syncDataToDisk(bootDev, "/", instRoot)
- iutil.execWithRedirect('/sbin/grub' ,
- [ "--batch", "--no-floppy",
- "--device-map=/boot/grub/device.map" ],
- stdin = p[0],
- stdout = "/dev/tty5", stderr = "/dev/tty5",
- root = instRoot)
+ rc = iutil.execWithRedirect('/sbin/grub' ,
+ [ "--batch", "--no-floppy",
+ "--device-map=/boot/grub/device.map" ],
+ stdin = p[0],
+ stdout = "/dev/tty5", stderr = "/dev/tty5",
+ root = instRoot)
os.close(p[0])
+ if rc:
+ return rc
+
def installGrub(self, instRoot, bootDevs, grubTarget, grubPath,
target, cfPath):
if iutil.isEfi():
- efiBootloaderInfo.installGrub(self, instRoot, bootDevs, grubTarget,
- grubPath, target, cfPath)
- return
+ return efiBootloaderInfo.installGrub(self, instRoot, bootDevs, grubTarget,
+ grubPath, target, cfPath)
args = "--stage2=/boot/grub/stage2 "
@@ -117,7 +121,11 @@ class x86BootloaderInfo(efiBootloaderInfo):
(args, grubPath, stage1Target, grubPath, bPart, grubPath)
cmds.append(cmd)
- self.runGrubInstall(instRoot, bootDev, cmds, cfPath)
+ rc = self.runGrubInstall(instRoot, bootDev, cmds, cfPath)
+ if rc:
+ return rc
+
+ return 0
def writeGrub(self, instRoot, bl, kernelList, chainList,
defaultDev, justConfigFile):
@@ -344,10 +352,10 @@ class x86BootloaderInfo(efiBootloaderInfo):
f.close()
if not justConfigFile:
- self.installGrub(instRoot, bootDevs, grubTarget, grubPath, \
- target, cfPath)
+ return self.installGrub(instRoot, bootDevs, grubTarget, grubPath,
+ target, cfPath)
- return ""
+ return 0
def getMatchingPart(self, bootDev, target):
bootName, bootPartNum = getDiskPart(bootDev, self.storage)
@@ -488,9 +496,9 @@ class x86BootloaderInfo(efiBootloaderInfo):
cmds.append(cmd)
if not justConfigFile:
- self.runGrubInstall(instRoot, bootDev, cmds, cfPath)
+ return self.runGrubInstall(instRoot, bootDev, cmds, cfPath)
- return ""
+ return 0
def writeSysconfig(self, instRoot, installDev):
sysconf = '/etc/sysconfig/grub'
@@ -508,16 +516,18 @@ class x86BootloaderInfo(efiBootloaderInfo):
# XXX HACK ALERT - see declaration above
if self.doUpgradeOnly:
if self.useGrubVal:
- self.upgradeGrub(instRoot, bl, kernelList,
- chainList, defaultDev, justConfig)
- return
+ return self.upgradeGrub(instRoot, bl, kernelList,
+ chainList, defaultDev, justConfig)
+ return 0
if len(kernelList)< 1:
raise BootyNoKernelWarning
- out = self.writeGrub(instRoot, bl, kernelList,
- chainList, defaultDev,
- justConfig | (not self.useGrubVal))
+ rc = self.writeGrub(instRoot, bl, kernelList,
+ chainList, defaultDev,
+ justConfig | (not self.useGrubVal))
+ if rc:
+ return rc
# XXX move the lilo.conf out of the way if they're using GRUB
# so that /sbin/installkernel does a more correct thing
@@ -525,6 +535,7 @@ class x86BootloaderInfo(efiBootloaderInfo):
os.rename(instRoot + "/etc/lilo.conf",
instRoot + "/etc/lilo.conf.anaconda")
+ return 0
def getArgList(self):
args = bootloaderInfo.getArgList(self)