コード例 #1
0
def main(args):
    ''' Run the API server '''

    try:
        options, arguments = getopt.getopt(args[1:], 'O:v')
    except getopt.error:
        sys.exit('usage: neubot background_api [-v] [-O setting]')
    if arguments:
        sys.exit('usage: neubot background_api [-v] [-O setting]')

    settings = []
    for name, value in options:
        if name == '-O':
            settings.append(value)
        elif name == '-v':
            LOG.verbose()

    settings = utils_rc.parse_safe(iterable=settings)
    if not 'address' in settings:
        settings['address'] = '127.0.0.1 ::1'
    if not 'port' in settings:
        settings['port'] = '9774'

    start(settings['address'], settings['port'])
    POLLER.loop()
コード例 #2
0
def start_api(address=None, port=None):
    ''' Starts API for background module '''

    logging.debug('background_api: starting API server...')

    # Honor /etc/neubot/api
    settings = utils_rc.parse_safe(utils_hier.APIFILEPATH)
    if not address:
        address = settings.get('address', '::1 127.0.0.1')
    if not port:
        port = settings.get('port', '9774')

    # Configure HTTP server
    conf = CONFIG.copy()
    logging.debug('background_api: API server rootdir: %s',
                  utils_hier.WWWDIR)
    conf['http.server.rootdir'] = utils_hier.WWWDIR
    conf['http.server.ssi'] = True
    conf['http.server.bind_or_die'] = True
    HTTP_SERVER.configure(conf)

    # Bind HTTP server to API server
    HTTP_SERVER.register_child(API_SERVER, '/api')

    # Bind HTTP server to address and port
    HTTP_SERVER.listen((address, port))

    logging.debug('background_api: starting API server... done')
コード例 #3
0
def main(args):

    ''' Entry point for simple gtk+webkit GUI '''

    try:
        options, arguments = getopt.getopt(args[1:], 'f:O:')
    except getopt.error:
        sys.exit('Usage: neubot viewer [-f file] [-O option]')
    if arguments:
        sys.exit('Usage: neubot viewer [-f file] [-O option]')

    conf = {
        'address': '127.0.0.1',
        'port': '9774',
    }
    settings = []
    fpath = '/etc/neubot/api'

    for name, value in options:
        if name == '-f':
            fpath = value
        elif name == '-O':
            settings.append(value)

    cnf = utils_rc.parse_safe(fpath)
    conf.update(cnf)

    cnf = utils_rc.parse_safe(iterable=settings)
    conf.update(cnf)

    address, port = conf['address'], conf['port']

    uri = STATIC_PAGE
    if utils_ctl.is_running(address, port):
        uri = 'http://%s:%s/' % (address, port)

    if not 'DISPLAY' in os.environ:
        sys.exit('No DISPLAY available')
    else:
        WebkitGUI(uri)
        gtk.main()
コード例 #4
0
def main(args):
    ''' Main() function '''

    try:
        options, arguments = getopt.getopt(args[1:], 'nO:vy')
    except getopt.error:
        sys.exit('usage: neubot background_rendezvous [-nvy] [-O setting]')
    if arguments:
        sys.exit('usage: neubot background_rendezvous [-nvy] [-O setting]')

    notest = False
    fakeprivacy = False
    settings = []
    for name, value in options:
        if name == '-n':
            notest = True
        elif name == '-O':
            settings.append(value)
        elif name == '-v':
            LOG.verbose()
        elif name == '-y':
            fakeprivacy = True

    # Fake privacy settings
    if fakeprivacy:
        CONFIG.conf.update({
                            'privacy.informed': 1,
                            'privacy.can_collect': 1,
                            'privacy.can_publish': 1
                           })

    if notest:
        CONFIG.conf.update({'enabled': 0})

    settings = utils_rc.parse_safe(iterable=settings)
    if 'interval' in settings:
        CONFIG.conf['agent.interval'] = settings['interval']

    BACKGROUND_RENDEZVOUS.run()
    POLLER.loop()
