[elrepo] RE driver update incompatibility issue

Phil Perry phil at elrepo.org
Wed Feb 6 22:23:55 EST 2013


On 02/02/13 14:06, Lamar Owen wrote:
> On 01/30/2013 08:12 AM, Phil Perry wrote:
>>
>> I may have jumped the gun here somewhat. Managing the kernel module is
>> probably the easy part. I forgot about the hard part, and that is
>> managing the many linked X11 libraries that are also version-specific.
>
> Ok, another track here.
>
> Phil, how difficult do you think it would be to have all the packages be
> installable both individually and side-by-side? That is, have multiple
> versions of the kmod and the X bits installed, into different
> nonconflicting directors? Then, use alternatives to manage the different
> trains? That way, I could install the legacy train with the mainline
> installed, switch to it with alternatives, and uninstall the mainline,
> which wouldn't break dependencies. And, when/if I upgrade my video card
> I can install the mainline, switch to it, and uninstall the legacy,
> again without breaking deps or configs. I have no idea how difficult
> that would be, either.
>

I guess that sounds doable in principle.

Without knowing how alternatives works, I guess installing each package 
in it's own space, and then have some script copy all the files to their 
correct location based on which driver is selected, create the symlinks 
etc and do any other housekeeping tasks is what would be required. If 
one can do those things from within a RPM package then I see no reason 
why a script couldn't handle it too. You would have to call weak-modules 
to handle the kABI tracking kernel module.

TBH, any such solution is (a) going to require a major non-trivial 
rewrite and (b) significantly diverges from the packaging paradigm. For 
these reasons I'm extremely reluctant to pursue such a solution if for 
no other reason that adding such complexity is almost certainly going to 
add an increased risk of unreliability.

> Then, an early warning 'system' of sorts with the next to last and last
> packages in the mainline (if possible) before another legacy train is
> forked from the mainline could give some sort of notice to the user; how
> this notice is given I don't know. But if there were some way to
> gracefully regress to the vesa framebuffer or even noveau if the
> mainline driver can't load.....
>

Yes, that would be nice. Unfortunately it's not easy, and even more 
difficult on el6 where we need to specifically blacklist the nouveau 
driver to prevent it from loading - it makes it hard to undo our changes 
and gracefully fall back without a complete package uninstall.

> Or maybe a check in %pre that can abort installation of the driver if
> the hardware isn't supported, leaving the old one in place?
>

Can this be done? Can one abort a package installation from a %pre script?

Even if it is possible, how would one handle deps in a yum transaction? 
nvidia-x11-drv requires kmod-nvidia of the same version and vice versa. 
If you abort the installation of one, that will affect other packages in 
the yum transaction and the depsolve resolution is already done at this 
point and the transaction underway.

The more I look at this whole issue the more I see there are no easy 
solutions.

Moving forward, I have been writing a utility (nvidia-detect) to detect 
NVIDIA graphics cards and recommend the appropriate driver. Here is some 
example output:

$ nvidia-detect
Probing for supported NVIDIA devices...
Found: [10de:0ca3] NVIDIA Corporation GT215 [GeForce GT 240]
This device requires the current NVIDIA driver (kmod-nvidia).

$ nvidia-detect
Probing for supported NVIDIA devices...
Found: [10de:0392] NVIDIA Corporation G73 [GeForce 7600 GS]
This device requires the NVIDIA legacy 304.xx driver (kmod-nvidia-304xx).

The program may also be run from a script and will return values based 
upon the appropriate driver. Return codes are:

0: No supported devices found
1: Device supported by the current NVIDIA release driver
2: Device supported by the NVIDIA legacy 96.xx driver
3: Device supported by the NVIDIA legacy 173.xx driver
4: Device supported by the NVIDIA legacy 304.xx driver

Being able to run from a script might prove useful in automating the 
process of detecting if the current driver supports the installed device.

As a standalone utility it should be useful in (a) allowing users to 
select the correct driver for their device, and (b) could be useful in 
determining if a new driver supports their device before updating. 
Taking the recent case as an example, if a user has v304 of the driver 
installed and yum tells them there is a new version (310.xx) available, 
they could:

yum update nvidia-detect

which would pull in the new version 310.xx of nvidia-detect. Running 
that new version would confirm to the user that their graphics card is 
either still supported by the current driver at which point it is safe 
to 'yum update kmod-nvidia' or it is now only supported by the legacy 
304.xx driver at which point they should not update. Maybe we can come 
up with a way to automate that process, but at least we will now have a 
tool to help in that.

I'm just in the process of packaging the program and hope to release it 
to elrepo soon. I'd appreciate testers and feedback.



More information about the elrepo mailing list