Hostname setzen im Client


#1

Liebe Linuxer,
Beim synchronisieren wird der Hostname, also die Datei /etc/hostname korrekt gesetzt. So soll es sein. Nun funktioniert bei meinem Client die Angelegenheit nicht mehr. Die Hosts bekommen alle sehr merkwürdige Namen wie “no”. In der Datei /etc/hosts, die ja vom postsync-Skript 04-lcst-generate-hosts erzeugt wird, ist der richtige Name eingetragen.
Frage also: wie wird (von linbo?) die Datei /etc/hostname erzeugt?

Gruß, Uwe


#3

Hallo Uwe!
Hast du in Linbo den verkehrten Hostname oder im Ubuntu?
LG Max


#4

der im cache gespeicherte hostname scheint korrekt zu sein. Also tritt der Fehler bei Ubuntu auf. Scheint aber nur sporadisch zu sein.
Aber unabhängig davon würds mich schon interessieren, wie der hostname gesetzt wird. In einem Postsync-Skript jedenfalls nicht.


#5

Hallo Uwe,

der im cache gespeicherte hostname scheint korrekt zu sein. Also tritt
der Fehler bei Ubuntu auf. Scheint aber nur sporadisch zu sein.
Aber unabhängig davon würds mich schon interessieren, wie der hostname
gesetzt wird. In einem Postsync-Skript jedenfalls nicht.

es kommt darauf an, welches postsync script du hast.
Bitte poste das script mal und schau nach, ob du unterhalb von
/var/linbo/linuxmuster-client/ ein postsync.d Verzeichnis hast.

Hast du das default.cloop?
Welches?
16.04?

LG

Holger


#6

Hallo Holger,
Ich habe in Postsync.d die Skripte
00-lcst-fix-initrd
02-lcst-patch-sshd-config
04-lcst-generate-hosts
01-lcst-setlocalpasswords
03-lcst-fix-fstab
von denen passt keines den hostname an. Und sie laufen in der Tat und loggen auch ihre Tätigkeit. Ich habe inzwischen einfach ein weiteres gemacht, das diese Aufgabe übernimmt, dann brauche ich nicht mehr weiter mich zu grämen, dass es nciht automatisch passiert. Diese Frage ist also für mich nur noch von akademischem Interesse, wie es denn hätte sein sollen. Sie könnte relevant sein, weil möglicherweise ja noch was anderes kaputt ist.

Und nein, ich benutze nicht den default.cloop xenial, sondern einen mint-client, den ich mit den linuxmuster-client-Paketen aufgerüstet habe. Hierbei gabs noch Probleme mit dem sddm, die ich soweit auch beheben konnte. (der Loginmanager hat die Aufrufe von pam-mount getriggert).

Wenn es eine Anpassung innerhalb des musterclients ist, die dafür sorgt, dass der Hostname stimmt (wobei ich mir nicht vorstellen kann, wie das gehen soll), dann wäre das der Grund, warum es bei mir nicht funktioniert.

Bleibt also noch immer die Frage: wie wird beim Linuxclient der Hostname, also der Inhalt der Datei /etc/hostname gesetzt?

Gruß, Uwe.


#7

Hallo Uwe,

von denen passt keines den hostname an. Und sie laufen in der Tat und
loggen auch ihre Tätigkeit. Ich habe inzwischen einfach ein weiteres
gemacht, das diese Aufgabe übernimmt, dann brauche ich nicht mehr weiter
mich zu grämen, dass es nciht automatisch passiert.

wunderbar :slight_smile:

Diese Frage ist also
für mich nur noch von akademischem Interesse, wie es denn hätte sein
sollen. Sie könnte relevant sein, weil möglicherweise ja noch was
anderes kaputt ist.

das ist der richtige Ansatz.

Wenn es eine Anpassung innerhalb des musterclients ist, die dafür sorgt,
dass der Hostname stimmt (wobei ich mir nicht vorstellen kann, wie das
gehen soll), dann wäre das der Grund, warum es bei mir nicht funktioniert.

Bleibt also noch immer die Frage: wie wird beim Linuxclient der
Hostname, also der Inhalt der Datei /etc/hostname gesetzt?

leider kann ich dir die Frage nicht beantworten, da meine Installation
schon sehr alt ist und ich eine sehr frühe Version des postsync scripts
einsetze.
Ich kann dir also nur sagen, wie es bei mir ist.
Ich habe in der postsync Datei diese Einträge:

# hostname in /etc/hosts patchen
sed -i "s/HOSTNAME/$HOSTNAME/g" /mnt/etc/hosts
sed -i "s/#SERVERIP/$SERVERIP/g" /mnt/etc/hosts

Das macht es nötig, dass folgende hosts Datei auf den Client gesynct wird:

