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ář | czytane 7489×
KOMENTARZE
FreeBSD 6.1
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.
Jdeme upgradovat
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.
Utilita freebsd-upgrade
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).
Vítejte v 6.1
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.
Novinky FreeBSD řady 6
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.
Sbohem uptime
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.
ULE scheduler nefunguje
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.
Upgradovat z 5.X či ne?
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í.