Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Kernelinstallationsskript

Alles rund um die Systemverwaltung, die Administration und Konfiguration Eures Linuxsystems

Moderator: Moderatoren

Antworten
catweasel
Hacker
Hacker
Beiträge: 432
Registriert: 9. Nov 2006, 19:46

Kernelinstallationsskript

Beitrag von catweasel » 11. Dez 2006, 20:50

Was sagt ihr zu meinem Skript?

ediert am 25.07.2007

Code: Alles auswählen

#! /bin/sh
#
# Skriptname: xc
# Autor: catweasel
# Version: 0.8.2
# für SUSE 10.2 mit original menu.lst   Kernel 2.6.*
# Kernelinstallationsskript: entpacken von Kernelquellarchiven, patchen von Kernelquellen, Konfigurieren, Kompilieren und Installieren.

# Kopieren Sie die Kernelarchive bzw. Kernelpatches ins eigene home-Verzeichnis.

# backup's der menu.lst befinden sich in ~/kernel/backup-menu.lst.

# kav=Verzeichnis, in dem nach Kernelquellarchiven bzw. Kernelquellen.rpm's gesucht wird.
kav=~

# aa=Verzeichnis, in das die Kernelquellen entpackt, bzw. in dem die entpackten Kernelquellen gesucht werden (/usr/src).

# Wenn Sie die zu patchenden Kernelquellen überschreiben wollen, ändern Sie overw so: overw=1.
# overw=1 nur verwenden, wenn Sie die zu patchenden Kernelquellen wiederherstellen können z.B. mit den entsprechenden tar-Archiven. overw=1 ist schneller und verbraucht weniger Plattenplatz.
overw=0

# silent=ja ist silent-modus an - silent=nein ist silent-modus aus
silent=ja

################################################################################################

set -x


if [ "$silent" = nein ]; then
	s=
	v=v
	vh=vh
else
	s=-s
	v=
	vh=
fi
aa=/usr/src
temp=~/t9m3p4f8
rpm -q gcc > /dev/null
if [ $? -ne 0 ]; then
	echo "das rpm-Paket gcc ist nicht installiet"
	echo "gcc wird zum kompilieren des Kernels benötigt"
	select nummer in "gcc ist bereits installiert" "abbrechen um gcc zu installieren"; do
		case "$nummer" in
			gcc*)	break;;
			abb*)	exit;;
			   *)	echo "ungültige Auswahl";;
		esac
	done
	echo
fi
PS3="
Nummer: "
rm $temp.* 2> /dev/null
sudo rm -r "$aa"/err9or-linux-2.6* 2> /dev/null
who="$(whoami)"
arc="$(uname -m)"
ver="$(head -1 /etc/SuSE-release)"
ver=${ver#openSUSE\ }
ver=${ver%%\ (*}
if [[ "$arc" == i[3-6]86 ]]; then
	arc=i[3-6]86
else 
	arc=x86_64
fi
while [ ! -d "$kav" ]; do
	echo -n "das Verzeichnis \"$kav\", in dem nach Kernelarchiven gesucht werden soll, existiert nicht. Neue Eingabe: "
	read kav
done
while [ ! -d "$aa" ]; do
	echo -n "das Verzeichnis \"$aa\", in das die Kernelarchive entpackt bzw. in dem nach Kernelquellen gesucht werden soll, existiert nicht. Neue Eingabe: "
	read aa
done
te=${aa##*/}
if [ -z "$te" ]; then
	aa=${aa%/}
fi
tar=0
rpm=0
ptch=0
ent=0
Vanill=0
Pat=0
echo
echo
select num in "Kernelquellen patchen" "Download" "direkt zur Kernelkonfiguration"; do
	case "$num" in
		Ker*)	echo
			ptch=1
			break;;
		Dow*)	echo
			echo herunterladen
			select nummer in "Patches von kernel.org" "Vanilla-Kernelquellen von kernel.org"; do
				case "$nummer" in
					Pat*)	echo
						Pat=1
						ptch=1
						break;;
					Van*)	echo
						Vanill=1
						break;;
					*)	echo
						echo "ungültige Auswahl";;
				esac
			done
			break;;
		dir*)	echo
			break;;
		*)	echo
			echo "ungültige Auswahl";;
	esac
done
ko=~/kernel
if [ ! -d "$ko" ]; then
	mkdir "$ko"
fi
cd "$ko"

