/[smeserver]/cdrom.image/updates/upgrade.py
ViewVC logotype

Contents of /cdrom.image/updates/upgrade.py

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.5 - (show annotations) (download) (as text)
Mon Aug 1 05:02:21 2005 UTC (19 years, 3 months ago) by slords
Branch: MAIN
Changes since 1.4: +1 -0 lines
Content type: text/x-python
Add entry to check all filesystems and call before mount on upgrade.
Now we just need to convert/migrate to raid.

1 #
2 # upgrade.py - Existing install probe and upgrade procedure
3 #
4 # Matt Wilson <msw@redhat.com>
5 #
6 # Copyright 2001-2003 Red Hat, Inc.
7 #
8 # This software may be freely redistributed under the terms of the GNU
9 # library public license.
10 #
11 # You should have received a copy of the GNU Library Public License
12 # along with this program; if not, write to the Free Software
13 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
14 #
15
16 import isys
17 import os
18 import iutil
19 import time
20 import rpm
21 import sys
22 import os.path
23 import partedUtils
24 import string
25 import shutil
26 import lvm
27 import hdrlist
28 from flags import flags
29 from fsset import *
30 from partitioning import *
31 from constants import *
32 from installmethod import FileCopyException
33 from product import productName
34
35 from rhpl.log import log
36 from rhpl.translate import _
37
38 upgrade_remove_blacklist = ()
39
40 def findRootParts(intf, id, dispatch, dir, chroot):
41 if dir == DISPATCH_BACK:
42 return
43 if id.rootParts is None:
44 id.rootParts = findExistingRoots(intf, id, chroot)
45
46 id.upgradeRoot = []
47 for (dev, fs, meta) in id.rootParts:
48 id.upgradeRoot.append( (dev, fs) )
49
50 if id.rootParts is not None and len(id.rootParts) > 0:
51 dispatch.skipStep("findinstall", skip = 0)
52 if productName.find("SME Server") == -1:
53 dispatch.skipStep("installtype", skip = 1)
54 else:
55 dispatch.skipStep("findinstall", skip = 1)
56 dispatch.skipStep("installtype", skip = 0)
57
58 def findExistingRoots(intf, id, chroot, upgradeany = 0):
59 if not flags.setupFilesystems:
60 relstr = partedUtils.getCentOSReleaseString (chroot)
61 if ((cmdline.find("upgradeany") != -1) or
62 (upgradeany == 1) or
63 (partedUtils.productMatches(relstr, productName))):
64 return [(chroot, 'ext2', "")]
65 return []
66
67 diskset = partedUtils.DiskSet()
68 diskset.openDevices()
69
70 win = intf.progressWindow(_("Searching"),
71 _("Searching for %s installations...") %
72 (productName,), 5)
73
74 rootparts = diskset.findExistingRootPartitions(intf, chroot,
75 upgradeany = upgradeany)
76 for i in range(1, 6):
77 time.sleep(0.25)
78 win.set(i)
79
80 win.pop()
81
82 # close the devices to make sure we don't leave things sitting open
83 diskset.closeDevices()
84
85 # this is a hack... need to clear the skipped disk list after this
86 partedUtils.DiskSet.skippedDisks = []
87
88 return rootparts
89
90 def getDirtyDevString(dirtyDevs):
91 ret = ""
92 for dev in dirtyDevs:
93 if dev != "loop":
94 ret = "/dev/%s\n" % (dev,)
95 else:
96 ret = "%s\n" % (dev,)
97 return ret
98
99 def mountRootPartition(intf, rootInfo, oldfsset, instPath, allowDirty = 0,
100 raiseErrors = 0, warnDirty = 0, readOnly = 0):
101 (root, rootFs) = rootInfo
102
103 diskset = partedUtils.DiskSet()
104 diskset.openDevices()
105 diskset.startAllRaid()
106 lvm.vgscan()
107 lvm.vgactivate()
108
109 log("going to mount %s on %s as %s" %(root, instPath, rootFs))
110 isys.mount(root, instPath, rootFs)
111
112 oldfsset.reset()
113 newfsset = fsset.readFstab(instPath + '/etc/fstab', intf)
114 for entry in newfsset.entries:
115 oldfsset.add(entry)
116
117 isys.umount(instPath)
118
119 dirtyDevs = oldfsset.hasDirtyFilesystems(instPath)
120 if not allowDirty and dirtyDevs != []:
121 diskset.stopAllRaid()
122 lvm.vgdeactivate()
123 intf.messageWindow(_("Dirty File Systems"),
124 _("The following file systems for your Linux system "
125 "were not unmounted cleanly. Please boot your "
126 "Linux installation, let the file systems be "
127 "checked and shut down cleanly to upgrade.\n"
128 "%s" %(getDirtyDevString(dirtyDevs),)))
129 sys.exit(0)
130 elif warnDirty and dirtyDevs != []:
131 rc = intf.messageWindow(_("Dirty File Systems"),
132 _("The following file systems for your Linux "
133 "system were not unmounted cleanly. Would "
134 "you like to mount them anyway?\n"
135 "%s" % (getDirtyDevString(dirtyDevs,))),
136 type = "yesno")
137 if rc == 0:
138 return -1
139
140 if flags.setupFilesystems:
141 oldfsset.checkFilesystems(instPath)
142 oldfsset.mountFilesystems(instPath, readOnly = readOnly)
143
144 # XXX we should properly support 'auto' at some point
145 if (not oldfsset.getEntryByMountPoint("/") or
146 not oldfsset.getEntryByMountPoint("/").fsystem or
147 not oldfsset.getEntryByMountPoint("/").fsystem.isMountable()):
148 raise RuntimeError, "/etc/fstab did not list a fstype for the root partition which we support"
149
150 # returns None if no filesystem exist to migrate
151 def upgradeMigrateFind(dispatch, thefsset):
152 migents = thefsset.getMigratableEntries()
153 if not migents or len(migents) < 1:
154 dispatch.skipStep("upgrademigratefs")
155 else:
156 dispatch.skipStep("upgrademigratefs", skip = 0)
157
158
159 # returns None if no more swap is needed
160 def upgradeSwapSuggestion(dispatch, id, instPath):
161 # mem is in kb -- round it up to the nearest 4Mb
162 mem = iutil.memInstalled()
163 rem = mem % 16384
164 if rem:
165 mem = mem + (16384 - rem)
166 mem = mem / 1024
167
168 dispatch.skipStep("addswap", 0)
169
170 # don't do this if we have more then 250 MB
171 if mem > 250:
172 dispatch.skipStep("addswap", 1)
173 return
174
175 swap = iutil.swapAmount() / 1024
176
177 # if we have twice as much swap as ram and at least 192 megs
178 # total, we're safe
179 if (swap >= (mem * 1.5)) and (swap + mem >= 192):
180 dispatch.skipStep("addswap", 1)
181 return
182
183 # if our total is 512 megs or more, we should be safe
184 if (swap + mem >= 512):
185 dispatch.skipStep("addswap", 1)
186 return
187
188 fsList = []
189
190 for entry in id.fsset.entries:
191 if entry.fsystem.getName() in fsset.getUsableLinuxFs():
192 if flags.setupFilesystems and not entry.isMounted():
193 continue
194 space = isys.pathSpaceAvailable(instPath + entry.mountpoint)
195 if space > 16:
196 info = (entry.mountpoint, entry.device.getDevice(), space)
197 fsList.append(info)
198
199 suggestion = mem * 2 - swap
200 if (swap + mem + suggestion) < 192:
201 suggestion = 192 - (swap + mem)
202 if suggestion < 32:
203 suggestion = 32
204 suggSize = 0
205 suggMnt = None
206 for (mnt, part, size) in fsList:
207 if (size > suggSize) and (size > (suggestion + 100)):
208 suggMnt = mnt
209
210 id.upgradeSwapInfo = (fsList, suggestion, suggMnt)
211
212 def swapfileExists(swapname):
213 try:
214 os.lstat(swapname)
215 return 1
216 except:
217 return 0
218
219 def createSwapFile(instPath, theFsset, mntPoint, size):
220 fstabPath = instPath + "/etc/fstab"
221 prefix = ""
222
223 if mntPoint != "/":
224 file = mntPoint + "/SWAP"
225 else:
226 file = "/SWAP"
227
228 swapFileDict = {}
229 for entry in theFsset.entries:
230 if entry.fsystem.getName() == "swap":
231 swapFileDict[entry.device.getName()] = 1
232
233 count = 0
234 while (swapfileExists(instPath + file) or
235 swapFileDict.has_key(file)):
236 count = count + 1
237 tmpFile = "/SWAP-%d" % (count)
238 if mntPoint != "/":
239 file = mntPoint + tmpFile
240 else:
241 file = tmpFile
242
243 device = SwapFileDevice(file)
244 device.setSize(size)
245 fsystem = fileSystemTypeGet("swap")
246 entry = FileSystemSetEntry(device, "swap", fsystem)
247 entry.setFormat(1)
248 theFsset.add(entry)
249 theFsset.formatEntry(entry, instPath)
250 theFsset.turnOnSwap(instPath)
251
252 # XXX generalize fstab modification
253 f = open(fstabPath, "a")
254 format = "%-23s %-23s %-7s %-15s %d %d\n";
255 f.write(format % (prefix + file, "swap", "swap", "defaults", 0, 0))
256 f.close()
257
258 # XXX handle going backwards
259 def upgradeMountFilesystems(intf, rootInfo, oldfsset, instPath):
260 # mount everything and turn on swap
261
262 if flags.setupFilesystems:
263 try:
264 mountRootPartition(intf, rootInfo[0], oldfsset, instPath,
265 allowDirty = 0)
266 except SystemError, msg:
267 intf.messageWindow(_("Mount failed"),
268 _("One or more of the file systems listed in the "
269 "/etc/fstab on your Linux system cannot be mounted. "
270 "Please fix this problem and try to upgrade again."))
271 sys.exit(0)
272 except RuntimeError, msg:
273 intf.messageWindow(_("Mount failed"),
274 _("One or more of the file systems listed in the "
275 "/etc/fstab of your Linux system are inconsistent and "
276 "cannot be mounted. Please fix this problem and try to "
277 "upgrade again."))
278 sys.exit(0)
279
280 checkLinks = ( '/etc', '/var', '/var/lib', '/var/lib/rpm',
281 '/boot', '/tmp', '/var/tmp', '/root',
282 '/bin/sh', '/usr/tmp')
283 badLinks = []
284 for n in checkLinks:
285 if not os.path.islink(instPath + n): continue
286 l = os.readlink(instPath + n)
287 if l[0] == '/':
288 badLinks.append(n)
289
290 if badLinks:
291 message = _("The following files are absolute symbolic "
292 "links, which we do not support during an "
293 "upgrade. Please change them to relative "
294 "symbolic links and restart the upgrade.\n\n")
295 for n in badLinks:
296 message = message + '\t' + n + '\n'
297 intf.messageWindow(_("Absolute Symlinks"), message)
298 sys.exit(0)
299
300 # fix for 80446
301 badLinks = []
302 mustBeLinks = ( '/usr/tmp', )
303 for n in mustBeLinks:
304 if not os.path.islink(instPath + n):
305 badLinks.append(n)
306
307 if badLinks:
308 message = _("The following are directories which should instead "
309 "be symbolic links, which will cause problems with the "
310 "upgrade. Please return them to their original state "
311 "as symbolic links and restart the upgrade.\n\n")
312 for n in badLinks:
313 message = message + '\t' + n + '\n'
314 intf.messageWindow(_("Invalid Directories"), message)
315 sys.exit(0)
316
317 else:
318 if not os.access (instPath + "/etc/fstab", os.R_OK):
319 rc = intf.messageWindow(_("Warning"),
320 _("%s not found")
321 % (instPath + "/etc/fstab",),
322 type="ok")
323 return DISPATCH_BACK
324
325 newfsset = fsset.readFstab(instPath + '/etc/fstab', intf)
326 for entry in newfsset.entries:
327 oldfsset.add(entry)
328
329 if flags.setupFilesystems:
330 oldfsset.turnOnSwap(instPath)
331
332 # move the old pre-convert db back in case of problems
333 def resetRpmdb(olddb, instPath):
334 if olddb is not None:
335 iutil.rmrf(instPath + "/var/lib/rpm")
336 os.rename (olddb, instPath + "/var/lib/rpm")
337
338 rebuildTime = None
339
340 def upgradeFindPackages(intf, method, id, instPath, dir):
341 if dir == DISPATCH_BACK:
342 return
343 global rebuildTime
344 if not rebuildTime:
345 rebuildTime = str(int(time.time()))
346 try:
347 method.mergeFullHeaders(id.grpset.hdrlist)
348 except FileCopyException:
349 method.unmountCD()
350 intf.messageWindow(_("Error"),
351 _("Unable to merge header list. This may be "
352 "due to a missing file or bad media. "
353 "Press <return> to try again."))
354
355 # if we've been through here once for this root, then short-circuit
356 if ((id.upgradeInfoFound is not None) and
357 (id.upgradeInfoFound == id.upgradeRoot)):
358 log("already found packages to upgrade for %s" %(id.upgradeRoot,))
359 return
360 else:
361 id.upgradeInfoFound = id.upgradeRoot
362
363 win = intf.waitWindow(_("Finding"),
364 _("Finding packages to upgrade..."))
365
366 # now, set the system clock so the timestamps will be right:
367 if flags.setupFilesystems:
368 iutil.setClock(instPath)
369
370 # we should only have to rebuild for upgrades of pre rpm 4.0.x systems
371 # according to jbj
372 if (os.access(instPath + "/var/lib/rpm/packages.rpm", os.R_OK) and
373 not os.access(instPath + "/var/lib/rpm/Packages", os.R_OK)):
374 win.pop()
375 intf.messageWindow(_("Error"),
376 _("The installation program is unable to upgrade "
377 "systems with a pre-rpm 4.x database. "
378 "Please install the errata rpm packages "
379 "for your release as described in the release "
380 "notes and then run the upgrade procedure."))
381 sys.exit(0)
382
383 else:
384 id.dbpath = None
385
386 try:
387 import findpackageset
388
389 # FIXME: make sure that the rpmdb doesn't have stale locks :/
390 for file in ["__db.001", "__db.002", "__db.003"]:
391 try:
392 os.unlink("%s/var/lib/rpm/%s" %(instPath, file))
393 except:
394 pass
395 # log("failed to unlink /var/lib/rpm/%s" %(file,))
396
397 packages = findpackageset.findpackageset(id.grpset.hdrlist.hdlist,
398 instPath)
399 except rpm.error:
400 if id.dbpath is not None:
401 resetRpmdb(id.dbpath, instPath)
402 win.pop()
403 intf.messageWindow(_("Error"),
404 _("An error occurred when finding the packages to "
405 "upgrade."))
406 sys.exit(0)
407
408 # Turn off all comps
409 id.grpset.unselectAll()
410
411 # unselect all packages
412 for package in id.grpset.hdrlist.pkgs.values():
413 package.usecount = 0
414 package.manual_state = 0
415
416 # turn on the packages in the upgrade set
417 for package in packages:
418 id.grpset.hdrlist[hdrlist.nevra(package)].select()
419
420 # open up the database to check dependencies and currently
421 # installed packages
422 ts = rpm.TransactionSet(instPath)
423 ts.setVSFlags(~(rpm.RPMVSF_NORSA|rpm.RPMVSF_NODSA))
424
425 # make sure we have an arch match. (#87655)
426 # FIXME: bash wasn't good enough (#129677). let's try initscripts
427 mi = ts.dbMatch('name', 'initscripts')
428 myarch = id.grpset.hdrlist["initscripts"][rpm.RPMTAG_ARCH]
429 for h in mi:
430 if h[rpm.RPMTAG_ARCH] != myarch:
431 rc = intf.messageWindow(_("Warning"),
432 _("The arch of the release of %s you "
433 "are upgrading to appears to be %s "
434 "which does not match your previously "
435 "installed arch of %s. This is likely "
436 "to not succeed. Are you sure you "
437 "wish to continue the upgrade process?")
438 %(productName, h[rpm.RPMTAG_ARCH],
439 myarch),
440 type="yesno")
441 if rc == 0:
442 try:
443 resetRpmdb(id.dbpath, instPath)
444 except Exception, e:
445 log("error returning rpmdb to old state: %s" %(e,))
446 pass
447 sys.exit(0)
448 else:
449 log("WARNING: upgrade between possibly incompatible "
450 "arches %s -> %s" %(h[rpm.RPMTAG_ARCH], myarch))
451
452 mi = ts.dbMatch()
453 found = 0
454 hasX = 0
455 hasFileManager = 0
456
457 for h in mi:
458 release = h[rpm.RPMTAG_RELEASE]
459 # I'm going to try to keep this message as politically correct
460 # as possible. I think the Ximian GNOME is a very pretty desktop
461 # and the hackers there do an extraordinary amount of work on
462 # them. But it throws a huge wrench in our upgrade process. We
463 # just want to warn our users that there are packages on the system
464 # that might get messed up during the upgrade process. Nothing
465 # personal, guys. - msw
466 if (string.find(release, "helix") > -1
467 or string.find(release, "ximian") > -1
468 or string.find(release, "eazel") > -1):
469 log("Third party package %s-%s-%s could cause problems." %
470 (h[rpm.RPMTAG_NAME],
471 h[rpm.RPMTAG_VERSION],
472 h[rpm.RPMTAG_RELEASE]))
473 found = 1
474 if h[rpm.RPMTAG_NAME] == "XFree86" or h[rpm.RPMTAG_NAME] == "xorg-x11":
475 hasX = 1
476 if h[rpm.RPMTAG_NAME] == "nautilus":
477 hasFileManager = 1
478 if h[rpm.RPMTAG_NAME] == "kdebase":
479 hasFileManager = 1
480 if h[rpm.RPMTAG_NAME] == "gmc":
481 hasFileManager = 1
482
483 if found:
484 rc = intf.messageWindow(_("Warning"),
485 _("This system appears to have third "
486 "party packages installed that "
487 "overlap with packages included in "
488 "%s. Because these packages "
489 "overlap, continuing the upgrade "
490 "process may cause them to stop "
491 "functioning properly or may cause "
492 "other system instability. Please see "
493 "the release notes for more information."
494 "\n\n"
495 "Do you wish to continue the upgrade "
496 "process?") % (productName,),
497 type="yesno")
498 if rc == 0:
499 try:
500 resetRpmdb(id.dbpath, instPath)
501 except Exception, e:
502 log("error returning rpmdb to old state: %s" %(e,))
503 pass
504 sys.exit(0)
505
506 if not os.access(instPath + "/etc/e-smith-release", os.R_OK):
507 rc = intf.messageWindow(_("Warning"),
508 _("This system does not have an "
509 "/etc/e-smith-release file. It is possible "
510 "that this is not a %s system. "
511 "Continuing with the upgrade process may "
512 "leave the system in an unusable state. Do "
513 "you wish to continue the upgrade process?") % (productName,),
514 type="yesno")
515 if rc == 0:
516 try:
517 resetRpmdb(id.dbpath, instPath)
518 except Exception, e:
519 log("error returning rpmdb to old state: %s" %(e,))
520 pass
521 sys.exit(0)
522
523 # Figure out current version for upgrade nag and for determining weird
524 # upgrade cases
525 supportedUpgradeVersion = -1
526 mi = ts.dbMatch('provides', 'e-smith-release')
527 for h in mi:
528 if h[rpm.RPMTAG_EPOCH] is None:
529 epoch = None
530 else:
531 epoch = str(h[rpm.RPMTAG_EPOCH])
532
533 if supportedUpgradeVersion <= 0:
534 val = rpm.labelCompare(('21', '6.0', '11'),
535 (epoch, h[rpm.RPMTAG_VERSION],
536 h[rpm.RPMTAG_RELEASE]))
537 if val > 0:
538 supportedUpgradeVersion = 0
539 else:
540 supportedUpgradeVersion = 1
541 break
542
543 if supportedUpgradeVersion == 0:
544 rc = intf.messageWindow(_("Warning"),
545 _("You appear to be upgrading from a system "
546 "which is too old to upgrade to this "
547 "version of %s. Are you sure you wish to "
548 "continue the upgrade "
549 "process?") %(productName,),
550 type = "yesno")
551 if rc == 0:
552 try:
553 resetRpmdb(id.dbpath, instPath)
554 except Exception, e:
555 log("error returning rpmdb to old state: %s" %(e,))
556 pass
557 sys.exit(0)
558
559
560 # during upgrade, make sure that we only install %lang colored files
561 # for the languages selected to be supported.
562 langs = ''
563 if os.access(instPath + "/etc/sysconfig/i18n", os.R_OK):
564 f = open(instPath + "/etc/sysconfig/i18n", 'r')
565 for line in f.readlines():
566 line = string.strip(line)
567 parts = string.split(line, '=')
568 if len(parts) < 2:
569 continue
570 if string.strip(parts[0]) == 'SUPPORTED':
571 langs = parts[1]
572 if len(langs) > 0:
573 if langs[0] == '"' and langs[-1:] == '"':
574 langs = langs[1:-1]
575 break
576 del f
577 ## if langs:
578 ## rpm.addMacro("_install_langs", langs)
579
580 # check the installed system to see if the packages just
581 # are not newer in this release.
582 if hasX and not hasFileManager:
583 for name in ("nautilus", "kdebase", "gmc"):
584 try:
585 h = ts.dbMatch('name', name).next()
586 except StopIteration:
587 continue
588 if h is not None:
589 hasFileManager = 1
590 break
591
592 # make sure the boot loader being used is being installed.
593 # FIXME: generalize so that specific bits aren't needed
594 if iutil.getArch() == "i386" and id.bootloader.useGrub():
595 log("Upgrade: User selected to use GRUB for bootloader")
596 if id.grpset.hdrlist.has_key("grub") and not id.grpset.hdrlist["grub"].isSelected():
597 log("Upgrade: grub is not currently selected to be upgraded")
598 h = None
599 try:
600 h = ts.dbMatch('name', 'grub').next()
601 except StopIteration:
602 pass
603 if h is None:
604 text = ("Upgrade: GRUB is not already installed on the "
605 "system, selecting GRUB")
606 id.upgradeDeps ="%s%s\n" % (id.upgradeDeps, text)
607 log(text)
608 id.grpset.hdrlist["grub"].select()
609 if iutil.getArch() == "i386" and not id.bootloader.useGrub():
610 log("Upgrade: User selected to use LILO for bootloader")
611 if id.grpset.hdrlist.has_key("lilo") and not id.grpset.hdrlist["lilo"].isSelected():
612 log("Upgrade: lilo is not currently selected to be upgraded")
613 h = None
614 try:
615 h = ts.dbMatch('name', 'lilo').next()
616 except StopIteration:
617 pass
618 if h is None:
619 text = ("Upgrade: LILO is not already installed on the "
620 "system, selecting LILO")
621 id.upgradeDeps ="%s%s\n" % (id.upgradeDeps, text)
622 log(text)
623 id.grpset.hdrlist["lilo"].select()
624
625
626 h = None
627 try:
628 h = ts.dbMatch('name', 'gnome-core').next()
629 except StopIteration:
630 pass
631 if h is not None:
632 log("Upgrade: gnome-core was on the system. Upgrading to GNOME 2")
633 upgraded = []
634 for pkg in ("gnome-terminal", "gnome-desktop", "gnome-session",
635 "gnome-panel", "metacity", "file-roller", "yelp",
636 "nautilus"):
637 if id.grpset.hdrlist.has_key(pkg) and not id.grpset.hdrlist[pkg].isSelected():
638 id.grpset.hdrlist[pkg].select()
639 upgraded.append(pkg)
640
641 text = ("Upgrade: gnome-core is on the system. Selecting packages "
642 "to upgrade to GNOME2: %s" %(str(upgraded),))
643 id.upgradeDeps = "%s%s\n" %(id.upgradeDeps, text)
644
645 # if they have up2date-gnome, they probably want the applet now too
646 # since it works in both gnome and kde
647 if (id.grpset.hdrlist.has_key("rhn-applet")
648 and not id.grpset.hdrlist["rhn-applet"].isSelected()):
649 log("Upgrade: rhn-applet is not currently selected to be upgraded")
650 h = None
651 try:
652 h = ts.dbMatch('name', 'up2date-gnome').next()
653 except StopIteration:
654 pass
655
656 if h is not None:
657 hdr = None
658 try:
659 hdr = ts.dbMatch('name', 'rhn-applet').next()
660 except StopIteration:
661 pass
662 if hdr is None:
663 text = ("Upgrade: up2date-gnome is on the "
664 "system, but rhn-applet isn't. Selecting "
665 "rhn-applet to be installed")
666 id.upgradeDeps = "%s%s\n" % (id.upgradeDeps, text)
667 log(text)
668 id.grpset.hdrlist["rhn-applet"].select()
669
670 # and since xterm is now split out from XFree86 (#98254)
671 if (id.grpset.hdrlist.has_key("xterm") and
672 not id.grpset.hdrlist["xterm"].isSelected()):
673 h = None
674 try:
675 h = ts.dbMatch('name', 'XFree86').next()
676 except StopIteration:
677 pass
678 if h is not None:
679 text = ("Upgrade: XFree86 was on the system. Pulling in xterm "
680 "for upgrade.")
681 id.upgradeDeps = "%s%s\n" %(id.upgradeDeps, text)
682 log(text)
683 id.grpset.hdrlist["xterm"].select()
684
685 # input methods all changed. hooray!
686 imupg = ( ("ami", "iiimf-le-hangul"),
687 ("kinput2-canna-wnn6", "iiimf-le-canna"),
688 ("miniChinput", "iiimf-le-chinput"),
689 ("xcin", "iiimf-le-xcin") )
690 iiimf = 0
691 for (old, new) in imupg:
692 mi = ts.dbMatch("name", old)
693 if (mi.count() > 0 and id.grpset.hdrlist.has_key(new) and
694 not id.grpset.hdrlist[new].isSelected()):
695 text = "Upgrade: %s was on the system. Pulling in %s" %(old, new)
696 id.upgradeDeps = "%s%s\n" %(id.upgradeDeps, text)
697 log(text)
698 id.grpset.hdrlist[new].select()
699 iiimf = 1
700 if iiimf:
701 imupg = ( ("iiimf-gnome-im-switcher", "control-center"),
702 ("iiimf-gnome-im-switcher", "gnome-panel"),
703 ("iiimf-gtk", "gtk2"),
704 ("system-switch-im", "gtk2"),
705 ("iiimf-x", "xorg-x11"),
706 ("iiimf-x", "XFree86"))
707 for (new, old) in imupg:
708 mi = ts.dbMatch("name", old)
709 if (not id.grpset.hdrlist.has_key(new) or
710 id.grpset.hdrlist[new].isSelected()):
711 continue
712 if (mi.count() > 0 or
713 id.grpset.hdrlist.has_key(old) and
714 id.grpset.hdrlist[old].isSelected()):
715 text = "Upgrade: Need iiimf base package %s" %(new,)
716 id.upgradeDeps = "%s%s\n" %(id.upgradeDeps, text)
717 log(text)
718 id.grpset.hdrlist[new].select()
719
720 # firefox replaces mozilla/netscape (#137244)
721 if (id.grpset.hdrlist.has_key("firefox") and
722 not id.grpset.hdrlist["firefox"].isSelected()):
723 found = 0
724 for p in ("mozilla", "netscape-navigator", "netscape-communicator"):
725 mi = ts.dbMatch("name", p)
726 found += mi.count()
727 if found > 0:
728 text = "Upgrade: Found a graphical browser. Pulling in firefox"
729 id.upgradeDeps = "%s%s\n" %(id.upgradeDeps, text)
730 log(text)
731 id.grpset.hdrlist["firefox"].select()
732
733 # now some upgrade removal black list checking... there are things that
734 # if they were installed in the past, we want to remove them because
735 # they'll screw up the upgrade otherwise
736 for pkg in upgrade_remove_blacklist:
737 h = None
738 try:
739 h = ts.dbMatch('name', pkg).next()
740 except StopIteration:
741 pass
742 if h is not None:
743 text = ("Upgrade: %s is on the system but will cause problems "
744 "with the upgrade transaction. Removing." %(pkg,))
745 log(text)
746 id.upgradeDeps = "%s%s\n" %(id.upgradeDeps, text)
747 id.upgradeRemove.append(pkg)
748
749 # new package dependency fixup
750 depcheck = hdrlist.DependencyChecker(id.grpset, how = "u")
751 for p in id.grpset.hdrlist.pkgs.values():
752 if p.isSelected():
753 ts.addInstall(p.hdr, p.hdr, "u")
754 deps = ts.check(depcheck.callback)
755 for pkgnevra in deps:
756 text = ("Upgrade Dependency: Needs %s, "
757 "automatically added." % (pkgnevra,))
758 # log(text)
759 id.upgradeDeps = "%s%s\n" % (id.upgradeDeps, text)
760
761 win.pop()
762
763

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed