Bug 37771 - Final page of system setup unresponsive with remote browser using https
Final page of system setup unresponsive with remote browser using https
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: System setup
UCS 4.0
Other Linux
: P5 normal (vote)
: UCS 4.0-1-errata
Assigned To: Alexander Kläser
Erik Damrose
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2015-02-11 11:07 CET by Erik Damrose
Modified: 2015-04-30 12:32 CEST (History)
4 users (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
setup log of installation via https (158.03 KB, text/plain)
2015-02-11 11:07 CET, Erik Damrose
Details
Screenshot of browser with last requests (311.57 KB, image/png)
2015-04-17 17:36 CEST, Alexander Kläser
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Erik Damrose univentionstaff 2015-02-11 11:07:12 CET
Created attachment 6662 [details]
setup log of installation via https

I can reproduce the following behavior only when accessing the UCS system setup with https: The last system setup page ('Setup successful') does not react to any user input (i.e. clicking on finish does nothing) OR a popup informs me that the umc server could not be reached for more than 30 seconds.

The installation is finished at this point, no error occured. However, the user experience should be improved.

Reproduce-able with any UCS appliance (EC2, vmware, ...)
Comment 1 Florian Best univentionstaff 2015-02-11 12:21:35 CET
Chromium says:
 POST https://54.73.26.84/umcp/command/setup/ping net::ERR_INSECURE_RESPONSE
dojo.js:1147 POST https://54.73.26.84/umcp/command/setup/cleanup?request.preventCache=1423653226937 net::ERR_INSECURE_RESPONSE

and ends up in some JS exception when clicking on the finish button.

There were 3 setup module processes started.

The UMC-server log contains a lot (5) of these:

10.02.15 07:25:18.537  DEBUG_INIT
10.02.15 07:25:18.538  MAIN        ( PROCESS ) : Starting UMC server ...
10.02.15 07:25:18.953  DEBUG_INIT
10.02.15 07:25:18.954  MAIN        ( PROCESS ) : Reloading configuration ...
10.02.15 07:25:19.575  MAIN        ( ERROR   ) : Traceback (most recent call last):
  File "/usr/sbin/univention-management-console-server", line 210, in <module>
    umc_daemon.do_action()
  File "/usr/lib/pymodules/python2.7/daemon/runner.py", line 186, in do_action
    func(self)
  File "/usr/sbin/univention-management-console-server", line 142, in _restart
    self._start()
  File "/usr/lib/pymodules/python2.7/daemon/runner.py", line 131, in _start
    self.app.run()
  File "/usr/sbin/univention-management-console-server", line 189, in run
    self.server = Server( port = self.options.port )
  File "/usr/lib/pymodules/python2.7/univention/management/console/protocol/server.py", line 424, in __init__
    self.connection.bind(('', self.__port))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 98] Address already in use

10.02.15 07:25:19.816  DEBUG_INIT
10.02.15 07:25:19.816  MAIN        ( PROCESS ) : Reload failed: server ist not running
10.02.15 07:27:18.114  DEBUG_INIT
10.02.15 07:27:18.115  MAIN        ( PROCESS ) : Reload failed: server ist not running
10.02.15 07:28:18.716  DEBUG_INIT
10.02.15 07:28:18.717  MAIN        ( PROCESS ) : Starting UMC server ...
10.02.15 07:28:19.756  MAIN        ( ERROR   ) : Traceback (most recent call last):
  File "/usr/sbin/univention-management-console-server", line 210, in <module>
    umc_daemon.do_action()
  File "/usr/lib/pymodules/python2.7/daemon/runner.py", line 186, in do_action
    func(self)
  File "/usr/sbin/univention-management-console-server", line 142, in _restart
    self._start()
  File "/usr/lib/pymodules/python2.7/daemon/runner.py", line 131, in _start
    self.app.run()
  File "/usr/sbin/univention-management-console-server", line 189, in run
    self.server = Server( port = self.options.port )
  File "/usr/lib/pymodules/python2.7/univention/management/console/protocol/server.py", line 424, in __init__
    self.connection.bind(('', self.__port))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 98] Address already in use