version()
	{
	i=${1##*patch-}
	i=${i##*linux-}
	i=${i%.bz2}
	i=${i%.gz}
	i=${i%.tar}
	}

sublev()
	{
	Iext= ; sublI= ; xIext= ; rcIext= ; spezIext= ;
	Iext=${1#2.6.[0-9][0-9]}
	if [ "$Iext" = "$1" ]; then
		Iext=${1#2.6.[0-9]}
	fi
	sublI=${1%"$Iext"}
	sublI=${sublI#2.6.}
	spezIext=${Iext#-rc[0-9][0-9]}
	if [ "$spezIext" = "$Iext" ]; then
		spezIext=${Iext#-rc[0-9]}
		if [ "$spezIext" = "$Iext" ]; then
			xIext=${Iext%%-*}
			spezIext=${Iext#"$xIext"}
		else
			rcIext=${Iext%"$spezIext"}
		fi
	else
		rcIext=${Iext%"$spezIext"}
	fi
	}

download()
	{
	ptchvers="$1"
	rcext="$2"
	spezext="$3"
	if [[ "$spezext" = -mm* ]]; then
		wget ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/"${ptchvers%%-mm*}"/"$ptchvers"/"$ptchvers".bz2
		if [ $? -ne 0 ]; then
			echo "der Patch patch-$ptchvers konnte nicht heruntergeladen werden."
			echo
			exit
		else
			mv "$ptchvers".bz2 patch-"$ptchvers".bz2
		fi
	elif [[ "$spezext" = -git* ]]; then
		wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-"$ptchvers".bz2
		if [ $? -ne 0 ]; then
			echo "der Patch patch-$ptchvers konnte nicht heruntergeladen werden."
			echo
			exit
		fi
		
	elif [ "$rcext" ]; then
		wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/testing/patch-"$ptchvers".bz2
		if [ $? -ne 0 ]; then
			echo "der Patch patch-$ptchvers konnte nicht heruntergeladen werden."
			echo
			exit
		fi
	else
		wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-"$ptchvers".bz2
		if [ $? -ne 0 ]; then
			echo "der Patch patch-$ptchvers konnte nicht heruntergeladen werden."
			echo
			exit
		fi
	fi
	}


#########################################       Patch-download      #############################

if [ "$Pat" -eq 1 ]; then
	wget http://www.kernel.org/kdist/finger_banner
	if [ $? -ne 0 ]; then
		echo "es konnte keine Verbindung zu www.kernel.org hergestellt werden"
		rm finger_bannner*
		echo
		exit
	fi
	sed -n "/2.6.[0-9]*/p" < finger_banner > $temp.200
	rm finger_bannner*
	dwldpatch="$(cat $temp.200)"
	BACKIFS="$IFS"
	IFS='
'
	select nummer in $dwldpatch "ältere Patch-Version"; do
		if [ "$nummer" = "ältere Patch-Version" ]; then
			while [ "$best" != j -a "$best" != J -a "$best" != ja -a "$best" != Ja ]; do
				echo -n "vervollständigen Sie zur gewünschte Version: patch-2.6."
				read ptchvers
				ptchvers=2.6."$ptchvers"
				echo -n "Bestätigen Sie die Auswahl mit  j  ; für eine erneute Eingabe drücken Sie Enter : "
				read best
			done
			break
		elif [ "$nummer" ]; then
			ptchvers="$(echo "$nummer" | awk '{print $NF}')"
			break
		else
			echo "ungültige Eingabe"
			# exit
		fi
	done
	IFS="$BACKIFS"
	sublev "$ptchvers"
	download "$ptchvers" "$rcIext" "$spezIext"
fi


#########################################	Vanilla-Kernel-download    ##############################

if [ "$Vanill" -eq 1 ]; then
	select nummer in "aktuellen Kernel herunterladen" "Kernelversion selbst eingeben"; do
		case "$nummer" in
			akt*)	echo
				wget http://www.kernel.org/kdist/finger_banner
				if [ $? -ne 0 ]; then
					echo "es konnte keine Verbindung zu www.kernel.org hergestellt werden"
					rm finger_bannner*
					echo
					exit
				fi
				vers=$(head -n 1 finger_banner | awk '{print $NF}')
				rm finger_banner*
				break;;
			Ker*)	echo
				while [ "$best" != j -a "$best" != J -a "$best" != ja -a "$best" != Ja ]; do
					echo -n "vervollständigen Sie zur gewünschte Version: linux-2.6."
					read vers
					vers=2.6."$vers"
					echo
					echo "linux-$vers"
					echo
					echo -n "Bestätigen Sie die Auswahl mit  j  ; für eine erneute Eingabe drücken Sie Enter : "
					read best
				done
				break;;
			*)	echo
				echo "ungültige Auswahl";;
		esac
	done
	if [[ "$vers" == *-rc[0-9] || "$vers" == *-rc[1-9][0-9] ]]; then
		wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/testing/linux-"$vers".tar.bz2
		if [ $? -ne 0 ]; then
			echo "der Kernel linux-$vers konnte nicht heruntergeladen werden."
			echo
			exit
		fi
	else
		wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-"$vers".tar.bz2
		if [ $? -ne 0 ]; then
			echo "der Kernel linux-$vers konnte nicht heruntergeladen werden."
			echo
			exit
		fi
	fi
fi	


##########################################################################################################

Kernelquellensuche()
	{
	kname=2.6.[0-9]*
	find "$aa" -maxdepth 1 -name "linux-$kname" -type d > $temp.ptch.01
	if [ -s $temp.ptch.01 ]; then
		gf="$(cat $temp.ptch.01)"
		for i in $gf; do
			if [ -e "$i/Makefile" ]; then
				echo "$i" >> $temp.ptch.02
			fi 
		done
		if [ -s $temp.ptch.02 ]; then
			usr="$(cat $temp.ptch.02)"
			for i in $usr; do
				i=${i#*linux-}
				echo "$i" >> $temp.ptch.03
			done
		fi
	fi
	find "$kav" \( -name "linux-$kname.tar.bz2" -o -name "linux-$kname.tar.gz" \) > $temp.ptch.04
	if [ -s $temp.ptch.04 ]; then
		tar="$(cat $temp.ptch.04)"
		for i in $tar; do
			version "$i"
			echo "$i" >> $temp.ptch.05
		done 
	fi
	find "$kav" -name "kernel-source-$kname.$arc.rpm" > $temp.ptch.06
	if [ -s $temp.ptch.06 ]; then
		rpm="$(cat $temp.ptch.06)"
		for i in $rpm; do
			i=${i%.rpm}
			i=${i%.i[3-6]86}
			i=${i#*kernel-source-}
			echo "$i" >> $temp.ptch.07
		done
	fi
	if [ -s $temp.ptch.03 ]; then
		cat < $temp.ptch.03 > $temp.ptch.08
	fi
	if [ -s $temp.ptch.05 ]; then
		cat < $temp.ptch.05 >> $temp.ptch.08
	fi
	if [ -s $temp.ptch.07 ]; then
		cat < $temp.ptch.07 >> $temp.ptch.08
	fi
	cat $temp.ptch.08 | sort | uniq > $temp.ptch.09
	kat="$(cat $temp.ptch.09)"
	echo "$1"
	echo
	if [[ -n "$kat" ]]; then
		select nummer in $kat "abbrechen"; do
			echo
			if [ "$nummer" ]; then
				if [ "$nummer" = abbrechen ]; then
					rm $temp.*
					exit
				else
					e="$nummer"
					break
				fi
			else
				echo "ungültige Auswahl"
			fi
		done
	else
		echo "keine Kernelquellen gefunden"
		exit 
	fi
	}

find_Kziel()
	{
	gef=0
	kname="$4"
	grep -q $kname$ $1
	if [ $? -eq 0 ]; then
		gef=1
	fi
	if [ "$gef" -eq 0 ]; then
		grep -q "$kname.tar.bz2" $2
		if [ $? -eq 0 ]; then
			entp="$(grep "$kname.tar.bz2" $2 | head -1)"
			cd "$aa"
			#echo
			#echo "bitte etwas Geduld"
			#echo
			sudo tar -xj"$v"f "$entp"
			cd -
			gef=1
		else
			grep -q "$kname.tar.gz" $2
			if [ $? -eq 0 ]; then
				entp="$(grep "$kname.tar.gz" $2 | head -1)"
				cd "$aa"
				#echo
				#echo "bitte etwas Geduld"
				#echo
				sudo tar -xz"$v"f "$entp"
				cd -
				gef=1
			fi
		fi	
	fi
	if [ "$gef" -eq 0 ]; then
		grep -q "$kname.$arc.rpm" "$3"
		if [ $? -eq 0 ]; then
			ex=i[3-9]86.rpm
			gef=1
		fi
		if [ "$gef" -eq 1 ]; then
			entp="$(grep "$kname.$ex" "$3" | head -1)"
			cd "$aa"
			sudo rpm -"$vh"i "$entp"
			cd -
		fi
	fi
	}


##########################################    Kernel patchen     #########################################

findpatch()
	{
	find "$kav" \( -name "patch-$kname.gz" -o -name "patch-$kname.bz2" \)
	}

extention()
	{
	ext=${1##*.}
	case $ext in
		gz)	uncomp="gunzip -c" 
			ext=.gz;;
		bz2)	uncomp="bunzip2 -c"
			ext=.bz2;;
	esac
	}

patchziel_umbenennen()
	{
	if [ "$overw" -eq 1 ]; then
		sudo mv "$aa/linux-$1" "$aa/err9or-linux-$2"
	else
		#echo
		#echo "bitte etwas Geduld"
		#echo
		sudo cp -r "$aa/linux-$1" "$aa/err9or-linux-$2"
	fi
	}

repatchen()
	{
	ziel="$aa/err9or-linux-$e"
	entp="$(grep "$1" "$2" | head -1)"
	extention $entp
	sudo $uncomp "$entp" | sudo patch -p1 "$s" -R -N -E -d "$ziel"
	}


repatch()
	{
	if [ "$rczielext" -a "$spezzielext" ]; then
		kname=2.6.$[ $sublziel + 1 ]"$rczielext$spezzielext"
		pa="$kname"
		findpatch > $temp.ptch.150
		if [ ! -s $temp.ptch.150 ]; then
			pak="$kname"
		fi
		kname=2.6.$[ $sublziel + 1 ]"$rczielext"
		pb="$kname"
		findpatch > $temp.ptch.160
		if [ ! -s $temp.ptch.160 ]; then
			pbk="$kname"
		fi
		if [ -z "$pak" ] && [ -z "$pbk" ]; then
			patchziel_umbenennen "$pa" "$e"
			repatchen "$pa" $temp.ptch.150
			if [ $? -eq 0 ]; then
				repatchen "$pb" $temp.ptch.160
				if [ $? -eq 0 ]; then
					sudo mv "$aa/err9or-linux-$e" "$aa/linux-$e"
					weiter=0
				else
					sudo rm -r "$aa/err9or-linux-$e"
					if [ $weiter -eq 1 ]; then
						echo "Fehler beim Repatchen des Kernels $o auf $e gefunden"
						echo "der Kernel $o kann nicht gepatcht werden. Sie benötigen den Kernel $e"
						exit
					else
						weiter=1
					fi
				fi
			else
				sudo rm -r "$aa/err9or-linux-$e"
				if [ $weiter -eq 1 ]; then
					echo "Fehler beim Repatchen des Kernels $o auf $e gefunden"
					echo "der Kernel $o kann nicht gepatcht werden. Sie benötigen den Kernel $e"
					exit
				else
					weiter=1
				fi
			fi
		else
			weiter=1
		fi
	else
		kname="$o"
		findpatch > $temp.ptch.10
		if [ -s $temp.ptch.10 ]; then
			find_Kziel $temp.ptch.02 $temp.ptch.04 $temp.ptch.06 "$o"
			patchziel_umbenennen "$o" "$e"
			repatchen "$o" $temp.ptch.10
			if [ $? -eq 0 ]; then
				sudo mv "$aa/err9or-linux-$e" "$aa/linux-$e"
				weiter=0
			else
				sudo rm -r "$aa/err9or-linux-$e"
				if [ $weiter -eq 1 ]; then
					echo "Fehler beim Repatchen des Kernels $o auf $e gefunden"
					echo "der Kernel $o kann nicht gepatcht werden. Sie benötigen den Kernel $e"
					exit
				else
					weiter=1
				fi
			fi
 else
  weiter=1
		fi
	fi
	if [ "$weiter" -eq 1 ]; then
		kname="$e[-.]*"
		findpatch > $temp.ptch.11
		if [ -s $temp.ptch.11 ]; then
		pat=$(cat $temp.ptch.11)
			for i in $pat; do
				version "$i"
				grep -q "$i" $temp.ptch.09
				if [ $? -eq 0 ]; then
					find_Kziel $temp.ptch.02 $temp.ptch.04 $temp.ptch.06 "$i"
					if [ "$gef" -eq 1 ]; then
						version "$i"
						patchziel_umbenennen "$i" "$e"
						repatchen "$i" $temp.ptch.11
						if [ $? -eq 0 ]; then
							sudo mv "$aa/err9or-linux-$e" "$aa/linux-$e"
							weiter=0
							break
						else
							weiter=1
							sudo rm -r "$aa/err9or-linux-$e"
						fi
					else
						weiter=1
					fi
				else
					weiter=1
				fi
			done
		else
			weiter=1
		fi
	fi
	if [ "$weiter" -eq 1 ]; then
		cd "$ko"
		if [ "$pak" ] || [ "$pbk" ]; then
			if [ "$pak" ]; then
				download "$pak" "$rczielext" "$spezzielext"
				if [ $? -eq 0 ]; then
					pak=
				fi
			fi
			if [ "$pbk" ]; then
				download "$pbk" ziel
				if [ $? -eq 0 ]; then
					pbk=
				fi
			fi
		else
			download "$o" ziel
		fi
	fi
	}


if [ "$ptch" -eq 1 ]; then

#### Suche/Auswahl zu patchender Kernelquellen 

	Kernelquellensuche "Welche Kernelquellen wollen Sie patchen?"
	find_Kziel $temp.ptch.02 $temp.ptch.04 $temp.ptch.06 "$e"
	sublev "$e"
	sublziel="$sublI"
	xzielext="$xIext"
	rczielext="$rcIext"
	spezzielext="$spezIext"

#### Suche Patches

	kname=2.6.[0-9]*
	findpatch >> $temp.ptch.14
	ptchausw="$(cat $temp.ptch.14)"
	for i in $ptchausw; do
		extention "$i"
		i=${i%$ext}
		i=${i##*patch-}
		echo "$i" >> $temp.ptch.17
	done

#### Patches sortieren und filtern
	
	ptchausw1="$(cat $temp.ptch.17 | sort | uniq)"
	for i in $ptchausw1; do
		sublev "$i"
		if [ "$sublI" -gt "$sublziel" ] \
		||  ( [ "$sublI" -ge "$[ $sublziel - 1 ]" ] && [ "$rczielext" ] && [ "$i" != "$e" ] && [ "$i" != 2.6."$[ $sublziel - 1 ]" ] && [ ${e%$spezzielext} != ${i%$spezIext} ] ) \
		|| ( [ ${e%$spezzielext} = ${i%$spezIext} ] && [ "$spezIext" ] && [ "$i" != "$e" ] ) \
		|| ( [ "$sublI" -eq "$sublziel" ] && [ "$i" != "$e" ] && [ "$i" != 2.6."$sublziel" ] && [ -z "$rcIext" ] ); then 
			grep -q "$i.bz2" $temp.ptch.14
			if [ $? -eq 0 ]; then
				grep "$i.bz2" $temp.ptch.14 | head -1 >> $temp.ptch.16
			else
				grep "$i.gz" $temp.ptch.14 | head -1 >> $temp.ptch.16
			fi
		fi
	done
	echo
	echo "Patchauswahl:"
	echo
	patch="$(cat $temp.ptch.16)"
	if [ -z "$patch" ]; then
		echo "keine Patches für den Kernel $o bzw. $e in ~ gefunden"
		exit
	fi

#### Patch auswählen

	select nummer in $patch; do
		if [ "$nummer" ]; then
			extention "$nummer"
			patchneu="$nummer"
			version "$nummer"
			nummer="$i"
			sublev "$nummer"
			sublnummer="$sublI"
			xnummerext="$xIext"
			rcnummerext="$rcIext"
			speznummerext="$spezIext"

#### Patchziel korrigieren - wenn rc: minus 1 subl

			o="$e"
			if [ ${e%$spezzielext} = ${nummer%$speznummerext} ] && [ "$speznummerext" ]; then
				e=${e%$spezzielext}
			elif [ "$rczielext" ]; then
				sublziel=$[ $sublziel - 1 ]
			fi
			e=2.6."$sublziel"

#### Patchziel suchen, wenn nichts gefunden Kernelquellen repatchen
		
			#patchziel="$e"
			find_Kziel $temp.ptch.02 $temp.ptch.04 $temp.ptch.06 "$e"
			if [ "$gef" -eq 0 ]; then
				weiter=0
				repatch
				if [ $weiter -eq 1 ]; then
					repatch
				fi
			fi

#### nötige Patches suchen, fehlende herunterladen, ansonsten fehlende notieren
	
			patchziel="$e"
			cd "$ko"
			if [ "$xnummerext" ] || ( [  ! "$rcnummerext" ] && [ "$speznummerext" ] ); then
				count="$sublnummer"
			else
				count=$[ $sublnummer - 1 ]
			fi
			sublx="$sublziel"
			while [ "$sublx" -lt "$count" ]; do
				sublx=$[ $sublx + 1 ]
				kname="2.6.$sublx"
				findpatch > $temp.ptch.12
				if [ ! -s "$temp.ptch.12" ]; then
					wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-2.6."$sublx".bz2
					if [ $? -ne 0 ]; then
						echo 2.6."$sublx" >> $temp.ptch.100
					fi
				fi
			done

#### Berechnung Zusatzpatches

			p2=0
			if [ ${e%$spezzielext} != ${nummer%$speznummerext} ] && [ "$speznummerext" ] && [ "$rcnummerext" ]; then
				p2=1
				patchneu2="$patchneu"
				kname="2.6.$sublnummer$rcnummerext"
				findpatch > $temp.ptch.30
				patchneu="$(cat $temp.ptch.30 | head -1)"
				if [ -z "$patchneu" ]; then
					if [ "$rcnummerext" ]; then
						wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/testing/patch-"$kname".bz2
						if [ $? -ne 0 ]; then
							echo "2.6.$sublnummer$rcnummerext" >> $temp.ptch.100
						else
							patchneu="$ko/patch-$kname".bz2
						fi
					else
						wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-"$kname".bz2
						if [ $? -ne 0 ]; then
							echo "2.6.$sublnummer$rcnummerext" >> $temp.ptch.100
						else
							patchneu="$ko/patch-$kname".bz2
						fi
					fi
				fi
			fi

#### Falls der Fall, fehlende Patches zeigen und abbrechen

			if [ -s $temp.ptch.100 ]; then
				echo "um linux-$e mit dem patch-$nummer patchen zu können, benötigen Sie noch folgende Patches:"
				cat $temp.ptch.100
				exit
			fi

#### zu patchenden Quellen neuen Namen geben und Besitzer wechseln

			cd "$aa"
			if [ "$overw" -eq 1 ]; then
				sudo mv "linux-2.6.$patchziel" "err9or-linux-$nummer"
			else
				#echo
				#echo "bitte etwas Geduld"
				#echo
				sudo cp -r "linux-$patchziel" "err9or-linux-$nummer"
			fi
			ziel="$aa/err9or-linux-$nummer"
			sudo chown -R "$who" "$ziel"

#### Berechnung der Durchläufe der Patch-Schleife

			differenz=$[ $sublnummer - $sublziel ]
			version "$patchneu"
			sublev "$i"
			if [ "$xIext" ] || [ "$spezIext" ]; then
				differenz=$[ $differenz + 1 ]
			fi

#### Patch-Schleife

			sublpatch=$[ $sublziel + 1 ]
			while [ $differenz -gt 1 ]; do
				kname="2.6.$sublpatch"
				findpatch > $temp.ptch.30
				ptch="$(cat $temp.ptch.30 | head -1)"
				extention "$ptch"
				if [ "$uncomp" ]; then
					sudo $uncomp "$ptch" | sudo patch -p1 "$s" -N -E -d "$ziel"
					if [ $? -ne 0 ]; then
						echo "Fehler beim Patchen"
						sudo rm -r "$aa"/err9or-linux-2.6* 2> /dev/null
						exit
					fi
				fi
				differenz=$[ $differenz - 1 ]
				sublpatch=$[ $sublpatch + 1 ]
			done

#### erster Zusatzpatch

			extention "$patchneu"
			if [ "$uncomp" ]; then
				sudo $uncomp "$patchneu" | sudo patch -p1 "$s" -N -E -d "$ziel"
				if [ $? -ne 0 ]; then
					echo "Fehler beim Patchen"
					sudo rm -r "$aa"/err9or-linux-2.6* 2> /dev/null
					exit
				fi

				if [ "$p2" -eq 0 ]; then
					find "$ziel" \( -name "*.orig" -o -name ".*.orig" \) -exec sudo rm {} \;
				fi
			fi

#### zweiter Zusatzpatch

			if [ $p2 -eq 1 ]; then
				extention "$patchneu2"
				if [ "$uncomp" ]; then
					sudo $uncomp "$patchneu2" | sudo patch -p1 "$s" -N -E -d "$ziel"
					if [ $? -ne 0 ]; then
						echo "Fehler beim Patchen"
						sudo rm -r "$aa"/err9or-linux-2.6* 2> /dev/null
						exit
					fi
					find "$ziel" \( -name "*.orig" -o -name ".*.orig" \) -exec sudo rm {} \;	
				fi
			fi
			break
		else
			echo "ungültige Auswahl"
		fi
	done
	sudo mv "err9or-linux-$nummer" "linux-$nummer"
fi


##############################     Kernelquellen suchen     ############################################

Kernelquellensuche "welcher Kernel soll konfiguriert und installiert werden?"
find_Kziel $temp.ptch.02 $temp.ptch.04 $temp.ptch.06 "$e"


#######################################     Kernelbezeichnung       ####################################

a="$e"
f="$aa"/linux-"$a"
sudo chown -R mm "$f"
cd "$f"
nj=0
while [ -f "/boot/vmlinuz-$a-x$d-c" ] && [ "$nj" -eq 0 ]; do
	echo
	echo
	echo "/boot/vmlinuz-$a-x$d-c besteht bereits"
	echo
	select num in "zusätzliche Kernelbezeichnung" "/boot/vmlinuz-$a-x$d-c überschreiben"; do
		case "$num" in
			zusät*)	echo
				echo -n "zusätzliche Kernelbezeichnung z.B. -123 oder -xyz: "
				read d
				d=${d#.}; d=${d#_}; d=${d#;}; d=${d#:}; d=${d#,}; d=${d#/}; 
				if [[ "$d" != -* ]]; then
					d=-"$d"
				fi
				nj=0
				break;;
			/boot*)	nj=1
				break;;
			     *)	echo
				echo "ungültige Auswahl";;
		esac
	done
done
echo


########################################    initial-ram-disk   #########################################

select nummer in "Initial-RAM-Disk erzeugen" "keine Initial-RAM-Disk erzeugen"; do
	case "$nummer" in
		Initial*)	echo	
				irdisk=j
				break;;
		keine*	)	echo
				irdisk=n
				break;;
		*	)	echo
				echo "ungültige Auswahl";;
	esac
done
echo


###########################################     config     ###############################################

ko=~/kernel
if [ ! -d "$ko" ]; then
	mkdir "$ko"
fi
l="$ko/kernel-config"
if [ ! -d "$l" ]; then
	mkdir "$l"
fi
e="$(date +%F-%T)"
zcat /proc/config.gz > "$l/config-$e-alt"
	ses="$(sed -n '/DEFAULT_WM=/p' /etc/sysconfig/windowmanager)"
	ses=${ses##DEFAULT_WM=}
	ses=${ses#'"'}
	ses=${ses%'"'}
if [[ $ses = gnome ]]; then
	xg1=gconfig
	pac1=libglade2-devel
	xg2=xconfig
	pac2=qt3-devel
else
	xg1=xconfig
	pac1=qt3-devel
	xg2=gconfig
	pac2=libglade2-devel
fi
if [ -s Makefilexc9backup ]; then
	cp Makefilexc9backup Makefile
else
	cp Makefile Makefilexc9backup
fi

develpaketconfig()
	{
	echo
	make "$1"
	if [ $? -eq 0 ]; then
		cf=2
	else
		cf=1
		rpm -q "$2" > /dev/null
		if [ $? -ne 0 ]; then
			echo
			echo
			echo "das rpm-Packet \"$2\" ist nicht installiert."
			echo "\"$1\" benötigt das Packet \"$2\"."
		fi
		echo
	fi
	}

develpaketconfig "$xg1" "$pac1"
while [ "$cf" -eq 1 ]; do
	select num in "$xg1" "$xg2" "menuconfig" "config" "Abbruch"; do
		case "$num" in
			"$xg1"	)	develpaketconfig "$xg1" "$pac1"
					break;;
			"$xg2"	)	develpaketconfig "$xg2" "$pac2"
					break;;
			menuc*	) 	develpaketconfig menuconfig ncurses-devel
					break;;
			config	) 	echo
					make config
					if [ $? -eq 0 ]; then
						cf=2
					else
						cf=1
					fi
			 		break;;
			Abbruch	) 		exit;;
		    	  *	) 	echo
			 		echo "ungültige Auswahl";;
		esac
	done
