Hostname beim Booten unter Debian Stretch ändern

1447
user2747949

Ich möchte eine Debian-Stretch-Maschine so konfigurieren, dass der Hostname beim Booten auf der Grundlage der Seriennummer der Maschine festgelegt wird. Dies ist auf die Tatsache zurückzuführen, dass das Betriebssystem auf dem Computer, den ich konfiguriere, auf mehreren anderen Computern kopiert wird und dass sie ihren (eindeutigen) Hostnamen beim Booten automatisch einrichten müssen.

Dafür habe ich einen systemd-Dienst erstellt. Der Dienst ruft ein Skript auf, das die Seriennummer des Computers überprüft, den korrekten Hostnamen für diesen Computer ermittelt und dann die beiden Dateien /etc/hostsund /etc/hostnameentsprechend bearbeitet . Ich habe den Dienst um bis zu laufen, nachdem die Dateisysteme sind bereit, und bevor die Vernetzung konfiguriert ist. Hier ist es:

[Unit] DefaultDependencies=no Requires=local-fs.target After=local-fs.target Before=network-pre.target Wants=network-pre.target  [Service] Type=oneshot ExecStart=/usr/local/bin/set-hostname.sh RemainAfterExit=yes  [Install] WantedBy=network.target 

Wenn der Computer startet, kann ich sehen, dass die beiden Dateien korrekt bearbeitet wurden. Die Eingabeaufforderung zeigt jedoch immer noch den alten Hostnamen an (der /etc/hostnamevor dem Neustart vorhanden war). Wenn ich den Befehl hostnamectlausführte, erhalte ich die folgenden Informationen:

Static hostname: new_correct_hostname Transient hostname: old_hostname 

Wo new_correct_hostnameist diejenige, die von meinem Skript generiert und in /etc/hostnameund /etc/hostsbeim Booten geschrieben wird, während old_hostnamedie Datei vor dem Neustart in dieser Datei war .

Warum wird der vorübergehende Hostname nicht korrekt aktualisiert, wenn das Netzwerk ansteigt? Gibt es einen anderen Dienst, der es einrichtet, bevor mein Skript es ändert?

3

1 Antwort auf die Frage

1
Marek Rost

Gemäß der manSeite für hostnamectl wird der vorübergehende Hostname aus der Netzwerkkonfiguration gelesen und nicht verwendet, wenn der statische Hostname konfiguriert und gültig ist.

Dies legt nahe, dass möglicherweise einige zwischengespeicherte Netzwerkkonfigurationen mit dem vorherigen Hostnamen vorhanden sind, durch die der vorübergehende Hostname auf den alten festgelegt wird. Weitere Untersuchungen richten sich nach der Methode und dem Dienst, den Sie für die Verbindung zum Netzwerk verwenden.

Wenn Sie jedoch absolut sicher sein möchten, dass Ihr Laufzeithostname richtig festgelegt ist, können Sie den Linux-Kernel entweder durch einen Befehl, /bin/hostnameder vom hostnamePaket bereitgestellt wird, oder durch manuelles Einfügen eines neuen Namens angeben /proc/sys/kernel/hostname, z. B .:

echo myhost > /proc/sys/kernel/hostname 

Jede neu geöffnete Login-Shell zeigt den aktualisierten Hostnamen an, nachdem dieser ausgeführt wurde.