У меня есть pxe сервер, который раздаёт Arch Linux по сети. Я его гружу на разных машинах и дальше захожу в них по ssh. Чтобы проще было различать хосты, мне захотелось, чтобы их хостнеймы задавались автоматически из их mac адреса.
Для этого я пересобрал archiso (инструкция), добавив следующие изменения:
Для этого я пересобрал archiso (инструкция), добавив следующие изменения:
Создаём файл archlive/airootfs/etc/systemd/scripts/bootif-hostname:
#!/bin/bash # example of kernel parameter: BOOTIF=00-01-02-03-04-05-06 eval $(cat /proc/cmdline | grep -o '\bBOOTIF=[^ ]*') new_hostname="arch-`echo "${BOOTIF: -8}" | tr -d '-'`" hostnamectl set-hostname "$new_hostname"и делаем его исполняемым: chmod +x archlive/airootfs/etc/systemd/scripts/bootif-hostname
Создаём файл archlive/airootfs/etc/systemd/system/bootif-hostname.service:
[Unit] Description=Start with a hostname based on last three octets of mac address of nic, which was used for pxe booting Wants=network-pre.target Before=network-pre.target [Service] ExecStart=/etc/systemd/scripts/bootif-hostname Type=oneshot [Install] WantedBy=multi-user.target
В archlive/airootfs/root/customize_airootfs.sh вносим:
... systemctl enable ... sshd.service bootif-hostname.service
На pxe сервере используется pxelinux. Он автоматически добавляет параметрам ядра BOOTIF=00-01-02-03-04-05-06. Я правда не пойму, откуда берётся самый первый октет.
P.S. чтобы зайти на хосты по ssh, надо либо создать пароль для рута и разрешить руту логиниться по ssh, либо создать отдельного пользователя. Я не стал загромождать статью этими изменениями.
Вот и всё. Теперь, когда мы загружаем ArchLinux по сети, в качестве имени хоста мы видим вот такую строку: arch-040506, которая формируется из трёх последних октетов mac адреса сетевой карты, которая была использована при загрузке машины.