Univention Bugzilla – Bug 28893
Anpassung: announce_errata_update auf neues Errata-Verfahren
Last modified: 2012-12-12 21:10:22 CET
Das Announce-Skript für Errata-Updates muss auf das neue Errata-Verfahren aus 3.1 angepasst werden.
announce_ucs_release.py sollte nach Möglichkeit auch direkt das leere errata-Verzeichnis für das Release anlegen.
Das Paket ucs/base/univention-errata-level wird jetzt auf jedem System mit installiert. Das Pakete sollte bei jedem Announce automatisch aktualisiert und installiert werden.
Support für die neuen Pfade und den Announce wurden in Repo-NG integriert. Ich habe ein Beispiel unter http://hutten/mediawiki/index.php/Errata-Updates eingefügt. Das automatisch Generieren des univention-errata-level Pakets steht noch aus
announce_errata aktualisiert jetzt univention-errata-level automatisch bei jedem Announce über einen Patch und führt einen Neubuild des Pakets durch.
FAIL: In der YAML Datei muß scheinbar neuderings eine zusätzliche 'version' angegeben werden. Das und deren Bedeutung ist nirgendwo dokumentiert. Ist hier 'Patchlevel' gemeint? FAIL: In univention-errata-level/debian/univention-errata-level.postinst sollten die letzten beiden Zeilen im Copyright-CLOB entfernt werden, weil das nicht mit dem rules-File zu tun hat. FAIL: In der Datei univention-errata-level/debian/univention-errata-level.postinst sollte der #DEBHELPER#-Platzhalter stehen. +++ b/branches/ucs-3.0/internal/repo-ng/announce/announce_errata.py FIXME: trailing whitespace FIXME: svn ps svn:executable 1 +import commands ... + hostname = commands.getoutput("hostname") FIXME: ungenutzt, sollte entfernt werden >+ version_blob = str(opt.ucsrelease) >+ if errata_new_style: >+ if int(version) == 0: >+ version_blob = str(opt.ucsrelease) + " (applicable to all releases)" >+ else: >+ version_blob = str(opt.ucsrelease) + " (applicable to " + str(opt.ucsrelease) + "-" + version + " onwards" FIXME: ungenutzt. Entweder entfernrn oder benutzen. > +atexit.register(shutil.rmtree, tmpdir, ignore_errors=True) FAIL: Hierfür fehlt ein "import atexit" + '3.1': 'univention-errata-level/3.1-0-0-ucs/1.0.0-1-errata3.1-0/bump-version.patch', + svn_path = 'svn+ssh://build@' + configRegistry['repong/patchrepo'] + '/univention-errata-level' + rp.run_expect('svn co %s' % (svn_path), build_password,10800) + patchfile = tmpdir + "/" + ERRATALEVELPATCH[opt.ucsrelease] FYI: Das auschecken aller Patches für univention-errata-level ist hier eigentlich unnötig, wesser wäre es vermutlich nur die letzte Ebene in ein Verzeichnis mit festem Namen auszuchecken. + if a.startswith("ucr set version/erratalevel"): + a = "ucr set version/erratalevel=" + str(errata_level) FAIL: Das funktioniert nicht, weil die Datei ein Patch ist und die Zeile mit einem '+' (Pluszeichen) anfängt. PREFIX = '+ucr set version/erratalevel=' if a.startswith(PREFIX): a = PREFIX + str(errata_level) + subprocess.call(cmd, shell=True) FAIL: Unbedingt den Exit-Status prüfen! FIXME: Shell + errata_new_style = False FIXME: In einem Jahr ist das dann nicht mehr 'new', besser wäre errata_31_style. + print "Malformed advisory file, no version specified" FIXME: >> systs.sdterr, + for i in range(0,10): + if errata_base_version >= i: RFC: Was soll diese Schleife bewirken. RFC: woher kommt die magische Zahl 10? FATAL: Das führt dazu, daß die Pakete nach /mnt/omar/vmwares/mirror/ftp/3.1/unmaintained/component/3.1-9-errata/source installiert werden. FIXME: for patch_level in range(errata_base_version, 10): -rp.create_sources_files(os.path.join(mirror_base, "unmaintained"), errata_id) FIXME: Der Aufruf fehlt dann für die Komponente. + pass # TODO RFC: Kommt da noch was? +++ b/branches/ucs-3.0/internal/repo-ng/debian/changelog FIXME: trailing whitespace NOTE: Das Testen wird dadurch erschwert, daß das Tool 2 PGP-Schlüssel-IDs benötigt: Den für die Release-Datei kann man auf der Kommandozeile anegeben, den 2. für das signieren der Mail ist hart kodiert und erfordert root-Rechte. TODO: run_expect liefert keinen Return-Value, d.h. Skripte haben keine Möglichkeit zu gucken, ob das "svn"-Kommando funktioniert hat oder nicht. OK: ChangeLog nicht notwendig
Created attachment 4826 [details] Meine (teilweise bereits besser) funktionierende Variante zum Vergleich
(In reply to comment #5) > FAIL: In der YAML Datei muß scheinbar neuderings eine zusätzliche 'version' > angegeben werden. Das und deren Bedeutung ist nirgendwo dokumentiert. Ist hier > 'Patchlevel' gemeint? Ist jetzt dokumentiert unter http://hutten/mediawiki/index.php/Errata-Updates#Assignee_-_Definition_der_Advisory-Metadaten__in_YAML > FAIL: In univention-errata-level/debian/univention-errata-level.postinst > sollten die letzten beiden Zeilen im Copyright-CLOB entfernt werden, weil das > nicht mit dem rules-File zu tun hat. > FAIL: In der Datei > univention-errata-level/debian/univention-errata-level.postinst sollte der > #DEBHELPER#-Platzhalter stehen. Angepasst. > + hostname = commands.getoutput("hostname") > FIXME: ungenutzt, sollte entfernt werden Entfernt. > >+ version_blob = str(opt.ucsrelease) + " (applicable to " + str(opt.ucsrelease) + "-" + version + " onwards" > FIXME: ungenutzt. Entweder entfernrn oder benutzen. Wird jetzt verwendet in der Übersicht der Errata-updates. > > +atexit.register(shutil.rmtree, tmpdir, ignore_errors=True) > FAIL: Hierfür fehlt ein "import atexit" Angepasst. > + if a.startswith("ucr set version/erratalevel"): > + a = "ucr set version/erratalevel=" + > str(errata_level) > FAIL: Das funktioniert nicht, weil die Datei ein Patch ist und die Zeile mit > einem '+' (Pluszeichen) anfängt. > PREFIX = '+ucr set version/erratalevel=' > if a.startswith(PREFIX): > a = PREFIX + str(errata_level) Angepasst. > + subprocess.call(cmd, shell=True) > FAIL: Unbedingt den Exit-Status prüfen! Angepasst. > + errata_new_style = False > FIXME: In einem Jahr ist das dann nicht mehr 'new', besser wäre > errata_31_style. In einem Jahr ist die Maintenance für 3.1 beendet und der alte Code kann ohnehin raus. > + for i in range(0,10): > + if errata_base_version >= i: > RFC: Was soll diese Schleife bewirken. > RFC: woher kommt die magische Zahl 10? Ist jetzt kommentiert. > FATAL: Das führt dazu, daß die Pakete nach > /mnt/omar/vmwares/mirror/ftp/3.1/unmaintained/component/3.1-9-errata/source > installiert werden. > FIXME: for patch_level in range(errata_base_version, 10): Angepasst, > -rp.create_sources_files(os.path.join(mirror_base, "unmaintained"), errata_id) > FIXME: Der Aufruf fehlt dann für die Komponente. Angepasst. > TODO: run_expect liefert keinen Return-Value, d.h. Skripte haben keine > Möglichkeit zu gucken, ob das "svn"-Kommando funktioniert hat oder nicht. Das (und ein paar kleinere Punkte wie Whitespace-Änderungen) kann später ergänzt werden. Wenn dafür schon lokale Anpassungen existieren, dann bitte separaten Bug anlegen.
(In reply to comment #7) > (In reply to comment #5) > > FAIL: In der YAML Datei muß scheinbar neuderings eine zusätzliche 'version' > > angegeben werden. Das und deren Bedeutung ist nirgendwo dokumentiert. Ist hier > > 'Patchlevel' gemeint? > > Ist jetzt dokumentiert unter IMHO ist "version" ein bescheidener Name, wenn eigentlich "min_patchlevel(-version)" gemeint ist. Das macht es später nicht gerade einfacher, da intuitiv das Richtige für einzusetzen, wenn man eine YAML-Datei erstellen soll. > > + hostname = commands.getoutput("hostname") > > FIXME: ungenutzt, sollte entfernt werden > > Entfernt. Das "import commands" könnte auch noch entfernt werden. > > + if a.startswith("ucr set version/erratalevel"): > > + a = "ucr set version/erratalevel=" + > > str(errata_level) > > FAIL: Das funktioniert nicht, weil die Datei ein Patch ist und die Zeile mit > > einem '+' (Pluszeichen) anfängt. > > PREFIX = '+ucr set version/erratalevel=' > > if a.startswith(PREFIX): > > a = PREFIX + str(errata_level) > > Angepasst. FAIL: Da verschwindes jedesmal das Newline, siehe svn11118..11124 > > + subprocess.call(cmd, shell=True) > > FAIL: Unbedingt den Exit-Status prüfen! > > Angepasst. Bitte nicht nur bei exit status 1, sondern bei allem ungleich 0 abbbrechen! b31-scope kann auch 2 zurückliefern und als Shell-Skript durch ein "kill" fast beliebiges. > > + for i in range(0,10): > > + if errata_base_version >= i: > > RFC: Was soll diese Schleife bewirken. > > RFC: woher kommt die magische Zahl 10? > > Ist jetzt kommentiert. Der Kommentar verwirrt mich: > »···for i in range(0,99): # Check up to 99 possible errata updates Es geht hier nicht um "99 errata updates", sondern die (jetzt nur noch) _eine_ errata-Componente für den letzen existierenden der maximal 99 Patchlevel (ab 'errata_base_version') Ein 'for i in range(errata_base_version, 99): # Determin latest existing patchlevel for errata component' beschreibt das für mich mich klarer. Und das Konstrukt: »···for i in range(0,99): # Check up to 99 possible errata updates ... »···»···»···if errata_base_version >= i: auch; ich musste mir das 3× anschauen, bis ich den Sinn dahiner als "range(errata_base_version, 99)" identifiziert hatte. Und wenn es keins der 99 Verzeichnisse gibt, verwendet er immer noch stillschweigend das 99er Verzeichnis. Vorschlag: if errata_new_style: comp = None for patch_level in range(errata_base_version, 99): # Determin latest existing patchlevel for errata component if os.path.exists(os.path.join(buildsystem_basedir, "ucs_%s-0-errata%s-%s" % (opt.ucsrelease, opt.ucsrelease, patch_level))): comp = '%s-%s-errata' % (opt.ucsrelease, patch_level) if not comp: print >> sys.stderr, "No patchlevel >= %d found. Aborting." % (errata_base_version,) sys.exit(1) errata_dir_maintained = os.path.join(mirror_base, "maintained", "component", comp) errata_dir_unmaintained = os.path.join(mirror_base, "unmaintained", "component", comp) else: errata_dir_maintained = os.path.join(mirror_base, "maintained", errata_id) errata_dir_unmaintained = os.path.join(mirror_base, "unmaintained", errata_id)
(In reply to comment #8) > (In reply to comment #7) > > (In reply to comment #5) > > > FAIL: In der YAML Datei muß scheinbar neuderings eine zusätzliche 'version' > > > angegeben werden. Das und deren Bedeutung ist nirgendwo dokumentiert. Ist hier > > > 'Patchlevel' gemeint? > > > > Ist jetzt dokumentiert unter > > IMHO ist "version" ein bescheidener Name, wenn eigentlich > "min_patchlevel(-version)" gemeint ist. Das macht es später nicht gerade > einfacher, da intuitiv das Richtige für einzusetzen, wenn man eine YAML-Datei > erstellen soll. Ist entsprechend im Wiki dokumentiert. > Das "import commands" könnte auch noch entfernt werden. Habe ich entfernt. > FAIL: Da verschwindes jedesmal das Newline, siehe svn11118..11124 Wurde eingefügt. > > > + subprocess.call(cmd, shell=True) > > > FAIL: Unbedingt den Exit-Status prüfen! > > > > Angepasst. > > Bitte nicht nur bei exit status 1, sondern bei allem ungleich 0 abbbrechen! > b31-scope kann auch 2 zurückliefern und als Shell-Skript durch ein "kill" fast > beliebiges. Angepasst. > > > + for i in range(0,10): > > > + if errata_base_version >= i: > > > RFC: Was soll diese Schleife bewirken. > > > RFC: woher kommt die magische Zahl 10? > > > > Ist jetzt kommentiert. > > Der Kommentar verwirrt mich: > > »···for i in range(0,99): # Check up to 99 possible errata updates > > Es geht hier nicht um "99 errata updates", sondern die (jetzt nur noch) _eine_ > errata-Componente für den letzen existierenden der maximal 99 Patchlevel (ab > 'errata_base_version') > Ein 'for i in range(errata_base_version, 99): # Determin latest existing > patchlevel for errata component' beschreibt das für mich mich klarer. > > Und das Konstrukt: > »···for i in range(0,99): # Check up to 99 possible errata updates > ... > »···»···»···if errata_base_version >= i: > auch; ich musste mir das 3× anschauen, bis ich den Sinn dahiner als > "range(errata_base_version, 99)" identifiziert hatte. > > Und wenn es keins der 99 Verzeichnisse gibt, verwendet er immer noch > stillschweigend das 99er Verzeichnis. Vorschlag: > if errata_new_style: > comp = None > for patch_level in range(errata_base_version, 99): # Determin latest > existing patchlevel for errata component > if os.path.exists(os.path.join(buildsystem_basedir, > "ucs_%s-0-errata%s-%s" % (opt.ucsrelease, opt.ucsrelease, patch_level))): > comp = '%s-%s-errata' % (opt.ucsrelease, patch_level) > if not comp: > print >> sys.stderr, "No patchlevel >= %d found. Aborting." % > (errata_base_version,) > sys.exit(1) > errata_dir_maintained = os.path.join(mirror_base, "maintained", > "component", comp) > errata_dir_unmaintained = os.path.join(mirror_base, "unmaintained", > "component", comp) > else: > errata_dir_maintained = os.path.join(mirror_base, "maintained", errata_id) > errata_dir_unmaintained = os.path.join(mirror_base, "unmaintained", > errata_id) Wir sollten in der aktuellen Releasephase nur minimale Bugfixes/Änderungen machen, von daher habe nur den Kommentar angepasst.
OK: Funktioniert soweit. OK: /var/univention/buildsystem2/errata/ und /var/univention/buildsystem2/apt/ucs_3.1-0-errata3.1-0/ wurden nach meinen Tests wieder geleert.
UCS 3.1-0 has been released: http://forum.univention.de/viewtopic.php?f=54&t=2125 If this error occurs again, please use "Clone This Bug".