Il hostname
i comandi nei set di strumenti comuni, incluso BusyBox, non ripiegano sui file quando si interroga il nome host. Riportano solo ciò che il kernel restituisce loro come nome host da una chiamata di sistema, che il kernel inizializza in una stringa come "(none)" , modificabile riconfigurando e ricompilando il kernel. (Nella terminologia di systemd questo è il nome host dinamico , noto anche come nome host transitorio; quello effettivamente riportato da Linux, il kernel.) non c'è "file predefinito".
Di solito c'è un servizio single-shot che viene eseguito all'avvio del sistema, abbastanza presto, che cerca in questi vari file, estrae il nome host e inizializza il nome host del kernel con esso. (Nella terminologia di systemd questa stringa di configurazione è nome host statico .)Ad esempio:
- Nel mio set di strumenti fornisco un
hostname
"precoce". servizio che esegueset-dynamic-hostname
del set di strumenti comando dopo il montaggio del filesystem locale e prima dei servizi di accesso utente. Il lavoro è diviso in cose che vengono fatte (solo) quando si apporta una modifica alla configurazione e cose che vengono fatte a (ogni) bootstrap di sistema:- Il meccanismo di importazione della configurazione esterna legge
/etc/hostname
e/etc/HOSTNAME
, tra le altre fonti (poiché diversi sistemi operativi lo configurano in modi diversi), e crea unrc.conf
amalgamato . - Il meccanismo di importazione della configurazione esterna utilizza il
rc.conf
amalgamato per configurarehostname
di questo servizio variabile d'ambiente. - Quando il servizio è in esecuzione,
set-dynamic-hostname
non ha bisogno di preoccuparsi di tutte le possibilità di origine della configurazione e prende semplicemente la variabile di ambiente, dall'ambiente configurato per il servizio, e imposta il nome host dinamico da esso.
- Il meccanismo di importazione della configurazione esterna legge
- In systemd questa è un'azione di inizializzazione che è cablata nel codice di
systemd
stesso, che viene eseguito prima ancora che la gestione del servizio venga avviata. Ilsystemd
il programma stesso va e legge/etc/hostname
(e anche/proc/cmdline
, ma no/etc/HOSTNAME
né/etc/default/hostname
né/etc/sysconfig/network
) e lo passa al kernel. - In Void Linux c'è uno script shell di avvio che legge il nome host statico da (solo)
/etc/hostname
, con un fallback alla variabile di shell letta darc.conf
, e imposta il nome host dinamico dal suo valore.
Se stai costruendo un sistema "da zero", allora dovrai creare un servizio che faccia l'equivalente. Gli strumenti BusyBox e ToyBox per impostare il nome host da un file sono hostname -F "${filename}"
, quindi dovrai creare un servizio che esegua quel comando su /etc/hostname
o qualche file simile.
BusyBox viene fornito con il set di strumenti di gestione dei servizi di runit e un semplice servizio runit sarebbe qualcosa del tipo:
#!/bin/sh -e exec 2>&1 exec hostname -F /etc/hostname
Ulteriori letture
- Lennart Poettering et al. (2016).
hostnamectl
. pagine di manuale di systemd. Freedesktop.org. - Jonathan de Boyne Pollard (2017). "
set-dynamic-hostname
". Manuale comandi utente . set di strumenti nosh. Software. - Jonathan de Boyne Pollard (2017). "
rc.conf
fusione". Guida nosh . Software. - Jonathan de Boyne Pollard (2015). "formati esterni". Guida nosh . Software.
- Rob Landley.
hostname
. Elenco dei comandi della scatola dei giocattoli . landley.net. - https://unix.stackexchange.com/a/12832/5132
Quindi stai costruendo questo sistema da zero e stai chiedendo dove è configurato il nome host?
La semplice risposta è che non lo è. Il nome host corrente è memorizzato all'interno del kernel e, come la maggior parte delle cose del kernel, non legge alcun file per impostazione predefinita.
Qualcosa all'avvio del tuo sistema devi leggere un file di configurazione (a tua scelta) e impostare il nome host del kernel. Questo deve accadere ad ogni avvio.
Puoi cambiarlo da make menuconfig
durante la compilazione del kernel.