done


#######################################     Extraversion      ############################################

cp "$f/Makefile" M9akke7
i="$(sed -n "4{/EXTRAVERSION\ =/p}" < M9akke7)"
grep -q "EXTRAVERSION = .[0-9]" M9akke7
if [ $? -eq 0 ];then
	sed "4s/$i/$i-x$d-c/" < M9akke7 > $f/Makefile
elif [ $? -eq 1 ]; then
	sed "4s/$i/$i\ -x$d-c/" < M9akke7 > $f/Makefile
else
	echo "zusätzliche Kernelbezeichnung konnte nicht in die Makefile geschrieben werden"
fi
head -4 "$f/Makefile"
echo


###########################################     make     ###############################################

make "$s" all
if [ $? -ne 0 ]; then
	echo "Fehler"
	exit
fi
echo -n "drücken Sie   Enter   :  "
read
sudo make modules_install
sudo cp "$f/arch/i386/boot/bzImage" "/boot/vmlinuz-$a-x$d-c"
sudo cp "$f/System.map" "/boot/System.map-$a-x$d-c"
if [ "$irdisk" != n ]; then
	sudo /sbin/mkinitrd -k "vmlinuz-$a-x$d-c" -M "/boot/System.map-$a-x$d-c" -i "initrd-$a-x$d-c"
