|
35 |
import shutil |
35 |
import shutil |
36 |
import re |
36 |
import re |
37 |
|
37 |
|
38 |
import univention.debug as udbg |
|
|
39 |
import univention.config_registry as ucr |
38 |
import univention.config_registry as ucr |
40 |
from distutils.version import LooseVersion |
39 |
|
41 |
|
40 |
|
42 |
class kernel: |
41 |
class kernel: |
43 |
def __init__(self, kversion, uversion, arch, origversion): |
42 |
def __init__(self, kversion, uversion, arch, origversion): |
|
45 |
self.uversion = uversion |
44 |
self.uversion = uversion |
46 |
self.arch = arch |
45 |
self.arch = arch |
47 |
self.origversion = origversion |
46 |
self.origversion = origversion |
|
|
47 |
|
48 |
def __repr__(self): |
48 |
def __repr__(self): |
49 |
return repr((self.kversion, self.uversion, self.arch)) |
49 |
return repr((self.kversion, self.uversion, self.arch)) |
50 |
|
50 |
|
|
|
51 |
|
51 |
configRegistry=ucr.ConfigRegistry() |
52 |
configRegistry=ucr.ConfigRegistry() |
52 |
configRegistry.load() |
53 |
configRegistry.load() |
53 |
|
54 |
|
54 |
if 'grub/generate-menu-lst' not in configRegistry or configRegistry.is_false('grub/generate-menu-lst', False): |
55 |
if configRegistry.is_false('grub/generate-menu-lst', True): |
55 |
sys.exit(0) |
56 |
sys.exit(0) |
56 |
|
57 |
|
57 |
if os.path.exists("/boot/grub/menu.lst"): |
58 |
if os.path.exists("/boot/grub/menu.lst"): |
58 |
f = open("/boot/grub/menu.lst") |
59 |
for line in open("/boot/grub/menu.lst", "r"): |
59 |
generated_by_ucs = False |
60 |
if "auto-generated through univention-grub-generate-menu-lst" in line: |
60 |
|
61 |
break |
61 |
for i in f.readlines(): |
62 |
else: |
62 |
if i.find("auto-generated through univention-grub-generate-menu-lst") != -1: |
|
|
63 |
generated_by_ucs = True |
64 |
|
65 |
if not generated_by_ucs: |
66 |
print "menu.lst already exists. This typically happens if you have updated from UCS 2.4" |
63 |
print "menu.lst already exists. This typically happens if you have updated from UCS 2.4" |
67 |
print "and haven't converted from chain loading" |
64 |
print "and haven't converted from chain loading" |
68 |
sys.exit(0) |
65 |
sys.exit(0) |
|
74 |
sys.exit(1) |
71 |
sys.exit(1) |
75 |
|
72 |
|
76 |
|
73 |
|
77 |
lst = [] |
74 |
lst = [ |
78 |
lst.append("# This Grub configuration is auto-generated through univention-grub-generate-menu-lst.") |
75 |
"# This Grub configuration is auto-generated through univention-grub-generate-menu-lst.", |
79 |
lst.append("# It is used when booting UCS 3.0 as a Xen DomU with an older version of Pygrub") |
76 |
"# It is used when booting UCS 3.0 as a Xen DomU with an older version of Pygrub", |
80 |
lst.append(" ") |
77 |
"", |
81 |
lst.append("default 0") |
78 |
"default 0", |
82 |
lst.append("timeout 5 ") |
79 |
"timeout 5 ", |
83 |
lst.append(" ") |
80 |
"", |
|
|
81 |
] |
84 |
|
82 |
|
85 |
RE_MENUENTRY = re.compile(r"^\s*menuentry '([^']*)' .*") |
83 |
RE_MENUENTRY = re.compile(r"^\s*menuentry '([^']*)' .*") |
86 |
RE_ROOT = re.compile(r"^\s+set\s+root='\(?(hd[0-9]+|/dev/\w+d[a-z]),[a-z]+([0-9]+)\)?'") |
84 |
RE_ROOT = re.compile(r"^\s+set\s+root='\(?(hd[0-9]+|/dev/\w+d[a-z]),[a-z]+([0-9]+)\)?'") |
|
88 |
RE_INITRD = re.compile(r"^\s+initrd\s+(.+)") |
86 |
RE_INITRD = re.compile(r"^\s+initrd\s+(.+)") |
89 |
RE_CLOSE = re.compile(r"^}") |
87 |
RE_CLOSE = re.compile(r"^}") |
90 |
|
88 |
|
91 |
name = kernel = initrd = None |
89 |
name = root = kernel = initrd = None |
92 |
|
90 |
|
93 |
for line in grub2: |
91 |
for line in grub2: |
94 |
m = RE_MENUENTRY.match(line) |
92 |
m = RE_MENUENTRY.match(line) |
|
105 |
if device.startswith('hd'): |
103 |
if device.startswith('hd'): |
106 |
root = "(%s,%d)" % (device, int(part) - 1) |
104 |
root = "(%s,%d)" % (device, int(part) - 1) |
107 |
elif device.startswith('/dev/'): |
105 |
elif device.startswith('/dev/'): |
108 |
root = "(hd0,%d)" % (int(part) - 1) |
106 |
root = "(hd0,%d)" % (int(part) - 1,) |
109 |
else: |
107 |
else: |
110 |
print >>sys.stderr, "Unhandled root=%s" % (line,) |
108 |
print >>sys.stderr, "Unhandled root=%s" % (line,) |
111 |
|
109 |
|
|
127 |
lst.append("kernel " + kernel) |
125 |
lst.append("kernel " + kernel) |
128 |
if initrd: |
126 |
if initrd: |
129 |
lst.append("initrd " + initrd) |
127 |
lst.append("initrd " + initrd) |
130 |
lst.append(" ") |
128 |
lst.append("") |
131 |
name = root = kernel = initrd = None |
129 |
name = root = kernel = initrd = None |
132 |
continue |
130 |
continue |
133 |
|
131 |
|