Files
Controls-docs/admin-guide/legacy/misc/linuxhowto-sl5-nvidiadriverinstallationupdate.rst
T
2021-05-05 14:24:27 +02:00

22 KiB

Linux How To - SL5 - Nvidia Driver Installation/Update On SL51 i386

References

Requirements

DKMS (Dynamic Kernel Module Support) framework has to be installed before the nvidia RPM installation, because the RPM scripts use it for proper setup:

# yum install dkms.noarch

Procedure

Check what graphic card is in your computer and what driver is installed:

# lspci
...
01:00.0 VGA compatible controller: nVidia Corporation G72 [GeForce 7300 LE] (rev a1)

# less /etc/X11/xorg.conf
(See the output below at "before nvidia installation".)

# rpm -qa | grep nvid
(nothing found)

Before beginning with the installation of the new graphics driver, make a backup of your current `xorg.conf`:

# cd /etc/X11/
# cp xorg.conf xorg.conf_bak

Check whether some nvidia driver is available:

# [root@pc7377 X11]# yum list | grep nvidia
nvidia-x11-drv.i386                      100.14.19-3.9.slp5     sl51psi

# [root@pc7377 X11]# yum install nvidia-x11-drv.i386


### begin output
Loading "kernel-module" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for nvidia-x11-drv to pack into transaction set.
nvidia-x11-drv-100.14.19- 100% |=========================|  24 kB    00:00     
---> Package nvidia-x11-drv.i386 0:100.14.19-3.9.slp5 set to be updated
--> Running transaction check
--> Processing Dependency: dkms for package: nvidia-x11-drv
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for dkms to pack into transaction set.
dkms-2.0.17.4-1.9.slp5.no 100% |=========================|  36 kB    00:00     
---> Package dkms.noarch 0:2.0.17.4-1.9.slp5 set to be updated
--> Running transaction check
Beginning Kernel Module Plugin
Finished Kernel Module Plugin

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Installing:
 nvidia-x11-drv          i386       100.14.19-3.9.slp5  sl51psi           7.1 M
Installing for dependencies:
 dkms                    noarch     2.0.17.4-1.9.slp5  sl51psi            89 k

Transaction Summary
=============================================================================
Install      2 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 7.2 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): nvidia-x11-drv-100 100% |=========================| 7.1 MB    00:00     
(2/2): dkms-2.0.17.4-1.9. 100% |=========================|  89 kB    00:00     
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: dkms                         ######################### [1/2] 
  Installing: nvidia-x11-drv               ######################### [2/2] 

Installed: nvidia-x11-drv.i386 0:100.14.19-3.9.slp5
Dependency Installed: dkms.noarch 0:2.0.17.4-1.9.slp5
Complete!
[root@pc7377 X11]# dkms status -m nvidia
nvidia, 100.14.19-3.9.slp5, 2.6.18-92.1.10.el5, i686: installed 
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.4.el5, i686: installed-weak from 2.6.18-92.1.10.el5
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.21.el5, i686: installed-weak from 2.6.18-92.1.10.el5
[root@pc7377 X11]# rpm -q --scripts nvidia-x11-drv-100
package nvidia-x11-drv-100 is not installed
[root@pc7377 X11]# rpm -q --scripts nvidia-x11-drv
postinstall scriptlet (using /bin/sh):
/sbin/ldconfig
# Make sure we have a Files section in xorg.conf, otherwise create an empty one
XORGCONF=/etc/X11/xorg.conf
[ -w ${XORGCONF} ] && ! grep -q 'Section "Files"' ${XORGCONF} && \
    echo -e 'Section "Files"\nEndSection' >> ${XORGCONF}
# Enable the proprietary driver
/usr/sbin/nvidia-config-display enable || :
# Add to DKMS registry
dkms add -m nvidia -v 100.14.19-3.9.slp5 -q || :
# Rebuild and make available for the currenty running kernel
dkms build -m nvidia -v 100.14.19-3.9.slp5 -q || :
dkms install -m nvidia -v 100.14.19-3.9.slp5 -q --force || :
/sbin/MAKEDEV nvidia
preuninstall scriptlet (using /bin/sh):
# Remove all versions from DKMS registry
dkms remove -m nvidia -v 100.14.19-3.9.slp5 -q --all || :
# Last removal, disable the proprietary driver
if [ $1 -eq 0 ]; then
    /usr/sbin/nvidia-config-display disable || :
