Vždy mně chyběly články popisující místo nových verzí upgrady v praxi. Podíváme se na upgrade z FreeBSD 5.4 na FreeBSD 6.1
a dojde i na novinky řady 6 jako takové.
8.9.2006 06:00 | Radim Kolář | přečteno 7328×
V květnu 2006 vyšly dvě verze FreeBSD, jednak novější FreeBSD 6.1, ale také definitivně poslední verze z pětkové řady FreeBSD 5.5. Bezpečnostní team sice vyhlásil May 31, 2008 jako datum ukončení podpory 5.X, ale podle aktivity developerů po vyjití 5.4 mně bylo jasné, že pětková řada byla již odstavena na vedlejší kolej a 5.5 vyjde jen aby se neřeklo.
Navíc šestková řada byla koncipována tak, aby byl upgrade z 5.X co nejsnazší, žádná nepříjemná překvapení např. ve formě kompilátoru s nekompatibilním ABI by se neměla konat, takže stávající programy nebude nutné všechny překompilovat a BSD systémy jsou přece známé snadnými upgrady a jedna paní na IRC povídala... Tak jsem se dal přesvědčit i když jsem měl systém fungující ke své úplné spokojenosti a začal aktualizovat.
Postup upgrade FreeBSD pomocí zdrojových kódů je snadný a je popsán zde. CVS tag pro strom verze 6.1 (release + fixy) je RELENG_6_1, pokud chcete větev 6-STABLE tag je RELENG_6. Ačkoliv to na první pohled nevypadá, jde o nejjednodušší způsob upgrade pokud neupgradujete z hodně staré verze na které nejde nová verze přeložit. Kompilace trvá na 1 GHz počítači zhruba hodinu.
Přidal jsem tedy do své konfigurace kernelu volbu options COMPAT_FREEBSD5, což není nutné pokud použijete standardní kernel GENERIC, jelikož již tuto volbu obsahuje. Pokud nepotřebujete volby, které nejsou ve standardním kernelu zahrnuty, je jeho použití dostačující. Ručním "ořezáním" kernelu získáte zhruba 3,5 MB volné paměti navíc, což se vyplatí snad jen u počítačů s 32MB RAM.
Před překladem nazapomeňte na mergemaster -p, který překontroluje /etc/passwd a vytvoří případné chybějící systémové uživatele. Pak následuje standardní přeložení/nainstalování nového světa (make build|install world) a jádra (make build|install kernel).
Nakonec je potřeba aktualizaovat konfigurační soubory pomocí utility mergemaster, která zobrazuje rozdíly mezi vaší a dodanou konfigurací. Jde o poměrně nudnou a zdlouhavou činnost, kdy odklepáváte volbu nainstalovat novou verzi konfiguračního souboru. Z nudy vás vytrhne jedině zjištění, že jste omylem odsouhlasili přepsání /etc/passwd nebo konfigurace nameserveru. Zde bych upozornil na jednu hezkou vlastnost FreeBSD verzí 5+, kterou jsou snapshoty filesystému. Pokud si před upgradem vytvoříte snapshoty programem mksnap_ffs bývá časově rychlejší vytáhnout přepsané soubory ze snapshotu než z pásky.
Pokud si přeložíte FreeBSD v defaultním nastavení, bez optimalizace pro váš procesor pomocí volby CPUTYPE v /etc/make.conf, s kernelem GENERIC a z CVS větve RELENG_6_1 můžete využívat utilitu FreeBSD-update, která slouží ke stažení a následné aplikaci binárních patchů. S její pomocí můžete udržovat FreeBSD 6.1 aktuální s minimální námahou t.j. bez nutnosti překompilovávat jádro/systém pokud se objeví security nebo errata patche. Program je rychlý a stahuje zanedbatelné množství dat (používá bspatch).
Systém naběhl víceméně vpořádku. V kernelu byla podpora pětky a instalační procedura nemaže staré systémové binárky a knihovny. Všiml jsem si několika změn: moused nenašel myš neboť se změnily názvy zařízení a také se změnilo bootovací logo. Zmizel chlapík s vidlemi a byl nahrazen politicky korekním, nicméně značně ošklivým, nápisem FREEBSD.
FreeBSD se dělí na základní systém a porty. Základní systém je převážně v / a /usr a porty se umisťují do /usr/local případně /usr/X11R6. Jelikož byla nedávno přidána do FreeBSD vlastnost odmazávat soubory ze starých FreeBSD ze základního systému, rozhodl jsem se jí vyzkoušet a nainstaloval jsem balíčky compat5x a localedata-5.4 obsahující sdílené knihovny a locales z předchozí řady abych pak následně smazal ty, co zbyly v systému.
Pokud používáte aplikace pracující s locales a nechce se vám je překompilovávat, tak je nainstalování těchto balíčků z ports nutné, jelikož se změnil formát locales.
Po následném cd /usr/src && make delete-old && make delete-old-libs a rebootu jsem byl nemile překvapen. Služby, které se měly spustit při bootu se nespustily, neboť nenalezly staré verze knihoven. Po bootu šly již spustit ručně bez problémů.
Toto chování souvisí s další novinkou. Dříve se soubory v adresáři /usr/etc/rc.d spouštěly podle abecedního pořadí, čehož se využívalo a startovací scripty dostávaly taktická jména jako například 010.pgsql.sh. Nyní se o tyto závislosti stará program rcorder, který si prohlédne startovací scripty a podle nalezených klíčových slov ``REQUIRE'', ``PROVIDE'', ``BEFORE'', ``KEYWORD'' určí jejich pořadí při startu systému.
Výše zmíněný problém, který je již v současnosti odstraněn, jsem vyřešil metodou nejmenšího odporu a problematický apache s php překompiloval. Dále přestaly pracovat aplikace, které přistupují přímo do paměti kernelu s využitím libkvm např. identd identd[62341]: kvm_getprocs: Unknown error: 0, a aplikace využívající pseudoterminály např. midnight commander protestoval Cannot open master side of pty: Invalid argument (22). Jako obvykle, rekompilace problematických aplikací problém odstranila.
Hlavní body jsou: nová podpora PowerPC, ukončení podpory 80386/7, mnohem lepší podpora WiFi včetně posledních šifrovacích standardů a zoptimalizované zamykání filesystému nepoužívající již kernel-wide Giant zámek, které je hlavním trhákem šestky.
V userlandu proběhla tradiční aktualizace importovaného software: bind 9.3.2, hostapd 0.4.8, sendmail 8.13.6, gcc 3.4.4, IPFilter 4.1.18, Heimdal 0.6.3, pf 3.7, ssh 4.1p1, OpenSSL 0.9.7e, tcpdump v3.9.1 a mnohé další.
Mnohem zajímavější než aktualizace jsou nové programy. Bsdiff/bspatch umožńuje výrobu a následnou aplikaci binárních patchů. Jejich autor tvrdí, že jsou lepší (míněno menší) než xdelta nebo RTP patche společnosti Pocket Soft. Pravda ovšem je, že tyto programy potřebují velmi hodně paměti, takže patche typu FreeBSD-6.0.ISO -> FreeBSD-6.1 ISO se nekonají pokud náhodou nevlastníte desítky GB RAM. Další zajímavostí je, že bsdtar umí nyní rozbalovat i ISO image a ZIP archivy, což rozhodně potěší.
Dalším užitečným programem, který se objevil v základním systému, je portsnap. Slouží k aktualizaci stromu /usr/ports a je mnohem rychlejší než klasický cvsup nebo jeho C verze csup, která se také objevila jako novinka v základním systému. Pokud jste portsnap již používali dříve v jeho verzi z portů, přesuňte /usr/local/portsnap -> /var/db/portsnap a pak jej smažte.
Ne všechny věci se změnily k lepšímu. Kmitočet kernelu ze změnil z 100 na 1000 Hz (stejně jako u Linuxu). Toto přineslo zhruba o 2-3% větší zátěž na pomalejších strojích, obvykle používaných jako routery. Tento kmitočet se používá k časovým značkám protokolu TCP a tyto značky používá Netcraft k měření uptime. Proto touto změnou končí vláda FreeBSD systémů v tabulce největších uptimů, jelikož největší uptime, který lze teď touto metodou detekovat je zhruba 40 dní. Tato tabulka se používala jako oblíbený argument pro dokazování stability BSD systémů v FreeBSD vs Linux flamewarech.
V BSD jsou od řady 5 dva schedulery, klasický BSD a novější ULE. ULE je modernější, neboť narozdíl od BSD zohledňuje logické procesory. ULE měl v raných verzích problémy se stabilitou (Kernel panic), ale hlavní jeho problém byl nedotažený algoritmus pro dynamické přidělování CPU času v závislosti na chování programů.
Tento algoritmus nebyl zase tak úplně špatný, v řadě 5 se dal na desktopech používat, pokud jste mu prominuly občasné přestupky. Například chování prohlížeče Opera se mu nelíbilo a nepřiděloval jí téměř žádný CPU čas. Při zatížení, které je běžné na serverech, byl ULE nepoužitelný - některé programy se pod ním prakticky zastavily.
ULE měl jednu zajímavou vlastnost. Pokud byla nice priorita procesu nastavena na 19-20 tak proces běžel jen když byl procesor idle a neokrádal procesy s nice 0 o CPU čas jak tomu bylo v případě BSD scheduleru, který dával aplikacím s nice 20 zhruba 15 procent CPU času vzhledem k úloze s nice 0. Toto chování ULE bylo ideální pokud jste rádi používali nice 20 k uklizení úloh u kterých nehrál čas dokončení roli.
Ve verzi 6.1 se ULE scheduling výrazně zhoršil a to natolik, že se stal úplně nepoužitelným. Doufejme, že se mu dostane v budoucnu trochu pozornosti a bude přepracován. Slovo doufejme bych podtrhl, neboť v BSD komunitě se HTT zásadně zakazuje.
Upgrade na verzi 6 lze doporučit. Systém je celkově bystřejší, MySQL je díky změnám ve fs rychlejší, snad i stabilnější díky opravám chyb v threadingu, zlepšila se podpora ACPI u notebooků, upgrade je snadný a žádná nepříjemná překvapení se nekonají.