UDEV страдания

Вече не помня от колко години ползвам GNU/Linux. Със сигурност е повече от 10. 10 само са годините които го ползвам като сървър в офиса. Минах през RedHat/Fedora, SUSE/OpenSUSE, Ubuntu/Kubunt/Xubuntu и сега сървърът ми е на Gentoo. Никога не съм изпитвал никакви затруднения да мина от дистрибуция на дистрибуция. Основните неща винаги са си били едни и същи. Устройствата се наричат по един и същи начин, юзърланда е един и същ и само init системата беше различна. Не е беше чак такава болка за умиране, напротив беше много интересно и именно това беше чара на дадена дистрибуция.

Linux макар и прекрасна ОС си имаше една слабост още от едно време – така и не успя да си направи кернел dev файлова система.

Да припомня набързо как бяха нещата. Когато започнах да се занимавам с Linux имаше една статична /dev директория, с предварително създадени файлове, представляващи устройствата. Ако искаш да добавиш нова периферия се ползваше един mkinod скрипт, на който му се задаваша т.нар. major и minor numbers и така може вече да си ползваш устройството. Това макар и за сървъри да вършеше перфектна работа, за десктоп си имаше своите очевидни недостатъци.

Първият опит за създаването на динамична /dev структура която да се формира на база заредените драйвери беше т.нар. devfs в ядрото (мисля че се появи в 2.4 ако не ме лъже паметта), която поради ред причини не се наложи.

След натиск от общността, генерирането на динамичната /dev структура беше извадена от ядрото и оставена на грижите на udev демон, който работи в юзърспейс. Този проект до сега вършеше чудесна работа и линукс се славеше с доста добра плъг енд плей поддръжка. В един момент, обаче, основният разработчик повери поддръжката на udev проекта на изчадието на сатаната – systemd.

Какви злини и поразии сътвори systemd и нейният главен гамен разработчик Ленард Пьотеринг за Linux общността е въпрос който заслужава напълно отделен пост. С две думи systemd заменя основите на GNU/Linux (може би скоро заради това говедо след време ще е по-точно да говорим за Poetering/Linux) като sysVinit и изпитаната система от скриптове с някакъв бълвоч който прилича на боклуците които излизат обикновено изпод долните лапи на M$.

Та новият господар на udev проекта го подкара в типичния за него си стил (некомпетентност, пенкелерщина, непрозрачност, грандоманщина и дебелокожие). Резултатите от това пагубно влияние не закъсняха. Първо беше бъг заради който се наложи ядрото да зарежда фърмуерите да устройствата (нещо противоречащо на първоначалната идея всички драйвери да се управляват в юзърспейс), след това беше потенциалната опасност ситеми с отделни /usr директории да не може да се зареждат без наличието на initrd и за винал на всичко udev 197 сътвори уникалната каша с наименованието на мрежовите устройства.

Ако се ползва дистрибуция като Ubuntu проблемите се свеждат само до няколко часа псувни, обикаляне в кръг и боцкане на вуду кукли с топлийки, докато се установи, че еди кой си скрипт не работи заради промяната към славните нови имена. Аз в момента ползвам Gentoo за сървър (поради ред причини свързани с невероятната му гъвкавост и възможности за оптимизация), която е т.нар. rolling update дистрибуция. Като такава драмите с подобни промени обикновено водят до система, която не може да се зареди.

Умът ми още не може да побере кое изчадие Сет-ово реши, че вече не трябва да се ползва човешката схема за наименование на мрежовите устройства като  eth0, eth1, а трябва да се използват недоразумения като enp2s0 или wlp2s6. Има обяснение на трилобит защо заради имагинерните проблеми, решени по някакъв начин от години, трябва да се стъжни живота на милиони администратори по света. Просто това е явно „новият световен ред“ на Poetering/Linux и е съвсем нормално работещи неща да се съсипват в името на постигането на свръхчовека на Ницше.

