Univention Bugzilla – Bug 21127
preup/postup-Skripte für Components
Last modified: 2012-04-25 14:10:38 CEST
Bitte für 2.4-2 umsetzen. +++ This bug was initially created as a clone of Bug #21098 +++ Der Updater muss preup/postup-Skripte für Components unterstützen. Die Repository-Verwaltung/-Synchronisation muss diese Skripte ebenfalls unterstützen.
Der Updater (Python-Bibliotheken und Programme) wurden so umgestellt, daß bei Release-Updates nun auch all/preup.sh- und all/postup.sh-Skripte in Komponenten beachtet werden. Diese werden doppelt aufgerufen, einmal vor dem eigentlichen Skript des Releases und einmal nach dem Skript, so daß sich folgende Aufrufreihenfolge ergibt: $component[*]/preup.sh pre "$next_release_version" $release/preup.sh $component[*]/preup.sh post "$next_release_version" apt-get [dist-]upgrade $component[*]/postup.sh pre "$next_release_version" $release/postup.sh $component[*]/postup.sh post "$next_release_version" Bei Security-Updates werden weiterhin nur die Skripte des Security-Updates aufgerufen, nicht die von Komponenten. Da alle Skripte "preup.sh" bzw. "postup.sh" heißen, werden diese jeweils unter einem eindeutigen Namen in einem temporären Verzeichnis gespeichert, welches auch anschließend wieder gelöscht wird. Liefert ein Skript einen exit-Code ungleich Null zurück, wird der Updatevorgang abgebrochen. Sind mehrere Komponenten aktiv und haben Skripte, werden diese in einer nicht deterministischen Reihenfolge ausgeführt. svn22301, svn22303, 6.0.48-1.737.201102041125 ChangeLog: \item Komponenten können nun auch eigene Pre- und Postup"=Skripte haben, die jeweils einmal vor und einmal nach dem Pre- bzw.\ Postup"=Skript eines Releases ausgeführt werden (\ucsBug{21127}. Für die QA: 1. Die Updater-Tests von ucs-test sind erfolgreich durchgelaufen. Diese testen allerdings noch nicht die neue Funktionalität ab, sondern stellen nur sicher, daß es keine Regressionen gab. (Was auch noch Fehlt ist ein Test für die no_proxy-Funktionalität) 2. Für diene Funktionalität existiert bisher nur ein einfaches Skript, was eine passendes Repository-Struktur erzeugt. 3. Für die Proxy-Tests sollte die neue Version von UCR aus 2.4-2 installiert sein, in der Bug #18393 gefixt ist.
Created attachment 3010 [details] Create Repository for component {pre,post}up.sh Struktur erzeugen Dummy Paket Skripte Per HTTP-Server bereitstellen UCR repository/* konfigurieren univention-repository-update net Testen des Mirrors ucs commit /etc/apt/sources.list.d/* TODO: Sichtprüfung
Bei der durch UCS{Http,Local}Server bedingten Umstellung wurde das 's' in 'Source_s_.gz' vergessen. Dafür fehlt auch noch ein ucs-test. svn22684, univention-updater_6.0.57-1.753.201102210950 Keine Änderung am ChangeLog.
Alle pre/postup Skripte tun folgendes: echo $(date) >> /var/log/up.log echo "2.4 $KOMPONENTE pre $*" >> /var/log/up.log * OK - Update von 2.4-0 auf 2.5-0 mit zwei Komponenten mit pre/postup Skripten. Log: # minor Update auf 2.4-1 2.4 ucd pre pre 2.4-1 2.4 tcs pre pre 2.4-1 2.4 pre 2.4-1 2.4 ucd pre post 2.4-1 2.4 tcs pre post 2.4-1 2.4 ucd post pre 2.4-1 2.4 tcs post pre 2.4-1 2.4 post 2.4-1 2.4 ucd post post 2.4-1 2.4 tcs post post 2.4-1 # major Update auf 2.5-0 2.5 ucd pre pre 2.5-0 2.5 tcs pre pre 2.5-0 2.5 pre 2.5-0 2.5 ucd pre post 2.5-0 2.5 tcs pre post 2.5-0 2.5 ucd post pre 2.5-0 2.5 tcs post pre 2.5-0 2.5 post 2.5-0 2.5 ucd post post 2.5-0 2.5 tcs post post 2.5-0 pre/postup.sh wurden für die zwei Komponenten jeweils vor und nach dem preup.sh und dem postup.sh des Update aufgerufen, also preup.sh pre Version (Komponente) preup.sh (Update) preup.sh post Version (Komponente) postup.sh pre Version (Komponente) postup.sh (Update) postup.sh post Version (Komponente) * OK - Update mit zusätzlicher Komponente ohne pre/postup.sh * FAILED - Fehler im preup einer Komponenet (exit 1). Bei "univention-updater net" bekommt man dann folgende Meldung Update to = 2.5-0 Traceback (most recent call last): File "/usr/sbin/univention-updater", line 540, in ? main() File "/usr/sbin/univention-updater", line 487, in main for part, phase in updater.call_sh_files(scripts, LOGNAME, str(new_version)): File "/usr/lib/python2.4/site-packages/univention/updater/tools.py", line 1081, in call_sh_files raise ExceptionUpdaterPrecondition('Preup1 component failed', script) univention.updater.tools.ExceptionUpdaterPrecondition: ('Preup1 component failed', '/tmp/tmpJOd9VC/preupLCYS87.sh') Vielleicht könnte man hier eine "schönere" Fehlermeldung ausgeben. Wichtig wäre noch, dass der Name der Komponente erwähnt wird. TODO QA: * ucs-test * Tests mit proxy/noproxy
Bitte auch prüfen, ob die Statusdateien korrekt gesetzt werden, da sonst ggf. in UMC nicht korrekt angezeigt wird, ob das Update erfolgreich war oder nicht.
(In reply to comment #5) > Bitte auch prüfen, ob die Statusdateien korrekt gesetzt werden, da sonst ggf. > in UMC nicht korrekt angezeigt wird, ob das Update erfolgreich war oder nicht. FAILED - Updater Status Datei Nach einem Update mit Fehler im preup eine Komponente, steht in "/var/lib/univention-updater/univention-updater.status" folgendes: status=RUNNING current_version=2.4-1 type=NET next_version=2.5-0 Dadurch bekommt man in der UMC nicht mit, dass das Update abgebrochen ist. Außerdem sehe ich dann im updater.log folgende Meldungen (der Fehler wurde durch 2.5 tcs/all/preup.sh ausgelöst): 06.01.11 09:51:59 NETWORK ( ERROR ) : Error saving 2.5/maintained/2.5-0/all/preup.sh to /tmp/tmpjwB9ls/preupvmrRKP.sh 06.01.11 09:51:59 NETWORK ( ERROR ) : Error saving 2.5/maintained/2.5-0/all/postup.sh to /tmp/tmpjwB9ls/postupMAuyVk.sh 06.01.11 09:51:59 NETWORK ( ERROR ) : Error saving 2.5/maintained/component/ucd/all/preup.sh to /tmp/tmpjwB9ls/preuphMZKtR.sh 06.01.11 09:51:59 NETWORK ( ERROR ) : Error saving 2.5/maintained/component/ucd/all/postup.sh to /tmp/tmpjwB9ls/postup5cIUsT.sh 06.01.11 09:51:59 NETWORK ( ERROR ) : Error saving 2.5/maintained/component/tcs/all/preup.sh to /tmp/tmpjwB9ls/preupxUS6N5.sh 06.01.11 09:51:59 NETWORK ( ERROR ) : Error saving 2.5/maintained/component/tcs/all/postup.sh to /tmp/tmpjwB9ls/postup86vqgu.sh
Ein Abort durch das PreUp-/PostUp-Skript einer Komponente führt nicht mehr zu einem Traceback, sondern wird jetzt ordentlich angezeigt: Error: Update aborted by pre-update script of component test29479 before calling release script In /var/lib/univention-updater/univention-updater.status wird das auch eingetragen: status=FAILED errorsource=PREUP current_version=2.4-1 type=NET next_version=2.5-0 Ein passender ucs-test dafür ist 09updater/54component-scripts-fail. Wegen Bug #15144 schlagen allerdings derzeit einige Test von ucs-test fehl, deswegen mit der QA ggf. darauf warten. Die "ERROR saving file" Meldungen im Log sind auch geändert: Mit ERROR wird nur noch bei Fehlern geloggt, ansonsten als INFO für das Debugging. Was derzeit noch fehlt ist ein angepasstes Error-Reporting in tools.py#UniventionUpdater.get_current_component_status() (vorallem für UMC), wenn die Authentifizierung nicht passt: Dafür wurde/wird derzeit noch direkt /etc/apt/sources.list.d/* nach den alten Fehlermeldungen durchsucht, die es in der Form nicht mehr gibt. (siehe auch aber nicht nur Bug #21583)
(In reply to comment #7) > Was derzeit noch fehlt ist ein angepasstes Error-Reporting in > tools.py#UniventionUpdater.get_current_component_status() (vorallem für UMC), > wenn die Authentifizierung nicht passt: Dafür wurde/wird derzeit noch direkt > /etc/apt/sources.list.d/* nach den alten Fehlermeldungen durchsucht, die es in > der Form nicht mehr gibt. (siehe auch aber nicht nur Bug #21583) Das wurde jetzt auch noch umgesetzt und durch ucs-test/scripts-09_updater/{28,29mirror-}errors getestet. Das UMC-Modul benötigt allerdings ein UniventionUpdater-Objekt, was auch bei Fehlkonfiguration (server nicht per DNS auflösbar, falsche Port-Nummer oder Prefix) noch teilweise funktioniert, weshalb dort kein ConfiguratioError direkt beim Erzeugen des Objekts geworfen wird; solche Fehler werden deshalb dort (noch nicht) angezeigt. Dafür wäre größere Änderungen am UMC-Modul notwendig, was nicht mehr für 2.4 gemacht werden wird. QA: Bitte vor allem auf das UMC-Module gucken, weil das nicht durch ucs-test abgedeckt werden kann. svn23073, univention-updater_6.0.75-1.775.201103181004
* post/preup Scripte werden in richtiger Reihenfolge ausgeführt siehe comment #4 * falls eine Komponente oder post/preup Scripte einer Komponente für eine Release Update fehlen, geht es wie gewohnt weiter * Fehler in der post/preup Scripten werden in UMC/cmd erkannt und es wird eine entsprechende Fehlermeldung ausgegeben, Update wird angebrochen * Update mit proxy über UMC funktioniert ebenfalls * in der updater.log sind keine unnötigen (Fehler)Meldungen mehr zu sehen * einmal auch ein VirtualHost apt.univention.de auf das lokale Repository angelegt, Update damit funktioniert auch Changelog Eintrag vorhanden
UCS 2.4-2 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer neueren Version von UCS erneut auftreten, so sollte der Bug dupliziert werden: "Clone This Bug".
*** Bug 17560 has been marked as a duplicate of this bug. ***