Пример #1
0
 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)
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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)