summaryrefslogblamecommitdiffstats
path: root/os-plugins/plugins/xserver/files/nvidia-install.sh
blob: aa2b2269cbd87c115729c1c7e2c4cda02151ce79 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
           
 


                                                          
                                              
 


                                                                            
 








                                                                                               
                      

                 
                 


                                               
               
                                               
    
               
                                               

          
                                            
    
          
                                          


                                           
                                                                           


                                                                      
                                                                   

                                                          
                                                  



















                                                                             











                                                                      
                  

                                                                 


                                                                                  










                                                                              
                                  
                                                                       


                                                                                       
                                                                            
                                                             
                                                             


                                            

                                                          





















                                                                                     




                                                                
#!/bin/bash

##########################################################
# Installs NVIDIA binary drivers into openslx plugin-repo
##########################################################
PLUGIN_PATH="/opt/openslx/plugin-repo/xserver"

# we could easily pass this information via calling stage1 script and do not
# need to find it our here ...
DISTRO=$1


# for development we take the only kernel version from normal systems
if [ -L /boot/vmlinuz ]; then 
	KVERS=$(ls -l /boot/vmlinuz | awk -F "->" '{print $2}'| grep -P -o "2.6.*")
else 
	KVERS=$(ls /boot/vmlinuz-* | head -n1 | awk -F "->" '{print $2}' | grep -P -o "2.6.*" )
fi


#change to plugin path
cd ${PLUGIN_PATH}

