Bug 21127 - preup/postup-Skripte für Components
preup/postup-Skripte für Components
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Update - univention-updater
UCS 2.4
Other Linux
: P5 normal (vote)
: UCS 2.4-2
Assigned To: Philipp Hahn
Felix Botner
:
: 17560 (view as bug list)
Depends on: 18393
Blocks: 21098
  Show dependency treegraph
 
Reported: 2011-01-07 09:18 CET by Sönke Schwardt-Krummrich
Modified: 2012-04-25 14:10 CEST (History)
1 user (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments
Create Repository for component {pre,post}up.sh (3.86 KB, text/plain)
2011-02-04 11:46 CET, Philipp Hahn
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Sönke Schwardt-Krummrich univentionstaff 2011-01-07 09:18:10 CET
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.
Comment 1 Philipp Hahn univentionstaff 2011-02-04 11:44:02 CET
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.
Comment 2 Philipp Hahn univentionstaff 2011-02-04 11:46:49 CET
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
Comment 3 Philipp Hahn univentionstaff 2011-02-21 09:52:26 CET
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.
Comment 4 Felix Botner univentionstaff 2011-02-28 10:44:38 CET
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
Comment 5 Sönke Schwardt-Krummrich univentionstaff 2011-02-28 10:52:35 CET
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.
Comment 6 Felix Botner univentionstaff 2011-02-28 11:13:13 CET
(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
Comment 7 Philipp Hahn univentionstaff 2011-03-11 09:42:18 CET
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)
Comment 8 Philipp Hahn univentionstaff 2011-03-18 10:28:34 CET
(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
Comment 9 Felix Botner univentionstaff 2011-03-22 17:18:54 CET
   * 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
Comment 10 Sönke Schwardt-Krummrich univentionstaff 2011-04-04 15:47:57 CEST
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".
Comment 11 Sönke Schwardt-Krummrich univentionstaff 2012-04-25 14:10:38 CEST
*** Bug 17560 has been marked as a duplicate of this bug. ***