fi
mv M9akke7 "$f/Makefile"
i="$ko/backup-menu.lst"
if [ ! -d "$i" ]; then
	mkdir "$i"
fi
if [ ! -s "/boot/vmlinuz-$a-x$d-c" ]; then
	rm $temp.*
	echo "Fehler"
	echo "/boot/vmlinuz-$a-x$d-c konnte nicht erstellt werden"
	exit
fi


######################################     menu.lst      ###############################################

sudo cp /boot/grub/menu.lst "$i/bu-menu.lst-$e"
sudo chown "$who" "$i/bu-menu.lst-$e"
cp "$f/.config" "$l/config-$e-neu"
ml=~/9m7enu.lst
sudo cp /boot/grub/menu.lst "$ml"
sudo chown "$who" "$ml"
grep -q '^\#------------------------*---$' "$ml"
if [ $? -eq 0 ]; then
	sed '/#---------------/d' < "$ml" > $temp.04
	cat -s $temp.04 > "$ml"
fi
echo > ~/d9atei01 
echo \#---------------------------------------------------------------------------------------------------------------- >> ~/d9atei01
echo > ~/d9atei02
echo \#---------------------------------------------------------------------------------------------------------------- >> ~/d9atei02
v=1
grep "vmlinuz-$a-x$d-c" < "$ml" > $temp.08
s="$(wc -l < $temp.08)"
grep "initrd-$a-x$d-c" < "$ml" > $temp.09
t="$(wc -l < $temp.09)"
bop=0
grep -q '(hd[0-9]\{1,2\},[0-9]\{1,2\})/boot/vmlinuz' "$ml"
if [ $? -eq 0 ]; then
	bop=1