コード例 #5
0
ファイル: peer.py プロジェクト: EverlastingFire/neubot
def main(args):
    ''' Main function '''

    try:
        options, arguments = getopt.getopt(args[1:], 'lO:v')
    except getopt.error:
        sys.exit('usage: neubot bittorrent_peer [-lv] [-O setting]')
    if arguments:
        sys.exit('usage: neubot bittorrent_peer [-lv] [-O setting]')

    settings = [ 'address "127.0.0.1 ::1"',
                 'port 6881',
                 'version 1' ]

    listener = False
    for name, value in options:
        if name == '-l':
            listener = True
        elif name == '-O':
            settings.append(value)
        elif name == '-v':
            CONFIG['verbose'] = 1

    settings = utils_rc.parse_safe(iterable=settings)

    config_copy = CONFIG.copy()
    config.finalize_conf(config_copy)

    peer = PeerNeubot(POLLER)
    peer.configure(config_copy)  # BLEAH
    peer.version = int(settings['version'])
    if not listener:
        peer.connect((settings['address'], int(settings['port'])))
    else:
        peer.listen((settings['address'], int(settings['port'])))

    POLLER.loop()
コード例 #6
0
def main(args):

    ''' Entry point for simple gtk+webkit GUI '''

    try:
        _, arguments = getopt.getopt(args[1:], '')
    except getopt.error:
        sys.exit('Usage: neubot viewer')
    if arguments:
        sys.exit('Usage: neubot viewer')

    conf = utils_rc.parse_safe(utils_hier.APIFILEPATH)
    address = conf.get('address', '127.0.0.1')
    port = conf.get('port', 9774)

    uri = STATIC_PAGE
    if utils_ctl.is_running(address, port):
        uri = 'http://%s/' % utils_net.format_epnt((address, port))

    if not 'DISPLAY' in os.environ:
        sys.exit('FATAL: No DISPLAY available')
    else:
        WebkitGUI(uri)
        gtk.main()
コード例 #7
0
ファイル: unix.py プロジェクト: EverlastingFire/neubot
def __main():
    ''' Neubot auto-updater process '''

    # Process command line options
    logopt = syslog.LOG_PID
    daemonize = True

    try:
        options, arguments = getopt.getopt(sys.argv[1:], 'adv')
    except getopt.error:
        sys.exit('Usage: neubot/updater/unix.py [-adv]')

    if arguments:
        sys.exit('Usage: neubot/updater/unix.py [-adv]')

    check_for_updates = 0  # By default we don't check for updates
    for tpl in options:
        if tpl[0] == '-a':
            check_for_updates = 1
        elif tpl[0] == '-d':
            daemonize = False
        elif tpl[0] == '-v':
            logopt |= syslog.LOG_PERROR|syslog.LOG_NDELAY

    # We must be run as root
    if os.getuid() != 0 and os.geteuid() != 0:
        sys.exit('FATAL: You must be root.')

    # Open the system logger
    syslog.openlog('neubot(updater)', logopt, syslog.LOG_DAEMON)

    # Clear root user environment
    utils_posix.chuser(utils_posix.getpwnam('root'))

    # Daemonize
    if daemonize:
        utils_posix.daemonize('/var/run/neubot.pid')

    #
    # TODO We should install a signal handler that kills
    # properly the child process when requested to exit
    # gracefully.
    #

    firstrun = True
    pid = -1

    signal.signal(signal.SIGUSR1, __sigusr1_handler)

    #
    # Loop forever, catch and just log all exceptions.
    # Spend many time sleeping and wake up just once every
    # few seconds to make sure everything is fine.
    #
    while True:
        if firstrun:
            firstrun = False
        else:
            time.sleep(15)

        # Read configuration files
        CONFIG.update(utils_rc.parse_safe('/etc/neubot/updater'))
        CONFIG.update(utils_rc.parse_safe('/etc/neubot/users'))

        try:

            # If needed start the agent
            if pid == -1:
                syslog.syslog(syslog.LOG_INFO, 'Starting the agent')
                pid = __start_neubot_agent()

            # Check for updates
            now = time.time()
            updates_check_in = 1800 - (now - STATE['lastcheck'])
            if updates_check_in <= 0:
                STATE['lastcheck'] = now

                if check_for_updates:
                    nversion = _download_and_verify_update()
                    if nversion:
                        if pid > 0:
                            __stop_neubot_agent(pid)
                            pid = -1
                        __install_new_version(nversion)
                        __switch_to_new_version()
                        raise RuntimeError('Internal error')

                    #
                    # We have not found an update, while here make
                    # sure that we keep clean our base directory,
                    # remove old files and directories, the tarball
                    # of this version, etc.
                    #
                    else:
                        __clear_base_directory()
                else:
                    syslog.syslog(syslog.LOG_DEBUG, 'Auto-updates are disabled')

            elif check_for_updates:
                syslog.syslog(syslog.LOG_DEBUG,
                  'Auto-updates check in %d sec' % updates_check_in)

            # Monitor the agent
            rpid, status = __waitpid(pid, 0)

            if rpid == pid:
                pid = -1

                # Signaled?
                if os.WIFSIGNALED(status):
                    raise RuntimeError('Agent terminated by signal')

                # For robustness
                if not os.WIFEXITED(status):
                    raise RuntimeError('Internal error in __waitpid()')

                syslog.syslog(syslog.LOG_WARNING,
                  'Child exited with status %d' % os.WEXITSTATUS(status))

        except:
            try:
                why = asyncore.compact_traceback()
                syslog.syslog(syslog.LOG_ERR, 'In main loop: %s' % str(why))
            except:
                pass
