Configurar correctamente el nombre de host - Fedora 20 en Amazon EC2

Configurar correctamente el nombre de host - Fedora 20 en Amazon EC2

Contexto

tengo unImagen de nube de Fedora 20ejecutándose en Amazon EC2 (en adelante denominada "instancia"). Y tengo cierta incertidumbre acerca de establecer persistentemente su nombre de host.

Meta

En este caso, digamos que quiero configurar el nombre de host de la instancia enpenpen.homelinux.org. (Este nombre también quedará registrado en DynDNS mediante ddclient, pero ese es otro aspecto que no nos interesa aquí.)

Por supuesto, el nombre de host se puede configurar manualmente una vez que se completa el arranque (usando, hostnamectlentre otros). Pero queremos tener configurado el nombre de host correcto antes del primer inicio de sesión.

Tradicionalmente, para configurar persistentemente el nombre de host, se modificaba el contenido de /etc/hostname. Desafortunadamenteesto no funciona aquí.

Comportamiento predeterminado del sistema

De forma predeterminada, la instancia establece su nombre de host en un nombre EC2 interno. Después del arranque, podemos mirar todos los pequeños lugares diferentes que producen el nombre de host y encontramos:

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'                 : 

Así que intentemos escribir en /etc/hostname...

Si uno escribe el nombre de host deseado en /etc/hostname, este cambio se perderá nuevamente en el siguiente inicio. Examinemos el proceso de arranque, que lo realiza systemd.

Ejecución de ejemplo

Escriba rorororoor.homelinux.orga /etc/hostnamey luego reinicie.

Usandodiarioencontramos (tenga en cuenta que las líneas del registro no están completamente ordenadas por tiempo):

El proceso de arranque comienza con el nombre de host comoservidor localluego cambia de raíz, momento en el cual el nombre de host se convierte enrorororoor.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.

Vemos que systemdestablece el nombre de host enrorororoor.homelinux.org, evidentemente con éxito a medida que cambia la columna de host del registro. Se emiten algunos errores, posiblemente porque hostnamectlno se puede contactar con DBus en este momento.

No estoy seguro de quién establece los nombres aquí; alguna parte interna de systemd? De todos modos, continuando con el diario, encontramos que el nombre de host vuelve al nombre interno de EC2 muy pronto:

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)

La configuración del nombre de host aquí se realiza a través de la unidad "systemd-hostnamed". El "archivo de unidad" para "systemd-hostnamed" es /usr/lib/systemd/system/systemd-hostnamed.servicey contiene:

[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

El programa invocado por lo anterior /usr/lib/systemd/systemd-hostnamedes en realidad un binario (¡POR QUÉ!). Sin embargocódigo fuentepuede ser encontrado.

El caso es que estamos de vuelta enip-10-164-65-105.ec2.interno

¿QUÉ HACER?

Respuesta1

Necesitas hacer dos cosas (pero solo has hecho una de ellas):

  1. Establezca el nombre de host en /etc/hostname.
  2. Edite /etc/cloud/cloud.cfgy configúrelo preserve_hostnameen True. (También puedes pasar esta opción con tus datos de usuario).

El segundo paso es necesario porque Fedora suele cloud-inittraer datos de usuario desde el entorno EC2 para aprovisionar la instancia, y cloud-inites necesario que se le indique que el nombre de host debe persistir.

Respuesta2

Otra opción es configurar el nombre de host a través dedatos del usuario

p.ej

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

Esto establecerá el nombre de host al arrancar, sin embargo, no estoy seguro de si eso sucederá siempre antes del primer inicio de sesión.

Respuesta3

Parece que la respuesta está en la página de manual de hostnamectl. Ahora hay 3 nombres de host: estático, transitorio y bonito.

Para configurar el nombre de host estático que creo que es el que desea,

hostnamectl --static set-hostname somehost.tld

Puedes configurarlos todos para que sean iguales con

hostnamectl set-hostname somehost.tld

Respuesta4

En realidad, esto es un error en cloud-init en distribuciones similares a RHEL que usan SystemD. Hay un parche disponible enhttps://bugs.launchpad.net/cloud-init/+bug/1424710

información relacionada