Seite 5 von 5

Re: Problem nach Update opsi-boot-image

Verfasst: 05 Nov 2015, 07:34
von jub
Das sieht schon besser aus! 8-)

Auf der Console wird zwar vermeldet:

Code: Alles auswählen

RTNETLINK answers: File exists
...was nun ja nicht ueberrascht.
Die dhclient.leases enthaelt anschliessend aber die gleichen Eintraege wie die dhclient.eth0.leases (von den Timestamps renew, rebind, expire natuerlich mal abgesehen; okay, die Antwort stammt auch noch vom anderen DHCP-Server).

Gruesse,
Jens

Re: Problem nach Update opsi-boot-image

Verfasst: 05 Nov 2015, 08:17
von m.radtke
im Opsi Init skript wird nämlich genau das gemacht.
Für jedes gefundene device wird statt

Code: Alles auswählen

dhclient $device
nun

Code: Alles auswählen

dhclient $device -lf /var/lib/dhcp/dhclient.leases
durchgeführt.
Dies sollte somit schon im Init Prozess dann die dhclient.leases füllen.
Wenn dem nicht so ist, muss ein anderer Weg her. Ich habe da auch schon eine Idee.
jub hat geschrieben: Die dhclient.leases enthaelt anschliessend aber die gleichen Eintraege wie die dhclient.eth0.leases (von den Timestamps renew, rebind, expire natuerlich mal abgesehen; okay, die Antwort stammt auch noch vom anderen DHCP-Server).
die DHCP identifier unterscheiden sich?

Gruß
Mathias

Re: Problem nach Update opsi-boot-image

Verfasst: 05 Nov 2015, 09:16
von jub
Mathias hat geschrieben:die DHCP identifier unterscheiden sich?
Ja, aber das ist durchaus okay. Wir haben zwei redundante DHCP-Server, die antworten duerfen.
Im weiteren Verlauf steht bei beiden der gleiche dhcp-server-identifier.

Re: Problem nach Update opsi-boot-image

Verfasst: 05 Nov 2015, 10:02
von m.radtke
ok dann frage ich mich wieso dhclient mit -lf im Opsi Init Skript nicht in /var/lib/dhclient.leases schreibt

Re: Problem nach Update opsi-boot-image

Verfasst: 05 Nov 2015, 14:39
von jub
Das OPSI-Init-Skript schreibt wohl schon nach /var/lib/dhcp/dhclient.leases, hat aber wohl noch keine Antwort parat.

Wo kommt also die dhclient.eth0.leases her?
Wenn ich nun in den laufenden Prozessen nachsehe, finde ich:

Code: Alles auswählen

dhclient eth0 -lf /var/lib/dhcp/dhclient.leases
dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
Ersterer Prozess ist der vom OPSI-Init gestartete.
(Killt man letzteren diesen, hat die dhclient.leases irgendwann den richtigen Inhalt.)

Verantwortlich fuer dhclient.eth0.leases ist der Abschnitt

Code: Alles auswählen

			try:
				execute(u'ifdown -a --exclude=lo')
			except:
				pass
			try:
				execute(u'ifup -a --exclude=lo')
			except:
				pass
in der master.py, genau genommen das ifup. Es startet in jedem Fall

Code: Alles auswählen

dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
sofern in der /etc/network/interfaces fuer eth0 dhcp konfiguriert ist.

Daher waere es m.E. wohl zweckmaessiger in der etc/init.d/opsi wieder

Code: Alles auswählen

ifup $device
zu verwenden.

Code: Alles auswählen

# diff etc/init.d/opsi.org etc/init.d/opsi
185,186c185,187
< 				dhclient $device -lf /var/lib/dhcp/dhclient.leases
< 				# trying dhclient instead of: ifup $device
---
> 				# dhclient $device -lf /var/lib/dhcp/dhclient.leases
> 				# ...trying dhclient instead of: ifup $device
> 				ifup $device
...allerdings muessen dann in der master.py wieder die '/var/lib/dhcp/dhclient.'+device+'.leases' geparst werden.


Gruesse,
Jens

Re: Problem nach Update opsi-boot-image

Verfasst: 05 Nov 2015, 17:21
von jub
Hier noch zwei Vorschlaege, wenn /etc/init.d/opsi wieder auf ifup $device anstelle von dhclient umgestellt werden soll:

usr/lib/python2.7/dist-packages/OPSI/System/Posix.py:

Code: Alles auswählen

