Hostnamen richtig setzen - Fedora 20 auf Amazon EC2

Hostnamen richtig setzen - Fedora 20 auf Amazon EC2

Kontext

Ich habe einFedora 20 Cloud-Imageläuft auf Amazon EC2 (im Folgenden „Instanz“ genannt). Und ich bin mir nicht sicher, ob ich den Hostnamen dauerhaft festlegen soll.

Ziel

In diesem Fall möchte ich den Hostnamen der Instanz aufpenpen.homelinux.org. (Dieser Name wird auch bei DynDNS mittels registriert ddclient, aber das ist ein anderer Aspekt, der uns hier nicht interessiert.)

Der Hostname kann natürlich nach dem Booten manuell festgelegt werden ( hostnamectlunter anderem mit). Wir möchten jedoch, dass der richtige Hostname vor der ersten Anmeldung festgelegt ist.

Um den Hostnamen dauerhaft zu konfigurieren, würde man traditionell den Inhalt von ändern /etc/hostname. Leiderdas geht hier nicht.

Standardmäßiges Systemverhalten

Standardmäßig setzt die Instanz ihren Hostnamen auf einen internen EC2-Namen. Nach dem Booten können wir uns alle kleinen verschiedenen Stellen ansehen, die den Hostnamen ergeben, und wir finden:

Kernel hostname via 'sysctl'                      : ip-10-164-65-105.ec2.internal
Kernel domainname via 'sysctl'                    : (none)
File '/etc/hostname'                              : contains 'ip-10-164-65-105.ec2.internal'
File '/etc/sysconfig/network'                     : exists but has no 'HOSTNAME' line
According to the shell                            : HOSTNAME = ip-10-164-65-105.ec2.internal
Nodename given by 'uname --nodename'              : ip-10-164-65-105.ec2.internal
Hostname ('hostname')                             : ip-10-164-65-105.ec2.internal
Short hostname ('hostname --short')               : ip-10-164-65-105
NIS domain name ('domainname')                    : (none)
YP default domain ('hostname --yp')               : [hostname --yp failed]
DNS domain name ('hostname --domain')             : ec2.internal
Fully qualified hostname ('hostname --fqdn')      : ip-10-164-65-105.ec2.internal
Hostname alias ('hostname --alias')               : 
By IP address ('hostname --ip-address')           : 10.164.65.105
All IPs ('hostname --all-ip-addresses')           : 10.164.65.105 
All FQHNs via IPs ('hostname --all-ip-addresses') : ip-10-164-65-105.ec2.internal 
Static hostname via 'hostnamectl'                 : ip-10-164-65-105.ec2.internal
Transient hostname via 'hostnamectl'              : ip-10-164-65-105.ec2.internal
Pretty hostname via 'hostnamectl'                 : 

Versuchen wir also, in /etc/hostname zu schreiben ...

Schreibt man den gewünschten Hostnamen in /etc/hostname, geht diese Änderung beim nächsten Booten wieder verloren. Betrachten wir dazu den Bootvorgang, der von durchgeführt wird systemd.

Beispielausführung

Schreiben Sie rorororoor.homelinux.orgin /etc/hostnameund starten Sie dann neu.

Verwenden vonTagebuchwir finden (beachten Sie, dass die Protokollzeilen nicht vollständig nach Zeit geordnet sind):

Der Bootvorgang beginnt mit dem Hostnamen alslokaler Hostwechselt dann zu root, woraufhin der Hostname wirdrorororoor.homelinux.org.

Dec 26 15:12:08 localhost systemd[1]: Starting Cleanup udevd DB...
Dec 26 15:12:08 localhost systemd[1]: Started Cleanup udevd DB.
Dec 26 15:12:08 localhost systemd[1]: Starting Switch Root.
Dec 26 15:12:08 localhost systemd[1]: Reached target Switch Root.
Dec 26 15:12:08 localhost systemd[1]: Starting Switch Root...
Dec 26 15:12:08 localhost systemd[1]: Switching root.
Dec 26 15:12:08 localhost systemd-journal[67]: Journal stopped
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journal[155]: Runtime journal is using 8.0M
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journal[155]: Runtime journal is using 8.0M
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journald[67]: Received SIGTERM
...........
Dec 26 15:12:12 rorororoor.homelinux.org kernel: SELinux: initialized
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journal[155]: Journal started
Dec 26 15:12:08 rorororoor.homelinux.org systemd-cgroups-agent[128]: Failed to get D-Bus connection: Failed to connect to socket /run/systemd/private: No such file or directory
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: systemd 208 running in system mode.
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: Detected virtualization 'xen'.
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: Set hostname to <rorororoor.homelinux.org>.
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: Failed to open private bus connection: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
Dec 26 15:12:11 rorororoor.homelinux.org systemd[1]: Mounted Debug File System.

Wir sehen, dass systemdder Hostname aufrorororoor.homelinux.org, offensichtlich erfolgreich, da sich die Host-Spalte des Protokolls ändert. Es werden einige Fehler ausgegeben, möglicherweise weil hostnamectlDBus zu diesem Zeitpunkt nicht kontaktiert werden kann.

