PXE Netboot: Wie Hostname per DHCP zuweisen?

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
derdave
Beiträge: 13
Registriert: 13.07.2014 09:13:49

PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von derdave » 13.07.2014 09:34:14

Hallo Forum,

ich habe einen Server mit Debian 7. Es läuft darauf ein NFS, in dem ein weiteres Debian 7 liegt, von dem Clients per PXE booten.
Funktioniert auch alles wunderbar, allerdings haben natürlich alle Clients denselben Hostnamen, und zwar den, der in /etc/hostname steht.

Man kann ja per Kernelparameter einen Hostnamen mitgeben, der wird dann aber irgendwie nicht genutzt. Ich habe mir das Skript angeschaut, das hier in Abschnitt 3.5 vorgeschlagen wird:
http://www.cs.cmu.edu/~dlr/debian_netboot_v1.2.pdf

Code: Alles auswählen

#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
set_hostname() {
      recoveredName="\‘grep ’host-name ’ /var/run/dhclient.eth0.leases \\
        | sed -e ’s/^.*host-name \"//’ -e ’s/\"\;$//’ \\
        | tail -1\‘"
      if [ -z \$recoveredName ]; then
        recoveredName="anonymous"
fi
      echo \$recoveredName > /var/run/hostname
    }
    case "\$1" in
      start)
        echo "Recovering hostname from dhcp lease..."
        set_hostname
        if [ -f /var/run/hostname ]; then
          cat /var/run/hostname
/etc/init.d/hostname.sh start
        else
          echo "Hostname recovery failed."
        fi
;; *)
;; esac
    : exit 0
Das liest den Hostnamen aus dem DHCP-Lease unter /var/run/... aus und setzt ihn in /etc/hostname.

Das sollte ja funktionieren, aber dann muss doch noch die /etc/hosts mit angepasst werden, oder?

Auf der Debian-Mailingliste wurde so etwas ähnliches schon gefragt und ähnlich gelöst:
https://lists.debian.org/debian-user/20 ... 00928.html
Wobei ich die /etc/hosts nicht wegschmeißen würde sondern in die Grundkonfiguration einfach einen definierten fallback-Hostnamen setzen und den dann per sed überschreiben würde.


Irgendwie klingt das für mich sehr nach Frickelei, gibt es da keine elegantere Lösung?

derdave
Beiträge: 13
Registriert: 13.07.2014 09:13:49

[GELÖST] Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von derdave » 20.07.2014 09:43:42

So,

die Zahl der Views auf den Thread spricht für mich dafür, dass es durchaus Interesse an dem Problem gibt, aber scheinbar keiner eine wirkliche Lösung parat hat :)

Ich habe es jetzt jedenfalls gelöst, und zwar folgendermaßen:

Den Clients übergebe ich beim Booten per PXE direkt eine IP-Adresse und einen Hostnamen. Die Fritzbox scheint keine Hostnamen zu verteilen, selbst wenn sie das Gerät kennt und ein individueller Name eingestellt ist.
Die /etc/hosts und /etc/hostname sind nun Symlinks auf /mnt/hostconf. Unter /mnt/hostconf wird per fstab ein 1MB großes tmpfs gemountet. Das stellt sicher, dass jeder PXE-Client seine eigenen hostname und hosts hat.
Ich den Code aus den von mir zitierten Quellen genommen und daraus ein init-Skript gebaut. So ist es möglich, das Skript möglichst früh schon beim Booten laufen zu lassen. Der Hostname ist dem Rechner ja bereits als Kernelparameter übergeben worden. Falls das nicht der Fall sein sollte oder irgendwas schief läuft, wird als Fallback-Hostname einfach localhost benutzt.

Jetzt melden sich die Clients schön mit ihrem Hostnamen bei der Fritzbox und werden automatisch in den DNS der Fritzbox aufgenommen. Ich muss nur noch schauen, warum der syslog den Hostnamen nicht übernimmt...

Code: Alles auswählen

#! /bin/sh
### BEGIN INIT INFO
# Provides:          pxehostname
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      
# Short-Description: Hostnamesestter
# Description:       Setzt den Hostnamen aus DHCP

### END INIT INFO

# Author: <foobar@baz.org>
#


# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=pxehostname
#DAEMON=/usr/sbin/$NAME
#DAEMON_ARGS="--options args"
#PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
	# Return
	#   0 if daemon has been started
	#   1 if daemon was already running
	#   2 if daemon could not be started
	
    log_action_begin_msg  "Setze Hostname aus DHCP-Lease"
        set_hostname
        if [ -f /mnt/hostconf/hostname ]; then
          #cat /mnt/hostconf/hostname
          /etc/init.d/hostname.sh start
          rm -f /mnt/hostconf/hosts
          echo "127.0.0.1    localhost" >> /mnt/hostconf/hosts
          echo "127.0.1.1    "${hname}"
   " >> /mnt/hostconf/hosts
    echo "" >> /mnt/hostconf/hosts
    echo "# The following lines are desirable for IPv6 capable hosts
">> /mnt/hostconf/hosts
    echo "::1     localhost ip6-localhost ip6-loopback" >> /mnt/hostconf/hosts
    echo "ff02::1 ip6-allnodes" >> /mnt/hostconf/hosts
    echo "ff02::2 ip6-allrouters" >> /mnt/hostconf/hosts
    log_action_end_msg 0
        else
          log_action_msg "Hostname recovery failed."
          log_action_end_msg -1
        fi

	return 0
}

