From 8f1f5acc3f14b3c96ef2fd62c8f1549064b8b91e Mon Sep 17 00:00:00 2001 From: Christian Rößler Date: Wed, 31 Jul 2013 18:28:53 +0200 Subject: Reorganized: Script more robust (disk full or such will not break bootable system), warning if disk space presumed to be too low, traps for cleanup (exit, int term), paths and files eg. variabilized etc. --- data/openslx-update | 74 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/data/openslx-update b/data/openslx-update index e4d271f5..c7e24d30 100755 --- a/data/openslx-update +++ b/data/openslx-update @@ -1,5 +1,7 @@ #!/bin/bash +### Funktionen ################################### + function print () { echo -e "\033[01;29m$@\033[00m" @@ -16,34 +18,58 @@ function warning () echo -e "\033[01;33m$@\033[00m" } +### Variablen ################################### +# Web MIRROR="http://mltk.boot.openslx.org" +MIRRORDIR="files" +# Dateien und Verzeichnisse +PXEDIR="/srv/openslx/tftp/pxelinux.cfg" +PXECONFIG="$PXEDIR/default" +PXETEMPLATE="/opt/openslx/templates/pxemenu-header" +FILEPRAEFIX="openslx-" +WWWDIR="/srv/openslx/www" +# Konfigurationsdateien +SERVERDEFAULTS="/opt/openslx/server-defaults" +# Temporäres REMOTEINDEX="/tmp/mlversion" LOCALINDEX="/opt/openslx/local_version" WWWTEMP="/srv/openslx/www-temp" -PXECONFIG="/srv/openslx/tftp/pxelinux.cfg/default" +# Vars zum Überladen +LOCAL_STABLE=0 +LOCAL_TESTING=0 +# Vars für Prüfsummen CRCCOMMAND=md5sum CRCEXTENSION=md5 +# Mindestens freier Plattenplatz in Kilobytes +MINSPACE=409600 # 400MB -. "/opt/openslx/server-defaults" || error "Konnte Serverkonfiguration nicht laden. Wurde openslx-install ausgeführt?" +trap "{ rm -f $REMOTEINDEX $WWWTEMP/* $WWWDIR/*.$CRCEXTENSION; }" SIGINT SIGTERM EXIT -LOCAL_STABLE=0 -LOCAL_TESTING=0 +# Warnung ausgeben, wenn Raum für $WWWTEMP eventuell zu klein +if [ $(df -Pk $WWWTEMP|tail -1| tr -s ' '|cut -d " " -f 4) -lt $MINSPACE ]; then + warning "Achtung: Eventuell zu wenig freier Speicherplatz verfügbar." +fi + + +. "$SERVERDEFAULTS" || error "Konnte Serverkonfiguration nicht laden. Wurde openslx-install ausgeführt?" if [ -s "$LOCALINDEX" ]; then . "$LOCALINDEX" || error "Fehler beim laden der lokalen Versionsinfirmationen aus $LOCALINDEX" fi print "" print "Lade Liste aktuell verfügbarer Versionen..." -rm -f "$REMOTEINDEX" wget -O "$REMOTEINDEX" "$MIRROR/index" || error "Konnte Liste verfügbarer Releases nicht herunterladen." . "$REMOTEINDEX" || error "Liste verfügbarer Releases Fehlerhaft (konnte $REMOTEINDEX nicht sourcen)" # Regenerate pxemenu -mkdir -p "/srv/openslx/tftp/pxelinux.cfg" -cp "/opt/openslx/templates/pxemenu-header" "$PXECONFIG" +[ -d "$PXEDIR" ] || mkdir -p "$PXEDIR" +cp "$PXETEMPLATE" "$PXECONFIG" +ERR=$?; [ $ERR -ne 0 ] && error "Kann PXE-Vorlage nicht umkopieren!" mkdir -p "$WWWTEMP" -mv /srv/openslx/www/openslx-* "$WWWTEMP/" +cp -p "$WWWDIR/$FILEPRAEFIX"* "$WWWTEMP/" +ERR=$?; [ $ERR -ne 0 ] && error "Kann bestehende Dateien nicht nach $WWWTEMP kopieren!" + for REL in ${!AVAILABLE_*}; do BRANCH="${REL#AVAILABLE_}" print "Remote has branch $BRANCH" @@ -52,32 +78,31 @@ for REL in ${!AVAILABLE_*}; do for FILE in ${!REL}; do # Handle pxelinux.cfg if [[ "$FILE" == kernel* ]]; then - KERNEL="KERNEL http://$SLX_LOCAL_ADDR/openslx-$FILE" + KERNEL="KERNEL http://$SLX_LOCAL_ADDR/$FILEPRAEFIX$FILE" else if [ -z "$PXELINE" ]; then PXELINE="INITRD " else PXELINE+="," fi - PXELINE+="http://$SLX_LOCAL_ADDR/openslx-$FILE" + PXELINE+="http://$SLX_LOCAL_ADDR/$FILEPRAEFIX$FILE" fi # If file is available locally, don't download again - if [ -s "$WWWTEMP/openslx-$FILE" ]; then - mv "$WWWTEMP/openslx-$FILE" "/srv/openslx/www/" + if [ -s "$WWWTEMP/$FILEPRAEFIX$FILE" ]; then continue fi # Download - wget -O "/srv/openslx/www/openslx-$FILE" "$MIRROR/files/$FILE" || { warning "Could not download $FILE"; continue; } + wget -O "$WWWTEMP/$FILEPRAEFIX$FILE" "$MIRROR/$MIRRORDIR/$FILE" || { warning "Could not download $FILE"; continue; } # Download md5 value - wget -O "/srv/openslx/www/openslx-$FILE.$CRCEXTENSION" "$MIRROR/files/$FILE.$CRCEXTENSION" \ + wget -O "$WWWTEMP/$FILEPRAEFIX$FILE.$CRCEXTENSION" "$MIRROR/$MIRRORDIR/$FILE.$CRCEXTENSION" \ || { warning "Could not download $FILE.$CRCEXTENSION!"; continue; } # check file checksums - if [ $($CRCCOMMAND "/srv/openslx/www/openslx-$FILE"|cut -f 1 -d " ") != "$(cat /srv/openslx/www/openslx-$FILE.$CRCEXTENSION)" ]; then + if [ $($CRCCOMMAND "$WWWTEMP/$FILEPRAEFIX$FILE"|cut -f 1 -d " ") != "$(cat $WWWTEMP/$FILEPRAEFIX$FILE.$CRCEXTENSION)" ]; then warning "$CRCCOMMAND: $FILE: checksum mismatch! Transmission error or disk full." warning "$CRCCOMMAND: $FILE: Prüfsummendiskrepanz! Übertragungsfehler oder Laufwerk voll." error "Beende Skript aufgrund Prüfsummendiskrepanz!" else - print "Prüsummencheck Datei $FILE ok." + print "Prüfsummencheck Datei $FILE ok." fi done if [ -z "$PXELINE" -o -z "$KERNEL" ]; then @@ -96,15 +121,22 @@ for REL in ${!AVAILABLE_*}; do EXTRA="${BRANCH}_EXTRA" for FILE in ${!EXTRA}; do # If file is available locally, don't download again - if [ -s "$WWWTEMP/openslx-$FILE" ]; then - mv "$WWWTEMP/openslx-$FILE" "/srv/openslx/www/" + if [ -s "$WWWTEMP/$FILEPRAEFIX$FILE" ]; then + # mv "$WWWTEMP/$FILEPRAEFIX$FILE" "$WWWDIR/" continue fi # Download - wget -O "/srv/openslx/www/openslx-$FILE" "$MIRROR/files/$FILE" || warning "Could not download $FILE" + wget -O "$WWWTEMP/$FILEPRAEFIX$FILE" "$MIRROR/$MIRRORDIR/$FILE" || warning "Could not download $FILE" done done + +# If we are here, then we can assume everything went either right, or at least no fatal error happened. +# So, we will move the stuff in $WWWTEMP to $WWWDIR. + +print "Alles scheint ok - Bewege neue Abbilder zum Webserver." +mv "$WWWTEMP/"* "$WWWDIR/" print "Done." -print "Old files left over:" -ls -alh "$WWWTEMP" +# print "Old files left over:" +# ls -alh "$WWWTEMP" +exit 0 -- cgit v1.2.3-55-g7522