[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH 1/1] display reIPL information before reboot



Display reIPL information before a reboot so that the user knows
which partition the 390 will reboot into. This can help diagnose
an error if the 390 will mistakenly reboot into a different partition
than expected. It also conveniently displays reboot information
rather than relying on the user know the correct place to get the
information out of.

---
anaconda | 2 ++
gui.py | 1 +
iutil.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/anaconda b/anaconda
index 746ce1f..f6a3059 100755
--- a/anaconda
+++ b/anaconda
@@ -977,4 +977,6 @@ if __name__ == "__main__":
log.info("attempting to eject %s" % drive.path)
drive.eject()

+ iutil.dumpReIPLFiles ()
+
del anaconda.intf
diff --git a/gui.py b/gui.py
index 4e65362..bfeb65c 100755
--- a/gui.py
+++ b/gui.py
@@ -1330,6 +1330,7 @@ class InstallControlWindow:
takeScreenShot()

def _doExit (self, *args):
+ iutil.dumpReIPLFiles ()
gtk.main_quit()
os._exit(0)

diff --git a/iutil.py b/iutil.py
index f83b002..ef2de33 100644
--- a/iutil.py
+++ b/iutil.py
@@ -39,6 +39,11 @@ _ = lambda x: gettext.ldgettext("anaconda", x)
import logging
log = logging.getLogger("anaconda")

+tty3_handler = logging.FileHandler("/dev/tty3")
+reIPL_log = logging.getLogger("reIPL")
+reIPL_log.addHandler(tty3_handler)
+reIPL_log.setLevel(logging.INFO)
+
#Python reimplementation of the shell tee process, so we can
#feed the pipe output into two places at the same time
class tee(threading.Thread):
@@ -1015,6 +1020,63 @@ def reIPL(anaconda, loader_pid):
# or a two-item list with errorMessage and rebootInstr (=> shutdown)
return message

+def stringFileContents (filename):
+ try:
+ data = ""> +
+ fp = open (filename)
+
+ data = "" ().strip ()
+
+ fp.close ()
+
+ dataContents = ""
+
+ for ch in data:
+ if ch in string.printable:
+ dataContents += ch
+ else:
+ dataContents = None
+ break
+
+ if dataContents is not None:
+ return dataContents
+
+ dataContents = ""
+
+ for ch in data:
+ dataContents += hex (ord (ch)) + " "
+
+ return dataContents
+
+ except Excception, e:
+
+ return "ERROR"
+
+def dumpReIPLFiles ():
+ try:
+ filename = "/sys/firmware/reipl/reipl_type"
+
+ if not os.path.isfile (filename):
+ return
+
+ type = stringFileContents (filename)
+
+ reIPL_log.info ("%s = %s" % (filename, type,))
+
+ directory = "/sys/firmware/reipl/%s" % (type,)
+
+ if not os.path.exists (directory):
+ return
+
+ for directoryFile in os.listdir (directory):
+ contents = stringFileContents ("%s/%s" % (directory, directoryFile,))
+
+ reIPL_log.info ("%s/%s = %s" % (directory, directoryFile, contents,))
+
+ except Exception, e:
+ log.info("dumpReIPLFiles: Caught exception %s", (e,))
+
def resetRpmDb(rootdir):
for rpmfile in glob.glob("%s/var/lib/rpm/__db.*" % rootdir):
try:
--
1.6.4.4


--
Mark

You must be the change you wish to see in the world. -- Mahatma Gandhi
Worrying is praying for that you do not wish to happen.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]