[master/rhel7] driverdisk: Create a repo for network drivers (#1016004)
Brian C. Lane
bcl at redhat.com
Tue Feb 25 16:13:04 UTC 2014
Network downloaded drivers (individual rpms) do not have a repo
associated with them. This copies them over to the target system and
creates a repository for them so that they will be installed.
Resolves: rhbz#1016004
---
dracut/driver-updates | 6 ++----
pyanaconda/packaging/yumpayload.py | 33 +++++++++++++++++++++++++++------
2 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/dracut/driver-updates b/dracut/driver-updates
index ea73981..d6fe92e 100755
--- a/dracut/driver-updates
+++ b/dracut/driver-updates
@@ -542,15 +542,13 @@ def process_dd(dd_path):
map(lambda d: setattr(d, "selected", True), drivers)
# Copy the repository for Anaconda to use during install
- if os.path.isdir(dd_path+"/repodata"):
- copy_repo(dd_path, "/updates/run/install/DD-")
+ copy_repo(dd_path, "/updates/run/install/DD-")
for driver in filter(lambda d: d.selected, drivers):
dd_extract(driver, "/updates/")
# Write the package names for all modules and firmware for Anaconda
- if os.path.isdir(dd_path+"/repodata") \
- and ("modules" in driver.flags or "firmwares" in driver.flags):
+ if "modules" in driver.flags or "firmwares" in driver.flags:
with open("/run/install/dd_packages", "a") as f:
f.write("%s\n" % driver.name)
diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index 0d8fad2..d930c02 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -41,6 +41,7 @@ import os
import shutil
import sys
import time
+from glob import glob
from pyanaconda.iutil import execReadlines
from . import *
@@ -1428,24 +1429,44 @@ reposdir=%s
# packages that were selected is in /run/install/dd_packages
# Add repositories
- dir_num = 1
- repo_template="/run/install/DD-%d/%s/"
+ dir_num = 0
while True:
- repo = repo_template % (dir_num, blivet.arch.getArch())
- if not os.path.isdir(repo+"repodata"):
+ dir_num += 1
+ repo = "/run/install/DD-%d/" % dir_num
+ if not os.path.isdir(repo):
break
+
+ # Drivers are under /<arch>/ or /DD-net/
+ if os.path.isdir(repo+"DD-net"):
+ repo += "DD-net"
+ elif os.path.isdir(repo+blivet.arch.getArch()):
+ repo += blivet.arch.getArch()
+ else:
+ log.debug("No driver repo in %s". repo)
+ continue
+
+ # Run createrepo if there are rpms and no repodata
+ if not os.path.isdir(repo+"/repodata"):
+ rpms = glob(repo+"/*rpm")
+ if not rpms:
+ continue
+ log.info("Running createrepo on %s", repo)
+ iutil.execWithRedirect("createrepo", [repo])
+
ks_repo = self.data.RepoData(name="DD-%d" % dir_num,
baseurl="file://"+repo,
enabled=True)
self.addRepo(ks_repo)
- dir_num += 1
# Add packages
if not os.path.exists("/run/install/dd_packages"):
return
with open("/run/install/dd_packages", "r") as f:
for line in f:
- self._requiredPackages.append(line.strip())
+ package = line.strip()
+ if package not in self._requiredPackages:
+ self._requiredPackages.append(package)
+ log.debug("required packages = %s", self._requiredPackages)
def checkSoftwareSelection(self):
log.info("checking software selection")
--
1.8.5.3
More information about the anaconda-patches
mailing list