# Diese Datei wird per postsync gepatcht. Zu bearbeiten ist sie auf dem Server.
# Pfad: /var/linbo/linuxmuster-client/trusty/common/etc/hosts
# HOSTNAME wird im Postsyncskript mit dem echten Namen gepatcht
127.0.0.1    HOSTNAME

#Die nächste Zeile enthält die Hostnamen so, wie sie auf dem Server eingetragen sind...
#SERVERIP server.linuxmuster.local server
# damit CUPS zufrieden ist, muss noch diese Zeile hier dazu:
#SERVERIP  server.lokal server.local

Die Datei liegt also bei mir auf dem Server hier:
/var/linbo/linuxmuster-client/trusty/common/etc/hosts

Ich frag mal nach, wer den postsync maintaint: dann soll der sich mal
äußern :slight_smile:

LG

Holger


#8

Hi holger, ich maintain das zwar nicht, aber bin mir ziemlich sicher, dass linbo das selbst macht:

# grep hostname /var/cache/linuxmuster-linbo/linbofs64/usr/bin/linbo_cmd 
    logfile="/tmp/$(hostname)_$i"
    # save hostname for offline use
    echo "Speichere Hostnamen $(hostname) auf Cache."
    hostname > /cache/hostname
  echo "Partitionierung von $disk fehlerhaft! Details siehe $(hostname)_linbo.log."
 local fqdn="$(hostname).$domainname"
 # get hostname
  [ -s /cache/hostname ] && HOSTNAME="$(cat /cache/hostname)"
 [ -z "$HOSTNAME" ] && HOSTNAME="$(hostname)"
 # hostname
 if [ -f /mnt/etc/hostname ]; then
   echo "$HOSTNAME" > /mnt/etc/hostname
 local clientname="$(hostname)"
    if [ -s /cache/hostname ]; then
     clientname="$(cat /cache/hostname)"
  # Build new hostname
 hostname) clientname ;;

Ich hatte das auch schon, dass linbo das nicht korrekt machte.
Ich weiß aber nicht mehr wieso. Mögliche Probleme:

  • ein postsync skript endet nicht korrekt oder mit “exit” (und linbo macht sein skript nicht fertig)
  • der host ist nicht korrekt in die workstations eingetragen (duplikat des namens mit irgendwas anderem, oder so)
  • dhcp funktioniert nicht richtig

es war aber definitiv irgendwas von mir selbst produziertes, es war nie ein bug in linbo.

VG, Tobias


#9

Hallo Tobias,

hostname [ -s /cache/hostname ] && HOSTNAME="$(cat /cache/hostname)" [
-z “$HOSTNAME” ] && HOSTNAME="$(hostname)" # hostname if [ -f
/mnt/etc/hostname ]; then echo “$HOSTNAME” > /mnt/etc/hostname local
clientname="$(hostname)" if [ -s /cache/hostname ]; then
clientname="$(cat /cache/hostname)" # Build new hostname hostname)
clientname ;;|

linbo pfriemelt es in /etc/hostname auf dem Cleint (ins ubuntu rein) und
nicht in die hosts.
Die wäre also weiterhin “falsch”.
Wertet ubuntu den inzwischen nur die /etc/hostname aus und nicht mehr
die /etc/hosts?

LG

Holger


#10

Hallo,
ich bin inzwischen einen erheblichen Schritt weiter. Ich weiß jetzt, wodurch /etc/hostname gesetzt wird. Bei mir (linuxmuster-client-pakete auf linux-mint draufgestöpselt) vermurkst das linuxmuster-client-Skript in /etc/linuxmuster-client/boot.d/01-ldap die mühsam per postsync-Skript korrekt gesetzte /etc/hostname.
Und zwar ist es die Zeile

clientname=`host $clientip | awk ‘{print $5}’ | cut -d. -f1`

Damit ist es nun etwas seltsam: offenbar liefert diese Zeile clientname=no wenn 01_ldap sie aufruft. Deswegen schreibt dieses Skript wenige Zeilen später:

if [ ! -z $clientname ]; then
echo $clientname > /etc/hostname
fi

diesen idiotisch Clientnamen “no” in /etc/hostname. Seltsam wird es dadurch, dass das Skript, das wenige Millisekunden später ausgeführt wird, nämlich 02-pam_mount, mit exakt der gleichen Methode, den clientnamen zu ermitteln, Erfolg hat. 02-pam_mount allerdings ändert /etc/hostname nicht mehr, weshalb es beim falschen hostname bleibt.
Warum der Befehl host einmal Blödsinn liefert und einmal korrekt läuft, das weiß ich nicht. Möglicherweise ist die Namensauflösungsmethode, auf die host zurückgreift einfach noch nicht arbeitsfähig beim ersten Aufruf und ist dies erst beim zweiten durch 02-pam_mount.

Nachdem ich /etc/hostname per postsync-Skript setze, bin ich versucht die Zeile clientname=... zu ersetzen durch
clientname=$(cat /etc/hostname)

Was haltet ihr davon?

Gruß, Uwe.