[elrepo-devel] nvidia legacy drivers

Marco Giunta giunta at sissa.it
Sat Dec 12 10:00:15 EST 2009


Hi at all,
I'm a sysadmin in an Italian College, and I'm using your rpms 
(nvidia, ieee1394 and till CentOS 5.4, fuse) in our workstations (about 
300). A lot of them have old nvidia video card, so I've adapted your spec 
file to suit nvidia legacy driver 96xx; I'm using them for a couple of 
months without any problem. You'll find attached two spec files: 
one for the driver and one for the kmod.

I hope you'll find them useful. Regards,

     Marco Giunta


On Fri, 11 Dec 2009, Akemi Yagi wrote:

> Hi all,
>
> As you may know, ELRepo provides the Nvidia driver (
> http://elrepo.org/tiki/kmod-nvidia ) which turned out to be quite
> fruitful.
>
> Now, we have been getting requests for the legacy drivers for Nvidia:
>
> http://elrepo.org/bugs/view.php?id=33  (9xxx series)
> http://elrepo.org/bugs/view.php?id=37  (173.x series)
>
> We are currently a bit short in hand and now looking for people who
> are willing to take on this work.  Is anyone interested in helping?
>
> Akemi
> ELRepo Team
>
>
-------------- next part --------------
# Define the kmod package name here.
%define	 kmod_name nvidia-96xx
%define  dist	el5

Name:	 %{kmod_name}-kmod
Version: 96.43.13
Release: 1.%{dist}
Group:	 System Environment/Kernel
License: NVIDIA proprietary
Summary: NVIDIA 96xx OpenGL kernel driver module
URL:	 http://www.nvidia.com/

BuildRoot:     %{_tmppath}/%{name}-%{version}-%{release}-build-%(%{__id_u} -n)
ExclusiveArch: i686 x86_64

# Sources.
Source0:        ftp://download.nvidia.com/XFree86/Linux-x86/%{version}/NVIDIA-Linux-x86-%{version}-pkg0.run
Source1:        ftp://download.nvidia.com/XFree86/Linux-x86_64/%{version}/NVIDIA-Linux-x86_64-%{version}-pkg2.run
Source10: kmodtool-%{kmod_name}

NoSource: 0
NoSource: 1

# If kversion isn't defined on the rpmbuild line, build for the current kernel.
%{!?kversion: %define kversion %(uname -r)}

# Define the variants for each architecture.
%define basevar ""
%ifarch i686
%define paevar PAE
%endif

# If kvariants isn't defined on the rpmbuild line, build all variants for this architecture.
%{!?kvariants: %define kvariants %{?basevar} %{?paevar}}

# Magic hidden here.
%define kmodtool sh %{SOURCE10}
%{expand:%(%{kmodtool} rpmtemplate_kmp %{kmod_name} %{kversion} %{kvariants} 2>/dev/null)}

%description
This package provides the proprietary NVIDIA 96xx OpenGL kernel driver module.
It is built to depend upon the specific ABI provided by a range of releases
of the same variant of the CentOS kernel and not on any one specific build.

%prep
%setup -q -c -T

%ifarch i686
sh %{SOURCE0} --extract-only --target nvidiapkg
%endif

%ifarch x86_64
sh %{SOURCE1} --extract-only --target nvidiapkg
%endif

for kvariant in %{kvariants} ; do
    %{__cp} -a nvidiapkg _kmod_build_$kvariant
    %{__cat} <<-EOF >_kmod_build_$kvariant/usr/src/nv/%{kmod_name}.conf
	override %{kmod_name} * weak-updates/%{kmod_name}
	EOF
done

%build
for kvariant in %{kvariants} ; do
    export SYSSRC=%{_usrsrc}/kernels/%{kversion}${kvariant:+-$kvariant}-%{_target_cpu}
    pushd _kmod_build_$kvariant/usr/src/nv
    %{__make} module
    popd
done

%install
export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
export INSTALL_MOD_DIR=extra/%{kmod_name}
for kvariant in %{kvariants} ; do
    pushd _kmod_build_$kvariant/usr/src/nv
    ksrc=%{_usrsrc}/kernels/%{kversion}${kvariant:+-$kvariant}-%{_target_cpu}
    %{__make} -C "${ksrc}" modules_install M=$PWD
    %{__mkdir_p} ${INSTALL_MOD_PATH}/etc/depmod.d
    %{__install} -p -m 0644 %{kmod_name}.conf ${INSTALL_MOD_PATH}/etc/depmod.d/
    popd
done

%clean
%{__rm} -rf $RPM_BUILD_ROOT

%changelog
* Thu Sep 01 2009 Marco Giunta <giunta AT sissa.it>
- Downgraded and adapted to version 96.43.13.

* Mon Aug 10 2009 Philip J Perry <phil at elrepo.org> - 185.18.31-1.el5.elrepo
- Update to version 185.18.31.
- Drop bundling the source here too, it's included in nvidia-x11-drv.

* Fri Jul 10 2009 Philip J Perry <phil at elrepo.org> - 185.18.14-1.el5.elrepo
- Rebuilt against kernel-2.6.18-128.el5 for release.
- Updated kmodtool to latest specification.
- Create nvidia.conf in spec file.

* Tue Jul 07 2009 Philip J Perry <phil at elrepo.org>
- Updated sources to match nvidia-x11-drv.
- Fixed paths to extract sources.
- Don't strip the module (NVIDIA doesn't).

