Advertisement
Guest User

backup skript von feldmaus

a guest
May 2nd, 2011
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.26 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. #Letze Aenderung 2011-03-17
  4.  
  5.  
  6. import pexpect, os, glob, sys, getpass
  7.  
  8. benutzer=''
  9. SERVER='feld-server'
  10. CLIENT=os.uname()[1]
  11.  
  12. benutzer_passwoerter={}
  13.  
  14. progStarten=raw_input('Moechtest Du eine Sicherung/Zurueckspielen fuer '+CLIENT+' durchfuehren? (j/n) ')
  15. if progStarten in ('y', 'Y', 'yes', 'Yes', 'j', 'J', 'ja', 'Ja'):
  16.     #        'beispiel':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],  
  17.     #           'Frage':'',
  18.     #           'Exclude':'',
  19.     #           'Client':'',
  20.     #           'Server':''},
  21.     katalog = {
  22.             'eigenedateien':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],
  23.                 'Frage':[' von /home/', '/eigenedateien/'],
  24.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  25.                 'Client':['/home/', '/eigenedateien/'],
  26.                 'Server':['@'+SERVER+':/home/', '/eigenedateien/']},
  27.             'firefox':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],
  28.                 'Frage':[' von /home/', '/.mozilla/firefox/'],
  29.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  30.                 'Client':['/home/', '/.mozilla/firefox/'],
  31.                 'Server':['@'+SERVER+':/home/', '/mozilla/firefox/']},
  32.             'thunderbird':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],  
  33.                 'Frage':[' von /home/', '/.thunderbird/'],
  34.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  35.                 'Client':['/home/', '/.thunderbird/'],
  36.                 'Server':['@'+SERVER+':/home/', '/thunderbird/']},
  37.            # Unterschiedliche OS haben unterschiedliche Programm-Einstellungen, daher werden
  38.            # diese auch getrennt gesichert, nur die Snapshots und *.vdi Dateien sind ein Muss.
  39.             'snapshots':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],
  40.                 'Frage':[' von /home/', '/.VirtualBox/Machines/Standard/Snapshots/'],
  41.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  42.                 'Client':['/home/', '/.VirtualBox/Machines/Standard/Snapshots/'],
  43.                 'Server':['@'+SERVER+':/home/', '/VirtualBox/Machines/Standard/Snapshots/']},
  44.             '.virtualbox':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],
  45.                 'Frage':[' von /home/', '/.VirtualBox/ ohne Snapshots'],
  46.                 'Exclude':['--exclude', 'Machines/Standard/Snapshots/*'],
  47.                 'Client':['/home/', '/.VirtualBox/'],
  48.                 'Server':['@'+SERVER+':/home/', '/VirtualBox@'+CLIENT+'/']},
  49.             '.ispell':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],
  50.                 'Frage':[' von /home/', '/.ispell_ngerman/'],
  51.                 'Exclude':['--exclude', '"__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__"'],
  52.                 'Client':['/home/', '/.ispell_ngerman'],
  53.                 'Server':['@'+SERVER+':/home/', '/ispell_ngerman']},
  54.             'bin':{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],  
  55.                 'Frage':[' von /home/', '/bin/'],
  56.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  57.                 'Client':['/home/', '/bin/'],
  58.                 'Server':['@'+SERVER+':/home/', '/bin/']},
  59.             'bin@host':{'Benutzer':['root'],  
  60.                 'Frage':[' von /', '/bin@'+CLIENT+'/'],
  61.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  62.                 'Client':['/','/bin/'],
  63.                 'Server':['@'+SERVER+':/','/bin@'+CLIENT+'/']},
  64.             'musik':{'Benutzer':['share'],  
  65.                 'Frage':[' von /home/', '/Musik/'],
  66.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  67.                 'Client':['/home/', '/Musik/'],
  68.                 'Server':['@'+SERVER+':/home/', '/Musik/']},
  69.             '*.vdi':{'Benutzer':['share'],  
  70.                 'Frage':[' von /home/', '/software/virtualbox/winxp/'],
  71.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  72.                 'Client':['/home/', '/software/virtualbox/winxp/'],
  73.                 'Server':['@'+SERVER+':/home/', '/software/virtualbox/winxp/']},
  74.             '.irssi':{'Benutzer':['markus'],
  75.                 'Frage':[' von /home/', '/.irssi'],
  76.                 'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'],
  77.                 'Client':['/home/', '/.irssi'],
  78.                 'Server':['@'+SERVER+':/home/', '/.irssi']},
  79.                 }
  80.    
  81.     def rsync ():
  82.         exclude_pre=eintrag['Exclude'][0]
  83.         exclude_post=eintrag['Exclude'][1]
  84.         if wasWillstDu == ('s' or 'S') :
  85.             try:
  86.                 source=eintrag['Client'][0]+benutzer+eintrag['Client'][1]
  87.                 target=benutzer+eintrag['Server'][0]+benutzer+eintrag['Server'][1]
  88.                 child=pexpect.spawn('rsync',
  89.                 ['-e',
  90.                 'ssh -l '+benutzer,
  91.                 '-a',
  92.                 '--delete-after',
  93.                 '--stats',
  94.                 '--progress',
  95.                 exclude_pre,
  96.                 exclude_post,
  97.                 source,
  98.                 target ])
  99.                 return child
  100.             except Exception,  e:
  101.                 print 'Fehler: '+str(e)
  102.         elif wasWillstDu == ('z' or 'Z'):
  103.             try:
  104.                 source=benutzer+eintrag['Server'][0]+benutzer+eintrag['Server'][1]
  105.                 target=eintrag['Client'][0]+benutzer+eintrag['Client'][1]
  106.                 child=pexpect.spawn('rsync',
  107.                 ['-e',
  108.                 'ssh -l '+benutzer,
  109.                 '-a',
  110.                 '--delete-after',
  111.                 '--stats',
  112.                 '--progress',
  113.                 exclude_pre,
  114.                 exclude_post,
  115.                 source,
  116.                 target ])
  117.                 return child
  118.             except Exception, e:
  119.                 print 'Fehler: '+str(e)
  120.  
  121.     for eintrag in katalog.itervalues():
  122.         for benutzer in eintrag['Benutzer']:
  123.             wasWillstDu=raw_input('(S)ichern/(Z)urueckspielen/(N)ichts/(A)bbrechen'+eintrag['Frage'][0]+benutzer+eintrag['Frage'][1]+' ? (s/z/n/a) ')
  124.             passwort=benutzer_passwoerter.get(benutzer, '')
  125.             if wasWillstDu in 'sSzZ' and wasWillstDu not in '':
  126.                 child=rsync()
  127.                 child.logfile_read = sys.stdout
  128.                 while child.isalive():
  129.                     statusChild=child.expect([' password:', 'denied', pexpect.TIMEOUT, pexpect.EOF],  timeout=-1)
  130.                     if statusChild == 0:
  131.                         child.sendline(passwort)
  132.                     elif statusChild == 1:
  133.                         passwort=getpass.getpass('')
  134. #                        passwort=sys.stdin.readline()
  135.                         benutzer_passwoerter[benutzer]=passwort
  136.                         child.sendline(passwort)
  137.             elif wasWillstDu in 'aAqQ' and wasWillstDu not in '':
  138.                 sys.exit(0)
  139.  
  140.  
  141. else:
  142.     print 'Es wird keine Sicherung durchgefuehrt fuer '+CLIENT+' !'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement