Главная > Linux > Постоянный UPNP UUID-адрес для minidlna на cubietruck при каждой загрузке

Постоянный UPNP UUID-адрес для minidlna на cubietruck при каждой загрузке

Сubietruck - это такой китайский одноплатный компьютер, довольно интересный по своим возможностям. У него есть SATA, сеть, VGA и ещё много чего, при этом он на архитектуре ARMv7 и потребляет очень мало электроэнергии. Я в свое время счёл его идеальным для организации домашнего сервера, в том числе и в качестве DLNA устройства. И это успешно работает (работает под Arch Linux), вот только после каждой перезагрузки слетал UPNP-адрес DLNA сервера.

large_Cubietruck В какой-то момент времени меня это начало доставать. Стоит перезагрузить 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 устройства стал "по умолчанию". Осталось только пересобрать исходники и положить бинарник/пересобрать пакет.

Если вы нашли более элегантное решение - поделитесь им в комментариях.

Winreview.ru можно найти в Вконтакте, Facebook и Twitter. Присоединяйтесь!