fi
grep -o 'root=/dev/[a-z]\{3\}[0-9]\{1,2\}' "$ml" | sort | uniq > $temp.06
rop=$(wc -l < $temp.06)
csplit -f ~/t9eil7. "$ml" /"###Don't change this comment - YaST2 identifier: Original name:"/-1 {*} > /dev/null
grep -q 'openSUSE' /etc/SuSE-release
if [ $? -eq 0 ]; then
	openSUSE=openSUSE
fi
if [ "$nj" -eq 0 ] || [ "$s" -eq 0 ]; then
	bp="$(grep -o 'root (hd[0-9]\{1,2\},[0-9]\{1,2\})' ~/t9eil7.01)"
	if [[ -z "$bp" ]]; then
		bp="root (hd?,?)"
	fi
	rp="$(grep -o 'root=/dev/[a-z]\{3\}[0-9]\{1,2\}' ~/t9eil7.01)"
	if [[ -z "$rp" ]]; then
		rp="root=/dev/????"
	fi
	cat ~/d9atei01 > $temp.07
	echo >> $temp.07
	echo "###Don't change this comment - YaST2 identifier: Original name: linux###" >> $temp.07
	echo "title openSUSE $ver  $a-x$d-c" >> $temp.07
	echo "    $bp" >> $temp.07
	echo "    kernel /boot/vmlinuz-$a-x$d-c $rp vga=0x317    resume=/dev/sda7  splash=silent showopts" >> $temp.07
	if [[ "$irdisk" == j ]]; then
		echo "    initrd /boot/initrd-$a-x$d-c" >> $temp.07
	fi
	cat ~/d9atei02 >> $temp.07
	j="title openSUSE $ver  $a-x$d-c"
	csplit -f ~/t9eil7. "$ml" /"###Don't change this comment - YaST2 identifier: Original name:"/-1 {1} > /dev/null
	cp "$ml" ~/menu.lst-bu
	cat ~/t9eil7.00 > "$ml"
	cat ~/t9eil7.01 >> "$ml"
	cat $temp.07 >> "$ml"
	cat ~/t9eil7.02 >> "$ml"
	v=0
	if [ ! -s "$ml" ]; then
		mv ~/menu.lst-bu "$ml"
		v=1
	fi
	rm ~/menu.lst-bu
