Зміна ім'я хоста під час завантаження на Debian Stretch


3

Я хотів би налаштувати машину Stretch Debian так, щоб він встановлював ім'я хоста під час завантаження на основі серійного номера машини. Це пов'язано з тим, що ОС на машині, яку я конфігурую, буде скопійована на декілька інших машин, і вони повинні мати можливість автоматично налаштувати своє (унікальне) ім'я хоста під час завантаження.

Для цього я створив службу systemd. Служба викликає скрипт, який перевіряє серійний номер машини, визначає правильне ім'я хоста для цієї машини, а потім редагує два файли /etc/hosts і /etc/hostname відповідно. Я налаштував службу для запуску після того, як файлові системи будуть готові і раніше налаштовано мережу. Ось:

[Unit]
DefaultDependencies=no
Requires=local-fs.target
After=local-fs.target
Before=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set-hostname.sh
RemainAfterExit=yes

[Install]
WantedBy=network.target

Коли машина завантажується, я бачу, що два файли були відредаговані правильно. Однак у командному рядку все ще відображається старе ім'я хосту (яке було в /etc/hostname перед перезавантаженням) і якщо я запускаю команду hostnamectl Я отримую таку інформацію:

Static hostname: new_correct_hostname
Transient hostname: old_hostname

де new_correct_hostname є породженим моїм сценарієм і написаним в /etc/hostname і /etc/hosts під час завантаження old_hostname є той, який був у цьому файлі раніше перезавантаження.

Чому перехідне ім'я хоста не правильно оновлюється, коли мережа піднімається? Чи існує яка-небудь інша служба, яка встановлює її до того, як мій скрипт змінить його?

Відповіді:


1

Згідно з man page для hostnamectl перехідне ім'я хоста зчитується з конфігурації мережі і не використовується, якщо статичне ім'я хоста налаштовано і дійсне.

Це говорить про те, що може бути деяка кешована конфігурація мережі з попереднім іменем хоста, що встановлює перехідне ім'я хоста до старого. Подальше розслідування буде залежати від методу та служби, яку ви використовуєте для підключення до мережі.

Крім того, якщо ви хочете бути абсолютно впевненими, що ваше ім'я хосту виконано правильно, ви можете дозволити ядрі Linux знати або командою /bin/hostname забезпечується hostname або вручну вставити нову назву /proc/sys/kernel/hostname, наприклад:

echo myhost > /proc/sys/kernel/hostname

Будь-яка знову відкрита оболонка входу буде показувати оновлене ім'я хоста після його виконання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.