Както се казва всяко нещо си има край. Търпението на хората също си има край. При излизането на  udev-197 имаше търчене до офиса за оправяне на омазани мрежови интерфейси. Това беше само преди 3 седмици. Днес Gentoo ме зарадваха с „новината“, че от udev-200 нагоре е ерес да се ползват eth имената и трябва да си измисля някаква друга глупост, ако не искам  да се занимавам с чудото на природата, наречена Predictable Network Interface Names.

Има и друг вариант разбира се. Той е да се използва истинска сървърска ос като FreeBSD, която не се променя според прищевките на някое недоносче. Имената на мрежовите устройства далеч не са толкова ясни както бяха преди в линукс, но са в пъти по-ясни и лесни за използване от новата „гениална“ схема, която явно ще стане норма. Още повече, че там не са обладани от лудоста наречена „промяна заради самата промяна“ и си има отработени с годините техники за преодоляване на даден проблем.

В заключение ще кажа, че ако ще трябва да се занимавам с малоумщината наречена Poetering/Linux, предпочитам да отделя време и да си мигрирам машината на FreeBSD. Бях на път да го направя тази зима защото усетих на къде духа вятъра (към бездната в която лежат M$ операционните системи). Спрях се заради леки проблеми с bridge. Сега искрено съжалявам, че не бях по-упорит.

Публикувано на IT мрънкане и тагнато, , , , . Запазване в отметки на връзката.

2 Responses to UDEV страдания

  1. AtletikEfendi каза:

    Любопитното при мен беше това, че не съм търкал перманентните правила на удев и изглежда, че етернет адаптера ми се разпознава още като етх0 :

    esperanza ~ # udevd -V
    200
    esperanza ~ # ls /sys/class/net/
    eth0 lo wlan0
    esperanza ~ # ls /etc/udev/rules.d/70*
    /etc/udev/rules.d/70-persistent-cd.rules
    /etc/udev/rules.d/70-persistent-net.rules

    Хрумна ми и нещо друго. Ти още в началото спомена, че предназначението на билда на Дженту ти е за сървър, така че мога да ти препоръчам да опиташ и с малко по-статичен вид като :
    http://wiki.gentoo.org/wiki/Mdev

    Харесвам

  2. growchie каза:

    Това добре обаче няколко реда в eselect news-a ми се струва, че ще е само временно това работещо положение.
    „The file 70-persistent-net.rules, like the 70-persistent-cd.rules
    should be removed, so if you modify, rename the file also to something
    else like 70-my-network.rules to silence the deprecation warning coming
    from the end of the sys-fs/udev emerge.

    This is the old format with reserved namespace:

    SUBSYSTEM==“net“, ACTION==“add“, ATTR{address}==“xx:xx:xx:xx:xx:xx“, NAME=“eth0″
    SUBSYSTEM==“net“, ACTION==“add“, ATTR{address}==“yy:yy:yy:yy:yy:yy“, NAME=“eth1″

    This is the new format with free namespace:

    SUBSYSTEM==“net“, ACTION==“add“, ATTR{address}==“xx:xx:xx:xx:xx:xx“, NAME=“net0″
    SUBSYSTEM==“net“, ACTION==“add“, ATTR{address}==“yy:yy:yy:yy:yy:yy“, NAME=“net1″“
    Тези файлове които седят трябва да ги изтриеш.

    Харесвам

Вашият коментар

Попълнете полетата по-долу или кликнете върху икона, за да влезете:

WordPress.com лого

В момента коментирате, използвайки вашия профил WordPress.com. Излизане /  Промяна )

Google photo

В момента коментирате, използвайки вашия профил Google. Излизане /  Промяна )

Twitter picture

В момента коментирате, използвайки вашия профил Twitter. Излизане /  Промяна )

Facebook photo

В момента коментирате, използвайки вашия профил Facebook. Излизане /  Промяна )

Connecting to %s