V létě jsme v tichosti vydali NetworkManager 0.9.6, který obsahoval především hromadu menších oprav a vylepšení. NetworkManager 0.9.8 jsme stihli vydat těsně před brněnskou Developer Conference, která proběhla o víkendu 23. a 24. února 2013, a tentokrát jej ohlašujeme s plnou parádou.
Většina naší práce na této verzi se již objevila ve Fedoře 18, včetně nějakých těch chyb, které jsme mezitím stihli opravit. Přesto bych se s vámi rád podělil o vlastnosti obou těchto vydání, tedy o nejpodstatnější ze změn, které proběhly od vydání 0.9.4 do vydání 0.9.8. Ačkoli očekávám dílčí dolaďování této větve, toto vydání považuji za velký krok vpřed.
Servery a virtualizace
Protože byly hlavní oblastí využití NetworkManageru především notebooky, není úplně jednoduché tento software transformovat do podoby vhodné pro servery a především pro interoperabilitu s virtualizačními nástroji. Hodně lidí věří tomu, že je potřeba NetworkManager zahodit a postavit nový nástroj na zelené louce. My jsme došli k závěru, že si vystačíme se zahazováním a masivním předěláváním jednotlivých jeho částí.
Práce na NetworkManageru tedy v současné době znamená mnohem více refactoringu než práce na nových vlastnostech. To stejné platí pro opravy různých chyb a nedostatků. Je tu i spousta věcí, které nelze se zachováním kompatibility změnit ze dne na den, a tak vymýšlíme různé možnosti, jak opravy zasadit do stávajícího stavu. V oblasti nekompatibilních změn se držíme zpátky a udržujeme stabilitu API 0.9.x, jak se dá.
Bridging a bonding
Nová verze NetworkManageru obsahuje dlouho očekávanou podporu spojování ethernetových rozhraní do virtuálních bridgů. Tato funkcionalita byla přijata jako vlastnost do Fedory 19. Podpora bondingu byla součástí NetworkManageru již delší dobu, ale v dřívějších vydáních se mi bonding nepodařilo zprovoznit. Z toho důvodu je i bonding oznámený jako vlastnost pro F19.
Přidání konfigurace bridgů bylo relativně jednoduché. Problémy nastaly při řešení vnitřních závislostí uvnitř NetworkManageru. Nakonec to dopadlo tak, že se musel restrukturalizovat kód zajišťující fungování rozhraní závislých na jiných rozhraních. Refactoring podpory síťových rozhraní dále probíhá i po vydání 0.9.8. Další úpravy si vyžádala podpora dynamické konfigurace adres na těchto rozhraních. NetworkManager reaguje na události od jádra a veškeré akce spouští až ve chvíli, kdy to má skutečně smysl. Například klient DHCP se spouští až ve chvíli, kdy je bridge připravený odesílat pakety.
Přestože bude podpora obou virtuálních rozhraní ohlášena s Fedorou 19, buildy s jejich podporou jsou už nějakou dobu součástí Fedory 18. Vzniklé mezidobí bude využito ke stabilizaci nových vlastností a přípravě ostatních softwarových balíků na využití nových možností.
Připojení k VPN
Automatické připojování k VPN je netriviální problém. Ve většině případů uživatelé chtěli, aby se některé z fyzických připojení nepovažovalo za dokončené, dokud nedojde k aktivaci VPN. Toho je nyní možné dosáhnout pomocí svázání konfigurace fyzického rozhraní s konkrétní VPN. Rozhraní pro VPN pluginy od verze 0.9.6 podporuje IPv6, ale zatím jej implementuje pouze plugin pro OpenConnect.
Podpora pro přímé připojení k ADSL
Verze 0.9.6 přinesla základní podporu ADSL. Podle informací v commitu jsou podporovány protokoly PPPoE a PPPoA. Z kódu není patrné, zda je podporován protokol IPv6, nicméně sám jsem ADSL nezoušel ani na IPv4. PPP v NetworkManageru by obecně mělo dualstack zvládat. Prohlédněte si ukázku konfigurace v nativním formátu.
[connection] id=MYISP uuid=34d04e69-fdd9-4231-af2c-25ed1f34dc1e type=adsl timestamp=1304621332 [adsl] username=user@myisp.com password=mypassword vpi=8 vci=35 encapsulation=vcmux protocol=pppoa [ipv6] method=ignore [ipv4] method=auto
Automatická konfigurace připojení k síti
Už verze 0.9.6 přinesla značné zlepšení v oblasti dynamické konfigurace IPv6 oproti původnímu stavu. Nové vydání NetworkManageru k tomu přidává velké množství oprav týkajících se protokolů DHCPv4 a DHCPv6. Zlepšení podpory IPv6 v předchozí verzi vzbudilo zájem o tuto oblast a kontaktovalo nás hned několik lidí ochotných přispět vlastním kódem. I tak máme stále problémy s nedostatečnou podporou autokonfigurace ze strany jádra a řešíme, zda jaderný kód přizpůsobit našim potřebám, nebo ho ignorovat a použít implementaci v userspace.
DHCPv6 je nyní použitelné v sítích s podporou dynamického DNS. Opravili jsme i podporu DUID, tedy identifikátoru, který se v DHCPv6 používá místo MAC adresy. Jako identifikátor teď při výchozím nastavení používáme UUID z /etc/machine-id
.
Během vývoje těchto dvou verzí došlo k opravám v dalších balících. Patří mezi ně linuxové jádro, libnl, dhclient a další. Bohužel stále platí, že opravy dhclienta upstream přijímá sporadicky. V rámci čištění kódu jsme po konzultaci se zástupci distribucí odstranili podporu pro zastaralý dhclient 3.x. Podpora pro dhcpcd je spíše zanedbávána.
Příkazové rozhraní a D-Bus API
Součástí balíku NetworkManager je i základní, leč neustále se zlepšující, příkazové rozhraní. Při troše štěstí z něj postupem času vykouzlíme použitelný nástroj pro konfiguraci sítě. Pro závislé projekty je vhodnější použít stabilní D-Bus API nebo ještě lépe knihovnu libnm-glib. CLI nástroj se bude ještě hodně měnit.
Příjemnou novinkou v 0.9.6 byla podpora připojení k bezdrátovým sítím z příkazové řádky. Samozřejmostí je i možnost vypsat nalezené bezdrátové sítě.
nmcli device wifi list nmcli device wifi connect MySSID password VelmiTajneHeslo
V D-Bus API přibyla možnost ručně spustit vyhledání okolních sítí a získat informace o použitém ovladači a firmwaru.
Komunikace s operačním systémem
V rámci čištění kódu a přípravy na začlenění nové mezivrstvy pro komunikaci s operačním systémem jsme odstranili podporu pro libnl 1.x a 2.x. Pro ulehčení údržby kódu podporujeme pouze libnl 3.2.7 a novější. Odstranění podpory pro starší verze libnl nám mimo jiné umožnilo odstranit velké množství kódu ošetřujícího absenci funcionality v těchto verzích. Díky tomu nemusíme používat různá zastaralá rozhraní jádra a vyhýbáme se tak obrovskému množství chyb, které by se projevily jen na některých distribucích.
Podpora distribucí
NetworkManager dosud podporoval pouze konkrétní distribuce. Kompilace na neznámé distribuci končila chybou. Nakonec se ukázalo, že většina distribučně specifického kódu vůbec nebyla potřeba. Zbyly pouze čtyři konfigurační pluginy a podpora pro nepřímou úpravu /etc/resolv.conf
pomocí SUSE netconfig. Konfigurační volbu --with-distro
, která toto zajišťovala, jsme odstranili a místo toho lze vypínat/zapínat jednotlivé pluginy i netconfig.
Vydání 0.9.8 lze tedy zkompilovat na libovolné linuxové distribuci za předpokladu, že jsou splněny prerekvizity. Detekce konkrétních distribucí se stále používá pro doladění výchozí konfigurace pěti nových voleb.
Závěrem
Opravili jsme mnoho různých chyb a nedostatků. Přidali jsme automaticky generovanou manuálovou stránku nm-settings
s tabulkou konfiguračních voleb dostupných přes D-Bus API a nativní konfigurační formát keyfile.
Doufám, že jsem vám to příliš nezkomplikoval informováním o posledních dvou vydáních zároveň. Pro další informace o tom, co se na vás v NetworkManageru a linuxovém síťování chystá, doporučuji navštívit seznam připravovaných vlastností na Fedora Wiki a upstreamovou bugzillu. Kdo jste mě nestihli odchytit na Developer Conference, můžete se na mě obrátit s dotazy o týden později v Praze na konferenci InstallFest.
25. 2. 2013 at 17:54
Dobrá práce, klobouk dolů 🙂
25. 2. 2013 at 21:23
Coz o to, ale cloveku z toho beha mraz po zadech, ze to vubec funguje. Vysvetluje to, ale proc se to v kazde verzi chova trochu jinak, presto, ze se meni jen minoritni cisla.
25. 2. 2013 at 22:36
Ono je to s těmi čísly trochu složité, čistokrevné bugfixy mají změněnou jenom čtvrtou část verze. Třetí část měníme s updaty, které jsou více či méně stable (bohužel nemáme nikde veřejně definována pravidla). Změna druhé části už představuje nekompatibilitu.
Mráz po zádech mi někdy běhá taky, ale už se docela hodně mluví o možnostech testování networkmanageru.
26. 2. 2013 at 01:18
Díky.
26. 2. 2013 at 15:01
Pekne pocteni Pavle, mozna zacnu s network-managerem vic kamaradit. Pri prvnim problemu se siti mam tendenci network-manager vypnout a nakonfigurovat po staru.
26. 2. 2013 at 22:14
Díky.
27. 2. 2013 at 14:45
Vypadá to jako slušný kus práce. Sice asi ještě nějakou dobu network manager na serverech budu vynechávat, ale za tu cmd line utilitu k připojení k síti děkuji! VPN určitě otestuju 🙂