1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
import upgrade
from snack import *
from text import WaitWindow, OkCancelWindow
from translate import _
import raid
import os
from log import log
class RescueInterface:
def waitWindow(self, title, text):
return WaitWindow(self.screen, title, text)
def messageWindow(self, title, text, type = "ok"):
if type == "ok":
ButtonChoiceWindow(self.screen, _(title), _(text),
buttons = [ _("OK") ])
else:
return OkCancelWindow(self.screen, _(title), _(text))
def __init__(self, screen):
self.screen = screen
def runRescue(serial):
from fstab import NewtFstab
fstab = None
log.open (serial, 0, 0)
try:
fstab = NewtFstab(1, serial, 0, 0, None, None, None, 0, [], 0, 0,
requireBlockDevices = 0)
except SystemError, text:
print _("WARNING: no valid block devices were found.\n")
except:
print _("ERROR: unknown error encountered reading partition tables.\n")
if not fstab:
os.execv("/bin/sh", [ "-/bin/sh" ])
screen = SnackScreen()
intf = RescueInterface(screen)
parts = upgrade.findExistingRoots(intf, fstab)
if not parts:
root = None
elif len(parts) == 1:
root = parts[0]
else:
height = min (len (parts), 12)
if height == 12:
scroll = 1
else:
scroll = 0
partList = []
for (drive, fs) in parts:
partList.append(drive)
(button, choice) = \
ListboxChoiceWindow(screen, _("System to Rescue"),
_("What partition holds the root partition "
"of your installation?"), partList,
[ _("OK"), _("Exit") ], width = 30,
scroll = scroll, height = height,
help = "multipleroot")
if button == string.lower (_("Exit")):
root = None
else:
root = parts[choice]
rootmounted = 0
if root:
try:
upgrade.mountRootPartition(intf, root, fstab, '/mnt/sysimage',
allowDirty = 1)
ButtonChoiceWindow(screen, _("Rescue"),
_("Your system has been mounted under /mnt/sysimage.\n\n"
"Press <return> to get a shell. The system will reboot "
"automatically when you exit from the shell."),
[_("OK")] )
rootmounted = 1
except SystemError, msg:
ButtonChoiceWindow(screen, _("Rescue").
_("An error occured trying to mount some or all of your "
"system. Some of it may be mounted under /mnt/sysimage.\n\n"
"Press <return> to get a shell. The system will reboot "
"automatically when you exit from the shell."),
[_("OK")] )
else:
ButtonChoiceWindow(screen, _("Rescue Mode"),
_("You don't have any Linux partitions. Press "
"return to get a shell. The system will reboot "
"automatically when you exit from the shell."),
[ _("Back") ], width = 50)
screen.finish()
for file in [ "services", "protocols", "group" ]:
os.symlink('/mnt/runtime/etc/' + file, '/etc/' + file)
if rootmounted:
print
print _("Your system is mounted under the /mnt/sysimage directory.")
print
os.execv("/bin/sh", [ "-/bin/sh" ])
|