* Wed Jun 10 2009 Alan Bartlett <ajb at elrepo.org>
- Updated the package to 185.18.14 version.

* Thu May 21 2009 Dag Wieers <dag at wieers.com>
- Adjusted the package name.

* Tue May 19 2009 Alan Bartlett <ajb at elrepo.org>
- Total revision and re-build of the kmod packages.

* Thu May 14 2009 Alan Bartlett <ajb at elrepo.org>
- Initial build of the kmod packages.
-------------- next part --------------
%define		nvidialibdir	%{_libdir}/nvidia
%define		nvidialib32dir	%{_prefix}/lib/nvidia
%define		desktop_vendor	elrepo
%define		dist		el5

%define		debug_package	%{nil}
%define		debug_packages	%{nil}

Name:		nvidia-x11-drv-96xx
Version:	96.43.13	
Release:	1.%{dist}
Group:		User Interface/X Hardware Support
License:	Redistributable, no modification permitted
Summary:	NVIDIA 96xx OpenGL X11 display driver files
URL:		http://www.nvidia.com/

BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-build-%(%{__id_u} -n)
ExclusiveArch:	i386 x86_64

# Sources.
# x86: pkg1 contains precompiled modules we don't need
Source0:	ftp://download.nvidia.com/XFree86/Linux-x86/%{version}/NVIDIA-Linux-x86-%{version}-pkg0.run

# x86_64: only pkg2 contains the lib32 compatibility libs
Source1:	ftp://download.nvidia.com/XFree86/Linux-x86_64/%{version}/NVIDIA-Linux-x86_64-%{version}-pkg2.run

# taken from the rpmforge dkms package
Source2:	nvidia.sh
Source3:	nvidia.csh
Source4:	nvidia-config-display
Source5:	nvidia.modprobe
Source6:	nvidia.nodes

# provides desktop-file-install
BuildRequires:	desktop-file-utils
BuildRequires:	perl

Requires:	nvidia-96xx-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Requires(post):	nvidia-96xx-kmod = %{?epoch:%{epoch}:}%{version}-%{release}

Requires(post):	/sbin/ldconfig

# for nvidia-config-display
Requires(post):	 pyxf86config
Requires(preun): pyxf86config

%description
This package provides the proprietary NVIDIA 96xx OpenGL X11 display driver files.

%prep
%setup -q -c -T

%ifarch i386
sh %{SOURCE0} --extract-only --target nvidiapkg
%endif

