El hostname Los comandos en los conjuntos de herramientas comunes, incluido BusyBox, no recurren a los archivos cuando consultan el nombre de host. Solo informan lo que el kernel les devuelve como el nombre de host de una llamada al sistema, que el kernel inicializa en una cadena como "(ninguno)" , modificable reconfigurando y reconstruyendo el núcleo. (En la terminología de systemd, este es el nombre de host dinámico , también conocido como nombre de host transitorio; el que realmente informa Linux, el kernel.) no hay "archivo predeterminado".
Por lo general, hay un servicio de disparo único que se ejecuta al inicio del sistema, bastante temprano, que busca en estos diversos archivos, extrae el nombre de host e inicializa el nombre de host del kernel con él. (En la terminología de systemd, esta cadena de configuración es nombre de host estático .)Por ejemplo:
- En mi conjunto de herramientas, proporciono un
hostname"temprano" servicio que ejecuta elset-dynamic-hostnamedel conjunto de herramientas Comando después de los montajes del sistema de archivos local y antes de los servicios de inicio de sesión del usuario. El trabajo se divide en cosas que se hacen (solo) cuando uno hace un cambio de configuración, y cosas que se hacen en (cada) arranque del sistema:- El mecanismo de importación de configuración externa dice
/etc/hostnamey/etc/HOSTNAME, entre otras fuentes (ya que diferentes sistemas operativos configuran esto de diferentes maneras), y hace unrc.confamalgamado . - El mecanismo de importación de configuración externa utiliza el
rc.confcombinado para configurar elhostnamede este servicio variable de entorno. - Cuando se ejecuta el servicio,
set-dynamic-hostnameno necesita preocuparse por todas las posibilidades de fuente de configuración y simplemente toma la variable de entorno, del entorno configurado para el servicio, y establece el nombre de host dinámico a partir de él.
- El mecanismo de importación de configuración externa dice
- En systemd, esta es una acción de inicialización que está integrada en el código de
systemden sí mismo, que se ejecuta incluso antes de que se inicie la gestión del servicio. Elsystemdel propio programa va y lee/etc/hostname(y también/proc/cmdline, pero no/etc/HOSTNAMEni/etc/default/hostnameni/etc/sysconfig/network) y lo pasa al kernel. - En Void Linux hay un script de shell de inicio que lee el nombre de host estático desde (solo)
/etc/hostname, con un respaldo a la variable de shell leída desderc.confy establece el nombre de host dinámico a partir de su valor.
Si está creando un sistema "desde cero", tendrá que crear un servicio que haga el equivalente. Las herramientas BusyBox y ToyBox para configurar el nombre de host desde un archivo son hostname -F "${filename}" , por lo que tendrá que crear un servicio que ejecute ese comando contra /etc/hostname o algún archivo similar.
BusyBox viene con el conjunto de herramientas de administración de servicios de runit, y un servicio runit simple sería algo así como:
#!/bin/sh -e exec 2>&1 exec hostname -F /etc/hostname
Lecturas adicionales
- Lennart Poettering et al. (2016).
hostnamectl. páginas del manual systemd. Freedesktop.org. - Jonathan de Boyne Pollard (2017). "
set-dynamic-hostname". Manual de comandos de usuario . conjunto de herramientas nosh. Software. - Jonathan de Boyne Pollard (2017). "
rc.conffusión". Guía de nosh . Software. - Jonathan de Boyne Pollard (2015). "formatos externos". Guía de comida . Software.
- Rob Landley.
hostname. Lista de comandos de Toybox . landley.net. - https://unix.stackexchange.com/a/12832/5132
Entonces, ¿está construyendo este sistema desde cero y pregunta dónde está configurado el nombre de host?
La respuesta simple es que no lo es. El nombre de host actual se almacena dentro del kernel y, como la mayoría de las cosas del kernel, no lee ningún archivo de forma predeterminada.
Algo en el inicio de su sistema debe leer un archivo de configuración (de su elección) y establecer el nombre de host del kernel. Esto debe suceder cada inicio.
Puedes cambiarlo desde make menuconfig al construir el kernel.