Don't use /mnt/source2 anymore. /mnt/isodir is for image installs to mount whatever contains the images, and /mnt/source is always the source mount point. Also don't use methodstr where we don't have to. --- anaconda | 4 ++-- image.py | 30 ++++++++++++++++-------------- installclass.py | 2 +- installmethod.py | 2 +- loader2/nfsinstall.c | 42 +++++++++++++++++++++++++++++------------- yuminstall.py | 35 +++++++++++++++++++---------------- 6 files changed, 68 insertions(+), 47 deletions(-) diff --git a/anaconda b/anaconda index 0e8f7b3..539bffc 100755 --- a/anaconda +++ b/anaconda @@ -507,7 +507,7 @@ class Anaconda: self.intf = InstallInterface() def setBackend(self, instClass): - b = instClass.getBackend(self.methodstr) + b = instClass.getBackend() self.backend = apply(b, (self.rootPath,)) def setMethodstr(self, methodstr): @@ -519,7 +519,7 @@ class Anaconda: if methodstr.startswith("nfs://"): self.methodstr = "file:///" + methodstr[6:] elif methodstr.startswith("nfsiso:/"): - self.methodstr = "file:///mnt/source2" + self.methodstr = "file://" + methodstr[8:] elif methodstr.startswith("cdrom://"): (device, tree) = string.split(methodstr[8:], ":", 1) diff --git a/image.py b/image.py index ebdbd53..a5d934c 100644 --- a/image.py +++ b/image.py @@ -11,7 +11,7 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # import isys -import os, stat, string, sys +import os, os.path, stat, string, sys from constants import * import rhpl @@ -120,8 +120,8 @@ def getMediaId(path): return None # This mounts the directory containing the iso images, and places the -# mount point in /tmp/isodir. -def mountDirectory(methodstr, messageWindow): +# mount point in isodir. +def mountDirectory(isodir, methodstr, messageWindow): if methodstr.startswith("hd://"): method = methodstr[5:] (device, fstype, path) = method.split(":", 3) @@ -129,7 +129,7 @@ def mountDirectory(methodstr, messageWindow): else: return - # First check to see if /tmp/isodir is mounted. + # First check to see if isodir is mounted. f = open("/proc/mounts", "r") lines = f.readlines() f.close() @@ -141,7 +141,7 @@ def mountDirectory(methodstr, messageWindow): return try: - isys.mount(device, "/tmp/isodir", fstype = fstype) + isys.mount(device, isodir, fstype = fstype) except SystemError, msg: log.error("couldn't mount ISO source directory: %s" % msg) messageWindow(_("Couldn't Mount ISO Source"), @@ -155,16 +155,16 @@ def mountDirectory(methodstr, messageWindow): custom_buttons=[_("_Exit")]) sys.exit(0) -def mountImage(tree, discnum, currentMedia, messageWindow, discImages={}): - if currentMedia: +def mountImage(isodir, tree, discnum, messageWindow, discImages={}): + if os.path.ismount(tree): raise SystemError, "trying to mount already-mounted iso image!" if discImages == {}: - discImages = findIsoImages("/mnt/source", messageWindow) + discImages = findIsoImages(isodir, messageWindow) while True: try: - isoImage = "/mnt/source/%s" % (discImages[discnum]) + isoImage = "%s/%s" % (isodir, discImages[discnum]) isys.losetup("/dev/loop1", isoImage, readOnly = 1) isys.mount("/dev/loop1", tree, fstype = 'iso9660', readOnly = 1); break @@ -182,7 +182,9 @@ def mountImage(tree, discnum, currentMedia, messageWindow, discImages={}): if ans == 0: sys.exit(0) elif ans == 1: - discImages = findIsoImages("/mnt/source", messageWindow) + discImages = findIsoImages(isodir, messageWindow) + + return discImages # given groupset containing information about selected packages, use # the disc number info in the headers to come up with message describing @@ -248,13 +250,13 @@ def umountImage(tree, currentMedia): isys.umount(tree, removeDir=0) isys.unlosetup("/dev/loop1") -def unmountCD(tree, messageWindow): - if not tree: +def unmountCD(path, messageWindow): + if not path: return while True: try: - isys.umount(tree, removeDir=0) + isys.umount(path, removeDir=0) break except Exception, e: log.error("exception in _unmountCD: %s" %(e,)) @@ -263,7 +265,7 @@ def unmountCD(tree, messageWindow): "Please make sure you're not accessing " "%s from the shell on tty2 " "and then click OK to retry.") - % (tree,)) + % (path,)) def verifyMedia(tree, discnum, timestamp): if os.access("%s/.discinfo" % tree, os.R_OK): diff --git a/installclass.py b/installclass.py index 74036c5..7efd6b9 100644 --- a/installclass.py +++ b/installclass.py @@ -412,7 +412,7 @@ class BaseInstallClass(object): mouse.set(mouseName, emulThree, device) id.setMouse(mouse) - def getBackend(self, methodstr): + def getBackend(self): # this should be overriden in distro install classes from backend import AnacondaBackend return AnacondaBackend diff --git a/installmethod.py b/installmethod.py index c5ea871..f47e6fa 100644 --- a/installmethod.py +++ b/installmethod.py @@ -25,7 +25,7 @@ def doMethodComplete(anaconda): except Exception: pass - if anaconda.methodstr.startswith("cdrom://"): + if anaconda.mediaDevice: try: shutil.copyfile("%s/media.repo" % anaconda.backend.ayum.tree, "%s/etc/yum.repos.d/%s-install-media.repo" %(anaconda.rootPath, productName)) diff --git a/loader2/nfsinstall.c b/loader2/nfsinstall.c index a3cce72..829e824 100644 --- a/loader2/nfsinstall.c +++ b/loader2/nfsinstall.c @@ -6,7 +6,7 @@ * Michael Fulbright <msf@xxxxxxxxxx> * Jeremy Katz <katzj@xxxxxxxxxx> * - * Copyright 1997 - 2002 Red Hat, Inc. + * Copyright 1997 - 2007 Red Hat, Inc. * * This software may be freely redistributed under the terms of the GNU * General Public License. @@ -115,7 +115,7 @@ char * mountNfsImage(struct installMethod * method, } else if (nfsGetSetup(&host, &directory) == LOADER_BACK) { return NULL; } - + stage = NFS_STAGE_MOUNT; dir = 1; break; @@ -148,7 +148,7 @@ char * mountNfsImage(struct installMethod * method, stage = NFS_STAGE_NFS; - if (!doPwMount(fullPath, "/mnt/source", "nfs", + if (!doPwMount(fullPath, "/mnt/source", "nfs", IMOUNT_RDONLY, mountOpts)) { if (!access("/mnt/source/images/stage2.img", R_OK)) { logMessage(INFO, "can access /mnt/source/images/stage2.img"); @@ -172,19 +172,36 @@ char * mountNfsImage(struct installMethod * method, } } else { stage = NFS_STAGE_DONE; - url = "nfs://mnt/source/."; + url = "nfs://mnt/source"; break; } } else { logMessage(WARNING, "unable to access /mnt/source/images/stage2.img"); } - if ((path = validIsoImages("/mnt/source", &foundinvalid))) { + /* If we get here, it wasn't a regular NFS method but it may + * still be NFSISO. Remount on the isodir mountpoint and try + * again. + */ + umount("/mnt/source"); + if (!doPwMount(fullPath, "/mnt/isodir", "nfs", IMOUNT_RDONLY, + mountOpts)) { + } else { + newtWinMessage(_("Error"), _("OK"), + _("That directory could not be mounted from " + "the server.")); + if (loaderData->method >= 0) { + loaderData->method = -1; + } + break; + } + + if ((path = validIsoImages("/mnt/isodir", &foundinvalid))) { foundinvalid = 0; logMessage(INFO, "Path to valid iso is %s", path); - copyUpdatesImg("/mnt/source/updates.img"); + copyUpdatesImg("/mnt/isodir/updates.img"); - if (mountLoopback(path, "/mnt/source2", "loop1")) + if (mountLoopback(path, "/mnt/source", "loop1")) logMessage(WARNING, "failed to mount iso %s loopback", path); else { /* try to see if we're booted off of a CD with stage2 */ @@ -197,17 +214,17 @@ char * mountNfsImage(struct installMethod * method, newtPopWindow(); rc = 0; } else { - rc = mountStage2("/mnt/source2/images/stage2.img"); + rc = mountStage2("/mnt/source/images/stage2.img"); } if (rc) { - umountLoopback("/mnt/source2", "loop1"); + umountLoopback("/mnt/source", "loop1"); if (rc == -1) foundinvalid = 1; } else { /* JKFIXME: hack because /mnt/source is hard-coded * in mountStage2() */ - copyUpdatesImg("/mnt/source2/images/updates.img"); - copyProductImg("/mnt/source2/images/product.img"); + copyUpdatesImg("/mnt/source/images/updates.img"); + copyProductImg("/mnt/source/images/product.img"); queryIsoMediaCheck(path); @@ -220,7 +237,7 @@ char * mountNfsImage(struct installMethod * method, /* if we fell through to here we did not find a valid NFS */ /* source for installation. */ - umount("/mnt/source"); + umount("/mnt/isodir"); if (foundinvalid) rc = asprintf(&buf, _("The %s installation tree in that " "directory does not seem to match " @@ -235,7 +252,6 @@ char * mountNfsImage(struct installMethod * method, loaderData->method = -1; } - break; } else { newtWinMessage(_("Error"), _("OK"), diff --git a/yuminstall.py b/yuminstall.py index 5b2375f..75dc76a 100644 --- a/yuminstall.py +++ b/yuminstall.py @@ -259,7 +259,6 @@ class AnacondaYum(YumSorter): def __init__(self, anaconda): YumSorter.__init__(self) self.anaconda = anaconda - self.methodstr = anaconda.methodstr self._loopbackFile = None # The loader mounts the first disc for us, so don't remount it. @@ -269,11 +268,16 @@ class AnacondaYum(YumSorter): # Only needed for hard drive and nfsiso installs. self._discImages = {} - # Where is the source media mounted? - if self.methodstr.find("source2") != -1: - self.tree = "/mnt/source2" + # Where is the source media mounted? isodir only matters if we are + # doing NFS or HD image installs, and points to the directory where + # the ISO images themselves may be found. tree always points to the + # directory where Packages/ is located. + self.tree = "/mnt/source" + + if os.path.ismount("/mnt/isodir"): + self.isodir = "/mnt/isodir" else: - self.tree = "/mnt/source" + self.isodir = None self.doConfigSetup(root=anaconda.rootPath) self.conf.installonlypkgs = [] @@ -351,20 +355,19 @@ class AnacondaYum(YumSorter): (self.currentMedia, discnum, relative)) # Unmount any currently mounted ISO images and mount the one - # containing the requested packages. If this is the first time - # through, /mnt/source is not going to be mounted yet so we first - # need to do that. - if self.tree.find("source2") != -1: + # containing the requested packages. + if self.isodir: umountImage(self.tree, self.currentMedia) self.currentMedia = None # mountDirectory checks before doing anything, so it's safe to # call this repeatedly. - mountDirectory(self.methodstr, self.anaconda.intf.messageWindow) + mountDirectory(self.isodir, self.anaconda.methodstr, + self.anaconda.intf.messageWindow) - mountImage(self.tree, discnum, self.currentMedia, - self.anaconda.intf.messageWindow, - discImages=self._discImages) + discImages = mountImage(self.isodir, self.tree, discnum, + self.anaconda.intf.messageWindow, + discImages=self._discImages) self.currentMedia = discnum else: if os.access("%s/.discinfo" % self.tree, os.R_OK): @@ -377,9 +380,9 @@ class AnacondaYum(YumSorter): if self.timestamp is None: self.timestamp = timestamp - # if self.currentMedia is None, then we shouldn't have anything + # If self.currentMedia is None, then we shouldn't have anything # mounted. double-check by trying to unmount, but we don't want - # to get into a loop of trying to unmount forever. if + # to get into a loop of trying to unmount forever. If # self.currentMedia is set, then it should still be mounted and # we want to loop until it unmounts successfully if self.currentMedia is None: @@ -451,7 +454,7 @@ class AnacondaYum(YumSorter): root = root) repo.cost = 100 - if self.anaconda.mediaDevice or self.anaconda.methodstr.find("source2") != -1: + if self.anaconda.mediaDevice or self.isodir != -1: repo.mediaid = getMediaId(self.tree) log.info("set mediaid of repo to: %s" % repo.mediaid) -- 1.5.3.4 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list