| Summary: | Anaconda invariably chooses the newest kernel during kickstart | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Michael MacDonald <mjmac> |
| Component: | anaconda | Assignee: | Anaconda Maintenance Team <anaconda-maint-list> |
| Status: | CLOSED INSUFFICIENT_DATA | QA Contact: | Release Test Team <release-test-team> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 6.1 | CC: | kevin.ying |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2011-11-17 21:30:09 UTC | Type: | --- |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Bug Depends On: | |||
| Bug Blocks: | 756082 | ||
Please attach log files in /tmp generated by the installer: http://fedoraproject.org/wiki/How_to_debug_installation_problems#Log_Files The behavior is right there in the code:
In anaconda-13.21.149/yuminstall.py:1546, we have the following block:
# do some sanity checks for kernel and bootloader
if not anaconda.id.getUpgrade():
# New installs only - upgrades will already have all this stuff.
self.selectBestKernel(anaconda)
map(self.selectPackage, anaconda.platform.packages)
self.selectFSPackages(anaconda.id.storage)
self.selectAnacondaNeeds()
else:
self.ayum.update()
Looking at selectBestKernel() (yuminstall.py:1480), we see this:
def selectBestKernel(self, anaconda):
"""Find the best kernel package which is available and select it."""
def getBestKernelByArch(pkgname, ayum):
"""Convenience func to find the best arch of a kernel by name"""
try:
pkgs = ayum.pkgSack.returnNewestByName(pkgname)
except yum.Errors.PackageSackError:
return None
pkgs = self.ayum.bestPackagesFromList(pkgs)
if len(pkgs) == 0:
return None
return pkgs[0]
def selectKernel(pkgname):
try:
pkg = getBestKernelByArch(pkgname, self.ayum)
except PackageSackError:
log.debug("no %s package" % pkgname)
return False
if not pkg:
return False
log.info("selected %s package for kernel" % pkg.name)
self.ayum.install(po=pkg)
self.selectModulePackages(anaconda, pkg.name)
if len(self.ayum.tsInfo.matchNaevr(name="gcc")) > 0:
log.debug("selecting %s-devel" % pkg.name)
self.selectPackage("%s-devel.%s" % (pkg.name, pkg.arch))
return True
foundkernel = False
if not foundkernel and isys.isPaeAvailable():
if selectKernel("kernel-PAE"):
foundkernel = True
if not foundkernel:
selectKernel("kernel")
Reading the code, it's apparent that the newest package which provides "kernel" will always be chosen. Supplying an older kernel in the %package list results in the "protected multilib" error described in the previous comment. This makes sense, as anaconda doesn't want to install two different versions of the kernel.
I'd like to revisit this bz as we would like to be able to specify specific kernel versions in 6.x kickstarts. What can we provide you? Do you need our anaconda-tb-* log? |
Description of problem: In EL5, it was possible to list a specific kernel to be installed by kickstart, like so: %packages kernel-2.6.18-238.9.1.el5 This would result in that specific kernel being installed, even if newer kernels were available. As of EL6, this functionality is no longer present. It seems that the newest kernel is always chosen, regardless of what is specified in the kickstart. As an experiment, if I tacked on an arch to the kernel package entry like this: %packages kernel-2.6.32-131.2.1.el6.x86_64 Then I'd get an error like so: Protected multilib versions kernel-2.6.32-131.4.1.el6.x86_64 != kernel-2.6.32-131.2.1.el6.x86_64 Version-Release number of selected component (if applicable): 13.21.117 How reproducible: Always Steps to Reproduce: 1. Install EL6.x via kickstart (e.g. with Cobbler) 2. Specify a kernel package older than the latest available kernel 3. Tear out ones hair in frustration Actual results: Latest kernel is always installed via kickstart. Hair is lost. Users are annoyed. Expected results: Asked-for kernel version is installed. I keep my full-ish head of hair. Users get their work done. Additional info: I understand that this use-case is uncommon, as most people want the latest errata kernel to be installed at kickstart time. However, there is a valid use-case (testing) which requires specific kernels to be installed for certain versions of software. I can imagine other related use-cases which may be a small percentage of usage, but are nonetheless important.