fi
postuninstall program: /sbin/ldconfig
### end output

Check the status of the nvidia kernel module. (From the dkms manpage: dkms status returns the current status of modules, versions and kernels within the tree as well as whether they have been added, built or installed.):

# dkms status -m nvidia
nvidia, 100.14.19-3.9.slp5, 2.6.18-92.1.10.el5, i686: installed 
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.4.el5, i686: installed-weak from 2.6.18-92.1.10.el5
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.21.el5, i686: installed-weak from 2.6.18-92.1.10.el5

List the package specific scriptlet(s) that are used as part of the installation and uninstallation processes:

# rpm -q --scripts nvidia-x11-drv

### begin output
postinstall scriptlet (using /bin/sh):
/sbin/ldconfig
# Make sure we have a Files section in xorg.conf, otherwise create an empty one
XORGCONF=/etc/X11/xorg.conf
[ -w ${XORGCONF} ] && ! grep -q 'Section "Files"' ${XORGCONF} && \
    echo -e 'Section "Files"\nEndSection' >> ${XORGCONF}
# Enable the proprietary driver
/usr/sbin/nvidia-config-display enable || :
# Add to DKMS registry
dkms add -m nvidia -v 100.14.19-3.9.slp5 -q || :
# Rebuild and make available for the currenty running kernel
dkms build -m nvidia -v 100.14.19-3.9.slp5 -q || :
dkms install -m nvidia -v 100.14.19-3.9.slp5 -q --force || :
/sbin/MAKEDEV nvidia
preuninstall scriptlet (using /bin/sh):
# Remove all versions from DKMS registry
dkms remove -m nvidia -v 100.14.19-3.9.slp5 -q --all || :
# Last removal, disable the proprietary driver
if [ $1 -eq 0 ]; then
    /usr/sbin/nvidia-config-display disable || :
fi
postuninstall program: /sbin/ldconfig
### end output

Check whether your xorg.conf was modified to use the nvidia driver:

# less /etc/X11/xorg.conf

### begin output                                                        
(after nvidia installation)                                     #       (before nvidia installation)
# Xorg configuration created by pyxf86config                    #       # Xorg configuration created by pyxf86config
                                                                #        
Section "ServerLayout"                                          #        Section "ServerLayout"
        Identifier     "Default Layout"                         #                Identifier     "Default Layout"
        Screen      0  "Screen0" 0 0                            #                Screen      0  "Screen0" 0 0
        InputDevice    "Keyboard0" "CoreKeyboard"               #                InputDevice    "Keyboard0" "CoreKeyboard"
EndSection                                                      #        EndSection
                                                                #        
Section "Files"                                                 #        
        ModulePath   "/usr/lib/xorg/modules/extensions/nvidia"  #        
        ModulePath   "/usr/lib/xorg/modules"                    #        
EndSection                                                      #        
                                                                #        
Section "InputDevice"                                           #        Section "InputDevice"
        Identifier  "Keyboard0"                                 #                Identifier  "Keyboard0"
        Driver      "kbd"                                       #                Driver      "kbd"
        Option      "XkbModel" "pc105"                          #                Option      "XkbModel" "pc105"
        Option      "XkbLayout" "ch"                            #                Option      "XkbLayout" "ch"
        Option      "XkbVariant" "de_nodeadkeys"                #                Option      "XkbVariant" "de_nodeadkeys"
EndSection                                                      #        EndSection
                                                                #        
Section "Device"                                                #        Section "Device"
        Identifier  "Videocard0"                                #                Identifier  "Videocard0"
        Driver      "nvidia"                                    #                Driver      "nv"
EndSection                                                      #        EndSection
                                                                #        
Section "Screen"                                                #        Section "Screen"
        Identifier "Screen0"                                    #                Identifier "Screen0"
        Device     "Videocard0"                                 #                Device     "Videocard0"
        DefaultDepth     24                                     #                DefaultDepth     24
        SubSection "Display"                                    #                SubSection "Display"
                Viewport   0 0                                  #                        Viewport   0 0
                Depth     24                                    #                        Depth     24
        EndSubSection                                           #                EndSubSection
