X-Git-Url: https://git.sesse.net/?p=backup.sh;a=blobdiff_plain;f=backup-nonpriv.sh;fp=backup-nonpriv.sh;h=0000000000000000000000000000000000000000;hp=06e8e73aeeeec38b8860636cf421083edaba09aa;hb=1cf6fdfd22c1250045695f5723e84c0d7d0c84bd;hpb=733bb4c30f7dff4d58a75966ebfce37c95c7c6c9 diff --git a/backup-nonpriv.sh b/backup-nonpriv.sh deleted file mode 100755 index 06e8e73..0000000 --- a/backup-nonpriv.sh +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh - -# Modifisert utgave av backup.sh som tar backup også på maskiner der kolje ikke har root. - -#dirs -confdir=/home/backup/conf/ #configuration files -storagedir=/backup #mountpoint of huge disc -### - -#exclude-pattern -exclude=$confdir/exclude -[ ! -f $exclude ] && printf "tmp\ncore\n" > $exclude -### - -#syntax of remotestat: -#hostname:/directory/ -remotestatf=$confdir/remotestat -[ -f $remotestatf ] && remotestat=`cat $remotestatf` -### - -PATH=/local/bin:$PATH:/store/bin -export PATH - -#start the logfile -date -echo -echo "Exclude pattern:" -cat $exclude -echo -echo - -umask 027 - -# The computers we want to back up -unixcomputers=`cat $confdir/computers.unix.nonpriv | grep -v ^# | grep -v ^$` -### - -# Backup only one computer, from command line? -if [ $1 ] ; then - unixcomputers=$1 -fi - -#disse bør kunne varieres fra fs til fs? -maksantallfulle=3 #hvor mange fulle vi tar vare på (kan overstyres med conf) -dagermellomfulle=30 #antall dager før det er på tide med ny full -logw=40 -### - -#lager datovariabeler -DATE=`date "+%Y%m%d%H%M"` #format: touch -DATEs=`date "+%Y-%m-%d %H:%M"` #format: tar -### - -#selve backupen -# krever at noen variabler er satt -# krever at vi er i rett katalog -backup() -{ - - printf "%-${logw}s %s\n" "$computer:$filesystem" "$backuplevel backup" - - if [ "$backuplevel" = "daglig" ] || [ "$backuplevel" = "incremental" ] - then - lastd=`cat ../.date` - lastcmd="\"$lastd\"" - else - lastcmd="" - fi - - #expand the exclude-path for use with tar - exf=`ssh $username@$computer "ls ~/.backup/exclude"` - - #We try to run tar on the remote computer - # C is instead of 'cd $filesystem' - # - is 'this directory' - # l is 'stay in local filesystem - if `ssh $username@$computer "sudo /usr/local/sbin/output-encrypted-backup $filesystem $lastcmd" | dd of=$DATE.tmp 2>/dev/null` - then - # perhaps it did work - mv $DATE.tmp $DATE.tgz.gpg - - # FIXME: ignore the file lists for now - - # fix perm - chmod 600 *tgz.gpg #only for us -# chmod 644 *sdx *idx 2>/dev/null #everyone can read - - echo $DATEs > ../.date && - touch -t $DATE ../.date - else - #it did not work - rm $DATE.tmp 2>/dev/null - echo "$backuplevel backup of $computer:$filesystem failed and deleted" - fi - -} - -#Løper gjennom listen av unixmaskiner som vi skal ta backup av -for computer in $unixcomputers -do - - # find the user to do the non-root parts as - if [ -f $confdir/username.$computer ] ; then - username=`cat $confdir/username.$computer` - else - username=backup - fi - - # Try to SSH to the computer without entering a password. - if `ssh -n -o NumberOfPasswordPrompts=0 $username@$computer /bin/true`; then - echo "Passwordless SSH to $username@$computer works." - else - echo "Could not use passwordless SSH to $username@$computer. Exiting." - exit 1; - fi - - # see if se have a local exclude file - if [ -f $confdir/exclude.$computer ] ; then - localexclude=$confdir/exclude.$computer - - echo - echo "Overriding local exclude pattern with:" - cat $localexclude - echo - echo - else - localexclude=$exclude - fi - - localmaksantallfulle=$maksantallfulle - # Sjekk om det skal være et annet antall fulle backuper av en boks - if [ -f $confdir/maksfulle.$computer ] ; then - localmaksantallfulle=`cat $confdir/maksfulle.$computer` - 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 $username@$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 - ssh $username@$computer "rm -r ~/.backup ; mkdir -m 700 ~/.backup" - - #try to copy $exclude to $computer - scp $localexclude $username@$computer:~/.backup/exclude || - echo "could not copy $localexclude to $computer :(" - - #try to copy preeexec and postexec if they exist - [ -f $confdir/preexec.$computer ] && - scp $confdir/preexec.$computer $username@$computer:~/.backup/preexec - [ -f $confdir/postexec.$computer ] && - scp $confdir/postexec.$computer $username@$computer:~/.backup/postexec - - #try to run preexec if it exist - ssh $username@$computer "[ -f ~/.backup/preexec ] && /bin/bash -x ~/.backup/preexec" - - 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 2>/dev/null - mkdir -m 755 -p $storagedir/$computer/$sfilesystem/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.gpg -mtime -$dagermellomfulle`" ] - then - backuplevel=full - fi - - #gå ned i rett katalog - cd $storagedir/$computer/$sfilesystem/$backuplevel || exit 1 - - #perform the actual backup - backup - - #delete complete backups - mf=$(($localmaksantallfulle+1)) - - for full in `ls -1t $storagedir/$computer/$sfilesystem/full/*tgz.gpg | tail -n +$mf` - do - prefix=`echo $full | sed "s/\.[^.]*$//"` - echo "$computer:$filesystem sletter full $prefix (for mange)" - rm $prefix* - done - - #delete incremental backups older than the oldest complete backup - oldf=`ls -t1 $storagedir/$computer/$sfilesystem/full/*tgz.gpg | tail -n 1` - find \ - $storagedir/$computer/$sfilesystem/daglig \ - -type f \ - \! -newer $oldf \ - -exec rm {} \; - #denne funker bare med gnu find - #-printf "$computer:$filesystem sletter daglig %f (for gammel)\n" \ - - done - - #try to run postexec if it exist - ssh $username@$computer "[ -f ~/.backup/postexec ] && /bin/bash -x ~/.backup/postexec" - -done - -#create report -#/home/backup/report.sh $storagedir > /tmp/report.txt -#[ ! -z $remotestat ] && scp /tmp/report.txt $remotestat -### - -# print diskusage to logfile -df -k - -date