From c344de73f403d8ed04abbe976019ec03dd9c9d73 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 6 Sep 2013 15:18:35 +0200 Subject: [DEMOSERVER] Update install and update script - Check for updated scripts first, then update minilinux - Add defaults for NTP - Create pxe menuconfig in new format (config.tgz & addon support) - Minor tweaks and refactoring --- data/openslx-install | 2 + data/openslx-update | 182 ++++++++++++++++++++++++++++----------------------- 2 files changed, 103 insertions(+), 81 deletions(-) (limited to 'data') diff --git a/data/openslx-install b/data/openslx-install index b712aa3e..d511e88d 100755 --- a/data/openslx-install +++ b/data/openslx-install @@ -293,6 +293,8 @@ else # external NFS Server for VM Images is used. Disable NFS + Samba fi print "Dienste konfiguriert." +[ ! -e "/srv/openslx/www/config.tgz" ] && openslx-settings + # # ---- Create boottime system config ---- # diff --git a/data/openslx-update b/data/openslx-update index cb46b258..10ee3d7e 100755 --- a/data/openslx-update +++ b/data/openslx-update @@ -1,6 +1,6 @@ #!/bin/bash -### Funktionen ################################### +### Functions ################################### function print () { @@ -17,42 +17,104 @@ function warning () { echo -e "\033[01;33m$@\033[00m" } + +function download () +{ + [ $# -ne 2 ] && error "Script-Fehler: download (2 Params, habe $#!)" + # Download + wget -nv -O "$WWWDIR/$1" "$2" && DLFLAG=1 || { warning "Download von $2 fehlgeschlagen"; return 1; } + # Download md5 value + wget -nv -O "$WWWTEMP/$1.$CRCEXTENSION" "$2.$CRCEXTENSION" || { warning "Download von $2.$CRCEXTENSION fehlgeschlagen. Kann Dateiintegrität nicht prüfen."; return 0; } + # Check file checksums + if [ "$($CRCCOMMAND "$WWWDIR/$1" | cut -f 1 -d " ")" != "$(cat "$WWWTEMP/$1.$CRCEXTENSION")" ]; then + warning "$CRCCOMMAND: $WWWDIR/$1: Prüfsummendiskrepanz! Übertragungsfehler oder Laufwerk voll." + error "Beende Skript aufgrund Prüfsummendiskrepanz!" + else + print "Prüfsummencheck Datei $1 ok." + fi + return 0 +} -### Variablen ################################### +### Constants ################################### # Web MIRROR="http://mltk.boot.openslx.org" MIRRORDIR="files" -# Dateien und Verzeichnisse +# Files/Dirs PXEDIR="/srv/openslx/tftp/pxelinux.cfg" PXECONFIG="$PXEDIR/default" PXETEMPLATE="/opt/openslx/templates/pxemenu-header" -FILEPRAEFIX="openslx-" +FILEPREFIX="openslx-" WWWDIR="/srv/openslx/www" -SLXSCRIPTS="openslx-install openslx-update" SCRIPTPATH=$(dirname "$0") -SCRIPTBACKUPDIR=/root/backup -# Konfigurationsdateien +SCRIPTBACKUPDIR="/root/backup" SERVERDEFAULTS="/opt/openslx/server-defaults" -# Temporäres +LOCALINDEX="/opt/openslx/local_version" +WWWTEMP="/srv/openslx/www-temp" +# Other +SLXSCRIPTS="openslx-install openslx-update" +NOW=$(date +%Y%m%d) +# Temporary REMOTEINDEX=$(mktemp /tmp/mlversionXXX) LOCALINDEX="/opt/openslx/local_version" WWWTEMP="/srv/openslx/www-temp" +# Checksumming +CRCCOMMAND=md5sum +CRCEXTENSION=md5 +CRCLEN=32 +# Minimum free disk space +MINSPACE=409600 # 400MiB +### Variables ################################## DLFLAG=0 # if something was downloaded -# 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 -# Allgemein -DATUM=$(date +%Y%m%d) -trap "{ rm -f $REMOTEINDEX $WWWTEMP/* $WWWDIR/*.$CRCEXTENSION; }" SIGINT SIGTERM EXIT +trap "{ rm -f \"$REMOTEINDEX\" \"$WWWTEMP\"/* \"$WWWDIR\"/*.\"$CRCEXTENSION\"; }" SIGINT SIGTERM EXIT -# 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 +mkdir -p "$WWWTEMP" + +# Update Scripts openslx-install and openslx-update, if possible. +if [ ! -d "$SCRIPTBACKUPDIR" ]; then + print "Erzeuge Sicherungsverzeichnis für Skripte $SCRIPTBACKUPDIR" + mkdir -p "$SCRIPTBACKUPDIR" || error "Kann Sicherungsverzeichnis für Skripte nicht erstellen!" +fi +print "Prüfe auf neue openslx-ng Script-Versionen..." +SLXCHANGED=no +for FILE in $SLXSCRIPTS; do + if ! wget -nv -O "$WWWTEMP/$FILE.$CRCEXTENSION" "$MIRROR/$MIRRORDIR/$FILE.$CRCEXTENSION"; then + warning "Fehler bei Update-Prüfung für $FILE" + continue + fi + CRCVALNEW=$(cat "$WWWTEMP/$FILE.$CRCEXTENSION" | cut -f 1 -d " " | tr '[A-Z]' '[a-z]') + CRCVALOLD=$($CRCCOMMAND "$SCRIPTPATH/$FILE" | cut -f 1 -d " " | tr '[A-Z]' '[a-z]') + if [ "${#CRCVALNEW}" -ne "$CRCLEN" ]; then + warning "Fehler beim herunterladen der Prüfsumme von $FILE - erwartewte Länge $CRCLEN, tatsächliche Länge ${#CRCVALNEW}" + continue + fi + if [ "$CRCVALNEW" == "$CRCVALOLD" ]; then + print "$SCRIPTPATH/$FILE - kein Update notwendig." + continue + fi + wget -nv -O "$WWWTEMP/$FILE" "$MIRROR/$MIRRORDIR/$FILE" + if [ "$($CRCCOMMAND "$WWWTEMP/$FILE" | cut -f 1 -d " " | tr '[A-Z]' '[a-z]')" != "$CRCVALNEW" ]; then + warning "$SCRIPTPATH/$FILE konnte nicht upgedatet werden ($CRCEXTENSION-Fehler)!" + continue + fi + print "$SCRIPTPATH/$FILE wird upgedatet - $CRCEXTENSION ok." + print "Alte Version $SCRIPTPATH/$FILE gesichert nach: $SCRIPTBACKUPDIR/$FILE.$NOW." + mv "$SCRIPTPATH/$FILE" "$SCRIPTBACKUPDIR/$FILE.$NOW" + chmod u+x "$WWWTEMP/$FILE" # wget doesn't set exec :) + mv "$WWWTEMP/$FILE" "$SCRIPTPATH" + SLXCHANGED=yes +done +if [ "$SLXCHANGED" == "yes" ]; then + print "OpenSLX-Scripte aktualisiert. Starte neu..." + $0 $@ + RET=$? + exit $RET +fi + +# Warn if there's not enough space left... +if [ "$(df -Pk "$WWWDIR" | tail -1 | tr -s ' ' | cut -d " " -f 4)" -lt "$MINSPACE" ]; then warning "Achtung: Eventuell zu wenig freier Speicherplatz verfügbar." fi @@ -64,7 +126,7 @@ fi print "" print "Lade Liste aktuell verfügbarer Versionen..." -wget -O "$REMOTEINDEX" "$MIRROR/index" || error "Konnte Liste verfügbarer Releases nicht herunterladen." +wget -nv -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 @@ -72,10 +134,7 @@ wget -O "$REMOTEINDEX" "$MIRROR/index" || error "Konnte Liste verfügbarer Relea cp "$PXETEMPLATE" "$PXECONFIG" ERR=$?; [ $ERR -ne 0 ] && error "Kann PXE-Vorlage nicht umkopieren!" -mkdir -p "$WWWTEMP" -print "Kopiere bestehende Dateien sicherheitshalber um..." -cp -p "$WWWDIR/$FILEPRAEFIX"* "$WWWTEMP/" -ERR=$?; [ $ERR -ne 0 ] && error "Kann bestehende Dateien nicht nach $WWWTEMP kopieren!" +mv "$WWWDIR/$FILEPREFIX"* "$WWWTEMP/" for REL in ${!AVAILABLE_*}; do BRANCH="${REL#AVAILABLE_}" @@ -85,35 +144,25 @@ for REL in ${!AVAILABLE_*}; do for FILE in ${!REL}; do # Handle pxelinux.cfg if [[ "$FILE" == kernel* ]]; then - KERNEL="KERNEL http://$SLX_LOCAL_ADDR/$FILEPRAEFIX$FILE" + KERNEL="KERNEL http://$SLX_LOCAL_ADDR/$FILEPREFIX$FILE" else if [ -z "$PXELINE" ]; then PXELINE="INITRD " else PXELINE+="," fi - PXELINE+="http://$SLX_LOCAL_ADDR/$FILEPRAEFIX$FILE" + PXELINE+="http://$SLX_LOCAL_ADDR/$FILEPREFIX$FILE" fi # If file is available locally, don't download again - if [ -s "$WWWTEMP/$FILEPRAEFIX$FILE" ]; then - continue + if [ -s "$WWWTEMP/$FILEPREFIX$FILE" ]; then + mv "$WWWTEMP/$FILEPREFIX$FILE" "$WWWDIR/" && continue + warning "Konnte bestehende Datei $WWWTEMP/$FILEPREFIX$FILE nicht nach $WWWDIR/ verschieben, lade erneut herunter..." fi # Download - wget -O "$WWWTEMP/$FILEPRAEFIX$FILE" "$MIRROR/$MIRRORDIR/$FILE" && DLFLAG=1 || { warning "Could not download $FILE"; continue; } - # Download md5 value - wget -O "$WWWTEMP/$FILEPRAEFIX$FILE.$CRCEXTENSION" "$MIRROR/$MIRRORDIR/$FILE.$CRCEXTENSION" \ - || { warning "Could not download $FILE.$CRCEXTENSION!"; continue; } - # check file checksums - 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üfsummencheck Datei $FILE ok." - fi + download "$FILEPREFIX$FILE" "$MIRROR/$MIRRORDIR/$FILE" done if [ -z "$PXELINE" -o -z "$KERNEL" ]; then - warning "Incomplete entry. KERNEL or INITRD missing." + warning "Unvollständiger Eintrag. KERNEL oder INITRD fehlen." continue fi # Append to pxeconfig @@ -123,57 +172,28 @@ for REL in ${!AVAILABLE_*}; do echo " $KERNEL" >> "$PXECONFIG" echo " $PXELINE" >> "$PXECONFIG" echo " IPAPPEND 3" >> "$PXECONFIG" - echo " APPEND slxconfig=http://$SLX_LOCAL_ADDR/config" >> "$PXECONFIG" - # Extra files (e.g. vmplayer in it's own sqfs that gets downloaded later) + echo " APPEND slxsrv=$SLX_LOCAL_ADDR slxbase=/" >> "$PXECONFIG" + # Extra files (e.g. vmplayer in its own sqfs that gets downloaded later) EXTRA="${BRANCH}_EXTRA" for FILE in ${!EXTRA}; do # If file is available locally, don't download again - if [ -s "$WWWTEMP/$FILEPRAEFIX$FILE" ]; then - # mv "$WWWTEMP/$FILEPRAEFIX$FILE" "$WWWDIR/" - continue + if [ -s "$WWWTEMP/$FILEPREFIX$FILE" ]; then + mv "$WWWTEMP/$FILEPREFIX$FILE" "$WWWDIR/" && continue + warning "Konnte bestehende Datei $WWWTEMP/$FILEPREFIX$FILE nicht nach $WWWDIR/ verschieben, lade erneut herunter..." fi # Download - wget -O "$WWWTEMP/$FILEPRAEFIX$FILE" "$MIRROR/$MIRRORDIR/$FILE" || warning "Could not download $FILE" + download "$FILEPREFIX$FILE" "$MIRROR/$MIRRORDIR/$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. if [ "$DLFLAG" -ne 0 ]; then - print "Alles scheint ok - Bewege neue Abbilder zum Webserver." - mv "$WWWTEMP/"* "$WWWDIR/" - print "Neue Abbilder bewegt." + print "Alles scheint ok." else - print "Keine Abbilder heruntergeladen - leere temporäres Verzeichnis $WWWTEMP." - rm -f "$WWWTEMP/"* + print "Keine neuen Abbilder heruntergeladen." fi +rm -f "$WWWTEMP/"* + +exit 0 -# Update Scripts openslx-install and openslx-update, if possible. -if [ ! -d "$SCRIPTBACKUPDIR" ]; then - print "Erzeuge Sicherungsverzeichnis für Skripte $SCRIPTBACKUPDIR" - mkdir -p "$SCRIPTBACKUPDIR" || error "Kann Sicherungsverzeichnis für Skripte nicht erstellen!" -fi - -for FILE in $SLXSCRIPTS; do - wget -O "$WWWTEMP/$FILE.$CRCEXTENSION" "$MIRROR/$MIRRORDIR/$FILE.$CRCEXTENSION" - CRCVALNEW=$(cat "$WWWTEMP/$FILE.$CRCEXTENSION"|cut -f 1 -d " ") - CRCVALOLD=$($CRCCOMMAND "$SCRIPTPATH/$FILE"|cut -f 1 -d " ") - if [ "$CRCVALNEW" == "$CRCVALOLD" ]; then - print "$SCRIPTPATH/$FILE - kein Update notwendig." - continue - else - wget -O "$WWWTEMP/$FILE" "$MIRROR/$MIRRORDIR/$FILE" - if [ $($CRCCOMMAND "$WWWTEMP/$FILE"|cut -f 1 -d " ") != "$CRCVALNEW" ]; then - warning "$SCRIPTPATH/$FILE konnte nicht upgedatet werden ($CRCEXTENSION-Fehler)!" - continue - else - print "$SCRIPTPATH/$FILE wird upgedatet - $CRCEXTENSION ok." - print "Alte Version $SCRIPTPATH/$FILE gesichert nach: $SCRIPTBACKUPDIR/$FILE.$DATUM." - mv "$SCRIPTPATH/$FILE" "$SCRIPTBACKUPDIR/$FILE.$DATUM" - chmod u+x "$WWWTEMP/$FILE" # sonst wg. wget keine exec-bit - mv "$WWWTEMP/$FILE" "$SCRIPTPATH" - fi - fi -done -exit 0 -- cgit v1.2.3-55-g7522