EndSection                                                      #        EndSection
### end output                                                  #

Test the module with glxgears for instance:

[root@pc7377 ~]# glxgears 

11424 frames in 5.0 seconds = 2284.662 FPS
11291 frames in 5.0 seconds = 2258.003 FPS
11244 frames in 5.0 seconds = 2248.682 FPS
11290 frames in 5.0 seconds = 2257.974 FPS
12626 frames in 5.0 seconds = 2525.121 FPS
3439 frames in 5.0 seconds = 687.363 FPS
964 frames in 5.0 seconds = 192.629 FPS
964 frames in 5.0 seconds = 192.620 FPS
1395 frames in 5.0 seconds = 278.978 FPS
12080 frames in 5.0 seconds = 2415.854 FPS
11252 frames in 5.0 seconds = 2250.348 FPS

Problem With Automatic Nvidia Driver Update On SL51 i386

Problem Description

On some systems the automatic nvidia driver update by dkms fails. Somehow when the new RPM nvidia-x11-drv-169.12-4.9.slp5 is installed by yum or rpm, the old nvidia version 100.14.19-3.9.slp5 remains in dkms status added, i.e. the respective directory remains in the dkms tree, while the original driver sources are removed from /usr/src/, i.e. the RPM nvidia-x11-drv-100.14.19-3.9.slp5 was removed.

During reboot the service dkms_autoinstaller (see chkconfig --list) obviously tries to build the old 100.14.19-3.9.slp5 as well because it tries to get the file /var/lib/dkms/nvidia/100.14.19-3.9.slp5/source/dkms.conf. This, however, fails because the .../scource is a symbolic link pointing to the source directory that was removed during the nvidia RPM update as mentioned before:

"source -> /usr/src/nvidia-100.14.19-3.9.slp5"

Though, this basically would not be a problem if dkms was not confused by the occurences of several nvidia versions in its tree under /var/lib/dkms/nvidia/.

The main questions are:

  • Why does the update procedure only partially clean the installation environment (under /usr/src/ it is clean, under /var/lib/dkms/nvidia/ it is not)?
  • Why does dkms not properly recognize the new nvidia version only but also tries to build modules out of the sources of the older version?

Solution

The problem appears if the nvidia driver RPM is installed or updated before the dkms framework is ready on the system, because the RPM scripts invoke a variety of dkms commands to install the new driver into the dkms tree and to remove the old driver version from it. Thus, one has to install the dkms RPM first, before doing any driver installation or updates.

Manual Update Using DKMS

Perform the following steps:

[root@pc7377 ~]# dkms status -m nvidia
nvidia, 100.14.19-3.9.slp5, 2.6.18-92.1.10.el5, i686: installed
nvidia, 100.14.19-3.9.slp5, 2.6.18-92.1.13.el5, i686: installed
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.4.el5, i686: installed-weak from 2.6.18-92.1.10.el5
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.4.el5, i686: installed-weak from 2.6.18-92.1.13.el5
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.21.el5, i686: installed-weak from 2.6.18-92.1.10.el5
nvidia, 100.14.19-3.9.slp5, 2.6.18-53.1.21.el5, i686: installed-weak from 2.6.18-92.1.13.el5
nvidia, 100.14.19-3.9.slp5, 2.6.18-92.1.10.el5, i686: installed-weak from 2.6.18-92.1.13.el5

[root@pc7377 ~]# uname -a
Linux pc7377 2.6.18-92.1.13.el5 #1 SMP Wed Sep 24 16:44:34 EDT 2008 i686 i686 i386 GNU/Linux

[root@pc7377 ~]# locate nvidia.ko
/lib/modules/2.6.18-53.1.21.el5/weak-updates/lib/modules/2.6.18-92.1.10.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-53.1.21.el5/weak-updates/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-53.1.4.el5/weak-updates/lib/modules/2.6.18-92.1.10.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-53.1.4.el5/weak-updates/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-92.1.10.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-92.1.10.el5/weak-updates/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/var/lib/dkms/nvidia/100.14.19-3.9.slp5/2.6.18-92.1.10.el5/i686/module/nvidia.ko
/var/lib/dkms/nvidia/100.14.19-3.9.slp5/2.6.18-92.1.13.el5/i686/module/nvidia.ko

