Univention Bugzilla – Bug 16214
univention-server-join bricht bei Fehlern nicht immer ab
Last modified: 2012-07-20 15:24:22 CEST
Im Skript steht: if [ $? = 1 ]; then log 1 "E: failed to modify $1 $old_dn [$rc]" fi Return-Codes >1 werden dann nicht als Fehler gewertet.
Beispiel: die MAC-Adresse eines joinenden DC-Slave ist bereits an einem anderen System vergeben, der eigentliche Join hängt dann erst später bei "donwloading host certificate".
Beispiel2: Der join-user hat keine ausreichenden Berechtigungen den join (Änderungen am Rechnerobjekt) durchzuführen.
*** Bug 20761 has been marked as a duplicate of this bug. ***
Es ist eine spezielle Variante des Bugs aufgetreten: Wurde der Join von einem init-Skript beim Systemstart angestoßen (Projektimplementierung univention-autojoin), hing der Join bei "downloading host certificate". Wurde der Join durch den Aufruf des init-Skriptes auf einem laufenden System angestoßen, lief er problemlos durch. Ursache: Während des Systemstarts wurde beim Join die MAC-Adresse ausgewertet. Da diese bereits im UDM an einem anderen Objekt vorhanden war, schlug die Zurodnung korrekterweise fehl. Es wurde keine Fehlermeldung ausgegeben und erst der Folgefehler (host certificates) fiel auf. Auf dem laufenden System wurde keine MAC-Adresse übergeben (möglicherweise wg Xen-Konfiguration) und der Join lief durch. Allerdings wurde keine MAC-Adresse im UDM hinterlegt.
Ein Teil wurde ggf. schon mit Bug #19430 implementiert.
Auf den ersten Blick scheint die Sache doch klar zu sein: - im allerersten Kommentar wird gefordert, return codes größer als 1 auszuwerten; das passiert aber nirgends - udm gibt auch die return codes 2 ("password is to short") und 3 (OPERATION FAILED) aus - udm wird an 7 Stellen in univention-server-join aufgerufen; an 4 dieser Stellen findet keine Auswertung des rc statt und an den restlichen 3 wird der rc nur auf 1 ausgewertet Vermutlich reicht es also aus, an allen 7 Stellen die Abfrage des rc so einzubauen, dass die beiden Fälle "0" und "!= 0" erfasst sind. Quellkode daszu steckt im SVN unter udm: ucs/management/univention-directory-manager-modules/univention-cli-client). univention-server-join: ucs/management/univention-join$ vi univention-server-join Ist das Ok so oder hab ich da was falsch verstanden ?
Philip hat mir gerade erklärt, dass das script univention-server-join nur auf dem DC master ausgeführt wird, um einen beliebigen Rechner mit beliebiger IP und MAC im LDAP einzutragen. Dieses script ist NICHT dazu gedacht, auf einem Rechner mit einer anderen Rolle als DC master aufgerufen zu werden. Zum Testen reicht es deshalb aus, mit einem einzigen DC Master zu arbeiten, dessen LDAP-Einträge mit Hilfe des scripts univention-server-join geändert werden. Es ist nicht notwendig und auch NICHT sinnvoll, neben univention-server-join noch das script univention-join aufzurufen.
Das in Kommentar 1 und Kommentar 4 beschriebene Problem kann ich hier nicht nachvollziehen. Im folgenden Beispiel lege ich einen server mit einer MAC-Adresse an und wiederhole das Anlegen ein zweites Mal. Im ersten Durchgang klappt das Anlegen erwartungsgemäß, im zweiten kommt sofort eine ordentliche Fehlermeldung über die bereits existierende MAC-Adresse. Soweit läuft das script also bestens. /usr/share/univention-join/univention-server-join -hostname ein_neuer_server -role memberserver -mac '52:54:00:43:bd:58' ; echo $? univention-server-join: joins a server to an univention domain copyright (c) 2001-2012 Univention GmbH, Germany ldap_dn="cn=ein_neuer_server,cn=memberserver,cn=computers,dc=jkahrs,dc=dev" KerberosPasswd="mdVid0yF" 0 root@ucs30-64-dc-smb:~# /usr/share/univention-join/univention-server-join -hostname ein_anderer_server -role memberserver -mac '52:54:00:43:bd:58' ; echo $? univention-server-join: joins a server to an univention domain copyright (c) 2001-2012 Univention GmbH, Germany E: failed to create Member Server (2) [E: Object exists: (mac) 52:54:00:43:bd:58] 1 Da keine akuten Probleme mehr vorliegen, werde ich nur noch präventiv alle Stellen, an denen udm gerufen wird so erweitern, dass return codes ordentlich ausgewertet und aussagekräftige Fehlermeldungen von UDM weitergereicht werden.
Bitte auch sicherstellen, dass die Meldungen richtig in univention-join angezeigt werden. Der Administrator ruft beim Joinen nur univention-join auf, das triggert dann den Aufruf von univention-server-join auf dem Master.
Ich hab die Änderungen am script durchgeführt und das Paket neu gebaut. +univention-join (4.0.36-1) unstable; urgency=low + + * univention-server-join: Improved error checking (Bug #16214) + * Replaced "if [ $? = 1 ]" with "if [ $? -gt 0 ]" in several + places so that all errors reported by udm are detected + * Added such a check after "udm groups/group modify" + * Replaced internal variable name HOSTNAME with NEWHOSTNAME + because HOSTNAME is always set by default with the local + server name and this shall not be the default value to be used + * If -hostname is missing, then script now terminates with error + * If -role is missing, then script now terminates with error + * Added an exit (with error) if -role parameter is unknown + + -- Juergen Kahrs <Kahrs@univention.de> Thu, 28 Jun 2012 09:45:35 +0200 Mit dem neu gebauten Paket hab ich noch mal das aktuelle Problem (MAC-Adresse bereits vergeben wenn Rechner versucht zu joinen) nachgestellt und dabei eine ordentliche Fehlermeldung bekommen: univention-join: joins a computer to an ucs domain copyright (c) 2001-2012 Univention GmbH, Germany Insert DC Master Account : Administrator Insert DC Master Password: Search DC Master: done Check DC Master: done Stop LDAP Server: done Stop Samba 4 Server: done Search ldap/base done Start LDAP Server: done Search LDAP binddn done Sync time done Join Computer Account: done ************************************************************************** * Join failed! * * Contact your system administrator * ************************************************************************** * Message: univention-server-join: joins a server to an univention domain copyright (c) 2001-2012 Univention GmbH, Germany E: failed to create DC Backup (2) [E: Object exists: (mac) 52:54:00:43:bd:59] ************************************************************************** Im changelog des Handbuchs hab ich unter "Domain joins of UCS systems" eine Ergänzung vorgenommen.
Funktionstests - Doppelte MAC: OK Funktionstests - Keine Berechtigung: OK Funktionstests - Normaler Join: OK Changelog: OK Code Review: OK
UCS 3.0-2 has been released: http://forum.univention.de/viewtopic.php?f=54&t=1905 If this error occurs again, please use "Clone This Bug".