aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwiktor w brodlo <wiktor@brodlo.net>2011-06-15 16:59:54 +0000
committerwiktor w brodlo <wiktor@brodlo.net>2011-06-15 16:59:54 +0000
commit2590d96369d0217e31dc2812690dde61dac417b5 (patch)
tree82276f787b08a28548e342c7921486f1acefab9f /textw/upgrade_bootloader_text.py
parentfirst commit (diff)
downloadanaconda-2590d96369d0217e31dc2812690dde61dac417b5.tar.gz
anaconda-2590d96369d0217e31dc2812690dde61dac417b5.tar.bz2
anaconda-2590d96369d0217e31dc2812690dde61dac417b5.zip
Initial import from Sabayon (ver 0.9.9.56)
Diffstat (limited to 'textw/upgrade_bootloader_text.py')
-rw-r--r--textw/upgrade_bootloader_text.py183
1 files changed, 183 insertions, 0 deletions
diff --git a/textw/upgrade_bootloader_text.py b/textw/upgrade_bootloader_text.py
new file mode 100644
index 0000000..db736f3
--- /dev/null
+++ b/textw/upgrade_bootloader_text.py
@@ -0,0 +1,183 @@
+#
+# upgrade_bootloader_text.py: text bootloader dialog for upgrades
+#
+# Copyright (C) 2002 Red Hat, Inc. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Author(s): Jeremy Katz <katzj@redhat.com>
+#
+
+from snack import *
+from constants_text import *
+from flags import flags
+import string
+from booty import checkbootloader
+from storage.devices import devicePathToName
+
+from constants import *
+import gettext
+_ = lambda x: gettext.ldgettext("anaconda", x)
+
+import logging
+log = logging.getLogger("anaconda")
+
+class UpgradeBootloaderWindow:
+ def _ideToLibata(self, rootPath):
+ try:
+ f = open("/proc/modules", "r")
+ buf = f.read()
+ if buf.find("libata") == -1:
+ return False
+ except:
+ log.debug("error reading /proc/modules")
+ pass
+
+ try:
+ f = open(rootPath + "/etc/modprobe.conf")
+ except:
+ log.debug("error reading /etc/modprobe.conf")
+ return False
+
+ modlines = f.readlines()
+ f.close()
+
+ try:
+ f = open("/tmp/scsidisks")
+ except:
+ log.debug("error reading /tmp/scsidisks")
+ return False
+ mods = []
+ for l in f.readlines():
+ (disk, mod) = l.split()
+ if mod.strip() not in mods:
+ mods.append(mod.strip())
+ f.close()
+
+ for l in modlines:
+ stripped = l.strip()
+
+ if stripped == "" or stripped[0] == "#":
+ continue
+
+ if stripped.find("scsi_hostadapter") != -1:
+ mod = stripped.split()[-1]
+ if mod in mods:
+ mods.remove(mod)
+
+ if len(mods) > 0:
+ return True
+ return False
+
+ def __call__(self, screen, anaconda):
+ self.screen = screen
+ self.dispatch = anaconda.dispatch
+ self.bl = anaconda.bootloader
+
+ newToLibata = self._ideToLibata(anaconda.rootPath)
+ (self.type, self.bootDev) = \
+ checkbootloader.getBootloaderTypeAndBoot(anaconda.rootPath, storage=anaconda.storage)
+
+ blradio = RadioGroup()
+
+ (update, newbl, nobl) = (0, 0, 0)
+ if not self.dispatch.stepInSkipList("bootloader"):
+ newbl = 1
+ elif self.dispatch.stepInSkipList("instbootloader"):
+ nobl = 1
+ else:
+ if newToLibata or self.type is None or self.bootDev is None:
+ newbl = 1
+ else:
+ update = 1
+
+ if newToLibata or self.type is None or self.bootDev is None:
+ if newToLibata:
+ t = TextboxReflowed(53,
+ _("Due to system changes, your boot loader "
+ "configuration can not be automatically updated."))
+ else:
+ t = TextboxReflowed(53,
+ _("The installer is unable to detect the boot loader "
+ "currently in use on your system."))
+
+
+ self.update_radio = blradio.add(_("Update boot loader configuration"),
+ "update", update)
+ self.update_radio.w.checkboxSetFlags(FLAG_DISABLED, FLAGS_SET)
+ else:
+ t = TextboxReflowed(53,
+ _("The installer has detected the %(type)s "
+ "boot loader currently installed on "
+ "%(bootDev)s.")
+ % {'type': self.type, 'bootDev': self.bootDev})
+
+ self.update_radio = blradio.add(_("Update boot loader configuration"),
+ "update", update)
+
+ self.nobl_radio = blradio.add(_("Skip boot loader updating"),
+ "nobl", nobl)
+ self.newbl_radio = blradio.add(_("Create new boot loader "
+ "configuration"),
+ "newbl", newbl)
+
+ buttons = ButtonBar(screen, [TEXT_OK_BUTTON, TEXT_BACK_BUTTON])
+
+ grid = GridFormHelp(screen, _("Upgrade Boot Loader Configuration"),
+ "bl-upgrade", 1, 5)
+
+ grid.add(t, 0, 0, (0,0,0,1))
+ grid.add(self.update_radio, 0, 1, (0,0,0,0))
+ grid.add(self.nobl_radio, 0, 2, (0,0,0,0))
+ grid.add(self.newbl_radio, 0, 3, (0,0,0,1))
+ grid.add(buttons, 0, 4, growx = 1)
+
+
+ while 1:
+ result = grid.run()
+
+ button = buttons.buttonPressed(result)
+
+ if button == TEXT_BACK_CHECK:
+ screen.popWindow()
+ return INSTALL_BACK
+
+ if blradio.getSelection() == "nobl":
+ self.dispatch.skipStep("bootloadersetup", skip = 1)
+ self.dispatch.skipStep("bootloader", skip = 1)
+ self.dispatch.skipStep("bootloaderadvanced", skip = 1)
+ self.dispatch.skipStep("instbootloader", skip = 1)
+ elif blradio.getSelection() == "newbl":
+ self.dispatch.skipStep("bootloadersetup", skip = 0)
+ self.dispatch.skipStep("bootloader", skip = 0)
+ self.dispatch.skipStep("bootloaderadvanced", skip = 0)
+ self.dispatch.skipStep("instbootloader", skip = 0)
+ self.bl.doUpgradeOnly = 0
+ else:
+ self.dispatch.skipStep("bootloadersetup", skip = 0)
+ self.dispatch.skipStep("bootloader", skip = 1)
+ self.dispatch.skipStep("bootloaderadvanced", skip = 1)
+ self.dispatch.skipStep("instbootloader", skip = 0)
+ self.bl.doUpgradeOnly = 1
+
+ if self.type == "GRUB":
+ self.bl.useGrubVal = 1
+ else:
+ self.bl.useGrubVal = 0
+ self.bl.setDevice(devicePathToName(self.bootDev))
+
+
+
+ screen.popWindow()
+ return INSTALL_OK