run_kernel_info.sh
Grafisches Dialogscript für den KDE Desktop (kdialog) zur Anzeige von Kernelinformationen. In einer Messagebox werden der neueste verfügbare Kernel, der aktuelllaufende Kernel, alle installierten Kernel und Details zu den lokal installierten Kernelversionen angezeigt.
Desweiteren wird der verfügbare und freie Speicherplatz im Root-Filesystem und einem evtl. vorhandenen Dateisystem /boot angezeigt. Diese Information ist wichtig, da ein zusätzlicher Kernel nur installiert werden kann wenn in diesen Dateisystemen genügend freier Platz vorhanden ist.
Screenshots
Scriptlisting
- run_kernel_info.sh
#!/bin/bash # # Version: 20230623 # ####################### # Variablenbelegung ####################### # DPKG_INFODIR="/var/lib/dpkg/info" SEARCHSTR="Modifiziert:" BOOTDIR="/boot" FILE_DETAIL="/home/$USER/tmp/kernel_info_detail.txt" ################ # Funktionen ################ # get_all_major_kernelversion() { # Alle Majorversionen im Standard-Repository ermitteln KERNEL_MAJOR_VERS_ALL=$(apt-cache search linux-image-'[0-9]'\.*\.0-.*-generic | awk -F"-" '{printf("%s\n",$3)}' | sort -V | uniq | cut -d "." -f1-2 | awk -F"." '{printf("%s ",$1"."$2)}') } get_installed_kernel() { # Alle lokal installierten Kernel ermitteln KERNEL_INSTALLED=$(dpkg -l | egrep linux-image-[0-9] | egrep -v ^rc | awk -F'-' '{printf("%s%s%s ", $3,"-",$4)}') } get_latest_kernel() { # Neuesten installierbaren Kernel ermitteln (ausser die mit Status rc) KERNEL_LATEST=$(for I in $(apt-cache search linux-image-'[0-9]'\.*\.0-.*-generic | awk -F"-" '{printf("%s\n",$3)}' | sort -V | uniq); do apt-cache search linux-image-$I-.*-generic | awk -F"-" '{print $3"-"$4}' | sort -V | tail -1 | awk '{printf("%s ",$0)}'; done) } get_running_kernel() { # Version des laufenden Kernel ermitteln KERNEL_RUNNING=$(uname -r | awk -F"-" '{print $1"-"$2}') } create_all_installed_kernel() { # teilinstallierte Kernel (Status rc) ermitteln KERNEL_PARTLY_INSTALLED=$(dpkg -l | egrep linux-image-[0-9] | egrep ^rc | awk '{print $2}') # wenn kein teilinstallierter Kernel vorhanden ist (also kein Kernelpaket mit Status rc) if [ "$KERNEL_PARTLY_INSTALLED" = "" ] then for ROW in $(ls -1 $DPKG_INFODIR/linux-image-[0-9]*-generic.list) do INSTALL_TIME_ORIG=$(stat $ROW | egrep ^$SEARCHSTR | cut -d" " -f2) INSTALL_TIME_NEW=$(date -d "$INSTALL_TIME_ORIG" '+%Y%m%d') INSTALL_TIME_DE=$(date -d "$INSTALL_TIME_ORIG" '+%d.%m.%Y') BASENAME=$(basename $ROW) TMP1=$(echo ${BASENAME:12}) SHORTNAME_INSTKERNEL=$(echo ${TMP1/.list/}) ARRAY_INSTKERNEL[$INDEX_INSTKERNEL]=$SHORTNAME_INSTKERNEL"#"$INSTALL_TIME_ORIG"#"$INSTALL_TIME_DE"#"$INSTALL_TIME_NEW INDEX_INSTKERNEL=$[INDEX_INSTKERNEL+1] done # wenn ein teilinstallierter Kernel vorhanden ist (also ein Kernelpaket mit Status rc) elif [ "$KERNEL_PARTLY_INSTALLED" != "" ] then # Installationsdatum der Kernel ermitteln (und Array erstellen) ausser bei den teilinstallierten Kernel for ROW in $(ls -1 $DPKG_INFODIR/linux-image-[0-9]*-generic.list | egrep -v $KERNEL_PARTLY_INSTALLED) do INSTALL_TIME_ORIG=$(stat $ROW | egrep ^$SEARCHSTR | cut -d" " -f2) INSTALL_TIME_NEW=$(date -d "$INSTALL_TIME_ORIG" '+%Y%m%d') INSTALL_TIME_DE=$(date -d "$INSTALL_TIME_ORIG" '+%d.%m.%Y') BASENAME=$(basename $ROW) TMP1=$(echo ${BASENAME:12}) SHORTNAME_INSTKERNEL=$(echo ${TMP1/.list/}) ARRAY_INSTKERNEL[$INDEX_INSTKERNEL]=$SHORTNAME_INSTKERNEL"#"$INSTALL_TIME_ORIG"#"$INSTALL_TIME_DE"#"$INSTALL_TIME_NEW INDEX_INSTKERNEL=$[INDEX_INSTKERNEL+1] done fi # Verfügbarkeitsdatum der Kernel ermitteln (an Array als weitere Spalte hinzufügen) ROW=0 INDEX_INSTKERNEL=0 for ROW in $(ls -1 $BOOTDIR/vmlinuz-*-*) do AVALIABLE_TIME_ORIG=$(stat $ROW | egrep ^$SEARCHSTR | cut -d" " -f2) AVALIABLE_TIME_DE=$(date -d "$AVALIABLE_TIME_ORIG" '+%d.%m.%Y') ARRAY_INSTKERNEL[$INDEX_INSTKERNEL]=${ARRAY_INSTKERNEL[$INDEX_INSTKERNEL]}"#"$AVALIABLE_TIME_DE INDEX_INSTKERNEL=$[INDEX_INSTKERNEL+1] done } get_all_installed_kernel() { # Ausgabe des Arrays mit Detailinfos zu den installierten Kerneln in Datei schreiben for ROW in ${ARRAY_INSTKERNEL[@]} do echo $ROW done | sort -t"#" -n -k4 | awk -F"#" '{printf("%s%-25s %-20s %-20s\n", "linux-image-",$1,$3,$5)}' > $FILE_DETAIL } del_log() { # Aufräumen if [ -e "$FILE_DETAIL" ] then rm $FILE_DETAIL fi } get_available_size() { # Freien Speicherplatz im Root-FS ermitteln FREE_SIZE_ROOT=$(df --output=size,avail --block-size=MB / | tail -1 | awk '{print "Aktuell verfügbarer Platz im Root-Dateisystem "$2" von "$1"."}') # Überprüfen ob /boot ein eigenes Dateisystem ist und ggf. freien Speicherplatz ermitteln AVAILABLE_BOOT_FS=$(df --output=target| egrep ^/boot) if [ "$AVAILABLE_BOOT_FS" ] then FREE_SIZE_BOOT=$(df --output=target,size,avail --block-size=MB /boot | tail -1 | awk '{print "Aktuell verfügbarer Platz im /boot-Dateisystem "$3" von "$2"."}') fi } ################## # Hauptprogramm ################## # get_all_major_kernelversion create_all_installed_kernel get_all_installed_kernel get_installed_kernel get_latest_kernel get_running_kernel get_available_size # Dialogbox anzeigen kdialog --title "Kernel Info" --msgbox "<br><b><u>Infos zu den installierten Kerneln im System und verfügbaren Versionen im Repo</u></b><br><br><b>Aktuell verfügbare Major-Kernelversionen im Repo</b><br>$KERNEL_MAJOR_VERS_ALL<br><br><b>Neuester verfügbarer Kernel je Majorversion</b><br>$KERNEL_LATEST<br><br><b>Aktuell laufende Kernelversion</b><br><u>$KERNEL_RUNNING</u><br><br><b>Alle installierten Kernelversionen</b><br>$(for ROW in $(echo $KERNEL_INSTALLED); do echo $ROW; done)<br><br><b>Installationsdetails zu den Kernelversionen</b><br>Kernelpaketname Installiert Verfügbar<br>$(while read ROW; do echo $ROW; echo "<br>"; done <$FILE_DETAIL) <br><b>Speicherplatzbedarf</b><br>Pro installierten Kernel werden ca. 160MB freier Speicherplatz in /boot benöigt.<br>$FREE_SIZE_ROOT<br>$FREE_SIZE_BOOT" del_log #EOF
run_kernel_info.sh.txt · Zuletzt geändert: 2023/06/30 14:00 von dwadmin