Jaki jest sens polecenia hostnamectl?

17

W przeciwieństwie do edycji / etc / hostname, czy gdziekolwiek jest to istotne?

Musi być dobry powód (mam nadzieję) - ogólnie wolę „stary” sposób, w którym wszystko było plikiem tekstowym. Nie próbuję się kłócić - naprawdę chciałbym wiedzieć i sam zdecydować, czy to dobry powód. Dzięki.

Graham Nicholls
źródło
2
Zdecydowanie nie jesteś sam --- Systemd wprowadził wiele nowych interfejsów, dzięki czemu zyskał wiele błędów od ludzi, którzy wolą „stary sposób, w którym wszystko było plikiem tekstowym”.
Federico Poloni
1
@FedericoPoloni Lub gdzie nie wszystko było plikiem tekstowym, np. Zapytania DNS są konwertowane na XML bez powodu.
Chrylis
DNS-> xml. Przepraszam, musisz podać przykład. IMO XML to wynalazek szatana BTW.
Graham Nicholls

Odpowiedzi:

22

tło

hostnamectl jest częścią systemd i zapewnia odpowiedni interfejs API do radzenia sobie z ustawianiem nazw hostów serwera w znormalizowany sposób.

$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64

Wcześniej każda dystrybucja, która nie korzystała z systemd, miała swoje własne metody, które powodowały niepotrzebną złożoność.

DESCRIPTION
  hostnamectl may be used to query and change the system hostname and
  related settings.

  This tool distinguishes three different hostnames: the high-level 
  "pretty" hostname which might include all kinds of special characters 
  (e.g. "Lennart's Laptop"), the static hostname which is used to
  initialize the kernel hostname at boot (e.g. "lennarts-laptop"), and the 
  transient hostname which is a default received from network 
  configuration. If a static hostname is set, and is valid (something
   other than localhost), then the transient hostname is not used.

   Note that the pretty hostname has little restrictions on the characters 
   used, while the static and transient hostnames are limited to the 
   usually accepted characters of Internet domain names.

   The static hostname is stored in /etc/hostname, see hostname(5) for 
   more information. The pretty hostname, chassis type, and icon name are 
   stored in /etc/machine-info, see machine-info(5).

   Use systemd-firstboot(1) to initialize the system host name for mounted 
   (but not booted) system images.

hostnamectl gromadzi również wiele różnych danych w jednym miejscu, aby uruchomić:

$ hostnamectl
   Static hostname: centos7
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 1ec1e304541e429e8876ba9b8942a14a
           Boot ID: 37c39a452464482da8d261f0ee46dfa5
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.21.1.el7.x86_64
      Architecture: x86-64

