Problem beim Rejoin von Slaves nach backup2master

german

#1

Hi,

gestern hatte unser UCS Master adm-01 einen Totalschaden (Anwenderfehler meinerseits).

Also habe ich das backup2master Skript ausgeführt. Danach hatte ich einen neuen Master (adm-03). So weit, so gut.

Allerdings funktioniert der Rejoin der Slaves (ads-01, ads-02) nicht:

[code]$ univention-join -verbose -dcname adm-03.example.eu -dcaccount Administrator

Configure 90univention-bind-post.inst done
Configure 92univention-management-console-web-server.inst done
Configure 96univention-samba4.inst failed


  • Join failed! *
  • Contact your system administrator *

  • Message: FAILED: 96univention-samba4.inst

[/code]

$ tail -f /var/log/univention/join.log
...
++ sed -n 's/^cn: \(.*\)/\1/p'
++ ldapsearch-wrapper
++ ldapsearch -x -ZZ -LLL -D cn=ads-01,cn=dc,cn=computers,dc=example,dc=eu -y /etc/machine.secret '(&(univentionService=S4 Connector)(|(univentionServerRole=master)(univentionServerRole=backup)))' cn
+ s4connectorservicedcs=
+ '[' -z '' ']'
+ echo 'ERROR: No S4 Connector installed yet on DC Master or DC Backup.'
ERROR: No S4 Connector installed yet on DC Master or DC Backup.
+ exit 1
+ '[' 1 -ne 0 ']'
+ echo -e '\033[60Gfailed'
++ basename /usr/lib/univention-install/96univention-samba4.inst
+ failed_message 'FAILED: 96univention-samba4.inst'
+ echo ''
+ echo ''
+ echo '**************************************************************************'
+ echo '* Join failed!                                                           *'
+ echo '* Contact your system administrator                                      *'
+ echo '**************************************************************************'
+ echo '* Message:  FAILED: 96univention-samba4.inst'
+ echo '**************************************************************************'
+ exit 1
...

96univention-samba4.inst prüft an der Stelle, ob der der S4 Connector auf Master und/oder Backup installiert ist. Dabei wird das nicht auf dem Master überprüft, sondern mit ldapsearch auf dem lokalen LDAP nach einem Eintrag gesucht.

ldapsearch -x -ZZ -LLL -D "cn=ads-01,cn=dc,cn=computers,dc=example,dc=eu" -y /etc/machine.secret "(&(univentionService=S4 Connector)(|(univentionServerRole=master)(univentionServerRole=backup)))" cn

ist leer - daher die Fehlermeldung. Wie werden diese Einträge gesetzt?

Auf dem Master läuft der S4 Connector. Allerdings gibt es in /var/log/univention/connector-s4.log Fehlermeldungen:

17.12.2015 11:21:46,647 LDAP (PROCESS): sync to ucs: Resync rejected dn: DC=@,DC=33.31.172.in-addr.arpa,CN=MicrosoftDNS,CN=System,DC=example,DC=eu 17.12.2015 11:21:46,650 LDAP (PROCESS): sync to ucs: [ dns] [ modify] zoneName=33.31.172.in-addr.arpa,cn=dns,dc=example,dc=eu 17.12.2015 11:21:46,652 LDAP (ERROR ): Unknown Exception during sync_to_ucs 17.12.2015 11:21:46,652 LDAP (ERROR ): Traceback (most recent call last): File "/usr/lib/pymodules/python2.7/univention/s4connector/__init__.py", line 1438, in sync_to_ucs result = self.property[property_type].ucs_sync_function(self, property_type, object) File "/usr/lib/pymodules/python2.7/univention/s4connector/s4/dns.py", line 1448, in con2ucs ucs_zone_create(s4connector, object, dns_type) File "/usr/lib/pymodules/python2.7/univention/s4connector/s4/dns.py", line 1221, in ucs_zone_create zone.modify() File "/usr/lib/pymodules/python2.7/univention/admin/handlers/__init__.py", line 364, in modify return self._modify(modify_childs,ignore_license=ignore_license) File "/usr/lib/pymodules/python2.7/univention/admin/handlers/__init__.py", line 959, in _modify self.lo.modify(self.dn, ml, ignore_license=ignore_license) File "/usr/lib/pymodules/python2.7/univention/admin/uldap.py", line 423, in modify raise univention.admin.uexceptions.ldapError(_err2str(msg), original_exception=msg) ldapError: Type or value exists: nSRecord: value #0 provided more than once

