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-hostname
del 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/hostname
y/etc/HOSTNAME
, entre otras fuentes (ya que diferentes sistemas operativos configuran esto de diferentes maneras), y hace unrc.conf
amalgamado . - El mecanismo de importación de configuración externa utiliza el
rc.conf
combinado para configurar elhostname
de este servicio variable de entorno. - Cuando se ejecuta el servicio,
set-dynamic-hostname
no 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
systemd
en sí mismo, que se ejecuta incluso antes de que se inicie la gestión del servicio. Elsystemd
el propio programa va y lee/etc/hostname
(y también/proc/cmdline
, pero no/etc/HOSTNAME
ni/etc/default/hostname
ni/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.conf
y 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.conf
fusió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.