[Gelöst] init-Script für isc-dhcpd schreiben - wie?

silanea

Neuer User
Mitglied seit
18 Jan 2013
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Hallo!

Ich habe seit einer Woche eine Fritz!Box Fon 7390 im Haus, seit fünf Tagen rödelt sie unter Freetz-trunk und übernimmt nun Schritt für Schritt die Aufgaben meines altgedienten Ubuntu-Servers. Ich finde mich unter Linux einigermaßen zurecht, auch den Cross-Compile des isc-dhcpd auf der Freetz-VM habe ich nach einer langen Nacht voll man-pages und Rotwein hinbekommen. Ich scheitere aber momentan noch an den Eigenheiten des Freetz-Unterbaus, der sich ja doch gehörig von einer "handelsüblichen" Distribution unterscheidet.

Konkret möchte ich ein init-Script für meinen isc-dhcpd schreiben. Ausgangslage:

Binary: /usr/sbin/dhcpd
Konfiguration: /etc/dhcp/dhcpd.conf
Lease-File: /var/lib/dhcp/dhcpd.leases

Ich kann dhcpd von Hand mit
> /usr/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf
starten, er läuft einwandfrei.

Als Vorlage dienen mir das Debian-init-Script und rc.openntpd. Bislang verstehe ich noch nicht so ganz, wie modlib, modreg usw. zusammenarbeiten, und eine vernünftige Dokumentation konnte ich leider auch nicht auftun, deshalb möchte ich euch um etwas Hilfestellung bitten.

Aus der openntpd-Vorlage habe ich folgendes zusammengeschustert:
Code:
#!/bin/sh

DAEMON=isc-dhcpd
DAEMON_BIN=dhcpd
. /etc/init.d/modlibrc
$CONF_NAME=/etc/dhcp/dhcpd.conf

config() {
	modlib_config
	[ -e "/var/lib/dhcp" ] || mkdir -p /var/lib/dhcp
	[ -e "/etc/dhcp" ] || mkdir -p /etc/dhcp
}

start() {
	DAEMON_ENV=""
	modlib_startdaemon $DAEMON_BIN -cf /etc/dhcp/dhcpd.conf
}

case $1 in
	""|load)
		modlib_add_user_and_group dhcp
		chown dhcp /var/lib/dhcp -R
		chmod 0700 /var/lib/dhcp -R

		modreg cgi 'isc-dhcpd' 'isc-dhcpd'
		modreg daemon $DAEMON
		modreg file $DAEMON conf 'Konfiguration' 0 "/etc/dhcp/dhcpd.conf"
		modlib_start $ISC_DHCPD_ENABLED
		;;
	unload)
		modunreg file $DAEMON
		modunreg daemon $DAEMON
		modunreg cgi $DAEMON
		modlib_stop
		;;
	start)
		modlib_start
		;;
	stop)
		modlib_stop
		;;
	restart)
		modlib_restart
		;;
	status)
		modlib_status
		;;
	*)
		echo "Usage: $0 [load|unload|start|stop|restart|status]" 1>&2
		exit 1
		;;
esac

exit 0

Darauf erhalte ich "Error [isc-dhcpd]: not configured.". Im Syslog taucht überhaupt nichts auf. Wie gesagt: Manuell kann ich den dhcpd starten, die Konfigurationsdatei existiert, die Lease-Datei existiert, sollte also alles gehen. Mit der wenig hilfreichen Fehlermeldung komme ich aber nicht weiter. Was genau wird denn dort geprüft, was muss ich anlegen/konfigurieren damit der Dienst korrekt erkannt wird?

Schon mal herzlichen Dank!

Flo
 
Zuletzt bearbeitet:
Schau mal in die Sourcen. Du musst das Paket mit modreg registrieren.

Gruß
Oliver
 
Der Fehler kommt, weil der Aufruf von "modlibrc" versucht, nach eine Config-Datei (eine .cfg Datei) nach Freetz-Manier (siehe weiter unten) auszuwerten, die aber nicht existiert.

Auch musst du dafür sorgen, dass dein "config()" auch die Konfigurationsdatei dort ablegt, wo "modlib start" es erwartet...

Normalerweise gibt es dafür ein Skript "/etc/default.<paket>/<paket>_conf", was diese Datei (Standard: /mod/etc/<paket>.conf).

Bei dir hast du versucht, was mit CONF_NAME zu machen, dies ist aber der Name für eine "Freetz-Config" (.cfg), die Variablen setzt (so wie export FREETZ_PROGRAM_PARAM1="Parameter").
Zudem noch ein Hinweis: Da ist wohl ein "$" am Anfang zu viel (NICHT: $CONF_NAME= sondern CONF_NAME=).

Dann: Wenn du eine editierbare Datei haben willst, so kann die nicht unter /etc/ liegen (sofern du nicht beim Erzeugen der FW dort einen Link auf den Beschreibbaren Bereich gelegt hast, denn das ist ein schreibgeschützter Bereich).
Du könntest z.B. /tmp/flash/isc-dhcp.conf nehmen, das sollte klappen. Um eine "Config-Datei" im Freetz zu registrieren, brauchst du ebenfalls ein "Template" im default Ordner...

Schau doch mal hier im Wiki vorbei, das sollte etwas helfen, ansonsten ist der Quelltext zum modlibrc gut kommentiert.
 
Herzlichen Dank euch beiden, mit euren Hinweisen ist mir erst mal weitergeholfen. :)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.