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()
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')
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()
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()
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()
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()
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
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
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