diff --git a/branches/ucs-3.1/ucs/base/univention-updater/debian/changelog b/branches/ucs-3.1/ucs/base/univention-updater/debian/changelog index 96ebe46..2b7527c 100644 --- a/branches/ucs-3.1/ucs/base/univention-updater/debian/changelog +++ b/branches/ucs-3.1/ucs/base/univention-updater/debian/changelog @@ -1,6 +1,8 @@ univention-updater (8.0.68-1) unstable; urgency=low * Force univention-upgrade --check to be non-interactive (Bug #30315) + * Replace component/parts in favor of component/{,un}maintained inheriting + from repository/online/{,un}maintained (Bug #30261) -- Philipp Hahn Tue, 26 Feb 2013 19:36:08 +0100 diff --git a/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.postinst b/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.postinst index 4c09562..287e491 100644 --- a/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.postinst +++ b/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.postinst @@ -38,6 +38,35 @@ create_logfile /var/log/univention/errata-updates.log "root:adm" 640 create_logfile /var/log/univention/updater.log "root:adm" 640 create_logfile /var/log/univention/actualise.log "root:adm" 640 +convert_component () { # Convert repository/online/component/*/parts to .../unmaintained + python -c '#!/usr/bin/python2.6 +import sys +from univention.config_registry import ConfigRegistry +ucr = ConfigRegistry() +ucr.load() +for key, value in ucr.items(): + if not key.startswith("repository/online/component/"): + continue + if not key.endswith("/parts"): + continue + stem = key[:-6] + values = value.split(",") + try: + values.remove("unmaintained") + ucr["%s/unmaintained" % stem] = "yes" + except ValueError: + pass + try: + values.remove("maintained") + except ValueError: + pass + if values: + print >> sys.stderr, "Unknown parts in %s: %r" % (key, values) + else: + del ucr[key] +ucr.save()' +} + if [ "$1" = "configure" ]; then # update cronjob-entries if [ -x /usr/lib/univention-directory-policy/univention-policy-maintenance ]; then @@ -52,6 +81,12 @@ if [ "$1" = "configure" ]; then fi fi + # Bug #30261: Upgrade u/r/o/c/*/parts to u/r/o/c/*/unmaintained + if dpkg --compare-versions "$2" lt-nl 8.0.68 + then + convert_component + fi + univention-config-registry set \ update/warning?"no" \ update/warning/coloured?"no" \ @@ -62,7 +97,6 @@ if [ "$1" = "configure" ]; then update/doc/releasenotes/description"?http://download.univention.de/doc/"\ repository/online?no \ repository/online/port?80 \ - repository/online/maintained?yes \ repository/online/unmaintained?no \ repository/online/hotfixes?no \ repository/mirror?"$mirror_default" \ diff --git a/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry b/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry index 0d20d0d..69bc811 100644 --- a/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry +++ b/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry @@ -8,7 +8,6 @@ Variables: local/repository Variables: repository/online Variables: repository/online/server Variables: repository/online/port -Variables: repository/online/maintained Variables: repository/online/unmaintained Variables: repository/online/sources Variables: repository/online/httpmethod @@ -35,7 +34,6 @@ Variables: local/repository Variables: repository/online Variables: repository/online/server Variables: repository/online/port -Variables: repository/online/maintained Variables: repository/online/unmaintained Variables: repository/online/component/.* Variables: repository/mirror diff --git a/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry-variables b/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry-variables index a4b0138..a5a46a4 100644 --- a/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry-variables +++ b/branches/ucs-3.1/ucs/base/univention-updater/debian/univention-updater.univention-config-registry-variables @@ -1,6 +1,6 @@ [repository/online/server] -Description[de]=Server, auf dem das Repository vorgehalten wird [apt.univention.de] -Description[en]=Server holding the Repository [apt.univention.de] +Description[de]=Server, auf dem das Repository vorgehalten wird [updates.software-univention.de] +Description[en]=Server holding the Repository [updates.software-univention.de] Type=str Categories=service-software-management @@ -104,7 +104,7 @@ Categories=service-software-management Description[de]=Pakete aus dem Maintained-Bereich verwenden [yes] Description[en]=Use packages from the maintained section [yes] Type=bool -Categories=service-software-management +Categories=deprecated [repository/online/unmaintained] Description[de]=Pakete aus dem Unmaintained-Bereich verwenden [no] @@ -116,7 +116,7 @@ Categories=service-software-management Description[de]=hotfix-Pakete für Sicherheitsupdates verwenden [no] Description[en]=Use hotfix packages for security updates [no] Type=bool -Categories=service-software-management +Categories=deprecated [repository/online/httpmethod] Description[de]=HTTP-Methode zum Testen der Verfügbarkeit von Updates [HEAD] @@ -136,6 +136,83 @@ Description[en]=Lowest errata-version to use [1] Type=int Categories=service-software-management +[repository/online/component/.*] +Description[de]=Aktiviert das Einbinden der Komponente +Description[en]=Activates the inclusion of the component +Type=bool +Categories=service-software-management + +[repository/online/component/.*/description] +Description[de]=Beschreibung der Komponente +Description[en]=Description for the component +Type=str +Categories=service-software-management + +[repository/online/component/.*/erratalevel] +Description[de]=Errata-Patchlevel der Komponente +Description[en]=Errata patchlevel of the component +Type=int +Categories=service-software-management + +[repository/online/component/.*/parts] +Description[de]=Bereiche, aus dem Pakete verwendet werden [maintained] +Description[en]=Sections from which packages are used [maintained] +Type=str +Categories=deprecated + +[repository/online/component/.*/unmaintained] +Description[de]=Pakete aus dem Unmaintained-Bereich verwenden [no] +Description[en]=Use packages from the unmaintained section [no] +Type=bool +Categories=service-software-management + +[repository/online/component/.*/version] +Description[de]=Liste von Versionen der Komponente, die eingebunden werden sollen. 'current' erfordert das Vorhandensein der Komponente für die UCS Version, was u.a. Upgrades auf die nächste UCS-Version verhindert, bis auch die Komponente dafür vorhanden ist. +Description[en]=List of versions for component, which should be activated. 'current' requires the component to be available for the UCS version, which blocks upgrades to the next UCS version, until the component is available for it. +Type=str +Categories=service-software-management + +[repository/online/component/.*/server] +Description[de]=Server, auf dem das Repository der Komponente vorgehalten wird +Description[en]=Server holding the Repository of the component +Type=str +Categories=service-software-management + +[repository/online/component/.*/port] +Description[de]=TCP-Portnummer des online Repository Servers der Komponente +Description[en]=TCP port number of the online repository servers of the component +Type=int +Categories=service-software-management + +[repository/online/component/.*/prefix] +Description[de]=Updateverzeichnis auf dem Repository Server der Komponente +Description[en]=Update directory on the repository server of the component +Type=str +Categories=service-software-management + +[repository/online/component/.*/username] +Description[de]=Benutzername für den Zugriff auf den Repository Server der Komponente +Description[en]=User name to access the repository server of the component +Type=str +Categories=service-software-management + +[repository/online/component/.*/password] +Description[de]=Passwort für den Zugriff auf den Repository Server der Komponente +Description[en]=Passwort to access the repository server of the component +Type=str +Categories=service-software-management + +[repository/online/component/.*/localmirror] +Description[de]=Aktiviere/Deaktiviere das Spiegeln der Komponente in das lokale Repository +Description[en]=Enable/Disable mirroring the component into the local repository +Type=bool +Categories=service-software-management + +[repository/online/component/.*/clean] +Description[de]=Skript zum Löschen nicht länger benötigter Pakete aus dem lokalen Repository erzeugen +Description[en]=Create script to delete obsolete packages from the local repository +Type=bool +Categories=service-software-management [repository/mirror] Description[de]=Aktiviere/Deaktiviere das Spiegeln der Pakete in das lokale Repository [yes] @@ -328,3 +405,21 @@ Description[de]=Kommando zum Simulieren einer Aktualisierung aller installierter Description[en]=Command to simulate the upgrade of all installed packages Type=str Categories=service-software-management + +[updater/identify] +Description[de]=Identifizierungsmerkmal des Updates +Description[en]=Identification property of the updater +Type=str +Categories=Misc + +[uuid/license] +Description[de]=Eindeutige ID der UCS Lizenz der Domäne +Description[en]=Unique ID of the UCS license of the domain +Type=str +Categories=Misc + +[uuid/system] +Description[de]=Eindeutige ID des Rechners +Description[en]=Unique ID of the host +Type=str +Categories=Misc diff --git a/branches/ucs-3.1/ucs/base/univention-updater/modules/univention/updater/tools.py b/branches/ucs-3.1/ucs/base/univention-updater/modules/univention/updater/tools.py index df9c863..abb17de 100644 --- a/branches/ucs-3.1/ucs/base/univention-updater/modules/univention/updater/tools.py +++ b/branches/ucs-3.1/ucs/base/univention-updater/modules/univention/updater/tools.py @@ -544,11 +544,7 @@ class UniventionUpdater: os.environ['no_proxy'] = self.configRegistry['proxy/no_proxy'] # check for maintained and unmaintained - self.parts = [] - - if self.configRegistry.is_true('repository/online/maintained', True): - self.parts.append('maintained') - + self.parts = ['maintained'] if self.configRegistry.is_true('repository/online/unmaintained', False): self.parts.append('unmaintained') @@ -803,7 +799,7 @@ class UniventionUpdater: def security_update_available(self, version=None): '''Check for the security version for the current version. - Returns next available security update number (integer) or False if no security update is available. + Returns next available security update number (integer) or False if no security update is available. ''' if version: start = end = version @@ -816,7 +812,7 @@ class UniventionUpdater: def errata_update_available(self, version=None): '''Check for the errata version for the current version. - Returns next available security update number (integer) or False if no security update is available. + Returns next available security update number (integer) or False if no security update is available. ''' if version: start = end = version @@ -1115,9 +1111,9 @@ class UniventionUpdater: def _iterate_component_repositories(self, components, start, end, archs, for_mirror_list=False, errata_level=None, iterate_errata=True): ''' - Iterate over all components and return (server, version). - for_mirror_list shall be True if the code shall iterate over component - repositories for mirror.list. + Iterate over all components and return (server, version). + for_mirror_list shall be True if the code shall iterate over component + repositories for mirror.list. ''' self.log.info('Searching components %r [%s..%s)', components, start, end) @@ -1126,8 +1122,10 @@ class UniventionUpdater: # server, port, prefix server = self._get_component_server(component, for_mirror_list=for_mirror_list) # parts - parts = self.configRegistry.get('repository/online/component/%s/parts' % component, 'maintained') - parts = ['%s/component' % part for part in RE_SPLIT_MULTI.split(parts)] + parts = set(self.parts) + if self.configRegistry.is_true('repository/online/component/%s/unmaintained' % (component)): + parts.add("unmaintained") + parts = ['%s/component' % (part,) for part in self.parts] # versions if start == end: versions = (start,) @@ -1162,7 +1160,7 @@ class UniventionUpdater: # Go through all errata level for this component and break if the first errata level is missing if for_mirror_list: - for i in range(1,1000): + for i in xrange(1, 1000): valid = False patch_name = '%s-errata%s' % (component, i) for (UCSRepoPoolVariant, subarchs) in ((UCSRepoPool, archs), (UCSRepoPoolNoArch, ('all',))): diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/debian/changelog b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/debian/changelog index f5265db..eceab7f 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/debian/changelog +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/debian/changelog @@ -1,3 +1,10 @@ +univention-management-console-module-appcenter (2.0.126-1) unstable; urgency=low + + * Replace component/parts in favor of component/{,un}maintained inheriting + from repository/online/{,un}maintained (Bug #30261) + + -- Philipp Hahn Wed, 27 Feb 2013 14:41:19 +0100 + univention-management-console-module-appcenter (2.0.125-1) unstable; urgency=low * Fix overwriting important variables (Bug #30503) diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/DetailsPage.js b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/DetailsPage.js index b486012..203df22 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/DetailsPage.js +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/DetailsPage.js @@ -107,11 +107,6 @@ define([ }, { type: CheckBox, - name: 'maintained', - label: _("Use maintained repositories") - }, - { - type: CheckBox, name: 'unmaintained', label: _("Use unmaintained repositories") }, @@ -148,7 +143,7 @@ define([ label: _("Advanced settings"), layout: [ - ['maintained', 'unmaintained'], + ['unmaintained'], ['username', 'password'], ['version'] ] @@ -236,7 +231,6 @@ define([ defaultpackages: '', server: '', // TODO These have to be copied from the current settings - maintained: true, unmaintained: false }); } diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/SettingsPage.js b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/SettingsPage.js index 0511289..393f68d 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/SettingsPage.js +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/appcenter/SettingsPage.js @@ -73,17 +73,13 @@ define([ label: _("Repository prefix") }, { type: 'CheckBox', - name: 'maintained', - label: _("Use maintained repositories") - }, { - type: 'CheckBox', name: 'unmaintained', label: _("Use unmaintained repositories") }]; var formLayout = [ ['server', 'prefix', 'submit' ], - ['maintained', 'unmaintained'] + ['unmaintained'] ]; var formButtons = [{ diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/de.po b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/de.po index bcadb6b..2bf0ed3 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/de.po +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/js/de.po @@ -701,10 +701,6 @@ msgid "Upgrade not possible" msgstr "Aktualisierung nicht möglich" #: umc/js/appcenter/DetailsPage.js: umc/js/appcenter/SettingsPage.js: -msgid "Use maintained repositories" -msgstr "'Maintained' Repositories benutzen" - -#: umc/js/appcenter/DetailsPage.js: umc/js/appcenter/SettingsPage.js: msgid "Use unmaintained repositories" msgstr "'Unmaintained' Repositories benutzen" @@ -814,3 +810,6 @@ msgstr "aktualisiert" #~ msgid "Was the domain prepared as asked in the dialog before?" #~ msgstr "Wurde die Domäne wie zuvor beschrieben vorbereitet?" + +#~ msgid "Use maintained repositories" +#~ msgstr "'Maintained' Repositories benutzen" diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/__init__.py b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/__init__.py index f2c180c..eaca783 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/__init__.py +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/__init__.py @@ -475,7 +475,6 @@ class Instance(umcm.Base): for _ in iterator: yield { - 'maintained' : self.ucr.is_true('repository/online/maintained', False), 'unmaintained' : self.ucr.is_true('repository/online/unmaintained', False), 'server' : self.ucr.get('repository/online/server', ''), 'prefix' : self.ucr.get('repository/online/prefix', ''), diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/constants.py b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/constants.py index b45ac00..eff48c5 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/constants.py +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/constants.py @@ -3,8 +3,7 @@ ONLINE_BASE = 'repository/online' COMPONENT_BASE = '%s/component' % ONLINE_BASE # Parameter names for component definitions -COMP_PARTS = ['maintained', 'unmaintained'] -COMP_PARAMS = ['description', 'server', 'prefix', 'password', 'username', 'defaultpackages', 'version', 'localmirror'] +COMP_PARAMS = ['description', 'server', 'prefix', 'password', 'username', 'defaultpackages', 'version', 'localmirror', 'unmaintained'] # Symbolic error codes for UCR write operations PUT_SUCCESS = 0 diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/sanitizers.py b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/sanitizers.py index e53ca02..a93f4e3 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/sanitizers.py +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/sanitizers.py @@ -25,7 +25,6 @@ class NoDoubleNameSanitizer(StringSanitizer): basic_components_sanitizer = DictSanitizer({ 'server' : StringSanitizer(required=True, minimum=1), 'prefix' : StringSanitizer(required=True), - 'maintained' : AnySanitizer(required=True, may_change_value=False, further_arguments=['unmaintained']), 'unmaintained' : BooleanSanitizer(required=True), }, allow_other_keys=False, @@ -34,7 +33,6 @@ basic_components_sanitizer = DictSanitizer({ advanced_components_sanitizer = DictSanitizer({ 'server' : StringSanitizer(), 'prefix' : StringSanitizer(), - 'maintained' : BooleanSanitizer(), 'unmaintained' : BooleanSanitizer(), 'enabled' : BooleanSanitizer(required=True), 'name' : StringSanitizer(required=True, regex_pattern='^[A-Za-z0-9\-\_\.]+$'), diff --git a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/util.py b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/util.py index 3c079e7..31b9989 100644 --- a/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/util.py +++ b/branches/ucs-3.1/ucs/management/univention-management-console-module-appcenter/umc/python/appcenter/util.py @@ -48,7 +48,7 @@ from univention.admin.handlers.computers import domaincontroller_backup # local application -from constants import COMPONENT_BASE, COMP_PARTS, COMP_PARAMS, STATUS_ICONS, DEFAULT_ICON, PUT_SUCCESS, PUT_PROCESSING_ERROR +from constants import COMPONENT_BASE, COMP_PARAMS, STATUS_ICONS, DEFAULT_ICON, PUT_SUCCESS, PUT_PROCESSING_ERROR def get_hosts(module, lo, ucr=None): hosts = module.lookup(None, lo, None) @@ -275,8 +275,6 @@ class ComponentManager(object): """ entry = {} entry['name'] = component_id - for part in COMP_PARTS: - entry[part] = False # ensure a proper bool entry['enabled'] = self.ucr.is_true('%s/%s' % (COMPONENT_BASE, component_id), False) # Most values that can be fetched unchanged @@ -285,13 +283,8 @@ class ComponentManager(object): entry[attr] = self.ucr.get(regstr, '') # Get default packages (can be named either defaultpackage or defaultpackages) entry['defaultpackages'] = list(self.uu.get_component_defaultpackage(component_id)) # method returns a set - # Parts value (if present) must be splitted into words and added as bools. - # For parts not contained here we have set 'False' default values. - parts = self.ucr.get('%s/%s/parts' % (COMPONENT_BASE, component_id), '').split(',') - for part in parts: - p = part.strip() - if len(p): - entry[p] = True + # Explicitly enable unmaintained component + entry['unmaintained'] = self.ucr.is_true('%s/%s/unmaintained' % (COMPONENT_BASE, component_id), False) # Component status as a symbolic string entry['status'] = self.uu.get_current_component_status(component_id) entry['installed'] = self.uu.is_component_defaultpackage_installed(component_id) @@ -317,7 +310,6 @@ class ComponentManager(object): app_data = { 'server' : app.get_server(), 'prefix' : '', - 'maintained' : True, 'unmaintained' : False, 'enabled' : True, 'name' : app.component_id, @@ -350,13 +342,8 @@ class ComponentManager(object): 'object': {}, } try: - parts = set() name = data.pop('name') named_component_base = '%s/%s' % (COMPONENT_BASE, name) - old_parts = self.ucr.get('%s/parts' % named_component_base, '') - if old_parts: - for part in old_parts.split(','): - parts.add(part) for key, val in data.iteritems(): if val is None: # was not given, so dont update @@ -365,12 +352,6 @@ class ComponentManager(object): super_ucr.set_registry_var('%s/%s' % (named_component_base, key), val) elif key == 'enabled': super_ucr.set_registry_var(named_component_base, val) - elif key in COMP_PARTS: - if val: - parts.add(key) - else: - parts.discard(key) - super_ucr.set_registry_var('%s/parts' % named_component_base, ','.join(sorted(parts))) except Exception as e: result['status'] = PUT_PROCESSING_ERROR result['message'] = "Parameter error: %s" % str(e) @@ -400,9 +381,7 @@ class ComponentManager(object): def _remove(self, component_id, super_ucr): named_component_base = '%s/%s' % (COMPONENT_BASE, component_id) - for var in COMP_PARAMS + ['parts']: - # COMP_PARTS (maintained,unmaintained) are special - # '' deletes this variable + for var in COMP_PARAMS: super_ucr.set_registry_var('%s/%s' % (named_component_base, var), '') super_ucr.set_registry_var(named_component_base, '') diff --git a/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/31maintained b/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/31maintained index 7926aca..be92860 100755 --- a/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/31maintained +++ b/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/31maintained @@ -4,6 +4,8 @@ ## 1. setup local repository with maintained and unmaintained ## 2. check if enabling maintained works ## roles-not: [basesystem] +## versions: +## 3.1-1: skip ## tags: [basic] ## packages: ## - apache2 | apache2-mpm-prefork diff --git a/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/40component-unmaintained b/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/40component-unmaintained index 56f3949..3242b3c 100755 --- a/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/40component-unmaintained +++ b/branches/ucs-3.1/ucs/test/ucs-test/tests/09_updater/40component-unmaintained @@ -4,6 +4,8 @@ ## 1. setup local repository for maintained and unmaintained component ## 2. check if all packages are installable ## roles-not: [basesystem] +## versions: +## 3.1-1: skip ## tags: [basic] ## packages: ## - apache2 | apache2-mpm-prefork