Apache error log contains:
[Wed Feb 11 05:54:07 2015] [error] [client 82.198.197.8] (70007)The timeout specified has expired: proxy: error reading status line from remote server 127.0.0.1:8090, referer: https://54.73.26.84/univention-management-console/?module=setup&flavor=wizard&overview=false&username=root
[Wed Feb 11 05:54:07 2015] [error] [client 82.198.197.8] proxy: Error reading from remote server returned by /umcp/command/setup/ping, referer: https://54.73.26.84/univention-management-console/?module=setup&flavor=wizard&overview=false&username=root

→ seems the keep_alive request was killed
Comment 2 Florian Best univentionstaff 2015-02-11 12:26:42 CET
Trying to login with a seconds tab fails with (apache can't connect to the umc-webserver):
(111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8090 (127.0.0.1) failed
Comment 3 Alexander Kläser univentionstaff 2015-04-17 15:56:32 CEST
Here the last lines of apache2/access.log:
-------------------- 8< --------------------
> [...]
> 10.210.216.13 - - [17/Apr/2015:08:46:42 -0400] "POST /umcp/command/setup/ping HTTP/1.1" 200 479 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:42 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 510 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:43 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 497 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:43 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 510 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:44 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 514 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:45 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 501 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:46 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 511 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:47 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 491 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:48 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 479 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:46:49 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 492 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:47:03 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 534 "" ""
> 10.210.216.13 - - [17/Apr/2015:08:47:12 -0400] "POST /umcp/command/setup/ping HTTP/1.1" 200 479 "" ""
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "OPTIONS * HTTP/1.0" 200 130 "-" "Apache/2.2.22 (Univention) (internal dummy connection)"
> ::1 - - [17/Apr/2015:14:47:19 +0200] "GET /server-status HTTP/1.1" 200 6171 "-" "ELinks/0.12~pre5-9.40.201403212049 (textmode; Debian; Linux 3.16-ucs109-amd64 x86_64; -)"
> 10.210.216.13 - - [17/Apr/2015:08:47:03 -0400] "POST /umcp/command/setup/finished HTTP/1.1" 200 497 "" ""
-------------------- 8< --------------------

... and apache2/error.log:
-------------------- 8< --------------------
> [...]
> [Fri Apr 17 08:28:27 2015] [notice] Apache/2.2.22 (Univention) PHP/5.4.36-0.210.201502031505 mod_ssl/2.2.22 OpenSSL/1.0.1e configured -- resuming normal operations
> [Fri Apr 17 08:33:53 2015] [error] [client 10.210.216.13] File does not exist: /var/www/univention-management-console/js_$20151604130341$/umc/modules/i18n/en, referer: 
> [Fri Apr 17 08:44:43 2015] [error] [client 10.210.216.13] (70007)The timeout specified has expired: proxy: error reading status line from remote server 127.0.0.1:8090, referer: 
> [Fri Apr 17 08:44:43 2015] [error] [client 10.210.216.13] proxy: Error reading from remote server returned by /umcp/command/setup/ping, referer: 
> [Fri Apr 17 08:47:18 2015] [notice] Graceful restart requested, doing restart
> [Fri Apr 17 08:47:18 2015] [error] (9)Bad file descriptor: apr_socket_accept: (client socket)
> [Fri Apr 17 14:47:19 2015] [notice] Apache/2.2.22 (Univention) PHP/5.4.36-0.210.201502031505 mod_ssl/2.2.22 OpenSSL/1.0.1e configured -- resuming normal operations
> [Fri Apr 17 14:57:18 2015] [notice] caught SIGTERM, shutting down
> [Fri Apr 17 14:57:21 2015] [notice] Apache/2.2.22 (Univention) PHP/5.4.36-0.210.201502031505 mod_ssl/2.2.22 OpenSSL/1.0.1e configured -- resuming normal operations
-------------------- 8< --------------------

It seems that the apache server is somehow restarted → "Graceful restart requested, doing restart" which will lead to problems with the certificates. Setup.log shows the following lines:
-------------------- 8< --------------------
> [...]
> === 90_postjoin/20upgrade (2015-04-17 14:47:03) ===
> __NAME__:90_postjoin/20upgrade Upgrading the system
> __MSG__:This might take a while depending on the number of pending updates.
> [...]
> Removing univention-system-setup-boot ... 
> W: failed to convert the username messagebus to the uid
> Multifile: /etc/pam.d/common-session
> W: failed to convert the username messagebus to the uid
> Setting apache2/startsite
> File: /etc/apache2/sites-available/default
> Unsetting system/setup/prev/apache2/startsite
> Reloading web server config: apache2.
>  Removing any system startup links for /etc/init.d/univention-system-setup-boot-prepare ...
>    /etc/rc0.d/K15univention-system-setup-boot-prepare
>    /etc/rc1.d/K15univention-system-setup-boot-prepare
>    /etc/rc2.d/S15univention-system-setup-boot-prepare
>    /etc/rc3.d/S15univention-system-setup-boot-prepare
>    /etc/rc4.d/S15univention-system-setup-boot-prepare
>    /etc/rc5.d/S15univention-system-setup-boot-prepare
>    /etc/rc6.d/K15univention-system-setup-boot-prepare
>  System start/stop links for /etc/init.d/urandom already exist.
> debconf: unable to initialize frontend: Dialog
> debconf: (TERM is not set, so the dialog frontend is not usable.)
> debconf: falling back to frontend: Readline
> debconf: unable to initialize frontend: Readline
> debconf: (This frontend requires a controlling tty.)
> debconf: falling back to frontend: Teletype
> PAM configuration
> -----------------
> 
> One or more of the files /etc/pam.d/common-{auth,account,password,session} have 
> been locally modified.  Please indicate whether these local changes should be 
> overridden using the system-provided configuration.  If you decline this option,
> you will need to manage your system's authentication configuration by hand.
> 
> Override local changes to /etc/pam.d/common-*? 
> Use of uninitialized value $_[1] in join or string at /usr/share/perl5/Debconf/DbDriver/Stack.pm line 111.
> 
> pam-auth-update: Local modifications to /etc/pam.d/common-*, not updating.
> pam-auth-update: Run pam-auth-update --force to override.
> 
> Use of uninitialized value $val in substitution (s///) at /usr/share/perl5/Debconf/Format/822.pm line 83, <GEN0> line 10.
> Use of uninitialized value $val in concatenation (.) or string at /usr/share/perl5/Debconf/Format/822.pm line 84, <GEN0> line 10.
> Multifile: /etc/pam.d/common-session
> Removing openbox-themes ...
> Removing openbox ...
> [...]
-------------------- 8< --------------------
Comment 4 Alexander Kläser univentionstaff 2015-04-17 16:01:09 CEST
(In reply to Alexander Kläser from comment #3)
> [...]
> It seems that the apache server is somehow restarted → "Graceful restart
> requested, doing restart" which will lead to problems with the certificates.
> Setup.log shows the following lines:
> [...]

In these lines apache is being reloaded. This could be the cause for the certificate problem. The following lines are written in the postrm of the uss-boot package:

> ucr set apache2/startsite="$system_setup_prev_apache2_startsite"
> ucr unset system/setup/prev/apache2/startsite
> if [ -x /etc/init.d/apache2 ]; then
>     /etc/init.d/apache2 reload
> fi

The output suggests that /etc/init.d/apache2 is executable which it should not.
Comment 5 Alexander Kläser univentionstaff 2015-04-17 17:36:58 CEST
Created attachment 6837 [details]
Screenshot of browser with last requests
Comment 6 Alexander Kläser univentionstaff 2015-04-17 18:07:51 CEST
I monitored the executable state of the three server components:
-------------------- 8< --------------------
function get_state {
  if [ -x "$1" ]; then
    echo -n "1"
  else   
    echo -n "0"
  fi
}

INIT=/usr/sbin

while true; do
        echo "$(date) -- AP:$(get_state $INIT/apache2) UMC:$(get_state $INIT/univention-management-console-server) UMCW:$(get_state $INIT/univention-management-console-web-server)"
        sleep 1s
done
-------------------- 8< --------------------

... here the most important output:
-------------------- 8< --------------------
[...]
Fri Apr 17 17:31:38 CEST 2015 -- AP:0 UMC:0 UMCW:0
Fri Apr 17 17:31:39 CEST 2015 -- AP:0 UMC:0 UMCW:0
Fri Apr 17 17:31:40 CEST 2015 -- AP:1 UMC:1 UMCW:1
Fri Apr 17 17:31:41 CEST 2015 -- AP:1 UMC:1 UMCW:1
[...]
-------------------- 8< --------------------

The script 90_postjoin/20upgrade is called at 17:31:30:
-------------------- 8< --------------------
=== 90_postjoin/20upgrade (2015-04-17 17:31:30) ===
__NAME__:90_postjoin/20upgrade Aktualisiere das System
__MSG__:Abhängig von der Anzahl der austehenden Updates, kann dies einige Zeit dauern.
Setting repository/online
File: /etc/apt/mirror.list
File: /etc/apt/sources.list.d/15_ucs-online-version.list
File: /etc/apt/sources.list.d/20_ucs-online-component.list
Running upgrade on DC Master: univention-upgrade --noninteractive --updateto 4.0-99

Starting univention-upgrade. Current UCS version is 4.0-1 errata152
[...]
-------------------- 8< --------------------

And the call to univention-upgrade and thus apt-get → c.f., /var/log/apt/history.log:
-------------------- 8< --------------------
[...]
Start-Date: 2015-04-17  17:31:40
Remove: xserver-xorg-video-all:amd64 (7.7+3.60.201409251322), xserver-xorg-video-apm:amd64 (1.2.3-3.20.201403160725), xserver-xorg-video-ark:amd64 (0.7.4-1.20.201403160730), xserver-xorg-video-ati:amd64 (6.14.4-8.35.201403160737), libxcb-dri2-0:amd64 (1.8.1-2.31.201403121157), xserver-xorg-video-openchrome:amd64 (0.2.906-2.26.201403160859), xserver-xorg-video-s3virge:amd64 (1.10.4-5.21.201403160920), x11-xkb-utils:amd64 (7.7~1.11.201403141801), xserver-xorg-video-mga:amd64 (1.5.0-3.22.201403160839), xserver-xorg-video-chips:amd64 (1.2.4-2.22.201403160742), xserver-xorg-core:amd64 (1.12.4-6.102.201501151154), xserver-xorg-video-mach64:amd64 (6.9.1-2.16.201403160834), xserver-common:amd64 (1.12.4-6.102.201501151154), openbox-themes:amd64 (1.0.2.4.201403200729), xserver-xorg-video-trident:amd64 (1.3.5-1.20.201403160957), obconf:amd64 (2.0.3+20110805+debian-1.4.201403190252), xserver-xorg-video-sis:amd64 (0.10.4-1.22.201403160936), xserver-xorg-video-siliconmotion:amd64 (1.7.6-1.20.201403160932), libstartup-notification0:amd64 (0.12-1.15.201403210715), xserver-xorg-input-vmmouse:amd64 (12.9.0-1.15.201403160713), libobrender27:amd64 (3.5.0-7.4.201403200719), xserver-xorg-video-savage:amd64 (2.3.4-1.22.201403160927), xserver-xorg-video-tdfx:amd64 (1.4.4-1.16.201403160947), xserver-xorg-video-intel:amd64 (2.19.0-6.54.201403160828), xserver-xorg-input-all:amd64 (7.7+3.60.201409251322), libmtdev1:amd64 (1.1.2-1.4.201403170102), xserver-xorg-video-vmware:amd64 (12.0.2-1.20.201403161014), xserver-xorg-video-r128:amd64 (6.8.2-1.17.201403160908), xfonts-base:amd64 (1.0.3.12.201403151530), xserver-xorg-input-evdev:amd64 (2.7.0-1.30.201403160636), xserver-xorg-video-vesa:amd64 (2.3.1-1.23.201403161007), xserver-xorg-video-s3:amd64 (0.6.3-5.21.201403160916), xserver-xorg:amd64 (7.7+3.60.201409251322), openbox:amd64 (3.5.0-7.4.201403200719), libglade2-0:amd64 (2.6.4-1.16.201403200411), xserver-xorg-video-voodoo:amd64 (1.2.4-2.16.201403161019), xserver-xorg-video-fbdev:amd64 (0.4.2-4.20.201403160757), xinit:amd64 (1.3.2-1.8.201403151919), xserver-xorg-video-nouveau:amd64 (1.0.1-5.16.201403160852), xserver-xorg-video-neomagic:amd64 (1.2.6-1.21.201403160847), xserver-xorg-input-mouse:amd64 (1.7.2-3.24.201403160655), libxvmc1:amd64 (1.0.7-1.15.201403122205), libid3tag0:amd64 (0.15.1b-10.15.201403210725), xserver-xorg-video-sisusb:amd64 (0.9.4-3.20.201403160944), univention-system-setup-boot:amd64 (8.1.66-33.861.201504141216), xserver-xorg-video-tseng:amd64 (1.2.4-3.16.201403161001), xserver-xorg-video-radeon:amd64 (6.14.4-8.35.201403160737), libimlib2:amd64 (1.4.5-1.19.201403201705), xserver-xorg-video-cirrus:amd64 (1.4.0-2.26.201403160746), libaudit0:amd64 (1.7.18-1.1.34.201403132001), libxcb-util0:amd64 (0.3.8-2.10.201403150140), xserver-xorg-input-synaptics:amd64 (1.6.2-2.16.201403160708), libobt0:amd64 (3.5.0-7.4.201403200719), xserver-xorg-video-rendition:amd64 (4.2.4-3.20.201403160912), libxkbfile1:amd64 (1.0.8-1.13.201403121353), xserver-xorg-video-i128:amd64 (1.3.5-1.21.201403160817)
End-Date: 2015-04-17  17:31:50
-------------------- 8< --------------------

However, I cannot reproduce this behaviour neither by manually calling univention-upgrade, /usr/sbin/ucr set repository/online=yes, nor by calling one of the scripts in 90_postjoin.
Comment 7 Alexander Kläser univentionstaff 2015-04-17 19:47:50 CEST
Now, I understood the behaviour. In the last lines of setup-join.sh, enable-apache2-umc is called, and then scripts in appliance-hooks.d are executed. As the appliance hook 99_remove_univention_system_setup_boot will remove uss-boot, apache will be reloaded resulting in problems with the certificates.
Comment 8 Alexander Kläser univentionstaff 2015-04-17 19:50:00 CEST
BTW, we should add some clear mark before appliance hook scripts are executed, at the moment their output cannot be separated from the 90_postjoin scripts.
Comment 9 Alexander Kläser univentionstaff 2015-04-22 12:42:37 CEST
I fixed the described problem [r60063] and misused this bug to fix some usability problems that we encountered in our tests, as well.

With [r60066] and [r60064], I fixed the progress bar to be more responsive and to reach 100% (this was between 70% and 80% before). I added additional messages during the SSH key generation as this takes quite some time. I also "nulled" particular tasks which are eventually not executed (upgrade, adjoin, software installation).

At last, the live search widget is now also selecting the first search result in case the use is just clicking outside the widget (=defocussing/blurring) [r60067]. This was a frequent behaviour that we observed in our usability tests.

r60067 | Bug #37771: select first live search entry upon blur event
r60066 | Bug #37771: improve progress bar information, ensure to reach 100%
r60064 | Bug #37771: adjust info_header to allow for printing any filename
r60063 | Bug #37771: call enable-apache2-umc at the very end setup-join.sh
Comment 10 Alexander Kläser univentionstaff 2015-04-22 13:10:16 CEST
Package has been build, YAML file has been added.

r60069 | Bug #37771, Bug #35550, Bug #38293: added YAML entries
Comment 11 Erik Damrose univentionstaff 2015-04-27 12:42:56 CEST
OK: Final page is responsive with https connection
OK: Progress bar display
Reopen: As discussed, it would be great if auto completion with the first result in the live search also works when pressing <Tab>
Comment 12 Alexander Kläser univentionstaff 2015-04-27 14:48:04 CEST
(In reply to Erik Damrose from comment #11)
> OK: Final page is responsive with https connection
> OK: Progress bar display
> Reopen: As discussed, it would be great if auto completion with the first
> result in the live search also works when pressing <Tab>

Good idea, I adjusted the code to also respect the TAB key accordingly.

univention-system-setup (8.1.66-36):
r60227 | Bug #37771: select first entry from result list when pressing TAB
Comment 13 Alexander Kläser univentionstaff 2015-04-27 15:13:33 CEST
Package is built, YAML file has been updated.

ucs-4.0-1/doc/errata/staging/2015-04-21-univention-system-setup.yaml:
r60228 | Bug #37771: adjust package versions
Comment 14 Erik Damrose univentionstaff 2015-04-28 11:49:06 CEST
OK: City selection also works with <tab> key
OK: Install from dvd
OK: yaml
Verified
Comment 15 Janek Walkenhorst univentionstaff 2015-04-30 12:32:38 CEST
<http://errata.univention.de/ucs/4.0/161.html>