%ifarch x86_64
sh %{SOURCE1} --extract-only --target nvidiapkg
%endif

%build
# Nothing to build

%install
%{__rm} -rf $RPM_BUILD_ROOT

pushd nvidiapkg

# Install nvidia tools from /bin
%{__mkdir_p} $RPM_BUILD_ROOT%{_bindir}/
%{__install} -p -m 0755 usr/bin/{nvidia-bug-report.sh,nvidia-settings,nvidia-xconfig} \
    $RPM_BUILD_ROOT%{_bindir}/

# Install GL and tls libs
%{__mkdir_p} $RPM_BUILD_ROOT%{nvidialibdir}/
%{__mkdir_p} $RPM_BUILD_ROOT%{nvidialibdir}/tls/
%{__install} -p -m 0755 usr/lib/*.so.%{version} \
    $RPM_BUILD_ROOT%{nvidialibdir}/
%{__install} -p -m 0755 usr/lib/libGL.la \
    $RPM_BUILD_ROOT%{nvidialibdir}/
%{__install} -p -m 0755 usr/lib/tls/*.so.%{version} \
    $RPM_BUILD_ROOT%{nvidialibdir}/tls/

%ifarch x86_64
# Install 32bit compat GL and tls libs
%{__mkdir_p} $RPM_BUILD_ROOT%{nvidialib32dir}/
%{__mkdir_p} $RPM_BUILD_ROOT%{nvidialib32dir}/tls/
%{__install} -p -m 0755 usr/lib32/*.so.%{version} \
    $RPM_BUILD_ROOT%{nvidialib32dir}/
%{__install} -p -m 0755 usr/lib32/libGL.la \
    $RPM_BUILD_ROOT%{nvidialib32dir}/
%{__install} -p -m 0755 usr/lib32/tls/*.so.%{version} \
    $RPM_BUILD_ROOT%{nvidialib32dir}/tls/
%endif

# Install libXvMCNVIDIA
%{__install} -p -m 0755 usr/X11R6/lib/libXvMCNVIDIA.so.%{version} \
    $RPM_BUILD_ROOT%{nvidialibdir}/
%{__install} -p -m 0644 usr/X11R6/lib/libXvMCNVIDIA.a \
    $RPM_BUILD_ROOT%{nvidialibdir}/

# Install X driver and extension 
%{__mkdir_p} $RPM_BUILD_ROOT%{_libdir}/xorg/modules/drivers/
%{__mkdir_p} $RPM_BUILD_ROOT%{_libdir}/xorg/modules/extensions/nvidia/
%{__install} -p -m 0755 usr/X11R6/lib/modules/drivers/nvidia_drv.so \
    $RPM_BUILD_ROOT%{_libdir}/xorg/modules/drivers/
%{__install} -p -m 0755 usr/X11R6/lib/modules/extensions/libglx.so.%{version} \
    $RPM_BUILD_ROOT%{_libdir}/xorg/modules/extensions/nvidia/


# Create the symlinks
%{__ln_s} libGLcore.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libGLcore.so.1
%{__ln_s} libGL.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libGL.so
%{__ln_s} libGL.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libGL.so.1
%{__ln_s} libnvidia-cfg.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libnvidia-cfg.so
%{__ln_s} libnvidia-cfg.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libnvidia-cfg.so.1
%{__ln_s} libnvidia-tls.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libnvidia-tls.so.1
%{__ln_s} libnvidia-tls.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/tls/libnvidia-tls.so.1
%{__ln_s} libXvMCNVIDIA.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libXvMCNVIDIA_dynamic.so
%{__ln_s} libXvMCNVIDIA.so.%{version} $RPM_BUILD_ROOT%{nvidialibdir}/libXvMCNVIDIA_dynamic.so.1
%{__ln_s} libglx.so.%{version} $RPM_BUILD_ROOT%{_libdir}/xorg/modules/extensions/nvidia/libglx.so

%ifarch x86_64
# Create the 32-bit symlinks
%{__ln_s} libGLcore.so.%{version} $RPM_BUILD_ROOT%{nvidialib32dir}/libGLcore.so.1
%{__ln_s} libGL.so.%{version} $RPM_BUILD_ROOT%{nvidialib32dir}/libGL.so
%{__ln_s} libGL.so.%{version} $RPM_BUILD_ROOT%{nvidialib32dir}/libGL.so.1
%{__ln_s} libnvidia-tls.so.%{version} $RPM_BUILD_ROOT%{nvidialib32dir}/libnvidia-tls.so.1
%{__ln_s} libnvidia-tls.so.%{version} $RPM_BUILD_ROOT%{nvidialib32dir}/tls/libnvidia-tls.so.1
%endif

# Install man pages
%{__mkdir_p} $RPM_BUILD_ROOT%{_mandir}/man1/
%{__install} -p -m 0644 usr/share/man/man1/nvidia-{settings,xconfig}.1.gz \
    $RPM_BUILD_ROOT%{_mandir}/man1/

# Install pixmap for the desktop entry
%{__mkdir_p} $RPM_BUILD_ROOT%{_datadir}/pixmaps/
%{__install} -p -m 0644 usr/share/pixmaps/nvidia-settings.png \
    $RPM_BUILD_ROOT%{_datadir}/pixmaps/

# Desktop entry for nvidia-settings
# Remove "__UTILS_PATH__/" before the Exec command name
# Replace "__PIXMAP_PATH__/" with the proper pixmaps path
%{__perl} -pi -e 's|(Exec=).*/(.*)|$1$2|g;
                  s|(Icon=).*/(.*)|$1%{_datadir}/pixmaps/$2|g' \
    usr/share/applications/nvidia-settings.desktop

