def _rdf_database_checks(_log, post_import_failures): # prune once try: _rdf_database_prune(_log) except: _log.exception('_rdf_database_prune failed') # check sanity sane = False try: if post_import_failures: pass # assume insane else: if _rdf_database_sanity_check(_log): sane = True except: _log.exception('_rdf_database_sanity_check failed, assuming insane') # attempt to recover from best known good if insane recovered = False try: if not sane: _log.warning('database insane, attempting to recover from known good') if _rdf_database_recover_from_known_good(_log): _log.info('recovery successful') recovered = True else: _log.warning('recovery failed') except: _log.exception('failed to recover rdf database from known good') # XXX: if we successfully recover from known good, we should really # run sanity check here again...? # recreate from scratch if cannot recover try: if not sane and not recovered: _log.warning('recovery from known good failed, recreating database from scratch') _rdf_database_create_initial(_log) except: _log.exception('failed to recover rdf database by recreating from scratch') # remove useless data (e.g. old device info, status tree) try: _rdf_database_remove_unused_data(_log) except: _log.exception('_rdf_database_remove_unused_data failed, ignoring') # update boot uuid try: _rdf_database_update_boot_uuid(_log) except: _log.exception('_rdf_database_update_boot_uuid failed, ignoring') # final sanity - check for missing values try: from codebay.l2tpserver.webui import uidatahelpers rv = uidatahelpers.fix_missing_database_values() if rv > 0: _log.info('final sanity check: uncovered missing webui values') except: _log.exception('final sanity check of missing values failed') # regenerate protocol config try: from codebay.l2tpserver.webui import uidatahelpers pd = uidatahelpers.CreateProtocolData() pd.save_protocol_data(use_current_config=True) pd.activate_protocol_data(use_current_config=True) except: _log.exception('create_protocol_data failed') # prune for final time try: _rdf_database_prune(_log) except: _log.exception('_rdf_database_prune failed')
def postinit(): """Later initialization stuff. All python code must be available and system update/checks done. This does the post-install configuration if not done already and checks and fixes the database and RDF if possible. Here we also write /fastboot to ensure that fsck is done only at the periodic reboot time and not on some random reboot. """ # # XXX -- make some operations dependent on 'not livecd' to speed # up live cd startup time? # _log = logger.get('l2tpgw-init-postinit') is_livecd = _is_livecd() try: _record_boot_timestamp(_log) except: _log.exception('recording boot timestamp failed: ignoring') try: _create_boot_uuid(_log) except: _log.exception('creating boot-time uuid failed: ignoring.') try: _firstboot_config(_log) except: _log.exception('failed to prepare configuration') raise try: _check_system_config(_log) except: _log.exception('checking system config failed: ignoring.') try: _check_update_rdfxml_export(_log) except: _log.exception('update rdfxml import failed: ignoring.') try: _check_configuration_import(_log) except: _log.exception('configuration import failed: ignoring.') post_import_failures = False try: from codebay.l2tpserver.webui import uidatahelpers uidatahelpers.fix_missing_database_values() except: _log.exception('fix_missing_database_values() failed') post_import_failures = True try: from codebay.l2tpserver.webui import uidatahelpers pd = uidatahelpers.CreateProtocolData() pd.save_protocol_data(use_current_config=True) pd.activate_protocol_data(use_current_config=True) except: # NB: failure to generate protocol data will cause database reset; # this is probably the only sane thing we can do _log.exception('save_protocol_data() failed') post_import_failures = True try: _rdf_database_checks(_log, post_import_failures) except: _log.exception('rdf database checks failed: ignoring.') try: _fsck_markers_check(_log) except: _log.exception('fsck marker check failed: ignoring.') try: _check_interfaces(_log) except: _log.exception('network interface check failed: ignoring.') try: _cron_tweaks(_log) except: _log.exception('cron tweaks failed: ignoring.') try: _initial_l2tpgw_cron_run(_log) except: _log.exception('initial l2tpgw-cron run failed: ignoring.') try: _check_and_generate_gui_certificate(_log) except: _log.exception('failed to check and/or generate gui certificate: ignoring.') try: _update_ssl_files(_log) except: _log.exception('failed to update gui ssl files: ignoring.') try: _update_etc_issue(_log, is_livecd) except: _log.exception('failed to update /etc/issue: ignoring.')