[root@pc7377 ~]# rpm -q nvidia-x11-drv
nvidia-x11-drv-100.14.19-3.9.slp5

[root@pc7377 ~]# cp -i /etc/X11/xorg.conf /etc/X11/xorg.conf_orig

[root@pc7377 ~]# yum --enablerepo=psi-beta update nvidia-x11-drv
...
=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Updating:
 nvidia-x11-drv          i386       169.12-4.9.slp5  psi-beta          9.7 M

Transaction Summary
=============================================================================
Install      0 Package(s)
Update       1 Package(s)
Remove       0 Package(s)

Total download size: 9.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/1): nvidia-x11-drv-169 100% |=========================| 9.7 MB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating  : nvidia-x11-drv               ######################### [1/2]

  Cleanup   : nvidia-x11-drv               ######################### [2/2]

Updated: nvidia-x11-drv.i386 0:169.12-4.9.slp5
  • Note

    yum update takes some time because it invokes dkms, which builds the required module(s) on the fly and does the cleaning up, see nvidia.spec or the output of `rpm -q --scripts RPM`:

    [root@pc7377 nvidia]# rpm -q --scripts nvidia-x11-drv-169.12-4.9.slp5
    postinstall scriptlet (using /bin/sh):
    /sbin/ldconfig
    # Make sure we have a Files section in xorg.conf, otherwise create an empty one
    XORGCONF=/etc/X11/xorg.conf
    [ -w ${XORGCONF} ] && ! grep -q 'Section "Files"' ${XORGCONF} && \
        echo -e 'Section "Files"\nEndSection' >> ${XORGCONF}
    # Enable the proprietary driver
    /usr/sbin/nvidia-config-display enable || :
    # Add to DKMS registry
    dkms add -m nvidia -v 169.12-4.9.slp5 -q || :
    # Rebuild and make available for the currenty running kernel
    dkms build -m nvidia -v 169.12-4.9.slp5 -q || :
    dkms install -m nvidia -v 169.12-4.9.slp5 -q --force || :
    /sbin/MAKEDEV nvidia
    preuninstall scriptlet (using /bin/sh):
    # Remove all versions from DKMS registry
    dkms remove -m nvidia -v 169.12-4.9.slp5 -q --all || :
    # Last removal, disable the proprietary driver
    if [ $1 -eq 0 ]; then
        /usr/sbin/nvidia-config-display disable || :
    fi
    postuninstall program: /sbin/ldconfig

Snapshot of output of ps auxwf during `yum update`:

...
  \_ /bin/bash
root     16677  0.0  0.0   5968  1668 pts/1    S    17:25   0:00      |   \_ su -
root     16681  0.0  0.0   4804  1440 pts/1    S    17:25   0:00      |       \_ -bash
root     17409  1.6  2.1  55980 44440 pts/1    S+   17:43   0:04      |           \_ /usr/bin/python /usr/bin/yum --enablerepo=psi-beta
root     17413  0.0  0.0   4452  1028 pts/1    S+   17:44   0:00      |               \_ /bin/sh /var/tmp/rpm-tmp.62532 2
root     18088  0.0  0.0   5112  1764 pts/1    S+   17:45   0:00      |                   \_ /bin/bash /usr/sbin/dkms install -m nvidia
root     18188  0.0  0.0   4456  1200 pts/1    S+   17:45   0:00      |                       \_ /bin/bash /sbin/weak-modules --add-modu
root     19238  0.0  0.0   4460   692 pts/1    S+   17:47   0:00      |                           \_ /bin/bash /sbin/weak-modules --add-
root     19243  5.5  0.0   2004   452 pts/1    D+   17:47   0:00      |                               \_ zcat /boot/initrd-2.6.18-53.1.4
root     19244  2.5  0.0   1816   496 pts/1    S+   17:47   0:00      |                               \_ cpio -i
...

When the new nvidia RPM was installed the old stuff was not cleaned up properly, the old module sources remained in the dkms tree under /var/lib/dkms/nvidia/ and has to be removed manually:

