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ý“
hostnameslužba, která spouštíset-dynamic-hostnamesady 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/hostnamea/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.confpro konfiguracihostnametéto služby proměnná prostředí. - Když je služba spuštěna,
set-dynamic-hostnamese 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
systemdsamotný, který běží ještě před spuštěním správy služeb.systemdprogram sám přejde a přečte/etc/hostname(a také/proc/cmdline, ale ne/etc/HOSTNAMEani/etc/default/hostnameani/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.confa 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.confslouč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