def _done(x, filename): try: fin = open(filename, 'rb') src = strng.to_text(fin.read()) fin.close() except: if output_func: output_func('error opening downloaded starter file') result.errback(Exception('error opening downloaded starter file')) return local_filename = os.path.join(GetLocalDir(), settings.WindowsStarterFileName()) bpio.backup_and_remove(local_filename) try: os.rename(filename, local_filename) lg.out(4, 'os_windows_update.download_and_replace_starter file %s was updated' % local_filename) except: lg.out(1, 'os_windows_update.download_and_replace_starter ERROR can not rename %s to %s ' % (filename, local_filename)) lg.exc() result.errback(Exception('can not rename the file ' + filename)) return python27dll_path = os.path.join(GetLocalDir(), 'python27.dll') if not os.path.exists(python27dll_path): lg.out(4, 'os_windows_update.download_and_replace_starter file "python27.dll" not found download from "%s" repo' % repo) url = settings.DefaultRepoURL(repo) + 'python27.dll' d = net_misc.downloadHTTP(url, python27dll_path) d.addCallback(_done_python27_dll, filename) d.addErrback(_fail, filename) return result.callback(1)
def download_and_replace_starter(output_func=None): repo, locationURL = misc.ReadRepoLocation() url = locationURL + settings.WindowsStarterFileName() lg.out(6, 'os_windows_update.download_and_replace_starter ' + str(url)) result = Deferred() def _done(x, filename): try: fin = open(filename, 'rb') src = strng.to_text(fin.read()) fin.close() except: if output_func: output_func('error opening downloaded starter file') result.errback(Exception('error opening downloaded starter file')) return local_filename = os.path.join(GetLocalDir(), settings.WindowsStarterFileName()) bpio.backup_and_remove(local_filename) try: os.rename(filename, local_filename) lg.out(4, 'os_windows_update.download_and_replace_starter file %s was updated' % local_filename) except: lg.out(1, 'os_windows_update.download_and_replace_starter ERROR can not rename %s to %s ' % (filename, local_filename)) lg.exc() result.errback(Exception('can not rename the file ' + filename)) return python27dll_path = os.path.join(GetLocalDir(), 'python27.dll') if not os.path.exists(python27dll_path): lg.out(4, 'os_windows_update.download_and_replace_starter file "python27.dll" not found download from "%s" repo' % repo) url = settings.DefaultRepoURL(repo) + 'python27.dll' d = net_misc.downloadHTTP(url, python27dll_path) d.addCallback(_done_python27_dll, filename) d.addErrback(_fail, filename) return result.callback(1) def _done_python27_dll(x, filename): lg.out(4, 'os_windows_update.download_and_replace_starter file %s was updated' % filename) result.callback(1) def _fail(x, filename): lg.out(1, 'os_windows_update.download_and_replace_starter FAILED') if output_func: try: output_func(x.getErrorMessage()) except: output_func('error downloading starter') try: os.remove(filename) except: lg.out(1, 'os_windows_update.download_and_replace_starter ERROR can not remove ' + filename) result.errback(Exception('error downloading starter')) fileno, filename = tmpfile.make('all', extension='.starter') os.close(fileno) d = net_misc.downloadHTTP(url, filename) d.addCallback(_done, filename) d.addErrback(_fail, filename) return result
def step2(info, version_digest): lg.out(4, 'os_windows_update.step2') if not isinstance(info, dict): fail('wrong data') return bitstarter_server_digest = info.get(settings.WindowsStarterFileName(), None) if bitstarter_server_digest is None: lg.warn('windows starter executable is not found in the info file') reactor.callLater(0.5, step4, version_digest) #fail('windows starter executable is not found in the info file') return bitstarter_local_digest = misc.file_hash(os.path.join(GetLocalDir(), settings.WindowsStarterFileName())) if bitstarter_local_digest != bitstarter_server_digest: reactor.callLater(0.5, step3, version_digest) else: reactor.callLater(0.5, step4, version_digest)
def DoRestart(param='', detach=False, std_out='/dev/null', std_err='/dev/null'): """ A smart and portable way to restart a whole program. """ if bpio.Windows(): if bpio.isFrozen(): # lg.out(2, "misc.DoRestart under Windows (Frozen), param=%s" % param) # lg.out(2, "misc.DoRestart sys.executable=" + sys.executable) # lg.out(2, "misc.DoRestart sys.argv=" + str(sys.argv)) starter_filepath = os.path.join(bpio.getExecutableDir(), settings.WindowsStarterFileName()) if not os.path.isfile(starter_filepath): # lg.out(2, "misc.DoRestart ERROR %s not found" % starter_filepath) main_filepath = os.path.join( bpio.getExecutableDir(), settings.WindowsMainScriptFileName()) cmdargs = [ os.path.basename(main_filepath), ] if param != '': cmdargs.append(param) # lg.out(2, "misc.DoRestart cmdargs="+str(cmdargs)) return os.spawnve(os.P_DETACH, main_filepath, cmdargs, os.environ) # @UndefinedVariable cmdargs = [ os.path.basename(starter_filepath), ] if param != '': cmdargs.append(param) # lg.out(2, "misc.DoRestart cmdargs="+str(cmdargs)) return os.spawnve(os.P_DETACH, starter_filepath, cmdargs, os.environ) # @UndefinedVariable pypath = sys.executable cmdargs = [ sys.executable, ] cmdargs.append(sys.argv[0]) cmdargs += sys.argv[1:] if param != '' and not sys.argv.count(param): cmdargs.append(param) if cmdargs.count('restart'): cmdargs.remove('restart') if cmdargs.count('detach'): cmdargs.remove('detach') if cmdargs.count('daemon'): cmdargs.remove('daemon') if detach: from system import child_process cmdargs = [strng.to_text(a) for a in cmdargs] return child_process.detach(cmdargs) return os.execvpe(pypath, cmdargs, os.environ) pypyth = sys.executable cmdargs = [ sys.executable, ] if sys.argv[0] == '/usr/share/bitdust/bitdust.py': cmdargs.append('/usr/bin/bitdust') else: cmdargs.append(sys.argv[0]) if param: cmdargs.append(param) if cmdargs.count('restart'): cmdargs.remove('restart') if cmdargs.count('detach'): cmdargs.remove('detach') if cmdargs.count('daemon'): cmdargs.remove('daemon') pid = os.fork() if pid != 0: return None if detach: cmdargs[1] = os.path.abspath(cmdargs[1]) cmdargs.append('1>%s' % std_out) cmdargs.append('2>%s' % std_err) cmd = '/usr/bin/nohup ' + (' '.join(cmdargs)) + ' &' BITDUST_COVERAGE_PROCESS_START = os.environ.get( 'COVERAGE_PROCESS_START') if BITDUST_COVERAGE_PROCESS_START: cmd = 'COVERAGE_PROCESS_START="%s" %s' % ( BITDUST_COVERAGE_PROCESS_START, cmd, ) BITDUST_LOG_USE_COLORS = os.environ.get('BITDUST_LOG_USE_COLORS') if BITDUST_LOG_USE_COLORS: cmd = 'BITDUST_LOG_USE_COLORS="%s" %s' % ( BITDUST_LOG_USE_COLORS, cmd, ) return os.system(cmd) return os.execvpe(pypyth, cmdargs, os.environ)