-#Løper gjennom listen av unixmaskiner som vi skal ta backup av
-for computer in $unixcomputers
-do
-(
- # Check that the target filesystem is mounted
- # (actually check that it's not the root filesystem)
- rootfilesystem=`df -P /`
- targetfilesystem=`df -P "$storagedir/$computer"`
- if [ "$rootfilesystem" == "$targetfilesystem" ]; then
- echo `date`" $computer: Target filesystem ($storagedir/$computer) was mounted on /. Aborting"
- continue
- fi
-
- echo `date`" $computer: Backing up $computer" >&2
-
- # Try to SSH to the computer without entering a password.
- if ! `ssh -n -o NumberOfPasswordPrompts=0 root@$computer /bin/true`; then
- echo `date`" $computer: Could not use passwordless SSH."
-
- # We don't want to return 0
- R=1
- # Do next computer
- continue;
- fi
-
- #tømmer variabelen for sikkerhets skyld
- filesystems=""
-
- #Sjekker nest siste felt i fstab. Om det er 0 tar vi ikke backup
- filesystems=`ssh -n root@$computer "cat /etc/fstab" \
- | grep -v nfs \
- | grep -v "^#" \
- | grep -v "^$" \
- | awk '{ if ( $(NF-1) != "0" ) print $2}' `
-
- #clean up our dir at this client
- if ! ssh root@$computer "rm -r ~/.backup ; mkdir -m 700 ~/.backup"; then
- echo `date`" $computer: Could not create backup staging area at $computer:~/.backup - skipping backup of $computer"
- # We don't want to return 0
- R=1
- continue;
- fi
-
- #try to copy $exclude to $computer
- if ! scp $exclude root@$computer:~/.backup/exclude > /dev/null; then
- echo `date`" $computer: Could not copy exclude.txt to $computer - skipping backup of $computer"
- # We don't want to return 0
- R=1
- continue;
- fi
-
- #try to copy preeexec and postexec if they exist
-# TODO: Gah, clean this mess!
- [ -f $confdir/preexec.$computer ] && (
- scp $confdir/preexec.$computer root@$computer:~/.backup/preexec >&2 ||
- ( echo `date`" $computer: Could not copy preexec.$computer to $computer:~/.backup/preexec - skipping backup of $computer"
- R=1
- continue
- )
- )
- [ -f $confdir/postexec.$computer ] && (
- scp $confdir/postexec.$computer root@$computer:~/.backup/postexec >&2 ||
- ( echo `date`" $computer: Could not copy postexec.$computer to $computer:~/.backup/postexec - skipping backup of $computer"
- R=1
- continue
- )
- )
-
- #try to run preexec if it exist
- if ! ssh root@$computer "[ ! -f ~/.backup/preexec ] || /bin/bash -x ~/.backup/preexec" >&2; then
- echo `date`" $computer: Could not run $computer:~/.backup/preexec - skipping backup of $computer"
- R=1
- continue
- fi
-
-
- for filesystem in $filesystems
- do
- #lager en variant uten tegnet "/" eller $ (gjelder NT)
- sfilesystem=`echo $filesystem | tr '\/\$' '__'`
-
- #lager det som trengs av kataloger
- mkdir -m 755 -p $storagedir/$computer/$sfilesystem/{full,daglig} 2>/dev/null
-
- echo $filesystem > ${storagedir}/${computer}/.${sfilesystem}.name
- chmod 644 ${storagedir}/${computer}/.${sfilesystem}.name
-
- #set default backuplevel
- backuplevel=daglig
-
- if [ ! -f $storagedir/$computer/$sfilesystem/.date ]
- then
- #take the first full backup of this filesystem on this computer
- backuplevel=full
- echo $DATEs > $storagedir/$computer/$sfilesystem/.date
- fi
-
- #sjekker om det er på tide med en full
- if [ -z "`find $storagedir/$computer/$sfilesystem/full/ -name \*tgz -mtime -$dagermellomfulle`" ]; then
- backuplevel=full
- fi
-
- #gå ned i rett katalog, eller dø
- # TODO bør sende mail om dette skjer!
- cd $storagedir/$computer/$sfilesystem/$backuplevel || die
-
- #perform the actual backup
- backup
-
- # Sjekk om det skal være et annet antall fulle backuper av en boks
- if [ -f $confdir/maksfulle.$computer ] ; then
- mf=$((`cat $confdir/maksfulle.$computer`+1))
- else
- mf=$(($maksantallfulle+1))
- fi
-
- #delete complete backups
- for full in `ls -1t $storagedir/$computer/$sfilesystem/full/*tgz | tail -n +$mf`
- do
- prefix=`echo $full | sed "s/\.[^.]*$//"`
- echo `date`": $computer:$filesystem sletter full $prefix (for mange)" >&2
- rm $prefix*
- done
-
- #delete incremental backups older than the oldest complete backup
- oldf=`ls -t1 $storagedir/$computer/$sfilesystem/full/*tgz | tail -1`
- find \
- $storagedir/$computer/$sfilesystem/daglig \
- -type f \
- \! -newer $oldf \
- -exec rm {} \;
- done
-
- #try to run postexec if it exist
- if ! ssh root@$computer "[ ! -f ~/.backup/postexec ] || /bin/bash -x ~/.backup/postexec" >&2; then
- echo `date`" $computer: Could not run $computer:~/.backup/postexec"
- R=1
- fi
-
-)
-done &
-
-wait