Exemplo n.º 1
0
    def update_check(self, res, arg_softwareVersion, arg_automaticUpdates, apt_source):
        try:
            update_available, update_needed, update_immediately, update_forced = False, False, False, False

            # FIXME: this must be changed to handle every major version separately (= update "tree")
            current_version, current_changelog = self.aptcache.get_apt_info(apt_source)
            if current_version is None:
                raise Exception('current up-to-date version not available, ignoring update check')

            rc = helpers.compare_product_versions(arg_softwareVersion, current_version)
            _log.debug('comparison result: %s (client version: %s, current version: %s)' % (rc, arg_softwareVersion, current_version))

            if rc == 1:
                # client software is newer than available
                raise Exception('client software version (%s) is newer than ours (%s), unexpected' % \
                                (arg_softwareVersion, current_version))
            elif rc == 0:
                # up-to-date
                update_available, update_needed, update_forced = False, False, False
            elif rc == -1:
                # update exists, policy check
                server_forced_update = False  # FIXME - determine this somehow if we want critical updates
                if arg_automaticUpdates:
                    update_available, update_needed, update_forced = True, True, False
                elif server_forced_update:
                    update_available, update_needed, update_forced = True, True, True
                else:
                    update_available, update_needed, update_forced = True, False, False

                # immediate updates, master option
                if self.master.immediate_update:
                    _log.warning('master.immediate_update is True, forcing immediate update')
                    update_immediately = True
            else:
                raise Exception('unknown result from compare_product_versions: %s' % rc)
        except:
            _log.exception('cannot perform version / update check, skipping')
            update_available, update_needed, update_forced = False, False, False

        _log.debug('update check result: %s, %s, %s' % (update_available, update_needed, update_forced))

        res['updateAvailable'] = update_available
        res['updateNeeded'] = update_needed
        res['updateImmediately'] = update_immediately
        res['updateForced'] = update_forced
Exemplo n.º 2
0
def _check_update_on_next_reboot():
    try:
        ui_root = helpers.get_ui_config()
        if ui_root.hasS(ns_ui.automaticUpdates) and ui_root.getS(ns_ui.automaticUpdates, rdf.Boolean):
            # XXX: duplication
            update_info = helpers.get_db_root().getS(ns_ui.updateInfo, rdf.Type(ns_ui.UpdateInfo))
            latest = update_info.getS(ns_ui.latestKnownVersion, rdf.String)
            current = helpers.get_product_version()
            if (latest != '') and (helpers.compare_product_versions(latest, current) > 0):
                return True
            else:
                return False
        else:
            return False
    except:
        # default, assume False
        _log.exception('cannot determine whether product update happens on next reboot')
        return False
Exemplo n.º 3
0
def _check_update_on_next_reboot():
    try:
        ui_root = helpers.get_ui_config()
        if ui_root.hasS(ns_ui.automaticUpdates) and ui_root.getS(
                ns_ui.automaticUpdates, rdf.Boolean):
            # XXX: duplication
            update_info = helpers.get_db_root().getS(
                ns_ui.updateInfo, rdf.Type(ns_ui.UpdateInfo))
            latest = update_info.getS(ns_ui.latestKnownVersion, rdf.String)
            current = helpers.get_product_version()
            if (latest != '') and (helpers.compare_product_versions(
                    latest, current) > 0):
                return True
            else:
                return False
        else:
            return False
    except:
        # default, assume False
        _log.exception(
            'cannot determine whether product update happens on next reboot')
        return False
Exemplo n.º 4
0
    def _immediate_auto_update_check(self, identify_result):
        update_now = identify_result["updateImmediately"]

        # XXX: If this debug marker exists, autoupdate is forced if newer is available.
        if os.path.exists(constants.AUTOUPDATE_MARKERFILE):
            curr_ver = helpers.get_product_version()
            latest_ver = uihelpers.get_latest_product_version()
            if (
                (curr_ver is not None)
                and (latest_ver is not None)
                and (helpers.compare_product_versions(latest_ver, curr_ver) > 0)
            ):
                _log.info(
                    "detected that update is available (%s -> %s), immediate automatic update" % (curr_ver, latest_ver)
                )
                update_now = True

        if update_now:
            # take action
            _log.info("management server has requested immediate update, forced check for updates now, rebooting")
            helpers.db_flush()
            uihelpers.ui_reboot(
                "immediate autoupdate", skip_update=False, force_update=True, force_fsck=True, delay=0.0
            )