Úvod
Tento článek popisuje jak za použití nejmenšího násilí přejít na linux kernel 2.6.0.
Protože jsem strávil jedno odpoledne pokusy, s nakonec zdá se
úspěšným, přechodem na kernel 2.6 na mém RH9
pokusím se ulehčit ostatním tento proces
popsáním mých trablů.
Při psaní tohoto návodu jsem vycházel
především z Migrating
to Linux
Kernel 2.6, HowTo
Upgrade To The 2.6 Kernel na kerneltrap.org
a dalších informací nalezených na internetu.
Základní rozdíly
Popis všech novinek najdete v jiných článcích
např. na linuxzone. Zde se budu věnovat pouze základnim
rozdílům, které mě zasáhly.
Kompilace kernelu
Kernel 2.6.0 má o poznání uživatelsky
příjemnější kompilaci než řada 2.4, tedy alepsoň mě k
tomuto směrovala přímo nápověda kernelu. Sekce
konfigurace kernelu jsou myslím mnohem lépe rozděleny a
parametry se snáze hledají. Po konfiguraci stačí
pouze napsat "make" a zkompiluje se vše, bez nutnosti zvlášť
dělat dependencies, bzImage a moduly, navíc je textový
výstup kompilace uhlazen a vypisují se vskutku jen
podstatné ůdaje - co se provádí (CC comilace, LD
linkování atp.; [M] přikompilaci modulu; a informace co za část se spracovává).
Záludnosti kompilace
Při konfigurovaní kernelu (osobně používám
"make menuconfig") je třeba vzít v úvahu několik novinek
kernelu. Ta nejzákladnější je, že kernel nevyžaduje
klávesnici ani myš. Pokud je správně nenakofigurujete v
sekci "Input devices" máte o zábavu postaráno.
Tedy pro správnou funkci klávesnice bylo v mém
případě potřeba povolit ne jen "Keyboard" a "AT keyboard" ale i
řadič klávesnice I8042. Dobrý nápad je
zakompilovat i podporu sériového portu. Větší
problémy nastali s myší, ale o tom až pozdějí.
Trochu nelogicky je v sekci "Input devices" i podpora pro PC Speaker a
to v sekci "Misc", takže pokud chcete beepat nezapomeňte na nej.
Taktéž nezbytné je povolit podporu Hotplug. Proč o tom v sekci
o hotplugu.
Vlasní instalaci modulů stejně jako postaru provedete "make
modules_install" a komprimovaný obraz kernelu najdete pod
příslušnou architekturou jako bzImage (např.
arch/i386/boot/bzImage), zkopírujete do boot, modifikujete
lilo.conf nebo grub a můžete rebootovat. S velmi podobně nakofigurovaným kernelem je rozdíl velikosti
bzImage cca 200kB (2.4.23 913kB, 2.6.0 1197kB), není vyloučeno, že sem tam ještě zapoměl něco
"navyhozeni".
RPM a některé další programy
Po upgrade na 2.6.0 mají těžkosti některé programy.
Nefunkčnost základního nástroje rpm z RH9 může
být zvláště nepříjemná:
rpm
rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /var/lib/rpm
no packages
Tento problém se dá odstranit pomocí:
export LD_ASSUME_KERNEL=2.2.5Lepší je ale stáhnout novější balík rpm a nainstalovat jej ještě se starým kernelem. Poslední rpm v. 4.2-1 mi funguje bez problémů.
Problémy s některými dalšími aplikacemi lze vyřešit updatem glibc, který byste tak jako tak měli provést, pokud systém aspoň trochu udržujete:
Originalni RH9 glibc nebyla bez problemu, updateovana RH9 glibc je bez problemu:
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-2.3.2-27.9.i386.rpm
Potrebujete tez:
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-common-2.3.2-27.9.i386.rpm
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-devel-2.3.2-27.9.i386.rpm
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-utils-2.3.2-27.9.i386.rpm
Pokud pravidelne updateujete nemel by byt problem. Pred samotnym rpm -Fvh doporucuji zkontrolovat ze updateujete glibc pro stejnou architekturu jinak se muzete dobrat podobnych poblemu jako nasledujici clovek: I tried rpm -Uvh glibc*, but it was not a pain-free process, as rpm
choked halfway through. I had to rpm -e the old one and rpm -Uvh --force
the new one. That got it working.
Modutils / module-init-tools
Nezbytný pro správnou práci s novými moduly je update modutils - tedy nové modprobe, insmod, rmmod atd.. RPM můžete najít níže, já jsem ale raději použil přímo balík module-init-tools v poslední verzi.
./configure --prefix=/
make moveold
make
make install
Nezbytné je též vytvořit modprobe.conf protože /etc/modules.conf se už zřejmě nepoužívá. Abyste vygenereovali /etc/modprobe.conf použijte ./generate-modprobe.conf script který je v module-init-tools:
./generate-modprobe.conf /etc/modprobe.confVýsledek je radno prohlédnout a zkorigovat, v základu by měl stačit.
Hotplug - důležité
Ač jsem nad tím nejdříve mávl rukou, protože
žádné hotplug zařízení
nepoužívám, nenechte se názvem zmást a
proveďte následující úpravu. Bez
této úpravy vám nebude fungovat automaticke
zavádění modulů, protože všechny zařízení
podle nové filozofie zavádějí moduly právě
přes hotplug request. Tak se vám stane, že po bootu nebude
zdánlivě fungovat vůbec nic - prostě com máte jako modul
nebude fungovat. Dotazů na toto téma je na internetu spousta,
odpověď na otázku "Jak sprovoznit auto load modulu ve 2.6" však asi žádná - nebo spíš jedna - tato.
Tedy v kernelu je pořeba zakompilovat CONFIG_HOTPLUG.
Následně nahraďte všechny výskyty ``/proc/ksyms''
pomocí ``/proc/kallsyms'' v
/etc/rc.sysinit.
Samostatnou kapitolu tvoří některá další
zařízeni - především ps/2 myš. Jak jsem se dočetl v
jakési konferenci, zařízení tohoto typu
není v novém kernelu schopno samo zavádět moduly.
Je tedy třeba manualně zavést modul mousedev
nejlépe asi v /etc/rc.sysinit apod.
Bez toho vám myš prostě fungovat nebude.
Sys file system
Dlaší kapitolou je sysfs. Dohadů proč k jeho vzniku došlo bylo dost, faktem je, že prostě existuje, takže hurá do jeho zprovoznění.
1:Vytovřte /sys.
2:
Za:
mount -f /procv /etc/rc.sysinit přidejte na další řádek:
mount -f /sys
3:
Najděte:
action $"Mounting proc filesystem: " mount -n -t proc /proc /procv /etc/rc.sysinit a přidejte řádek:
action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys
4:
Přidejte:
none /sys sysfs defaults 0 0do /etc/fstab.
5:
Ve funkci halt_get_remaining v souboru /etc/init.d/halt
změňte
awk '$2 ~ /^\/$|^\/proc|^\/dev/{next}na
awk '$2 ~ /^\/$|^\/proc|^\/sys|^\/dev/{next}
USB
USB jsem zatím více nezkoušel. Podle jednoho ze zdrojů je se však změnila jména modulů pro USB. Změny naleznete v /etc/modprobe.conf (hledejte ``usb-controller'') a opět bude pořeba poopravit /etc/rc.sysinit. Pokud používáte USB klávesnici nebo myš budete muset zřejmě nahradit ``keybdev'' pomocí ``usbkbd'' a ``mousedev'' pomocí ``usbmouse''. Také je potřeba přepsat cesty ``/proc/bus/usb'' na ``/sys/bus/usb''. (Což byste měli udělat i v /etc/init.d/halt.)
V /etc/rc.sysinit hledejte ``needusbstorage'' a změňte asi následovně:
needusbstorage=
if [ $usb = "1" ]; then
needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null`
action $"Initializing USB HID interface: " modprobe hid 2> /dev/null
action $"Initializing USB keyboard: " modprobe usbkbd 2> /dev/null
action $"Initializing USB mouse: " modprobe usbmouse 2> /dev/null
fi
Zvuk
Kernel 2.6.0 by měl používat ALSA driver. K jeho zprovoznění je potřeba něco podobného následujícímu v /etc/modprobe.conf.
alias char-major-14 soundcore
alias sound-slot-0 snd-intel8x0
alias snd-card-0 snd-intel8x0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
install sound-slot-0 /sbin/modprobe --ignore-install sound-slot-0 && { /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1; /bin/true; }
remove sound-slot-0 { /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1; /bin/true; }; /sbin/modprobe -r --ignore-remove sound-slot-0
Já jsem ALSA zatím na 2.6.0 neškádlil, protože
moje předchozí zkušenosti s ALSA na 2.4.x nebyly nejlepší
(především emulace OSS). V kernelu ale bez problémů
můžete zaškrtnout při konfiguraci OSS jako moduly, takže
původní OSS fukcnionalita by měla zůstat zachována bez
problémů.
Update 23.12.: Tak jsem se rozhodl sprovoznit ALSA. Zdá se, že s ALSA z kernelu nemám problémy s OSS emulací jako jsem měl dříve a vše funguje výborně. Trochu zabrat ovšem človeku dá správné ukládání mixeru. Záludnost spočívá jednak v nové syntaxi modprobe.conf, která nezná pre-install a post-remove ale pouze install a remove. Zřejmě nejsprávnější zápis je takovýto:
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 && { /usr/sbin/alsactl restore >/dev/null 2>&1 || :; } remove snd-emu10k1 { /usr/sbin/alsactl store >/dev/null 2>&1 || :; }; /sbin/modprobe -r --ignore-remove snd-emu10k1ani tak ale nebyl mixer při ukončení systému ukládán (navíc se neuloží ani když použijete rmmod, musíte jít přes modprobe -r) a nezbylo mi než vylepšit /etc/init.d/halt a upravit tento řádek
runcmd $"Saving mixer settings" /bin/aumix-minimal -f /etc/.aumixrc -S; /usr/sbin/alsactl storePokud někdo jako já chce na svém SB Live! (když už ALSA) konečně i MIDI a sequencer, musí se do věci trochu opřít. Stručně jen doplním že install v modprobe.conf to chce vylepšit ještě o
sfxload /etc/midi/8MBGMSFX.SF2sxfload musíte najít na netu a 8MBGMSFX.SF2 najdete na svém CD ke kartě.
ACPI a APM
Již dříve jsem zkoušel ACPI, ale bohužel měl jsem problémy s
poweroff, kdy se počítač vypl tak, že už šel probudit jen
vypínačem, takže jsem zůstal u APM které dělalo co jsem
potřeboval. V rámci snížení množství
problemů jsem tedy i u 2.6.0 zařadil do commadline parametr kernelu
"acpi=off" a APM funguje jak má.
Používám i CPUcool pro AMD jak je popsán na
internetu a zdá se, že i ten funguje jak má.
lm sensory
Již dlouho používám lm-sensors. Podle náznaků
na internetu a v kernelu jsem se těšil na bezproblémový
provoz lm sensorů přímo s kernelem. Bohužel v tomto směru bylo
překvapení nepěkné. Ne jen že kernel obsahuje pouze
malé množství modulů pro sensory oproti původnímu
balíku, ale dokonce neexistují jěště ani
uživatelské programy z balíku lm sensors kterými
byste je mohli nakonfigurovat a používat. Na
stránkách projektu
lm
sensors sice již píší že balík 2.8.2 by měl
mít utility pro kernel 2.6, mě se je ovšem nepodařilo
zkompilovat. Jak se dočtete v README i2c ani zbytek modulů pro sensory
nelze pro 2.6 v tuto chvíli zkompilovat vůbec.
CD ROM/RW mechaniky
V jádře 2.6.0 by měli být vypalovačky použitelné a hlavně používané přímo přes IDE - není tedy třeba používat SCSI emulaci. Já ji pro jistotu zkompiloval jako modul. Zdá se ale, že vskutku nebude potřeba a stačí zařízení /dev/cdrom přelikovat na /dev/hdc a ve vašem vypalovacím software změnit používané zařízeni. Bohužel změny v chováni pozorovat lze. Taktéž jsem četl, že chování cdrecordu které dříve vyžadovalo scsi emulaci nebylo zcela korektní, a tak si s touto změnou ještě určitě neco užijeme.
SCSI emulaci jsem zkoušel také, příliš úspěchu jsem ovšem neslavil, takže jsem v tomto případě přešel na novější a doufejme lepší technologii.
RPMka
Zřejmě vývojová rpm kernelu 2.6 od někoho z RedHatu. Nezkoušel jsem.