%{__mkdir_p} $RPM_BUILD_ROOT%{_datadir}/applications/
desktop-file-install --vendor %{desktop_vendor}  \
    --dir $RPM_BUILD_ROOT%{_datadir}/applications/ \
    --add-category System \
    --add-category Application \
    --add-category GNOME \
    usr/share/applications/nvidia-settings.desktop

# Install profile.d files
%{__mkdir_p} $RPM_BUILD_ROOT%{_sysconfdir}/profile.d/
%{__install} -p -m 0644 %{SOURCE2} \
    $RPM_BUILD_ROOT%{_sysconfdir}/profile.d/nvidia.sh
%{__install} -p -m 0644 %{SOURCE3} \
    $RPM_BUILD_ROOT%{_sysconfdir}/profile.d/nvidia.csh

# Install X configuration script
%{__mkdir_p} $RPM_BUILD_ROOT%{_sbindir}/
%{__install} -p -m 0755 %{SOURCE4} \
    $RPM_BUILD_ROOT%{_sbindir}/nvidia-config-display

# Install modprobe.d file
%{__mkdir_p} $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/
%{__install} -p -m 0644 %{SOURCE5} \
    $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/nvidia

# Install udev configuration file
%{__mkdir_p} $RPM_BUILD_ROOT%{_sysconfdir}/udev/makedev.d/
%{__install} -p -m 0644 %{SOURCE6} \
    $RPM_BUILD_ROOT%{_sysconfdir}/udev/makedev.d/60-nvidia.nodes

# Install ld.so.conf.d file
%{__mkdir_p} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/
echo %{nvidialibdir} > $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/nvidia.conf
%ifarch x86_64
echo %{nvidialib32dir} >> $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/nvidia.conf
%endif

popd

%clean
%{__rm} -rf $RPM_BUILD_ROOT

%post
/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 nvidia driver
%{_sbindir}/nvidia-config-display enable &>/dev/null || :

%preun
# Disable proprietary nvidia driver on uninstall
if [ "$1" -eq "0" ]; then
    test -f %{_sbindir}/nvidia-config-display && %{_sbindir}/nvidia-config-display disable &>/dev/null || :
fi

