Я хотел бы настроить машину Debian Stretch таким образом, чтобы она устанавливала имя хоста при загрузке на основе серийного номера машины. Это связано с тем, что ОС на настраиваемой машине будет скопирована на несколько других машин, и они должны иметь возможность автоматически устанавливать свое (уникальное) имя хоста при загрузке.
Я создал сервис 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
- это то, что было в этих файлах до перезагрузки.
Почему временное имя хоста не обновляется правильно, когда сеть работает? Есть ли какой-либо другой сервис, который устанавливает его до того, как мой скрипт его изменит?