Ahoj! V současné době pracuji na systému bez lfs od nuly s busyboxem jako hvězdou. Nyní moje přihlašovací jméno říká:
(none) login:
Moje hostitelské jméno je tedy nefunkční. hostname
mi přináší (none)
taky.
Průvodce, který jsem sledoval, mi řekl, abych hodil název hostitele do /etc/HOSTNAME
. Zkoušel jsem také /etc/hostname
. Bez ohledu na to, co dělám, hostname
vrátí (none)
– pokud nespustím hostname <thename>
nebo hostname -F /etc/hostname
. Nyní samozřejmě nechci, aby se to dělalo pokaždé, když někdo čerstvě nainstaloval distribuci – jaký je tedy skutečný výchozí soubor, když ne /etc/hostname
?
Předem děkuji!
Přijatá odpověď:
hostname
příkazy v běžných sadách nástrojů, včetně BusyBox, se při dotazování na název hostitele nevrací k souborům.
Hlásí pouze to, co jim jádro vrátí jako název hostitele ze systémového volání, které jádro inicializuje na řetězec, jako je „ (none)“, lze změnit překonfigurováním a přebudováním jádra.
(V terminologii systemd je to dynamický název hostitele , aka přechodný název hostitele; ten, který ve skutečnosti hlásí Linux, jádro.)
neexistuje „výchozí soubor“.
Obvykle existuje jednorázová služba, která běží při startu systému, poměrně brzy, a která hledá v těchto různých souborech, vytáhne název hostitele a inicializuje s ním název hostitele jádra.
(V terminologii systemd je tento konfigurační řetězec statický název hostitele .)
Například:
- Ve své sadě nástrojů uvádím „časný“
hostname
služba, která spouštíset-dynamic-hostname
sady nástrojů příkaz po připojení místního souborového systému a před službami přihlášení uživatele. Práce je rozdělena na věci, které se dělají (pouze), když člověk provede změnu konfigurace, a věci, které se dělají při (každém) bootstrapu systému:- Mechanismus importu externí konfigurace zní
/etc/hostname
a/etc/HOSTNAME
, mimo jiné zdroje (protože různé operační systémy to konfigurují různými způsoby) a vytváří sloučenýrc.conf
. - Mechanismus importu externí konfigurace používá sloučený soubor
rc.conf
pro konfiguracihostname
této služby proměnná prostředí. - Když je služba spuštěna,
set-dynamic-hostname
se nemusí starat o všechny možnosti zdroje konfigurace a jednoduše vezme proměnnou prostředí z prostředí nakonfigurovaného pro službu a nastaví z ní dynamický název hostitele.
- Mechanismus importu externí konfigurace zní
- V systemd se jedná o inicializační akci, která je pevně začleněna do kódu
systemd
samotný, který běží ještě před spuštěním správy služeb.systemd
program sám přejde a přečte/etc/hostname
(a také/proc/cmdline
, ale ne/etc/HOSTNAME
ani/etc/default/hostname
ani/etc/sysconfig/network
) a předá to jádru. - Ve Void Linux existuje spouštěcí shell skript, který čte statický název hostitele (pouze) z
/etc/hostname
, s přechodem na proměnnou shellu načtenou zrc.conf
a nastaví dynamický název hostitele z jeho hodnoty.
Pokud stavíte systém „od nuly“, budete muset vytvořit službu, která udělá ekvivalent.
Nástroje BusyBox a ToyBox pro nastavení názvu hostitele ze souboru jsou hostname -F "${filename}"
, takže budete muset vytvořit službu, která spustí tento příkaz proti /etc/hostname
nebo nějaký takový soubor.
BusyBox je dodáván se sadou nástrojů pro správu služeb runitu a jednoduchá služba runit by byla něco v tomto smyslu:
#!/bin/sh -e exec 2>&1 exec hostname -F /etc/hostname
Další čtení
- Lennart Poettering a kol. (2016).
hostnamectl
. systémové manuálové stránky. Freedesktop.org. - Jonathan de Boyne Pollard (2017). “
set-dynamic-hostname
“. Příručka uživatelských příkazů . nosh nářadí. Software. - Jonathan de Boyne Pollard (2017). „
rc.conf
sloučení". průvodce nosem . Software. - Jonathan de Boyne Pollard (2015). „externí formáty“. průvodce nosem . Software.
- Robe Landley.
hostname
. Seznam příkazů Toybox . landley.net. - https://unix.stackexchange.com/a/12832/5132