Example #1
0
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')
Example #2
0
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.')