[root@pc7377 etc]# dkms status -m nvidia
nvidia, 100.14.19-3.9.slp5: added
nvidia, 169.12-4.9.slp5, 2.6.18-92.1.13.el5, i686: installed
nvidia, 169.12-4.9.slp5, 2.6.18-53.1.4.el5, i686: installed-weak from 2.6.18-92.1.13.el5
nvidia, 169.12-4.9.slp5, 2.6.18-53.1.21.el5, i686: installed-weak from 2.6.18-92.1.13.el5
nvidia, 169.12-4.9.slp5, 2.6.18-92.1.10.el5, i686: installed-weak from 2.6.18-92.1.13.el5

# rm -rf /var/lib/dkms/nvidia/100.14.19-3.9.slp5/
# dkms status -m nvidia
nvidia, 169.12-4.9.slp5, 2.6.18-92.1.13.el5, i686: installed
nvidia, 169.12-4.9.slp5, 2.6.18-53.1.4.el5, i686: installed-weak from 2.6.18-92.1.13.el5
nvidia, 169.12-4.9.slp5, 2.6.18-53.1.21.el5, i686: installed-weak from 2.6.18-92.1.13.el5
nvidia, 169.12-4.9.slp5, 2.6.18-92.1.10.el5, i686: installed-weak from 2.6.18-92.1.13.el5

The .../weak-updates/... nvidia modules below are symbolic links to /lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko, which is identical with `/var/lib/dkms/nvidia/169.12-4.9.slp5/2.6.18-92.1.13.el5/i686/module/nvidia.ko`:

[root@pc7377 etc]# updatedb
[root@pc7377 etc]# locate nvidia.ko
/lib/modules/2.6.18-53.1.21.el5/weak-updates/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-53.1.4.el5/weak-updates/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-92.1.10.el5/weak-updates/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/lib/modules/2.6.18-92.1.13.el5/kernel/drivers/video/nvidia/nvidia.ko
/var/lib/dkms/nvidia/169.12-4.9.slp5/2.6.18-92.1.13.el5/i686/module/nvidia.ko

Nvidia related lines in `/var/log/messages`:

...
Oct 23 17:48:12 pc7377 Updated: nvidia-x11-drv.i386 169.12-4.9.slp5
...
Oct 24 11:16:04 pc7377 kernel: NVRM: API mismatch: the client has the version 169.12, but
Oct 24 11:16:04 pc7377 kernel: NVRM: this kernel module has the version 100.14.19.  Please
Oct 24 11:16:04 pc7377 kernel: NVRM: make sure that this kernel module and all NVIDIA driver
Oct 24 11:16:04 pc7377 kernel: NVRM: components have the same version.
Oct 24 11:16:05 pc7377 gdm[6706]: gdm_slave_xioerror_handler: Fatal X error - Restarting :0
Oct 24 11:16:09 pc7377 kernel: NVRM: API mismatch: the client has the version 169.12, but
Oct 24 11:16:09 pc7377 kernel: NVRM: this kernel module has the version 100.14.19.  Please
Oct 24 11:16:09 pc7377 kernel: NVRM: make sure that this kernel module and all NVIDIA driver
Oct 24 11:16:09 pc7377 kernel: NVRM: components have the same version.
Oct 24 11:16:10 pc7377 gdm[3734]: gdm_slave_xioerror_handler: Fatal X error - Restarting :0
Oct 24 11:16:13 pc7377 kernel: NVRM: API mismatch: the client has the version 169.12, but
Oct 24 11:16:13 pc7377 kernel: NVRM: this kernel module has the version 100.14.19.  Please
Oct 24 11:16:13 pc7377 kernel: NVRM: make sure that this kernel module and all NVIDIA driver
Oct 24 11:16:13 pc7377 kernel: NVRM: components have the same version.
Oct 24 11:16:14 pc7377 gdm[3752]: gdm_slave_xioerror_handler: Fatal X error - Restarting :0
Oct 24 11:16:14 pc7377 gdm[6489]: deal_with_x_crashes: Running the XKeepsCrashing script
...
Oct 24 11:27:45 pc7377 kernel: nvidia: module license 'NVIDIA' taints kernel.
Oct 24 11:27:45 pc7377 kernel: ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 169
Oct 24 11:27:45 pc7377 kernel: NVRM: loading NVIDIA UNIX x86 Kernel Module  169.12  Thu Feb 14 17:53:07 PST 2008
...