Was sagt ihr zu meinem Skript?
ediert am 25.07.2007
ediert am 25.07.2007
Code:
#! /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