Bug 28973 - Bootverfahren / Imagerollout
Bootverfahren / Imagerollout
Status: CLOSED FIXED
Product: Z_Univention Corporate Client (UCC)
Classification: Unclassified
Component: Image management
unspecified
Other Linux
: P5 normal
: UCC 1.0
Assigned To: Stefan Gohmann
Felix Botner
: interim-2
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2012-10-30 11:00 CET by Stefan Gohmann
Modified: 2013-03-26 09:14 CET (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

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Gohmann univentionstaff 2012-10-30 11:00:45 CET
Für interim-2 sollten noch weitere Punkte verbessert werden:

 - Debug Ausgabe sollte konfigurierbar sein

 - Abfangen von bekannten Fehlermeldungen

 - Testdefinition
Comment 1 Moritz Muehlenhoff univentionstaff 2012-10-31 11:27:27 CET
In einem Test hatte ich keine Festplatte in die VM eingebunden, es wurde dann trotzdem versucht ein Image zu schreiben.
Comment 2 Stefan Gohmann univentionstaff 2012-11-23 10:38:34 CET
Man kann nun "verbose=y" als cmdline Parameter übergeben. Es wird dann im Skript ein set -x gestartet.
Comment 3 Stefan Gohmann univentionstaff 2012-12-20 08:35:12 CET
Per Default werden dem UCC Client jetzt Parameter für das Remote Logging übergeben. Standardmäßig ist das Remote Logging auf UCS Systemen deaktiviert. Es kann folgendermaßen aktiviert werden:

echo -e '$ModLoad imudp\n$UDPServerRun 514\n' >>/etc/rsyslog.d/ucc.conf
ucr set security/packetfilter/udp/514/all=ACCEPT
/etc/init.d/univention-firewall restart
/etc/init.d/rsyslog restart

Die Parameter werden dem UCC Client per PXE übergeben:
ucc/pxe/append?"syslog=y syslogserver=$(get_default_ip_address)"

Zusätzlich kann noch verbose=y übergeben werden, dann wird das Skript per set -x ausgeführt.

Um Änderungen an der initrd vorzunehmen ohne die gesamte DVD neu zu bauen:
mount -o loop /var/lib/univention-client-boot/ucc-1.0-thinclient-image.img /mnt
# do stuff
chroot /mnt /usr/sbin/update-initramfs -c -k all
cp /mnt/boot/initrd.img-3.2.0-35-generic /var/lib/univention-client-boot/ucc-1.0-thinclient-image.img.initrd

Es fehlt noch eine Überprüfung der Imagegrößen: Bug #28974.
Comment 4 Felix Botner univentionstaff 2013-01-03 14:53:36 CET
(In reply to comment #3)
> Per Default werden dem UCC Client jetzt Parameter für das Remote Logging
> übergeben. Standardmäßig ist das Remote Logging auf UCS Systemen deaktiviert.
> Es kann folgendermaßen aktiviert werden:

Das gilt aber nur für den PXE Boot. Startet der Client lokal, wird das nicht automatisch gemacht (kann aber über grub/append konfiguriert werden). OK? 
 
> Zusätzlich kann noch verbose=y übergeben werden, dann wird das Skript per set
> -x ausgeführt.

Das set -x reicht nicht bis zum Update Script /tmp/upgrade_script in ucc_update(). Vielleicht sollt man das noch (in Abhängigkeit von $verbose) mit sh -x /tmp/upgrade_script starten.

 
> Um Änderungen an der initrd vorzunehmen ohne die gesamte DVD neu zu bauen:
> mount -o loop /var/lib/univention-client-boot/ucc-1.0-thinclient-image.img /mnt
> # do stuff
> chroot /mnt /usr/sbin/update-initramfs -c -k all
> cp /mnt/boot/initrd.img-3.2.0-35-generic
> /var/lib/univention-client-boot/ucc-1.0-thinclient-image.img.initrd

OK, das klappt.


Wäre es noch denkbar, dass wenn verbose und rsyslog auf dem Client aktiviert sind, die set -x Meldungen auf dem Server landen? Um Problem im initramfs  Script (scripts/ucc) nachzuvollziehen wäre das sicher hilfreich.

Ich hatte erst an so etwas gedacht, 
exec 2> >(logger)
exec 1> >(logger)
das geht aber leider nicht, da nicht die Bash verwendet wird. Denkbar wäre aber auch dies 

mountroot() {

...

test "$verbose" = "y" && set -x

if [ "$verbose" = "y" -a "$syslog" = "y" ]; then
        exec 6>&1
        exec 7>&2
        exec 1>>/tmp/aa
        exec 2>>/tmp/aa
fi

# do stuff ...

if [ "$verbose" = "y" -a "$syslog" = "y" ]; then
        exec 1>&6 6>&-
        exec 2>&7 7>&-
        logger -f /tmp/aa
fi

stop_remote_logging
Comment 5 Moritz Muehlenhoff univentionstaff 2013-01-04 13:31:42 CET
Für das Remote-Logging habe ich den separaten Bug 29923 angelegt.
Comment 6 Stefan Gohmann univentionstaff 2013-01-04 20:34:58 CET
(In reply to comment #4)
> (In reply to comment #3)
> > Per Default werden dem UCC Client jetzt Parameter für das Remote Logging
> > übergeben. Standardmäßig ist das Remote Logging auf UCS Systemen deaktiviert.
> > Es kann folgendermaßen aktiviert werden:
> 
> Das gilt aber nur für den PXE Boot. Startet der Client lokal, wird das nicht
> automatisch gemacht (kann aber über grub/append konfiguriert werden). OK? 

Das steht jetzt an dem neuen Bug, das muss einfach in die grub-Konfiguration geschrieben werden.

> > Zusätzlich kann noch verbose=y übergeben werden, dann wird das Skript per set
> > -x ausgeführt.
> 
> Das set -x reicht nicht bis zum Update Script /tmp/upgrade_script in
> ucc_update(). Vielleicht sollt man das noch (in Abhängigkeit von $verbose) mit
> sh -x /tmp/upgrade_script starten.

Wird jetzt mit sh -x aufgerufen.
 
> 
> > Um Änderungen an der initrd vorzunehmen ohne die gesamte DVD neu zu bauen:
> > mount -o loop /var/lib/univention-client-boot/ucc-1.0-thinclient-image.img /mnt
> > # do stuff
> > chroot /mnt /usr/sbin/update-initramfs -c -k all
> > cp /mnt/boot/initrd.img-3.2.0-35-generic
> > /var/lib/univention-client-boot/ucc-1.0-thinclient-image.img.initrd
> 
> OK, das klappt.
> 
> 
> Wäre es noch denkbar, dass wenn verbose und rsyslog auf dem Client aktiviert
> sind, die set -x Meldungen auf dem Server landen? Um Problem im initramfs 
> Script (scripts/ucc) nachzuvollziehen wäre das sicher hilfreich.
> 
> Ich hatte erst an so etwas gedacht, 
> exec 2> >(logger)
> exec 1> >(logger)
> das geht aber leider nicht, da nicht die Bash verwendet wird. Denkbar wäre aber
> auch dies 
> 
> mountroot() {
> 
> ...
> 
> test "$verbose" = "y" && set -x
> 
> if [ "$verbose" = "y" -a "$syslog" = "y" ]; then
>         exec 6>&1
>         exec 7>&2
>         exec 1>>/tmp/aa
>         exec 2>>/tmp/aa
> fi
> 
> # do stuff ...
> 
> if [ "$verbose" = "y" -a "$syslog" = "y" ]; then
>         exec 1>&6 6>&-
>         exec 2>&7 7>&-
>         logger -f /tmp/aa
> fi
> 
> stop_remote_logging

Problem ist, dass es dann keine normale Ausgabe mehr gibt. In einer Standard Bash würde es so funktionieren:
exec 3>&1 > >(tee -a /dev/fd/3 | logger -n "$syslogserver") 2>&1

Aber das geht in der busybox Shell nicht.

Ich habe es jetzt so ergänzt, dass im verbose-Modus immer wieder auf Return gewartet wird. Dadurch hat man mehr Möglichkeiten zu prüfen, was passiert. Optional kann man anstatt nur Return noch shell eingeben und es wird eine Shell gestartet, nach dem exit aus der shell wird normal weiter gebootet.
Comment 7 Felix Botner univentionstaff 2013-01-07 11:47:18 CET
OK, verbose=y hilft jetzt schon deutlich mehr und.
Comment 8 Moritz Muehlenhoff univentionstaff 2013-03-26 09:14:11 CET
UCC 1.0 has been released: 
http://forum.univention.de/viewtopic.php?f=26&t=2417
http://forum.univention.de/viewtopic.php?f=54&t=2418

If this error occurs again, please use "Clone This Bug".