вторник, 10 сентября 2019 г.

Как выставлять hostname на основе mac адреса при загрузке Linux по PXE

У меня есть pxe сервер, который раздаёт Arch Linux по сети. Я его гружу на разных машинах и дальше захожу в них по ssh. Чтобы проще было различать хосты, мне захотелось, чтобы их хостнеймы задавались автоматически из их mac адреса.
Для этого я пересобрал 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 адреса сетевой карты, которая была использована при загрузке машины.

Комментариев нет:

Отправить комментарий