コード例 #8
0
def getpwnam():
    ''' Wrapper for getpwnam '''
    cnf = utils_rc.parse_safe('/etc/neubot/users')
    unpriv_user = cnf.get('unpriv_user', UNPRIV_USER)
    passwd = utils_posix.getpwnam(unpriv_user)
    return passwd
コード例 #9
0
ファイル: unix.py プロジェクト: felipebusnello/neubot
def __main():
    ''' Neubot auto-updater process '''

    # Process command line options
    logopt = syslog.LOG_PID
    daemonize = True

    try:
        options, arguments = getopt.getopt(sys.argv[1:], 'Dd')
    except getopt.error:
        sys.exit('Usage: neubot/updater/unix.py [-Dd]')

    if arguments:
        sys.exit('Usage: neubot/updater/unix.py [-Dd]')

    for tpl in options:
        if tpl[0] == '-D':
            daemonize = False
        elif tpl[0] == '-d':
            logopt |= syslog.LOG_PERROR|syslog.LOG_NDELAY

    # We must be run as root
    if os.getuid() != 0 and os.geteuid() != 0:
        sys.exit('You must be root.')

    # Open the system logger
    syslog.openlog('neubot(updater)', logopt, syslog.LOG_DAEMON)

    # Read configuration file
    if os.path.isfile('/etc/neubot/updater'):
        cnf = utils_rc.parse_safe('/etc/neubot/updater')
        CONFIG.update(cnf)

    # Clear root user environment
    __change_user(__lookup_user_info('root'))

    # Daemonize
    if daemonize:
        __go_background('/var/run/neubot.pid')

    #
    # TODO We should install a signal handler that kills
    # properly the child process when requested to exit
    # gracefully.
    #

    lastcheck = time.time()
    firstrun = True
    pid = -1

    #
    # Loop forever, catch and just log all exceptions.
    # Spend many time sleeping and wake up just once every
    # few seconds to make sure everything is fine.
    #
    while True:
        if firstrun:
            firstrun = False
        else:
            time.sleep(15)

        try:

            # If needed start the agent
            if pid == -1:
                syslog.syslog(syslog.LOG_INFO, 'Starting the agent')
                pid = __start_neubot_agent()

            # Check for updates
            now = time.time()
            if now - lastcheck > 1800:
                lastcheck = now
                nversion = _download_and_verify_update()
                if nversion:
                    if pid > 0:
                        __stop_neubot_agent(pid)
                        pid = -1
                    __install_new_version(nversion)
                    __switch_to_new_version()
                    raise RuntimeError('Internal error')

                #
                # We have not found an update, while here make
                # sure that we keep clean our base directory,
                # remove old files and directories, the tarball
                # of this version, etc.
                #
                else:
                    __clear_base_directory()

            # Monitor the agent
            syslog.syslog(syslog.LOG_INFO, 'Monitoring the agent')
            rpid, status = __waitpid(pid, 0)

            if rpid == pid:
                pid = -1

                # Signaled?
                if os.WIFSIGNALED(status):
                    raise RuntimeError('Agent terminated by signal')

                # For robustness
                if not os.WIFEXITED(status):
                    raise RuntimeError('Internal error in __waitpid()')

                syslog.syslog(syslog.LOG_WARNING,
                  'Child exited with status %d' % os.WEXITSTATUS(status))

        except:
            try:
                why = asyncore.compact_traceback()
                syslog.syslog(syslog.LOG_ERR, 'In main loop: %s' % str(why))
            except:
                pass