# diff  usr/lib/python2.7/dist-packages/OPSI/System/Posix.py.org  usr/lib/python2.7/dist-packages/OPSI/System/Posix.py
66a67
> DHCLIENT_LEASES_DEVICE_FILE = '/var/lib/dhcp/dhclient.%s.leases'
569a571,572
> 		elif os.path.exists(DHCLIENT_LEASES_DEVICE_FILE%(device)):
> 			leasesFile = DHCLIENT_LEASES_DEVICE_FILE % (device)
usr/local/bin/master.py:

Code: Alles auswählen

# diff usr/local/bin/master.py.org  usr/local/bin/master.py
684,695c684,715
< 	with open('/var/lib/dhcp/dhclient.leases') as f:
< 		for line in f:
< 			line = line.strip()
< 			if line.startswith('interface'):
< 				unused,interface = line.split(None, 1)
< 				interface = interface[:-1]
< 			elif line.startswith('option dhcp-server-identifier'):
< 				unused,unused,address = line.split(None, 2)
< 				address = address[:-1]
< 			if interface and address:
< 				interfaceAddress[interface.replace('"', '')] = address
< 				interface = address = None
---
> 	if  os.path.isfile('/var/lib/dhcp/dhclient.leases'):
> 		with open('/var/lib/dhcp/dhclient.leases') as f:
> 			logger.notice(u"Parsing /var/lib/dhcp/dhclient.leases...")
> 			for line in f:
> 				line = line.strip()
> 				if line.startswith('interface'):
> 					unused,interface = line.split(None, 1)
> 					interface = interface[:-1]
> 				elif line.startswith('option dhcp-server-identifier'):
> 					unused,unused,address = line.split(None, 2)
> 					address = address[:-1]
> 				if interface and address:
> 					interfaceAddress[interface.replace('"', '')] = address
> 					interface = address = None
> 
> 	for device in ethernetDevices:
> 		logger.notice(u"Parsing /var/lib/dhcp/dhclient.%s.leases..." % device)
> 		if  os.path.isfile('/var/lib/dhcp/dhclient.'+device+'.leases'):
> 			with open('/var/lib/dhcp/dhclient.'+device+'.leases') as f:
> 				for line in f:
> 					line = line.strip()
> 					if line.startswith('interface'):
> 						unused,interface = line.split(None, 1)
> 						interface = interface[:-1]
> 					elif line.startswith('option dhcp-server-identifier'):
> 						unused,unused,address = line.split(None, 2)
> 						address = address[:-1]
> 					if interface and address:
> 						interfaceAddress[interface.replace('"', '')] = address
> 						interface = address = None
> 		else:
> 			logger.notice(u"File does not exist: /var/lib/dhcp/dhclient.%s.leases..." % device)		
699c719,720
< 			response = requests.get('https://%s:4447' % address, verify = False)
---
> 			# response = requests.get('https://%s:4447' % address, verify = False)
> 			response  = requests.get(re.sub('/rpc$','',nextserver), verify = False)
Die in der initrd vorhandene leere /var/lib/dhcp/dhclient.leases sollte dann geloescht werden.

Schlussendlich muss ich dennoch in der /etc/dhcp/dhclient.conf
  • timeout 30;
setzen.

Viele Gruesse,
Jens

Re: Problem nach Update opsi-boot-image

Verfasst: 19 Nov 2015, 08:59
von m.radtke
Hi

ich würde die Betroffenen gerne bitten das Bootimage unter
xxx
auszuprobieren.
Dies prüft nach eventuell auftretenden dhclient.'device'.leases Dateien, schreibt diese in die dhclient.leases und fährt dann fort.
Bei einem manuellen Test mit einer generierten dhclient.eth0.leases hat es geklappt.

Danke

Gruß
Mathias

EDIT: Link geändert

Re: Problem nach Update opsi-boot-image

Verfasst: 24 Nov 2015, 09:53
von m.radtke
Hier nun ein Update zu dem Bootimage:
http://download.opensuse.org/repositori ... :/testing/

Über ein Feedback würde ich mich freuen da es dann in den Master des Bootimages wandern kann.

Gruß
Mathias

Re: Problem nach Update opsi-boot-image

Verfasst: 25 Nov 2015, 10:44
von jub
Ich hatte in den letzten Tagen leider keine Gelegenheit das neue Boot-Image zu testen. Das habe ich nun mit Version 20151120-2 nachgeholt.
In der Zwischenzeit hatten meine eigenen Änderungen (s.o.) hier die Probleme behoben.

Mit dem aktualisierten Boot-Image treten die Fehler nicht mehr auf (getestet mit 32 und 64 Bit).
Aus meiner Sicht würde ich für den Bootimage-Master grünes Licht geben.

Viele Grüsse,
Jens