Info tutaj pochodzi /etc/*release, uname -aitp tym nazwa serwera.

Co z plikami?

Nawiasem mówiąc, wszystko wciąż jest w plikach, hostnamectlpo prostu upraszcza sposób, w jaki musimy wchodzić w interakcje z tymi plikami lub znać ich każdą lokalizację.

Na dowód tego możesz użyć strace -s 2000 hostnamectli zobaczyć, z których plików pobiera:

$ strace -s 2000 hostnamectl |& grep ^open | tail -5
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/stat", O_RDONLY|O_CLOEXEC) = 3
open("/etc/machine-id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4
open("/proc/sys/kernel/random/boot_id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4

systemd-hostname.service?

Dla bystrego obserwatora powinieneś zauważyć w powyższym, straceże nie wszystkie pliki są obecne. hostnamectlfaktycznie wchodzi w interakcję z usługą, systemd-hostnamectl.serviceco w rzeczywistości powoduje „interakcję” z większością plików, które zna większość administratorów, np /etc/hostname.

Dlatego po uruchomieniu hostnamectlotrzymujesz szczegółowe informacje z usługi. Jest to usługa na żądanie, więc nie zobaczysz, czy działa przez cały czas. Tylko gdy hostnamectldziała. Możesz to zobaczyć, jeśli uruchomisz watchpolecenie, a następnie zaczniesz uruchamiać hostnamectlwiele razy:

$ watch "ps -eaf|grep [h]ostname"
root      3162     1  0 10:35 ?        00:00:00 /usr/lib/systemd/systemd-hostnamed

Źródło tego znajduje się tutaj: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c, a jeśli je przejrzysz, zobaczysz odniesienia do /etc/hostnameitp.

Bibliografia

slm
źródło
Zobacz unix.stackexchange.com/a/454785/5132, aby zobaczyć jeden przykład bezpośredniego odczytu plików.
JdeBP
Czy istnieje powód, aby grepować wyjście zamiast go używać -e open,openat?
ydaetskcoR
@ydaetskcoR - bez powodu technicznego, był leniwy i nie szukał przełączników na strace8-). Mimo wszystko, szczerze mówiąc, nadal potrzebowałbym tego, grepaby uzyskać wynik w sposób, w jaki chciałem go pokazać, b / c stracenadal pokazywałby wynik hostnamectlpolecenia cmd, więc moja droga była krótsza.
slm
„... zapewnia właściwy interfejs API do obsługi ustawiania nazw hostów serwera w znormalizowany sposób”. Innymi słowy, dodali jeszcze jeden standard. :-) Można również zauważyć, że od jego powstania w projekcie jest co najmniej pół tuzina widelców, co prawdopodobnie oznacza kolejne tuzin dodatkowych „standardów”.
UncaAlby,
Daję ci +1 tylko za ten przydatny idiom, który rpm -qf $(type -P hostnamectl)muszę pamiętać!
Mark Borgerding,
1

Jest to nadal plik tekstowy, możesz go edytować i nie będzie problemu.

Plik tekstowy został znormalizowany do /etc/hostname.


Według opiekuna usługi systemowe nazwa-hosta, czas systemowy itp. Zostały bardzo zaprojektowane dla istniejących GUI, takich jak GNOME. systemd-hostnamed pozwala GUI zażądać zmiany nazwy hosta bez działania jako root (w zależności od zasad polkit). Dbus zapewnia również metodę subskrybowania zmian, która jest dostosowana do potrzeb GUI. W takich przypadkach może być używana przez jedną aplikację :). Nie wiem, może zegary używają systemowego pomiaru czasu do nasłuchiwania rekonfiguracji strefy czasowej?

Pomyśl o hostnamectl jako kodzie do wykonywania backendu GUI, który może, ale nie musi, być użytecznym narzędziem CLI. Systemd-hostnamed nie ma na celu dodawania całych funkcji, które nie są obsługiwane przez kod GUI.


Usługa systemd o nazwie hosta nie ma na celu streszczenia różnic między dystrybucjami. Upstream systemizowany na pojedynczy plik konfiguracyjny /etc/hostname, w którym wcześniej były różne pliki konfiguracyjne np. W dystrybucjach opartych na Debianie i Redhat.

Zakłada się, że hostnamectl mówi o standardowej implementacji systemd-hostnamed. Ale AFAIK nie ma aktualnej dystrybucji, która łatałaby używaną nazwę pliku.

Chcę /etc/hostnamezauważyć , że ładowanie w czasie rozruchu jest wykonywane wcześnie przez systemd PID 1. Nie zależy to od uruchomienia systemd-hostnamed.


Wyobrażam sobie, że możesz zauważyć jedną nieszkodliwą różnicę, jeśli masz otwarty GUI ustawień systemowych i jednocześnie wyświetla nazwę hosta. Jeśli edytujesz, /etc/hostnamea następnie używasz, hostname --file /etc/hostnameaby zastosować zmianę do działającego systemu, ekran GUI może nie zostać natychmiast zaktualizowany. systemd-hostnamed zapewnia powiadomienia dbus o zmianach we wszystkich wersjach nazwy hosta, którą utrzymuje, więc GUI może nie zadać sobie trudu, aby wysłuchać powiadomień o nazwie hosta systemu dostępnych w nowoczesnych jądrach Linuksa.

(Tradycyjnie zmiana nazwy hosta w czasie wykonywania nie jest dobrym pomysłem . Może to powodować problemy z oprogramowaniem takim jak X. Jestem pewien, że ten problem nie został rozwiązany przez systemd . Być może został rozwiązany przez dystrybucje korzystające z systemd) .

sourcejedi
źródło