GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il file predefinito per `hostname`?

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 esegue set-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 un rc.conf amalgamato .
    • Il meccanismo di importazione della configurazione esterna utilizza il rc.conf amalgamato per configurare hostname 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.
  • 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. Il systemd il programma stesso va e legge /etc/hostname (e anche /proc/cmdline , ma no /etc/HOSTNAME /etc/default/hostname /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 da rc.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.


Linux
  1. A cosa servono gli inode?

  2. Qual è lo scopo del file .bashrc in Linux

  3. Qual è il modo corretto di usare inotify?

  4. Qual è l'attuale sorgente del kernel Linux?

  5. Qual è l'equivalente del comando File Linux per Windows?

Qual è la password predefinita dello schermo?

Come trovare il file manager predefinito?

A cosa serve i915.modeset=1?

Qual è lo scopo del comando hostnamectl?

Qual è il nome utente e la password predefiniti per un Live CD di Ubuntu?

Qual è la shell predefinita di Busybox?