case ${DISTRO} in
  ubuntu-9.10*)
    ./ubuntu-ng-gfx-install.sh nvidia ${DISTRO}
  ;;
  ubuntu-9.04*)
    ./ubuntu-ng-gfx-install.sh nvidia ${DISTRO}
  ;;
  ubuntu-8.10*)
    ./ubuntu-ng-gfx-install.sh nvidia ${DISTRO}
  ;;
  ubuntu*)
    ./ubuntu-gfx-install.sh nvidia ${DISTRO}
  ;;
  suse-1*)
    ./suse-gfx-install.sh nvidia ${DISTRO}
  ;;
  # general purpose nvidia installer script
  *)
   echo "* Running general NVidia installer (expected in xserver::pkgpath)"
   # unpack the nvidia installer; quickhack - expects just one package
   echo "  * Unpacking installer"
   sh packages/NVIDIA-Linux-*.run -a -x >>nvidia-inst.log 2>&1
   # prefix and paths should be matched more closely to each distro
   # just demo at the moment ... but working at the moment
   # without the kernel module
   stdprfx=/opt/openslx/plugin-repo/xserver/nvidia

   # backing up libglx.so and libGLcore.so
   BACKUP_PATH=${stdprfx}/../mesa/usr/lib/xorg/modules/extensions
   mkdir -p ${BACKUP_PATH}
   if [ -f /usr/lib/xorg/modules/extensions/libglx.so ]; then
   	cp /usr/lib/xorg/modules/extensions/libGLcore.so ${BACKUP_PATH}
   	cp /usr/lib/xorg/modules/extensions/libglx.so ${BACKUP_PATH}
   elif [ -f /usr/X11R6/lib/xorg/modules/extensions/libglx.so ]; then
   	cp /usr/X11R6/lib/xorg/modules/extensions/libglx.so ${BACKUP_PATH}
	cp /usr/X11R6/lib/xorg/modules/extensions/libGLcore.so ${BACKUP_PATH}
	touch ${BACKUP_PATH}/X11R6
   fi
   if [ -f /usr/lib/libGL.so.1.2 ]; then
	cp /usr/lib/libGL.so.1.2 ${BACKUP_PATH}/../../..
   elif [ -f /usr/X11R6/lib/libGL.so.1.2 ]; then
   	cp /usr/X11R6/lib/libGL.so.1.2 ${BACKUP_PATH}/../../..
	touch ${BACKUP_PATH}/../../../X11R6
   fi


   # run the lib installer
   echo "  * Starting the library installer"
   echo "Starting the lib installer" >>nvidia-inst.log
   $(ls -d NVIDIA-Linux-*)/nvidia-installer -s -q -N --no-abi-note \
     --x-prefix=${stdprfx}/usr --x-library-path=${stdprfx}/usr/lib \
     --x-module-path=${stdprfx}/usr/lib/xorg/modules \
     --opengl-prefix=${stdprfx}/usr --utility-prefix=${stdprfx}/usr \
     --documentation-prefix=${stdprfx}/usr --no-runlevel-check  \
     --no-rpms --no-x-check --no-kernel-module \
     --log-file-name=nvidia-lib.log >>nvidia-inst.log 2>&1
   # how to get an idea of the installed kernel?
   # run the kernel module creator (should be done for every kernel!?)
   kernel=${KVERS}
   echo "  * Trying to compile a kernel module for $kernel"
   echo "Starting the kernel $kernel installer" >>nvidia-inst.log
   # we need the .config file in /usr/src/linux or where ever!
   # we need scripts/genksyms/genksyms compiled via make scripts in /usr/src/linux
   # option available in newer nvidia packages
	cd /usr/src/linux-${kernel%-*}
    # in suse we have the config file lying there
	cp /boot/config-${kernel} .config
	ARCH=$(cat .config| grep -o CONFIG_M.86=y |tail -n1|grep -o "[0-9]86")
	SUFFIX=${kernel##*-}
	#cp -r /usr/src/linux-${kernel%-*}-obj/i${ARCH}/${SUFFIX}/ \
	#		/usr/src/linux-${kernel%-*}
	make oldconfig >/dev/null 2>&1
	make prepare >/dev/null 2>&1
	cd - >/dev/null 2>&1
	#/usr/src/linux-${kernel%-*}
   addopts="--no-cc-version-check"
   $(ls -d NVIDIA-Linux-*)/nvidia-installer -s -q -N -K --no-abi-note \
	 --kernel-source-path=/usr/src/linux-${kernel%-*} \
     --kernel-include-path=/usr/src/linux-${kernel%-*}-obj/i${ARCH}/${SUFFIX}/include \
	 -k ${kernel} \
     --kernel-install-path=/opt/openslx/plugin-repo/xserver/nvidia/modules \
     --no-runlevel-check --no-abi-note --no-rpms ${addopts} \
     --log-file-name=nvidia-kernel.log >>nvidia-inst.log 2>&1
   if [ $? -gt 0 ];then
   	echo "* kernel module built failed!"
   fi
   echo "  * Have a look into the several *.log files in "
   echo "    stage1/${DISTRO}/plugin-repo/xserver"


   # redo some unwanted changes of nvidia-installer
   if [ -f ${BACKUP_PATH}/libglx.so ]; then
   	cp ${BACKUP_PATH}/libGLcore.so /usr/lib/xorg/modules/extensions
   	cp ${BACKUP_PATH}/libglx.so /usr/lib/xorg/modules/extensions
    if [ -f ${BACKUP_PATH}/X11R6 ]; then
	   	cp ${BACKUP_PATH}/libGLcore.so /usr/X11R6/lib/xorg/modules/extensions
	   	cp ${BACKUP_PATH}/libglx.so /usr/X11R6/lib/xorg/modules/extensions
	fi
   fi
   if [ -f ${BACKUP_PATH}/../../../libGL.so.1.2 ]; then
	cp ${BACKUP_PATH}/../../../libGL.so.1.2  /usr/lib
	ln -sf /usr/lib/libGL.so.1.2 /usr/lib/libGL.so.1
	ln -sf /usr/lib/libGL.so.1.2 /usr/lib/libGL.so
   elif [ -f ${BACKUP_PATH}/../../../X11R6 ]; then
   	cp  ${BACKUP_PATH}/../../../libGL.so.1.2  /usr/X11R6/lib/
   	ln -sf /usr/lib/libGL.so.1.2 /usr/lib/libGL.so.1
	ln -sf /usr/lib/libGL.so.1.2 /usr/lib/libGL.so
   fi


  ;;
esac

# set a proper return value to evaluate it in the calling script
exit 0