summaryrefslogblamecommitdiffstats
path: root/data/openslx-update
blob: cb46b25807757d72437da32e208f3b9251cab738 (plain) (tree)
1
2
3
4

           

                                                  














                                       
 

                                                 
                                     






                                                   


                                           


                                             
                                       

                                       
                                                     



                       

                 

                                             

                     
 
                                                                                     
 






                                                                                                         





                                                                                                      


                                                                                                         
                    


                                                                    
 
                   
                                                          


                                                                                       



                                         
                 
                               

                                                 
                                                                                





                                                  
                                                                           

                                                                    
                                                            

                                
                          
                                                                                                                                                
                                    
                                                                                                             

                                                                                           
                                                                                                                                             



                                                                                                                    
                                                                
                  
            












                                                                                 

                                 
                                                                    

                                                                    


                                
                                                                                                                     

            



                                                                                                       







                                                                                        
 





                                                                                                       
                           




















                                                                                                                                
#!/bin/bash

### Funktionen ###################################

function print ()
{
	echo -e "\033[01;29m$@\033[00m"
}

function error ()
{
	echo -e "\033[01;31m$@\033[00m"
	exit 1
}

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"
SLXSCRIPTS="openslx-install openslx-update"
SCRIPTPATH=$(dirname "$0")
SCRIPTBACKUPDIR=/root/backup
# Konfigurationsdateien
SERVERDEFAULTS="/opt/openslx/server-defaults"
# Temporäres
REMOTEINDEX=$(mktemp /tmp/mlversionXXX)
LOCALINDEX="/opt/openslx/local_version"
WWWTEMP="/srv/openslx/www-temp"
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

# 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..."
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
[ -d "$PXEDIR" ] || mkdir -p "$PXEDIR"
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!"

for REL in ${!AVAILABLE_*}; do
	BRANCH="${REL#AVAILABLE_}"
	print "Remote has branch $BRANCH"
	PXELINE=""
	KERNEL=""
	for FILE in ${!REL}; do
		# Handle pxelinux.cfg
		if [[ "$FILE" == kernel* ]]; then
			KERNEL="KERNEL http://$SLX_LOCAL_ADDR/$FILEPRAEFIX$FILE"
		else
			if [ -z "$PXELINE" ]; then
				PXELINE="INITRD "
			else
				PXELINE+=","
			fi
			PXELINE+="http://$SLX_LOCAL_ADDR/$FILEPRAEFIX$FILE"
		fi
		# If file is available locally, don't download again
		if [ -s "$WWWTEMP/$FILEPRAEFIX$FILE" ]; then
			continue
		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
	done
	if [ -z "$PXELINE" -o -z "$KERNEL" ]; then
		warning "Incomplete entry. KERNEL or INITRD missing."
		continue
	fi
	# Append to pxeconfig
	echo "# Branch $BRANCH" >> "$PXECONFIG"
	echo "LABEL $BRANCH" >> "$PXECONFIG"
	echo "    MENU LABEL OpenSLX-NG $BRANCH [${!REL}]" >> "$PXECONFIG"
	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)
	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
		fi
		# Download
		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.

if [ "$DLFLAG" -ne 0 ]; then
	print "Alles scheint ok - Bewege neue Abbilder zum Webserver."
	mv "$WWWTEMP/"* "$WWWDIR/"
	print "Neue Abbilder bewegt."
else
	print "Keine Abbilder heruntergeladen - leere temporäres Verzeichnis $WWWTEMP."
	rm -f "$WWWTEMP/"*
fi

# 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