--- /dev/null
+#!/bin/bash
+
+PATH=/local/bin:$PATH
+export PATH
+
+echo -n "Starter... "
+date
+
+#newgrp itk
+umask 027
+
+#liste over maskinene vi tar backup av. (space mellom maskinnavn)
+computers="cirkus backup josef"
+#for debug
+#computers="josef"
+###
+
+#disse bør kunne varieres fra fs til fs
+maksantallfulle=2 #hvor mange fulle vi tar vare på
+#maksantalldaglige=30 #hvor mange daglige vi tar vare på
+dagermellomfulle=30 #antall dager før det er på tide med ny full
+###
+
+#lager datovariabeler
+DATE=`date "+%Y%m%d%H%M"` #passer for bruk med touch
+DATEs=`date "+%Y-%m-%d %H:%M"` #passer for bruk med tar
+###
+
+#selve backupen
+# krever at noen variabler er satt
+# krever at vi er i rett katalog
+backup()
+{
+
+ if [ "$backuplevel" = "daglig" ]
+ then
+ forrige=`cat ../.dato`
+ forrigecmd=--newer=\"$forrige\"
+ else
+ forrigecmd=""
+ fi
+
+ if `ssh $computer "cd $filesystem ;\
+ tar cfl - . $forrigecmd \
+ --exclude=\"tmp\" \
+ --exclude=\".netscape/cache\" \
+ --exclude=\"core\" \
+ --exclude=\"*.rar\" \
+ --exclude=\"*.mp3\" \
+ --exclude=\"*.MP3\" \
+ --exclude=\"*.iso\" \
+ --exclude=\"*.rar\" \
+ | gzip" \
+ | dd of=$DATE.tmp 2>/dev/null`
+ then
+ #Det gikk kanskje bra
+ mv $DATE.tmp $DATE.tgz
+ #lage listefil
+ tar tvfz $DATE.tgz > $DATE.idx 2>&1
+ grep -v ^d $DATE.idx | sort -n -r +2 > $DATE.sdx
+
+ #oppdatere datofil
+ echo $DATEs > ../.dato
+ touch -t $DATE ../.dato
+
+ #fikse rettigheter
+ chmod 600 *tgz
+ chmod 644 *sdx *idx
+
+ else
+ #Det gikk ikke bra
+ rm $DATE.tmp
+ echo "$backuplevel backup av $computer:$filesystem gikk ikke bra"
+ fi
+}
+
+for computer in $computers
+do
+
+ #tømmer variabelen for sikkerhets skyld
+ filesystems=""
+
+ #Sjekker nest siste felt i fstab. Om det er 0 tar vi ikke backup
+ filesystems=`ssh -n $computer "cat /etc/fstab" \
+ | grep -v nfs \
+ | grep -v ^# \
+ | awk '{ if ( $(NF-1) != "0" ) print $2}' `
+
+ #for debugging
+ #filesystems="/"
+
+ for filesystem in $filesystems
+ do
+ #lager en variant uten tegnet "/"
+ sfilesystem=`echo $filesystem | tr '/' '_'`
+
+ #
+ echo $filesystem > /backup/$computer/$sfilesystem.navn
+ chmod 644 /backup/$computer/$sfilesystem.navn
+
+ #standard backuplevel. full og daglig er eneste muligheter
+ backuplevel=daglig
+ #backuplevel=full
+
+ #lager det som trengs av kataloger
+ mkdir -m 755 -p /backup/$computer/$sfilesystem/{full,daglig} 2>/dev/null
+
+ #Bør bare skje ved første gangs kjøring for dette fs
+ if [ ! -f /backup/$computer/$sfilesystem/.dato ]
+ then
+ backuplevel=full
+ echo $DATEs > /backup/$computer/$sfilesystem/.dato
+ echo "$computer:$filesystem datofil laget"
+ echo "$computer:$filesystem trenger full pga ingen fra foer"
+ fi
+
+ #sjekker om det er på tide med en full
+ if
+ [ -z `find /backup/$computer/$sfilesystem/full/ -name \*tgz -mtime -$dagermellomfulle` ]
+ then
+ echo "$computer:$filesystem trenger full pga lenge siden sist"
+ backuplevel=full
+ fi
+
+ #gå ned i rett katalog
+ cd /backup/$computer/$sfilesystem/$backuplevel
+
+ #selve backupen
+ backup
+
+ echo "$computer:$filesystem sletter fulle slik at vi ikke har mer enn 2"
+ mf=$(($maksantallfulle+1))
+ for full in `ls -1t /backup/$computer/$sfilesystem/full/*tgz | tail +$mf`
+ do
+ prefix=`echo $full|cut -d . -f 1`
+ echo "$computer:$filesystem sletter $prefix"
+ rm $prefix*
+ done
+ echo "$computer:$filesystem ferdig med slett av fulle"
+
+ echo "$computer:$filesystem slette daglige eldre enn eldste fulle"
+ eldste=`ls -t1 /backup/$computer/$sfilesystem/full/*tgz | tail -1`
+ find \
+ /backup/$computer/$sfilesystem/daglig \
+ \! -newer $eldste \
+ -print \
+ -exec rm {} \;
+ echo "$computer:$filesystem ferdig med slett av gamle daglige"
+
+ done
+
+done
+
+echo -n "Ferdig... "
+date