Ich bin nicht sicher, wer hier die Namenseinstellung vornimmt; irgendein interner Teil von systemd? Wie dem auch sei, wenn wir das Journal weiter durchgehen, stellen wir fest, dass der Hostname ziemlich bald wieder auf den internen EC2-Namen zurückgesetzt wird:

Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] util.py[DEBUG]: Running command ('resize2fs', '/dev/xvda1') with allowed return codes [0] (shell=False, capture=True)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] cc_resizefs.py[DEBUG]: Resizing took 0.067 seconds
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] cc_resizefs.py[DEBUG]: Resized root filesystem (type=ext4, val=True)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] helpers.py[DEBUG]: config-set_hostname already ran (freq=once-per-instance)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] helpers.py[DEBUG]: Running config-update_hostname using lock (<cloudinit.helpers.DummyLock object at 0x2559210>)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] cc_update_hostname.py[DEBUG]: Updating hostname to ip-10-164-65-105.ec2.internal (ip-10-164-65-105)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] util.py[DEBUG]: Running command ['hostname'] with allowed return codes [0] (shell=False, capture=True)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] __init__.py[DEBUG]: Attempting to update hostname to ip-10-164-65-105.ec2.internal in 1 files
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] util.py[DEBUG]: Running command ['hostnamectl', 'set-hostname', 'ip-10-164-65-105.ec2.internal'] with allowed return codes [0] (shell=False, capture=True)
Dec 26 15:12:33 rorororoor.homelinux.org dbus-daemon[226]: dbus[226]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Dec 26 15:12:33 rorororoor.homelinux.org dbus[226]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Dec 26 15:12:34 rorororoor.homelinux.org systemd[1]: Starting Hostname Service...
Dec 26 15:12:34 rorororoor.homelinux.org dbus-daemon[226]: dbus[226]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 26 15:12:34 rorororoor.homelinux.org dbus[226]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 26 15:12:34 rorororoor.homelinux.org systemd[1]: Started Hostname Service.
Dec 26 15:12:34 rorororoor.homelinux.org systemd-hostnamed[598]: Changed static host name to 'ip-10-164-65-105.ec2.internal'
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd-hostnamed[598]: Changed host name to 'ip-10-164-65-105.ec2.internal'
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Started Initial cloud-init job (metadata service crawler).
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Starting Cloud-config availability.
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Reached target Cloud-config availability.
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Starting Apply the settings specified in cloud-config...
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] helpers.py[DEBUG]: Running config-update_etc_hosts using lock (<cloudinit.helpers.DummyLock object at 0x2559350>)
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] cc_update_etc_hosts.py[DEBUG]: Configuration option 'manage_etc_hosts' is not set, not managing /etc/hosts in module update_etc_hosts
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] helpers.py[DEBUG]: config-rsyslog already ran (freq=once-per-instance)
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] helpers.py[DEBUG]: config-users-groups already ran (freq=once-per-instance)

Die Einstellung des Hostnamens erfolgt hier über die Unit „systemd-hostnamed“. Die „Unit-Datei“ für „systemd-hostnamed“ ist /usr/lib/systemd/system/systemd-hostnamed.serviceund enthält:

[Unit]
Description=Hostname Service
Documentation=man:systemd-hostnamed.service(8) man:hostname(5) man:machine-info(5)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/hostnamed

[Service]
ExecStart=/usr/lib/systemd/systemd-hostnamed
BusName=org.freedesktop.hostname1
CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE

Das oben aufgerufene Programm /usr/lib/systemd/systemd-hostnamedist eigentlich eine Binärdatei (WARUM!).Quellcodekann gefunden werden.

Der Punkt ist, dass wir wieder beiip-10-164-65-105.ec2.internal

WAS TUN?

Antwort1

Sie müssen zwei Dinge tun (haben aber bisher nur eines davon getan):

  1. Legen Sie den Hostnamen in fest /etc/hostname.
  2. Bearbeiten /etc/cloud/cloud.cfgund preserve_hostnameauf setzen True. (Sie können diese Option auch mit Ihren Benutzerdaten übergeben.)

Der zweite Schritt ist erforderlich, da Fedora cloud-initzum Bereitstellen der Instanz Benutzerdaten aus der EC2-Umgebung importiert und cloud-initmitgeteilt werden muss, dass der Hostname beibehalten werden soll.

Antwort2

Eine weitere Möglichkeit besteht darin, den Hostnamen überBenutzerdaten

z.B

#cloud-config
hostname: foo
fqdn: foo.bar.net

Dadurch wird der Hostname beim Booten festgelegt. Ich bin mir jedoch nicht sicher, ob dies immer vor der ersten Anmeldung geschieht.

Antwort3

Es sieht so aus, als ob die Antwort auf der Manpage von hostnamectl steht. Dort gibt es jetzt 3 Hostnamen: den statischen, den temporären und den hübschen Hostnamen.

Um den statischen Hostnamen festzulegen, der meiner Meinung nach der gewünschte ist,

hostnamectl --static set-hostname somehost.tld

Sie können sie alle gleich einstellen mit

hostnamectl set-hostname somehost.tld

Antwort4

Dies ist eigentlich ein Fehler in Cloud-Init auf RHEL-ähnlichen Distributionen, die SystemD verwenden. Es gibt einen Patch unterhttps://bugs.launchpad.net/cloud-init/+bug/1424710

verwandte Informationen