Я хотів би налаштувати машину 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
є той, який був у цьому файлі раніше перезавантаження.
Чому перехідне ім'я хоста не правильно оновлюється, коли мережа піднімається? Чи існує яка-небудь інша служба, яка встановлює її до того, як мій скрипт змінить його?