#
# Function that stops the daemon/service
#
do_stop()
{
	# Return
	#   0 if daemon has been stopped
	#   1 if daemon was already stopped
	#   2 if daemon could not be stopped
	#   other if a failure occurred
	return 0
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
	#
	# If the daemon can reload its configuration without
	# restarting (for example, when it is sent a SIGHUP),
	# then implement that here.
	#
	#start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
	return 0
}

set_hostname() {
hname=$(grep HOSTNAME /var/run/net-eth0.conf | sed -e "s/HOSTNAME=//" -e "s/'//g" | tail -1)

      if [ -z $hname ]; then
        hname="localhost"
fi
		rm -f /mnt/hostconf/hostname
      echo $hname > /mnt/hostconf/hostname
    }

case "$1" in
  start)
	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  stop)
	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  status)
	status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
	;;
  #reload|force-reload)
	#
	# If do_reload() is not implemented then leave this commented out
	# and leave 'force-reload' as an alias for 'restart'.
	#
	#log_daemon_msg "Reloading $DESC" "$NAME"
	#do_reload
	#log_end_msg $?
	#;;
  #restart|force-reload)
	#
	# If the "reload" option is implemented then remove the
	# 'force-reload' alias
	#
	#log_daemon_msg "Restarting $DESC" "$NAME"
	#do_stop
	#case "$?" in
	#  0|1)
	#	do_start
	#	case "$?" in
	#		0) log_end_msg 0 ;;
	#		1) log_end_msg 1 ;; # Old process is still running
	#		*) log_end_msg 1 ;; # Failed to start
	#	esac
	#	;;
	#  *)
	#	# Failed to stop
	#	log_end_msg 1
	#	;;
	#esac
	#;;
  *)
	#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
	echo "Usage: $SCRIPTNAME {start|stop}" >&2
	exit 3
	;;
esac

:




derdave
Beiträge: 13
Registriert: 13.07.2014 09:13:49

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von derdave » 20.07.2014 10:01:28

Nachtrag: ein
/etc/init.d/rsyslogd force-reload

bringt die Änderung des Hostnamens in syslog.

poncho
Beiträge: 106
Registriert: 23.12.2007 19:22:35

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von poncho » 22.07.2014 09:23:27

Hey,
ich habe zugegebenermaßen den Thread nur überflogen. Du hast ja eine Lösung gefunden.

Ich stand vor einer Weile vor dem selben Problem und hab es so gelöst. Bei mir holte ein Script beim Booten den Hostnamen aus dem DNS und startet rsyslog neu. Hat funktioniert, war aber nicht unbedingt schön.

Gerade diese Woche hab ich dann mit unseren Leuten vom Rechenzentrum gesprochen und sie haben im DHCP-Server die Host-Name-Option aktiviert. Im Ubuntu-Client musste ich noch ein DHCP-Hook-Script einrichten, welches auch den Hostname im System setzt. So wird nun der Hostname wunderbar beim Booten gesetzt und auch die syslog stimmt ohne extra reload und große Frickelei.

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von habakug » 22.07.2014 09:40:20

Hallo!

Ja, hier ist es auch so gelöst [1]. Das ist schon deutlich weniger Aufwand.

Gruss, habakug

[1] http://www.debian-administration.org/ar ... g_out_labs
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
TBT
Beiträge: 923
Registriert: 18.06.2003 08:39:36
Kontaktdaten:

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von TBT » 22.07.2014 16:26:22

riesen Aufwand für eine Kleinigkeit?

mach einfach die /etc/hostname leer (oder löschen und touch)
und der Hostname wird automatisch beim booten auf den DHCP Namen
gesetzt, ganz ohne extra Skripte :D

poncho
Beiträge: 106
Registriert: 23.12.2007 19:22:35

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von poncho » 22.07.2014 16:59:04

TBT hat geschrieben:riesen Aufwand für eine Kleinigkeit?

mach einfach die /etc/hostname leer (oder löschen und touch)
und der Hostname wird automatisch beim booten auf den DHCP Namen
gesetzt, ganz ohne extra Skripte :D
Sicher? Ich glaube nicht, dass das bei Debian anders ist als bei Ubuntu und dort wird bei Ubuntu 12.04 schlicht kein Hostname gesetzt.

Benutzeravatar
TBT
Beiträge: 923
Registriert: 18.06.2003 08:39:36
Kontaktdaten:

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von TBT » 22.07.2014 16:59:53

100% mache ich seit Jahren so mit 150 Thinclient und PXE/TFTP Boot

derdave
Beiträge: 13
Registriert: 13.07.2014 09:13:49

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von derdave » 22.07.2014 19:02:26

TBT hat geschrieben:riesen Aufwand für eine Kleinigkeit?

mach einfach die /etc/hostname leer (oder löschen und touch)
und der Hostname wird automatisch beim booten auf den DHCP Namen
gesetzt, ganz ohne extra Skripte :D
Was natürlich nur funktioniert wenn der DHCP-Server das als Option mit übergibt...

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: PXE Netboot: Wie Hostname per DHCP zuweisen?

Beitrag von ThorstenS » 22.07.2014 21:59:12

Man kann auch einfach use-host-decl-names on; für die Gruppe setzen, dann muss die host-name option nicht in jeder Host-Definition gesetzt werden. Schau mal in die dhcpd.conf dazu.
Debian und Ubuntu machen bei der Netzwerkinitialisierung einiges anders, da muss man schon genau hinschauen und kann (leider) nicht pauschal sagen, dass alles was unter debian zur Verfügung steht auch bei ubuntu funktioniert und vice versa.

Antworten