Celý proces sestává z několik kroků:
- Upgrade RPM
Prakticky všechny balíčky pro glibc 2.2 jsou již baleny v RPM verze 4.0. Standardní Red Hat 6.2 podporu rpm verze 4.0 neobsahuje. Je tedy nejprve nutné ji nainstalovat. Potřebujeme RPM manager ve verzi minimálně 3.0.5. Zároveň ho však potřebujeme zabalený v balíčku verze 3.0. Takový se dá sehnat například zde.
Pak už stačí jen provéstrpm -U rpm-3.0.5-7.5x.i386.rpm
Pokud se všechno povedlo, což by mělo, můžete nyní do systému bez problémů instalovat rpm 4.0 balíčky.
- Potřebné balíky
Zvolil jsem si na rpmfind.net distribuci RawHide 1.0. Je to vývojová distribuce, kterou produkuje přímo Red Hat, a na rpmfind k ní mám velmi dobrý přístup. Je pochopitelně možné použít jiné balíky.
Co tedy budeme potřebovat? Od glibc verze 2.2 již nejsou přímo v glibc obsaženy knihovny libdb.so.*, na kterých závisí spousta programů v systému. Potřebujeme tedy jejich samostatné balíčky. Já jsem použil:
db1-1.85-5.i386.rpm db2-2.4.14-5.i386.rpm db3-3.1.17-5.i386.rpm
Dají se najít například na zde.
Dále budeme potřebovat samotnou glibc 2.2:
glibc-2.2.2-7.i386.rpm glibc-common-2.2.2-7.i386.rpm
k nalezení tamtéž
Nakonec budeme potřebovat nový package manager, rpm-4.0. Například:
rpm-4.0.2-7x.i386.rpm
To bude asi tak vše. Doporučuji všechno stáhnout do samostatného adresáře. Nadále budu předpokládat, že jste tak učinili. Pokud jste vše stáhli podle tohoto návodu, máte nyní kolem 13MB rpm balíčků.
- 3. řešení závislostí
Upgrade glibc zapříčiní změnu v celém systému. Možná bude potřeba vyřešit další závislosti. Jaké, to poznáme pokud spustíme příkaz
rpm -U –test *
(předpokládám, že jste v onom adresáři, který jste si před chvílí
založili). Vyžadované knihovny lze s výhodou najít na rpmfind.net.
Například:error: failed dependencies: libbz2.so.1 is needed by rpm-4.0.2-7x
značí, že budeme potřebovat ještě libbz2.so.1. Nalezneme ho například v balíku
bzip2-1.0.1-3.i386.rpm
přidáme ho do našeho velkého adresáře a zkusíme znovu otestovat závislosti. V ideálním případě by měly původně nesplněné závislosti zmizet a my bychom měli pokročit dále. Někdy tomu tak není. V tom případě nastupují
- Brutálnější metody
Klasickým příkladem nevýhodných závislostí je právě balíček bzip2–1.0.1–3.i386.rpm. Při upgradu smaže svého předchůdce, na kterém závisí jiný software. Při testování závislosti na upgrade napíše
error: failed dependencies: libbz2.so.0 is needed by passwd-0.64.1-1
Jsou dvě možnosti. Buďto upgradovat i passwd, které bude záviset i na dalších balících, a tak pokračovat do aleluja, nebo mít prostě v systému knihovny obě.
V případě libbz2 to není žádná tragédie. Můžeme také narazit na balík, který upgradovat nechceme nebo nemůžeme. Pokud tedy chceme mít v systému obě knihovny, můžeme samostatně nainstalovatrpm -i --nodeps bzip2-1.0.1-3.i386.rpm
V tuto chvíli přestane bzip2 fungovat. Je závislý na knihovnách, které prostě v systému zatím nejsou.
- Instalace
Pokud už testování závislosti proběhne bez jakýchkoliv hlášek a problémů, je na čase připravit si smyčku, nadechnout se a sputit
rpm -U -h *
Poté, co se tento příkaz vrátí, je systém v dost polovičatém stavu.
Programy, které běží, jsou stále slinkovány s glibc 2.1. Nové programu
už ne. Měli byste vyzkoušet funkčnost základních funkcí systému před
tím, než rebootnete. Mě se například nešlo vůbec k počítači přihlásit.
Chce to killnout všechny login procesy, inet je znovu nastartuje, ale
tentokrát již budou dynamicky slinkovány s novou verzí glibc. Obecně je
dobré vyzkoušet funkčnost co nejvíce věcí před tím, než člověk přikročí
k restartu počítače. - Závěr
Není to tak drastické, jak to vypadá. Upgradoval jsem již tři počítače a s žádným z nich nebyl problém. Občas je otravné tahat tu spoustu balíků, které je třeba upgradovat.
Tak, a to je vše. Je nutné podotknout, že upgrade není zcela bez rizika a pokud si na něj netroufáte, je možná jednodušší pořídit si novou verzi distribuce, která již glibc 2.2 obsahuje, a použít funkci upgrade instalačního programu.