elif [ "$nj" -eq 1 ] && [ "$s" -eq 1 ] && [ "$t" -lt 2 ]; then
	cp "$ml" "$ml-backup"
	grep -l "vmlinuz-$a-x$d-c" ~/t9eil7.[0-9][0-9] > $temp.11
	c="$(wc -l $temp.11 | awk '{ print $1 }')"
	if [ "$c" -eq 1 ]; then
		u="$(cat $temp.11)"
		j="$(sed -n "/title\ openSUSE 1[0-9].[0-9]  $a-x$d-c/p" < $ml)"
		cp "$u" $temp.12
		cat ~/d9atei01 > "$u"
		cat $temp.12 >> "$u"
		if [[ "$irdisk" == j ]] && [ "$t" -eq 0 ]; then
			echo "    initrd /boot/initrd-$a-x$d-c" >> "$u"
		fi
		if [[ "$irdisk" == n ]] && [ "$t" -eq 1 ]; then
			sed "/initrd-$a-x$d-c/d" < "$u" > $temp.10
			cat < $temp.10 > "$u"
			find /boot -name "vmlinuz-$a-x$d-c" > $temp.22
			in="$(wc -l $temp.22 | awk '{ print $1 }')"
		if [ "$in" -eq 1 ]; then
			sudo rm "/boot/initrd-$a-x$d-c"
		fi
	fi
		cat ~/d9atei02 >> "$u"
		cat ~/t9eil7.[0-9][0-9] > "$ml"
	fi
	if [[ -z "$ml" ]] || [[ -z "$j" ]]; then
		v=1
		cp "$ml-backup" "$ml"
	else
		v=0
	fi
	rm "$ml-backup"
