#!/bin/bash
#
# Version: 20210714
#
#######################
# Variablenbelegung
#######################
#
USER_TMP_DIR="/home/$USER/tmp"
LOGFILE_INSTALL=/home/$USER/tmp/$(basename $0).log
TIME_STAMP=$(date '+%Y%m%d-%H%M%S')
KERNEL_MAJOR_VERS=$(uname -r|awk -F"-" '{print $1}')
KERNEL_MAJOR_SHORT=$(uname -r|cut -d"." -f1-2)
KERNEL_MAJOR_VERS_ALL=$(apt-cache search linux-image-'[0-9]'\.*\.0-.*-generic |awk -F"-" '{print $3}'|sort -V | uniq)
################
# Funktionen
################
#
get_all_available_kernel()
{
# Verfügbare kernel ermitteln
echo "[$(date '+%H:%M:%S')] All available Kernel" >> $LOGFILE_INSTALL
#for ROW in $(apt-cache search linux-image-$KERNEL_MAJOR_VERS-.*-generic|awk -F"-" '{print $3"-"$4}')
for ROW in $(apt-cache search linux-image-'[0-9]'\.*\.0-.*-generic|awk -F"-" '{print $3"-"$4}'|sort -V)
do
ARRAY_AVAILABLE_KERNEL[$INDEX_AVAILABLE_KERNEL]=$ROW
echo ${ARRAY_AVAILABLE_KERNEL[$INDEX_AVAILABLE_KERNEL]} >> $LOGFILE_INSTALL
INDEX_AVAILABLE_KERNEL=$[INDEX_AVAILABLE_KERNEL+1]
done
}
get_mark_kernel()
{
# Kernelversionen kennzeichnen ob installiert oder nicht
echo "[$(date '+%H:%M:%S')] All installed Kernel" >> $LOGFILE_INSTALL
ROW=0
INDEX_AVAILABLE_KERNEL=0
for ROW in ${ARRAY_AVAILABLE_KERNEL[@]}
do
#IS_INSTALLED=$(dpkg -l | egrep $ROW | awk '{print $1}')
IS_INSTALLED=$(dpkg -l | egrep linux-image-$ROW | awk '{print $1}')
if [ "$IS_INSTALLED" ]
then
ARRAY_AVAILABLE_KERNEL[$INDEX_AVAILABLE_KERNEL]=$ROW"#yes_installed"
echo ${ARRAY_AVAILABLE_KERNEL[$INDEX_AVAILABLE_KERNEL]} >> $LOGFILE_INSTALL
INDEX_AVAILABLE_KERNEL=$[INDEX_AVAILABLE_KERNEL+1]
else
ARRAY_AVAILABLE_KERNEL[$INDEX_AVAILABLE_KERNEL]=$ROW"#not_installed"
INDEX_AVAILABLE_KERNEL=$[INDEX_AVAILABLE_KERNEL+1]
fi
done
}
get_installable_kernel()
{
# Installierbare Kernel ermitteln
echo "[$(date '+%H:%M:%S')] All installable Kernel" >> $LOGFILE_INSTALL
ROW=0
INDEX_AVAILABLE_KERNEL=0
for ROW in ${ARRAY_AVAILABLE_KERNEL[@]}
do
INSTALLABLE_KERNEL=$(echo $ROW | egrep "not_installed")
if [ "$INSTALLABLE_KERNEL" ]
then
ARRAY_INSTALLABLE_KERNEL[$INDEX_INSTALLABLE_KERNEL]=$ROW
echo ${ARRAY_INSTALLABLE_KERNEL[$INDEX_INSTALLABLE_KERNEL]} >> $LOGFILE_INSTALL
INDEX_INSTALLABLE_KERNEL=$[INDEX_INSTALLABLE_KERNEL+1]
fi
done
}
debug_print_array1()
{
# Funktion für die Fehlersuche (nicht genutzt)
echo ""
echo "---------- Start Debug ARRAY_AVAILABLE_KERNEL ----------"
for ROW in ${ARRAY_AVAILABLE_KERNEL[@]}
do
echo $ROW
done
echo "---------- Ende Debug ARRAY_AVAILABLE_KERNEL ----------"
echo ""
}
debug_print_array2()
{
# Funktion für die Fehlersuche (nicht genutzt)
echo ""
echo "---------- Start Debug ARRAY_INSTALLABLE_KERNEL ----------"
for ROW in ${ARRAY_INSTALLABLE_KERNEL[@]}
do
echo $ROW
done
echo "---------- Ende Debug ARRAY_INSTALLABLE_KERNEL ----------"
echo ""
}
debug_var()
{
# Funktion für die Fehlersuche (nicht genutzt)
echo ""
echo "---------- Start Debug Variablen ----------"
echo "TIME_STAMP="$TIME_STAMP
echo "USER_TMP_DIR="$USER_TMP_DIR
echo "LOGFILE_INSTALL="$LOGFILE_INSTALL
echo "KERNEL_MAJOR_SHORT="$KERNEL_MAJOR_SHORT
echo "KERNEL_MAJOR_VERS="$KERNEL_MAJOR_VERS
echo "KERNEL_MAJOR_VERS_ALL="$KERNEL_MAJOR_VERS_ALL
echo "---------- Ende Debug Variablen ----------"
echo ""
}
print_timestamp()
{
# Timestamp (Start und Ende) ins Logfile schreiben
TS_VALUE=$1
if [ "$TS_VALUE" = "start" ]
then
echo "[$(date '+%H:%M:%S')] ------------------------------------------- Start -------------------------------------------" >> $LOGFILE_INSTALL
elif [ "$TS_VALUE" = "end" ]
then
echo "[$(date '+%H:%M:%S')] ------------------------------------------- Ende --------------------------------------------" >> $LOGFILE_INSTALL
fi
}
create_log()
{
# ggf. temporäres tmp Verzeichnis im $HOME erstellen
if [ ! -d "$USER_TMP_DIR" ]
then
mkdir "$USER_TMP_DIR"
fi
# Altes Logfile löschen und neues erstellen
if [ -e "$LOGFILE_INSTALL" ]
then
rm $LOGFILE_INSTALL
touch $LOGFILE_INSTALL
print_timestamp start
echo "[$(date '+%H:%M:%S')] Logfile $LOGFILE_INSTALL von $USER am $(date '+%d.%m.%Y') angelegt (1)" >> $LOGFILE_INSTALL
else
touch $LOGFILE_INSTALL
print_timestamp start
echo "[$(date '+%H:%M:%S')] Logfile $LOGFILE_INSTALL von $USER am $(date '+%d.%m.%Y') angelegt (2)" >> $LOGFILE_INSTALL
fi
}
copy_log()
{
# altes Logfile sichern
echo "[$(date '+%H:%M:%S')] cp $LOGFILE_INSTALL $LOGFILE_INSTALL.$TIME_STAMP" >> $LOGFILE_INSTALL
print_timestamp end
cp $LOGFILE_INSTALL $LOGFILE_INSTALL"."$TIME_STAMP
}
show_passive_popup()
{
# Popup anzeigen bei (nicht)erfolgreicher Kernelinstallation
POP_TEXT=$1
echo "[$(date '+%H:%M:%S')] $POP_TEXT" >> $LOGFILE_INSTALL
kdialog --passivepopup "$POP_TEXT" 5
}
init_progressbar()
{
# initieren der Fortschrittsanzeige
progress=$(kdialog --title "Kernel-Installer" --progressbar "XXXX" 4)
qdbus $progress showCancelButton false
}
run_progressbar()
{
# Fortschrittsanzeige aktualisieren bei jedem Schritt
VALUE="$1"
TEXT="$2"
qdbus $progress Set "" value $VALUE > /dev/null
qdbus $progress setLabelText "$VALUE. Schritt: $TEXT" > /dev/null
}
close_progressbar()
{
# Fortschrittsanzeige am Scriptende schließen
qdbus $progress close > /dev/null
}
##################
# Hauptprogramm
##################
#
create_log
get_all_available_kernel
get_mark_kernel
get_installable_kernel
# Dialogbox zur Auswahl des Kernels der installiert werden soll
ANZ=${#ARRAY_INSTALLABLE_KERNEL[@]}
#KERNEL_SELECTION=$(kdialog --geometry 350x600 --title "Kernel-Installer" --menu "
Alle verfügbaren und installierbaren Kernel
sind weiter unten aufgelistet.