--- anaconda | 4 ++++ backend.py | 17 ++++++++++++----- constants.py | 5 +++++ flags.py | 1 + yuminstall.py | 39 +++++++++++++++++++++++++++++---------- 5 files changed, 51 insertions(+), 15 deletions(-) diff --git a/anaconda b/anaconda index 55eaf8d..3e614b9 100755 --- a/anaconda +++ b/anaconda @@ -240,6 +240,7 @@ def parseOptions(): op.add_option("--nomount", dest="rescue_nomount", action="store_true", default=False) op.add_option("--updates", dest="updateSrc", action="store", type="string") op.add_option("--dogtail", dest="dogtail", action="store", type="string") + op.add_option("--dlabel", action="store_true", default=False) return op.parse_args() @@ -666,6 +667,9 @@ if __name__ == "__main__": # Default is to prompt to mount the installed system. anaconda.rescue_mount = not opts.rescue_nomount + if opts.dlabel: #autodetected driverdisc in use + flags.dlabel = True + if opts.noipv4: flags.useIPv4 = False diff --git a/backend.py b/backend.py index fcd3571..4e425cf 100644 --- a/backend.py +++ b/backend.py @@ -73,8 +73,8 @@ class AnacondaBackend: def copyFirmware(self, anaconda): # Multiple driver disks may be loaded, so we need to glob for all - # the firmware files in all the driver disk directories. - for f in glob.glob("/tmp/DD-*/firmware/*"): + # the firmware files in the common DD firmware directory + for f in glob.glob(DD_EXTRACTED+"/lib/firmware/*"): try: shutil.copyfile(f, "%s/lib/firmware/" % anaconda.rootPath) except IOError, e: @@ -94,16 +94,23 @@ class AnacondaBackend: has_iscsi_disk = True break - if anaconda.id.extraModules: - self.copyFirmware(anaconda) + #always copy the firmware files from DD + self.copyFirmware(anaconda) if anaconda.id.extraModules or has_iscsi_disk: for (n, arch, tag) in self.kernelVersionList(anaconda.rootPath): packages.recreateInitrd(n, anaconda.rootPath) - for d in glob.glob("/tmp/DD-*"): + #copy RPMS + for d in glob.glob(DD_RPMS): shutil.copytree(d, "/root/" + os.path.basename(d)) + #copy modules and firmware + try: + shutil.copytree(DD_EXTRACTED, "/root/DD") + except IOError, e: + pass + storage.writeEscrowPackets(anaconda) sys.stdout.flush() diff --git a/constants.py b/constants.py index 9c4fbb1..fb81c90 100644 --- a/constants.py +++ b/constants.py @@ -82,3 +82,8 @@ else: # this string will be combined with "An unhandled exception"... # the leading space is not a typo. exceptionText += _(" against anaconda at %s") %(bugzillaUrl,) + +# DriverDisc Paths +DD_EXTRACTED = "/tmp/DD" +DD_RPMS = "/tmp/DD-*" + diff --git a/flags.py b/flags.py index 93472e3..e0d7329 100644 --- a/flags.py +++ b/flags.py @@ -70,6 +70,7 @@ class Flags: self.__dict__['flags']['test'] = 0 self.__dict__['flags']['rootpath'] = 0 self.__dict__['flags']['livecdInstall'] = 0 + self.__dict__['flags']['dlabel'] = 0 self.__dict__['flags']['ibft'] = 1 self.__dict__['flags']['iscsi'] = 0 self.__dict__['flags']['serial'] = 0 diff --git a/yuminstall.py b/yuminstall.py index accf452..4eac19c 100644 --- a/yuminstall.py +++ b/yuminstall.py @@ -649,16 +649,18 @@ class AnacondaYum(YumSorter): extraRepos = [] - if self.anaconda.id.extraModules: - for d in glob.glob("/tmp/DD-*/rpms"): - dirname = os.path.basename(os.path.dirname(d)) - rid = "anaconda-%s" % dirname - - repo = AnacondaYumRepo(rid) - repo.baseurl = [ "file:///%s" % d ] - repo.name = "Driver Disk %s" % dirname.split("-")[1] - repo.enable() - extraRepos.append(repo) + (_, _, _, _, ddArch) = os.uname() + + #Add the Driver disc repos to Yum + for d in glob.glob(DD_RPMS): + dirname = os.path.basename(d) + rid = "anaconda-%s" % dirname + + repo = AnacondaYumRepo(rid) + repo.baseurl = [ "file:///%s" % d ] + repo.name = "Driver Disk %s" % dirname.split("-")[1] + repo.enable() + extraRepos.append(repo) if self.anaconda.isKickstart: # This is the same pattern as from loader/urls.c:splitProxyParam. @@ -1292,6 +1294,23 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon log.info("selecting package %s for module %s" % (pkg.name, name)) self.ayum.install(po=pkg) + #We need to install the packages which contain modules from DriverDiscs + for modPath in isys.modulesWithPaths(): + if modPath.startswith(DD_EXTRACTED): + moduleProvides = modPath[len(DD_EXTRACTED):] + else: + continue + + pkgs = self.ayum.returnPackagesByDep(moduleProvides) + + if not pkgs: + log.warning("Didn't find any package providing %s" % (modPath,)) + + for pkg in pkgs: + log.info("selecting package %s for %s" % (pkg.name, modPath)) + self.ayum.install(po=pkg) + + def selectBestKernel(self, anaconda): """Find the best kernel package which is available and select it.""" -- 1.6.4.4 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list