UCS ist in version 4.1-0 errata29 installiert

Danke,

Clifford


#2

Das »-D cn=ads01…« legt nicht fest, welcher LDAP-Server abgefragt wird, sondern legt die Bind-DN fest, also praktisch der Loginname. In einer UCS-Domäne verfügt jeder einzelne Server über einen Account im LDAP (sein Rechnerobjekt), und das wird bei jeder LDAP-Abfrage als Loginname verwendet.

Der Hostname wird in dem ldapsearch-Befehl gar nicht explizit angegeben (das wäre »-h hostname« oder »-H ldap://hostname«). Somit wird also der Standardhostname verwendet, der in dem Moment in »/etc/ldap/ldap.conf« steht (»URI …«).

Bitte führen Sie mal auf dem neuen DC Master ehemals DC Backup den folgenden Befehl aus, und posten Sie die Ausgabe:

univention-ldapsearch '(&(univentionService=S4 Connector)(|(univentionServerRole=master)(univentionServerRole=backup)))' cn sn

Sie sollten außerdem sicherstellen, dass auf dem neuen DC Master das Paket »univention-s4-connector« installiert ist.


#3

Hallo Herr Bunkus,

danke für die Erklärung/Richtigstellung des ldapsearch Befehls.

Die Ausgabe des univention-ldapsearch Befehls auf dem Master ist:

[code]@adm-03$ univention-ldapsearch ‘(&(univentionService=S4 Connector)(|(univentionServerRole=master)(univentionServerRole=backup)))’ cn sn

extended LDIF

LDAPv3

base <dc=numberfour,dc=eu> (default) with scope subtree

filter: (&(univentionService=S4 Connector)(|(univentionServerRole=master)(univentionServerRole=backup)))

requesting: cn sn

search result

search: 3
result: 0 Success

numResponses: 1[/code]

univention-s4-connector ist installiert

@adm-03$ dpkg -s univention-s4-connector Package: univention-s4-connector Status: install ok installed Priority: optional Section: univention Installed-Size: 358 Maintainer: Univention GmbH <packages@univention.de> Architecture: all Version: 10.0.1-1.587.201510292132

Gruß,

Clifford


#4

Hallo,

Eigentlich sollte sich der backup2master Skript darum kümmern:

    359 # Remove the S4 Connector service entry from the old DC master
    360 master_dn="$(ldapsearch -x -ZZ -D "$ldap_hostdn" -y /etc/machine.secret '(&(univentionServerRole=master)(univentionService=Samba 4)(univentionService=S4 Connector))' dn | sed -ne 's|dn: ||p')"
    361 if [ -n "$master_dn" ]; then
    362         univention-directory-manager computers/domaincontroller_master modify --dn "$master_dn" --remove service="S4 Connector"
    363         if [ "$(dpkg-query -W -f='${Status}\n' univention-s4-connector 2>/dev/null)" = "install ok installed" ]; then
    364                 # reconfigure S4 connector
    365                 ucr unset connector/s4/autostart
    366                 cat /var/univention-join/status | grep -v "^univention-s4-connector " > /var/univention-join/status.temp
    367                 mv /var/univention-join/status.temp /var/univention-join/status

er löscht den “S4 Connector” Dienst am alten DC Master und erzwingt dann das nochmalige Ausführen des Join-Skriptes des Paketes “univention-s4-connector”, wenn es installiert ist. Wenn das aus irgendeinem Grund fehlgeschlagen ist, müßte es entweder im /var/log/univention/backup2master.log stehen oder im Join-Log des Masters. Ist nach dem Hochstufen der Join-Status ok gewesen, oder sagt

univention-check-join-status

daß noch Skripte nachgeholt werden müssen?

Wenn dort alles ok ist, wäre es einen Versuch wert, die Eigenschaften des adm-03 aufzuschlagen und unter “erweiterte Eigenschaften” -> “Dienste” den Dienst “S4 Connector” noch hinzuzufügen.

viele Grüße
Frank Greif.