else
	v=1
fi
rm ~/t9eil7.[0-9][0-9]
echo
echo
echo
echo
echo
if [ "$v" -eq 1 ]; then
	if [ "$nj" -eq 0 ] || [ "$s" -eq 0 ]; then
		echo "fügen Sie einen Eintrag in menu.lst für den neuen Kernel $a-x$d-c hinzu"
		echo
		echo "kernel /boot/vmlinuz-$a-x$d-c"
		if [[ "$irdisk" == j ]]; then
			echo "initrd /boot/initrd-$a-x$d-c"
		fi
	elif [ "$nj" -eq 1 ] && [ "$s" -gt 0 ]; then
		echo "Bitte kontrollieren Sie den Eintrag (z.B. boot- bzw. root-Partion) in /boot/grub/menu.lst für den Kernel $a-x$d-c"
		echo
		echo "		kernel /boot/vmlinuz-$a-x$d-c"
		if [[ "$irdisk" == j ]]; then
			echo
			echo "falls nicht schon vorhanden, fügen Sie dem Eintrag folgende Zeile hinzu:"
			echo "initrd /boot/initrd-$a-x$d-c"
		elif [[ "$irdisk" == n ]]; then
			echo
			echo "entfernen Sie (falls vorhanden) die initrd-$a-x$d-c-Zeile des entsprechenden Eintrages"
		fi
	fi
	echo
	echo "Drücken Sie \"Enter\" um die menu.lst zu öffnen."	
	read we
