OpenSecurity/bin/vmmanager.pyw
changeset 252 824ae4324f57
parent 240 d7ef04254e9c
     1.1 --- a/OpenSecurity/bin/vmmanager.pyw	Wed Oct 29 15:18:22 2014 +0100
     1.2 +++ b/OpenSecurity/bin/vmmanager.pyw	Tue Jan 13 18:26:41 2015 +0100
     1.3 @@ -556,7 +556,7 @@
     1.4      
     1.5      def removeVMFolder(self, vm_name):
     1.6          machineFolder = Cygwin.cygPath(VMManager.machineFolder)
     1.7 -        Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '\\' + vm_name + '\\\"')
     1.8 +        Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/\"')
     1.9      
    1.10      # start VM
    1.11      def startVM(self, vm_name):
    1.12 @@ -577,13 +577,13 @@
    1.13      # stop VM
    1.14      def stopVM(self, vm_name):
    1.15          logger.info('Sending shutdown signal to ' + vm_name)
    1.16 -        Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key' )
    1.17 +        Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name) )
    1.18          Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False')
    1.19      
    1.20      # stop VM
    1.21      def hibernateVM(self, vm_name):
    1.22          logger.info('Sending hibernate-disk signal to ' + vm_name)
    1.23 -        Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key', wait_return=False)
    1.24 +        Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name), wait_return=False)
    1.25          Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False')
    1.26              
    1.27      # poweroff VM
    1.28 @@ -653,7 +653,11 @@
    1.29      def detachCertificate(self, vm_name):
    1.30          if self.isCertificateAttached(vm_name):
    1.31              Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 1 --device 0 --type hdd --medium none')
    1.32 -            
    1.33 +
    1.34 +    # return path for the certificate of a specific vm
    1.35 +    def getCertificatePath(self, vm_name):
    1.36 +        return Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key'
    1.37 +                
    1.38      # wait for machine to come up
    1.39      def waitStartup(self, vm_name):
    1.40          #Cygwin.vboxExecute('guestproperty wait ' + vm_name + ' SDVMStarted --timeout ' + str(timeout_ms) + ' --fail-on-timeout', try_count = 60)
    1.41 @@ -906,13 +910,13 @@
    1.42          
    1.43          import_logger.info('Updating components...')
    1.44          tmp_ip = self.getHostOnlyIP(self.vmRootName)
    1.45 -        tmp_machine_folder = Cygwin.cygPath(VMManager.machineFolder)
    1.46 -        Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
    1.47 -        Cygwin.sshExecute('"sudo apt-get -y upgrade"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
    1.48 +       
    1.49 +        Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
    1.50 +        Cygwin.sshExecute('"sudo apt-get -y dist-upgrade"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
    1.51          
    1.52          import_logger.info('Restarting template VM...')
    1.53          #check if reboot is required
    1.54 -        result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
    1.55 +        result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
    1.56          if "Yes" in result[1]:
    1.57              self.stopVM(self.vmRootName)
    1.58              self.waitShutdown(self.vmRootName)
    1.59 @@ -970,9 +974,10 @@
    1.60                  # create chromium settings dir on local machine if not existing
    1.61                  Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + appDataDir + '/OpenSecurity/chromium\\\"')
    1.62                  # create chromium settings dir on remote machine if not existing
    1.63 -                Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', Cygwin.cygPath(self.getMachineFolder()) + '/' + new_sdvm + '/dvm_key')
    1.64 -                #restore settings on vm
    1.65 -                self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
    1.66 +                Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', self.getCertificatePath(new_sdvm))
    1.67 +                # restore settings to svm from active user settings dir
    1.68 +                # self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
    1.69 +                self.syncRemoteFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
    1.70              return self.vms[new_sdvm]
    1.71              
    1.72      def releaseSession(self, vm_name):
    1.73 @@ -988,22 +993,31 @@
    1.74                  vm['used'] = True
    1.75                  self.sdvmFactory.trigger()
    1.76                  return vm
    1.77 -        return self.createSession(browsing)
    1.78 -        
    1.79 +        return self.createSession(browsing)    
    1.80              
    1.81      def backupFile(self, vm_name, ip_addr, src, dest):
    1.82          global backup_lock
    1.83          with backup_lock:
    1.84 -            certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key'
    1.85 +            certificate = self.getCertificatePath(vm_name)
    1.86              command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"'
    1.87              return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
    1.88      
    1.89      def restoreFile(self, vm_name, ip_addr, src, dest):
    1.90 -        certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key'
    1.91 +        certificate = self.getCertificatePath(vm_name)
    1.92          command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"'
    1.93          return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
    1.94 -
    1.95      
    1.96 +    def syncRemoteFile(self, vm_name, ip_addr, src, dest):
    1.97 +        certificate = self.getCertificatePath(vm_name)
    1.98 +        command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"'
    1.99 +        return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False)
   1.100 +    
   1.101 +    def syncLocalFile(self, vm_name, ip_addr, src, dest):
   1.102 +        global backup_lock
   1.103 +        with backup_lock:
   1.104 +            certificate = self.getCertificatePath(vm_name)
   1.105 +            command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"'
   1.106 +            return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False)
   1.107          
   1.108  class SDVMFactory(threading.Thread):
   1.109      vmm = None
   1.110 @@ -1070,6 +1084,12 @@
   1.111              self.net_resource = '\\\\' + self.ip_addr + '\\Download'
   1.112              urllib2.urlopen('http://127.0.0.1:8090/netmount?'+'net_resource='+self.net_resource)#.readline()
   1.113              
   1.114 +            # synchronize browser settings
   1.115 +            appDataDir = self.vmm.getAppDataDir()
   1.116 +            logger.info("Syncing browser settings in AppData dir " + appDataDir)
   1.117 +            # sync settings on vm
   1.118 +            self.vmm.syncRemoteFile(self.vm_name, self.ip_addr, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
   1.119 +            
   1.120              if self.wpad:
   1.121                  browser = '\\\"/usr/bin/chromium --proxy-pac-url=\\\"'+self.wpad+'\\\"\\\"'
   1.122              elif self.proxy:
   1.123 @@ -1077,9 +1097,10 @@
   1.124              else:
   1.125                  browser = '\\\"/usr/bin/chromium\\\"'
   1.126                  
   1.127 -            Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vm_name + '/dvm_key')
   1.128 +            Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', self.vmm.getCertificatePath(self.vm_name))
   1.129              appDataDir = self.vmm.getAppDataDir()
   1.130 -            self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
   1.131 +            # self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
   1.132 +            self.vmm.syncLocalFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
   1.133          
   1.134          except urllib2.URLError:
   1.135              logger.error("Network drive connect failed. OpenSecurity Tray client not running.")
   1.136 @@ -1101,8 +1122,6 @@
   1.137              self.vmm.releaseSession(self.vm_name)
   1.138          
   1.139          self.vmm.sdvmFactory.trigger()
   1.140 -
   1.141 -    
   1.142              
   1.143                  
   1.144  class DeviceHandler(threading.Thread):