%postun
/sbin/ldconfig

%triggerin -- xorg-x11-server-Xorg
# Enable the proprietary nvidia driver
# Required since xorg-x11-server-Xorg empties the "Files" section
test -f %{_sbindir}/nvidia-config-display && %{_sbindir}/nvidia-config-display enable &>/dev/null || :

%files
%defattr(-,root,root,-)
%doc nvidiapkg/usr/share/doc/*
%{_mandir}/man1/nvidia*.*
%{_datadir}/pixmaps/nvidia-settings.png
%{_datadir}/applications/*nvidia-settings.desktop
%{_sysconfdir}/profile.d/nvidia.*
%{_bindir}/nvidia*
%{_sbindir}/nvidia-config-display
%config %{_sysconfdir}/modprobe.d/nvidia
%config %{_sysconfdir}/ld.so.conf.d/nvidia.conf
%config %{_sysconfdir}/udev/makedev.d/60-nvidia.nodes

# now the libs
%dir %{nvidialibdir}
%{nvidialibdir}/lib*
%dir %{nvidialibdir}/tls
%{nvidialibdir}/tls/lib*
%{_libdir}/xorg/modules/drivers/nvidia_drv.so
%dir %{_libdir}/xorg/modules/extensions/nvidia
%{_libdir}/xorg/modules/extensions/nvidia/libglx.*

%ifarch x86_64
# 32-bit compatibility libs
%dir %{nvidialib32dir}
%{nvidialib32dir}/lib*
%dir %{nvidialib32dir}/tls
%{nvidialib32dir}/tls/lib*
%endif

%changelog
* Thu Sep 01 2009 Marco Giunta <giunta AT sissa.it>
- Downgraded and adapted to version 96.43.13.

* Mon Aug 10 2009 Philip J Perry <phil at elrepo.org> - 185.18.31-1.el5.elrepo
- Update to version 185.18.31.

* Tue Jul 14 2009 Philip J Perry <phil at elrepo.org> - 185.18.14-1.el5.elrepo
- Rebuilt for release.

* Mon Jul 13 2009 Akemi Yagi <toracat at elrepo.org>, Dag Wieers <dag at wieers.com>
- Fix udev device creation.

* Fri Jul 10 2009 Dag Wieers <dag at wieers.com>
- Fix Requires to nvidia-kmod.

* Fri Jul 10 2009 Philip J Perry <phil at elrepo.org>
- Fixed permissions on nvidia.(c)sh that cause Xorg to fail.
- Don't create debug or strip the package (NVIDIA doesn't).

* Mon Jul 06 2009 Philip J Perry <phil at elrepo.org>
- Complete rewrite of SPEC file
- Added nvidia.(c)sh, nvidia.modprobe
- Added nvidia-config-display to enable/disable driver
- Added Requires (pyxf86config) and BuildRequires (desktop-file-utils, perl)

* Wed Jun 10 2009 Alan Bartlett <ajb at elrepo.org>
- Updated the package to 185.18.14 version.

* Wed Jun 10 2009 Phil Perry <phil at elrepo.org>
- Added the Requires: /sbin/ldconfig line.
- Added the lines to create the /etc/ld.so.conf.d/nvidia.conf file.

* Wed May 27 2009 Philip J Perry <phil at elrepo.org>, Steve Tindall <s10dal at elrepo.org>
- Corrected the symlinks and their removal.

* Wed May 27 2009 Alan Bartlett <ajb at elrepo.org>
- Corrected typos in the pre & postun sections.

* Thu May 21 2009 Dag Wieers <dag at wieers.com>
- Adjusted the package name.

* Fri May 15 2009 Akemi Yagi <toracat at elrepo.org>
- Corrected the Requires: kmod-nvidia = %{?epoch:%{epoch}:}%{version}-%{release}

* Thu May 14 2009 Alan Bartlett <ajb at elrepo.org>
- Initial build of the x11-drv package.


More information about the elrepo-devel mailing list