#! /bin/sh
#################################################
##  Tämä skripti hakee uusimman version NVIDIAn Linux ajurista.
##  poistaa mahdollisen Nvidian reposta asennetun ajurin 
##
##  Nyt ohje
##  http://opensuse.fi/NVIDIA_ajurit#Vaikeampi_tapa
##  pitäisi olla helpompi ;-)
## 
##  fsu & jmp (http://opensuse.fi)
##
##  version 0.2.1 12.04.2007
##  * lisätty ilmoitus paketin lataamisesta
##
##  version 0.2 12.04.2007
##  * korjattu 32-bittisen järjestelmän tunnistus
##  * sori :-(
##
##  version 0.1.1 11.04.2007
##  * poistettu -a vipu ajurin asennuksesta
##  * näin emme hyväksy nvidian käyttöoikeussopimusta
##  * käyttäjän puolesta
##
##  version 0.1 11.04.2007
##  * testausta
##
#################################################

CURL_OPTIONS="-s"


function checkPackages() {
	local $missing
	missing=""
	for package in "$@";do
		checkPackage $package	
	done

	if [ "$missing" != "" ];then
		yast sw_single $missing;
	fi
}
function checkPackage() {
	# check parameters
	if [ $# -ne 1 ];then
		return 1
	fi

	rpm -q "$1" &>/dev/null
	if [ $? -ne 0 ];then
		echo "$1"
		missing="$missing $1"
	fi
}

if [ $UID -ne 0 ]; then
	echo "Virhe: root-käyttäjän oikeudet vaaditaan."
	exit 1
fi

# siirrytään root-käyttäjän koti-hakemistoon
pushd $HOME

# luodaan tiedosto NVIDIA-VERSIO jos sitä ei ole olemassa
touch NVIDIA-VERSIO

# valitaan arkkitehtuurin mukainen paketti
ARCH=$(uname -m)
if [ "$ARCH" != "x86_64" ]; then ARCH="x86";fi
VERSIONLINE=$(curl $CURL_OPTIONS http://us.download.nvidia.com/XFree86/Linux-$ARCH/latest.txt)
DRIVER="http://us.download.nvidia.com/XFree86/Linux-$ARCH/$(echo $VERSIONLINE|cut -d ' ' -f 2)"
VERSION=$(echo $VERSIONLINE|cut -d '/' -f 2)


# tarkistetaan onko uusin versio jo asennettu
if [ "$VERSION" == "$(cat NVIDIA-VERSIO)" ];then
	echo "Uusin versio on jo asennettu!"
	echo ""
	echo "*******************************"
	echo ""
	echo "Jos Internet päivitys on päivittänyt ytimen,"
	echo "ja X ei käynnisty, komenna siinä tapauksessa"
	echo "'sh "$VERSION" -K'"
	echo ""
	exit 0
fi

# varmuuskopio xorg.conf-tiedostosta
cp /etc/X11/xorg.conf /etc/X11/xorg.conf.$(date +%Y%m%d-%H%M%S)

# poista tarpeettomat paketit
rpm -e nvidia-gfx-kmp-default
rpm -e nvidia-gfx-kmp-bigsmp
rpm -e x11-video-nvidia

# tarkistaa, onko seuraavat paketit asennettuna: 
checkPackages gcc kernel-source 


# tapetaan X
init 3

# ja varmistetaan että se tosiaan kuoli
if [ -f /tmp/.X0-lock ]; then
	tmpfile=`mktemp /tmp/.X0-lock.XXXXXXXXXX`
	mv /tmp/.X0-lock $tmpfile
fi

# jos ei asennettu, niin haetaan se
echo "Ajuripakettia ladataan Nvidian palvelimelta, odota ole hyvä..."
curl $CURL_OPTIONS $DRIVER -o $PWD/$VERSION

# ja asennetaan

sh "$VERSION" 

# määritetään SaX2-sovelluksella

# sax2 -r -m 0=nvidia

# tallennetaan versio numero seuraavaa kertaa varten

echo $VERSION > NVIDIA-VERSIO

# annetaan ohje miten toimia kun ydin päivittyy seuraavan kerran
echo ""
echo "Komenna nyt 'init 5' käynnistääksesi X:n uudelleen"
echo ""
echo ""
echo "**********************************"
echo ""
echo "Kun ydin seuraavan kerran päivitetään Internet päivityksen yhteydessä,"
echo "ja X ei käynnisty odotetulla tavalla, suorita komento"
echo " "
echo "'sh "$VERSION" -K'"
echo " "
echo "root-käyttäjänä hakemistossa /root"
echo " "
echo " "
echo "Jos tämä skripti ei toimi toivotulla tavalla, ilmoita"
echo "siitä keskustelualueellamme osoitteessa"
echo "http://opensuse.fi/keskustelu"
popd