elif [ "$v" -eq 0 ]; then
	echo "`tput setf 4`Kontrollieren`tput sgr0` Sie den Eintrag in /boot/grub/menu.lst mit dem Titel"
	echo
	echo "$j"
	echo
	echo "kernel /boot/vmlinuz-$a-x$d-c"
	if [[ "$irdisk" == j ]]; then
		echo "initrd /boot/initrd-$a-x$d-c"
	fi
	if [ "$rop" -gt 1 ]  || [ "$bop" -eq 1 ]; then
		echo
		echo "Kontrollieren Sie, ob die Boot- bzw. Root-Partition richtig gesetzt ist."
		echo
		echo
		echo "Drücken Sie \"Enter\" um die menu.lst zu öffnen."	
		read we
	fi
fi
echo
echo
echo
echo
kwrite "$ml"
if [ $? -ne 0 ]; then
	gedit "$ml"
	if [ $? -ne 0 ]; then
		vi "$ml"
	fi
fi
grep -q '^\#------------------------*---$' "$ml" 
if [ $? -eq 0 ]; then
	sed '/#---------------/d' < "$ml" > $temp.13
	cat -s $temp.13 > "$ml"
fi
sudo mv "$ml" /boot/grub/menu.lst
rm $temp.*
rm ~/d9atei[0-9][0-9]
exit
Zuletzt geändert von catweasel am 16. Mär 2007, 18:11, insgesamt 6-mal geändert.

Werbung:
jengelh
Guru
Guru
Beiträge: 4039
Registriert: 20. Nov 2004, 17:42
Kontaktdaten:

Re: Kernelinstallationsskript

Beitrag von jengelh » 11. Dez 2006, 22:50

catweasel hat geschrieben:Was sagt ihr zu meinem Skript?
Superkomplex, mehr noch als der Dreischritt.

Guck dir die Specfiles an, da steht drin, sie geben einen Hinweis darauf, wie man - inklusive der SUSE-Patches - automatisiert vorgeht.

Subroutinen [in SH] scheinen dir auch ein Fremdwort zu sein.

catweasel
Hacker
Hacker
Beiträge: 432
Registriert: 9. Nov 2006, 19:46

Beitrag von catweasel » 24. Dez 2006, 22:06

nach oben verschoben
Zuletzt geändert von catweasel am 23. Jan 2007, 22:47, insgesamt 4-mal geändert.

catweasel
Hacker
Hacker
Beiträge: 432
Registriert: 9. Nov 2006, 19:46

Re: Kernelinstallationsskript

Beitrag von catweasel » 27. Dez 2006, 18:53

jengelh hat geschrieben:Guck dir die Specfiles an, da steht drin, sie geben einen Hinweis darauf, wie man - inklusive der SUSE-Patches - automatisiert vorgeht.
Wo finde ich diese Specfiles?

jengelh
Guru
Guru
Beiträge: 4039
Registriert: 20. Nov 2004, 17:42
Kontaktdaten:

Beitrag von jengelh » 27. Dez 2006, 20:33

In kernel-source-versionhier.src.rpm

catweasel
Hacker
Hacker
Beiträge: 432
Registriert: 9. Nov 2006, 19:46

Beitrag von catweasel » 3. Jan 2007, 17:35

gibt es zwischen Suse 10.2 x86 und Suse 10.2 x86_64 beim Kompilieren und Installieren eines Kernels (abgesehen vom Konfigurieren und von den kernel-source.rpm's) Unterschiede?

jengelh
Guru
Guru
Beiträge: 4039
Registriert: 20. Nov 2004, 17:42
Kontaktdaten:

Beitrag von jengelh » 5. Jan 2007, 00:18

Gibt's nichtmal bei den normalen Paketen.

catweasel
Hacker
Hacker
Beiträge: 432
Registriert: 9. Nov 2006, 19:46

Beitrag von catweasel » 23. Jan 2007, 22:49

jetzt neu: mit Downloadfunktion

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast