Сubietruck - это такой китайский одноплатный компьютер, довольно интересный по своим возможностям. У него есть SATA, сеть, VGA и ещё много чего, при этом он на архитектуре ARMv7 и потребляет очень мало электроэнергии. Я в свое время счёл его идеальным для организации домашнего сервера, в том числе и в качестве DLNA устройства. И это успешно работает (работает под Arch Linux), вот только после каждой перезагрузки слетал UPNP-адрес DLNA сервера.
В какой-то момент времени меня это начало доставать. Стоит перезагрузить cubietruck, и в закладках всех медиацентров нужно редактировать/пересохранять папки. Я решил исправить ситуацию.
DLNA сервер реализован при помощи ReadyMedia/MiniDLNA. Такое решение очень популярно для серверов под управлением Linux.
Посмотрим, как формируется UPNP адрес в исходниках:
char mac_str[13]; ... /* set up uuid based on mac address */ if (getsyshwaddr(mac_str, sizeof(mac_str)) < 0) { DPRINTF(E_OFF, L_GENERAL, "No MAC address found. Falling back to generic UUID.\n"); strcpy(mac_str, "554e4b4e4f57"); } strcpy(uuidvalue+5, "4d696e69-444c-164e-9d41-"); strncat(uuidvalue, mac_str, 12);
Ну, логично. Последняя часть адреса формируется из МАК-адреса девайса, на котором запущен minidlna. Но по какой-то причине этот адрес меняется динамически при каждой загрузке.
Для сетевой карты у меня прописан статический адрес в /etc/modprobe.d/gmac.conf:
options sunxi_gmac mac_str="02:44:07:c2:74:b9"
И это работает, если верить выводу команды ip addr:
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 02:44:07:c2:74:b9 brd ff:ff:ff:ff:ff:ff
Однако, на minidlna это никак не влияет. Чтобы исправить ситуацию, я поправил исходники. Стало так:
strcpy(mac_str, "554e4b4e4f57"); strcpy(uuidvalue+5, "4d696e69-444c-164e-9d41-"); strncat(uuidvalue, mac_str, 12);
Зависимость UUID-адреса от MAC-адреса таким образом пропала, и адрес DLNA устройства стал "по умолчанию". Осталось только пересобрать исходники и положить бинарник/пересобрать пакет.
Если вы нашли более элегантное решение - поделитесь им в комментариях.
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.