Glibc telepítés HOGYAN

Kai Schlachter

2004.03.19

Verziótörténet
Verzió: 1.012004.03.19Átdolgozta: KC
Első kiadás, az LDP által átnézve.

Tartalomjegyzék
1. Előszó
1.1. Szerzői jog
1.2. Verziótörténet
1.3. Köszönetnyilvánítás
1.4. Magyar fordítás
2. Bevezetés
2.1. Miért?
2.2. Mit?
3. Előkészületek
3.1. Szükséges dolgok
3.2. Speciális dolgok
4. A glibc telepítése
4.1. A forrás letöltése és fordítása
4.2. A telepítés
4.3. Miután a rendszer betöltődött
5. Hibakeresés — valami nem sikerült ...
5.1. Hibák a configure vagy a make futásakor a glibc fordítása közben
5.2. Ha a make install során történik valami baj

Fejezet 1. Előszó


1.4. Magyar fordítás

A magyar fordítást Diós Gergely készítette (2004.06.09). A lektorálást Daczi László végezte el (2004.06.16). A dokumentum legfrissebb változata megtalálható a Magyar Linux Dokumentációs Projekt honlapján. A dokumentum fordítása a Szegedi Tudományegyetem nyílt forráskódú szoftverfejlesztés speciálkollégiumának segítségével valósult meg.


Fejezet 2. Bevezetés

Ebben a HOGYANban kifejtem, hogyan telepítsd a glibc új változatát a rendszeredre.

Azért írtam ezt a kézikönyvet, hogy a megkíméljek másokat azoktól a problémáktól, amelyekkel én is találkoztam.

Ez a HOGYAN egyfajta irányelv beállításokból és módszerekből, amelyek nálam működtek, ezért a dokumentum tartalmáért semmilyen felelősséget nem vállalok. Saját felelősségedre használd ezeket a példákat, elveket. Erősen ajánlott, hogy a nagyobb telepítések előtt, illetve bizonyos időközönként is készíts biztonsági mentést rendszeredről.

Ha bármilyen javaslatod van a HOGYANnal kapcsolatban, vagy találtál egy bugot valamelyik disztribúcióban és javítását, küldj egy e-mail-t a címre.


Fejezet 3. Előkészületek

A glibc telepítése nem könnyű feladat, ezért sok dolgot előre meg kell csinálnod, legfőképp arra az esetre, ha valami tönkremegy. (Mint ahogy velem is történt az első glibc telepítésemkor, mivel nem tettem semmi előkészületet.)


3.2. Speciális dolgok

Képzelheted milyen problémákat okozhat, ha eltávolítod az alap-programkönyvtárat, amire egy csomó program épül.

Nálam minden rendben ment, amíg ki nem adtam a make install parancsot. Körülbelül a telepítés felénél hibaüzenetet kaptam, miszerint az rm nem tudott lefutni, aztán észrevettem, hogy még az olyan alapparancsok sem működnek, mint a cp, ls, mv, ln, tar stb. Mind azt írta ki, hogy nem találják a szükséges programkönyvtáruk egy részét.

Viszont erre is van megoldás. Programfordításkor a fordítót (compiler) rá lehet kényszeríteni, hogy a programkönyvtárakból használt függvényeket belefordítsák a programba, így azoknak már nem kell ezeket megkeresni a programkönyvtárból.

Ezért ebben a fejezetben a telepítéshez szükséges segédprogramok statikus változatát készítjük el.


3.2.1. Amikre mindenképpen szükséged lesz

3.2.1.1. A GNU-Binutils

  1. A legújabbat az ftp.gnu.org/gnu/binutils webhelyről töltheted le; a dokumentum íráskor ez a 2.14-es változat volt

  2. Csomagold ki a forrást:
    tar xIvf binutils-2.14.tar.bz2

  3. Lépj be a könyvtárba:
    cd binutils-2.14

  4. Állítsd be a makefile-okat:
    ./configure

  5. Fordítsd le a forrásokat:
    make

  6. Telepítsd:
    make install

Ha a fordítás során valamilyen gettextel kapcsolatos problémába ütköznél (mint például: "undeclared reference to lib_intl" vagy valami hasonló), akkor szedd le és telepítsd a legújabb változatot az ftp.gnu.org/gnu/gettext webhelyről.

Ha ez nem segít, akkor próbáld meg kikapcsolni az anyanyelvi támogatást a következőképpen:
./configure --no-nls

A binutils statikus változatát nem muszáj elkészíteni, de nem árt, mert sok régi változatút használó rendszerrel találkoztam, amelyekkel majdnem mindig valamilyen hiba volt, ezért szerintem jó ötlet itt megemlíteni ezeket.


3.2.1.2. GNU make

A make parancs a felelős a források lefordításáért, a gcc és más, a fordításához szükséges programok hívásáért. Ha valami baj történik az új glibc-vel, szükséged lehet valamit lefordítani, ezért nem árt, ha van egy statikus változatod, másként nem menne.

  1. Töltsd le a forrást az ftp.gnu.org/gnu/make/ webhelyről; a dokumentum írásakor a legújabb a 3.80 változat volt

  2. Csomagold ki:
    tar xIvf make-3.80.tar.bz2

  3. Lépj be a létrehozott könyvtárba:
    cd make-3.80

  4. Ügyelj rá, hogy a binárisokat statikusra fordítsd le:
    export CFLAGS="-static -O2 -g"

  5. Futtasd a beállító szkriptet:
    ./configure

  6. Fordítsd le:
    make

  7. Telepítsd a binárisokat :
    make install

  8. Ellenőrizz:
    make -v
    Az újonnan telepített változatot kell látnod. Ha nem, keresd meg a régi binárisokat, és cseréld ki őket egy szimbolikus hivatkozással (link) az új változatra.

Gratulálok! Ismét elkészítetted egy program statikus változatát.


3.2.1.3. A GNU core-utils

A core-utils a cp, rm, ln, mv stb alapparancsokból áll. Ha valami hiba történik a telepítés során, ezekre mindenképp szükség van a hiba helyrehozatalához, tehát itt a statikus változat igazán fontos.

  1. Megint csak töltsd le a forrást az ftp.gnu.org/gnu/coreutils/ webhelyről; a dokumentum íráskor a legújabb az 5.0 változat volt.

  2. Csomagold ki:
    tar xIvf coreutils-5.0.tar.bz2

  3. Lépj be a könyvtárba:
    cd coreutils-5.0

  4. Ügyelj rá, hogy a binárisokat statikusra fordítsd:
    export CFLAGS="-static -O2 -g"

  5. Futtasd a beállító szkriptet:
    ./configure

  6. Fordítsd le:
    make

  7. És telepítsd:
    make install

  8. Ellenőrizd, hogy az új változat-e az aktuális:
    cp --version
    Az új változat számát kell látnod, ha nem, akkor cseréld ki az összes régit egy szimbolikus hivatkozással az új változatra.

Most, hogy ezeknek az alapcsomagoknak a statikus változatát használod, biztos lehetsz benne, hogy minden körülmény közt működni fognak.


3.2.1.4. A GNU tar

Már használtad a GNU tar programot, amikor kicsomagoltad és telepítetted a programokat. De talán szükséged lehet majd újabb programokat fordítani, ha az új glibc miatt a rendszer összeomlik, tehát nem árt, ha ebből is van egy statikus változat (ezt személyesen tapasztaltam). Szükséged lesz a tar mellett a bz2 tömörítési algoritmusra, amely nincs benne a tar hivatalos forrásában.

  1. Töltsd le a tar forrását az ftp.gnu.org/gnu/tar webhelyről; a dokumentum írásakor a legújabb az 1.13 változat volt.

  2. Mivel sok forrás bz2 algoritmussal van tömörítve, szükséged lesz a beépített támogatásra, mert jobb mint csövekkel (pipe) dolgozni. Tehát töltsd le a foltot az ftp://infogroep.be/pub/linux/lfs/lfs-packages/4.1/tar-1.13.patch webhelyről.

  3. Csomagold ki:
    tar xzvf tar-1.13.tar.gz

  4. Másold át a foltot a tar forráskönyvtárába:
    cp tar-1.13.patch tar-1.13/

  5. Foltozd a forráskódot:
    patch -Np1 -i tar-1.13.patch

  6. Állítsd be a fordító kapcsolóit a statikus fordításhoz:
    export CFLAGS="-static -O2 -g"

  7. Most már beállíthod:
    ./configure

  8. Fordítsd le:
    make

  9. Végül telepítsd a csomagot:
    make install

  10. Egy gyors ellenőrzés, hogy feltelepült-e az új változat:
    tar --version
    Az új változatnak kell megjelennie, ellenkező esetben keresd meg a régieket és cseréld ki az újra mutató szimbolikus hivatkozásokkal.

Ha valami hibát észlelsz a make futtatásakor, próbáld meg kikapcsolni az anyanyelvi támogatást (nls). Ezt a következő kapcsolókkal érheted el:
--disable-nls

Megjegyzés: A tar ezen új változatában a -j kapcsolót kell használnod a .bzip2 fájlok kicsomagoláshoz, tehát a következő helyett:
tar xIvf anyfile.tar.bz2
így kell:
tar xjvf anyfile.tar.bz2
Nem tudom, hogy ez miért változott meg, mindenesetre így szépen működik.


3.2.1.5. A Bash shell

Én a Bash shell-t részesítem előnyben, ha másikat használsz, ügyelj arra, hogy a statikus változatát telepítsd, a glibc telepítése előtt.

  1. Töltsd le a Bash forrástt az ftp.gnu.org/gnu/bash/ webhelyről; a dokumentum írásakor a legújabb a 2.05b változat volt.

  2. Csomagold ki:
    tar xzvf bash-2.05b.tar.gz
    amely egy bash-2.05b könyvtárat hoz létre, benne a forrásokkal.

  3. Lépj be a könyvtárba:
    cd bash-2.05a

  4. Állíts be mindent a statikus programkészítéshez:
    export CFLAGS="-static -O2 -g"

  5. Állítsd be a makefile-okat:
    ./configure
    Ha valami extrát szeretnél a Bash-hoz, nézd meg a súgót:
    ./configure --help
    az összes kapcsolóról.

  6. Fordítsd le:
    make

  7. Telepítsd fel a binárisokat:
    make install
    Ez az /usr/local/bin/könyvtárba másolja a binárisokat.

  8. Ügyelj arra, hogy ne legyen más változat elérhető (mint a SuSE Linuxnál a /bin/ könyvtárban). Egyszerűen másold a binárist a /bin/ könyvtárba is:
    cp /usr/local/bin/bash /bin/
    Itt nem használunk szimbolikus hivatkozásokat, mivel a rendszerbetöltésnél és a bash indításakor ebből problémák adódhatnak.

Már van egy telepített statikus változatú Bash a rendszeren, ami így ugyan nagy, de legalább minden körülmény közt működik.

Ha másik shell-t szeretsz, használhatod azt is, csak ügyelj arra, hogy statikusan fordított változatot használj. Nyugodtan írd meg hogyan készítetted az általad használt shell statikus változatát, valószínűleg a HOGYAN következő változatában már szerepelni is fog.


Fejezet 4. A glibc telepítése

Elérkeztünk a legfontosabb részhez, a glibc telepítéséhez.


4.1. A forrás letöltése és fordítása

A glibc számos változata elérhető, de nem biztos, hogy a legújabb változat jobb, mint egy régebbi. A legjobb, ha utánanézel különböző internetes fórumokon, melyiket érdemes használni és melyiket nem. Vagy ha ismersz valakit, aki járatos a témában, kérdezd meg tőle, hátha tudja melyik változat mennyire jó.

Én a glibc-2.2.4-et telepítettem, mivel azt mondták, ez elég szépen működik, de más változatot is feltehetsz, ha az jobban tetszik.

Akkor munkára fel:

  1. Töltsd le a forrást az ftp.gnu.org/gnu/glibc/ webhelyről; amint említettem, a 2.2.4-es változatot használtam.

  2. Csomagold ki:
    tar -xzvf glibc-2.2.4.tar.gz

  3. Még szükséged lesz a "linuxthreads" csomagra is, amelyet a linuxthreads könyvtárban megtalálsz az ftp.gnu.org szerveren. A fájl neve:
    glibc-llinuxthreads-2.2.4.tar.gz
    Ügyelj arra, hogy a linuxthreads változatszáma megegyezzen a glibc-ével.

  4. Másold a linuxthreads csomagot a glibc forrás-könyvtárába:
    cp glibc-linuxthreads-2.2.4.tar.gz glibc-2.2.4

  5. Lépj be a glibc könyvtárába:
    cd glibc-2.2.4

  6. Csomagold ki a linuxthreads forrás t:
    tar xzvf linux-threads-2.2.4.tar.gz

  7. Állítsd be:
    ./configure --enable-add-ons=linuxthreads
    Ez a kapcsoló úgy állítja be a csomagot, hogy fordításkor vegye figyelembe a linuxthreads csomagot is. Ez a más Linux rendszerekkel való kompatibilitás miatt szükséges. E nélkül például nem biztos, hogy az általad fordított programok futni fognak más gépeken.

  8. Majd indítsd el a glibc fordítását:
    make
    Ez eltart egy darabig (körülbelül fél óráig tartott a 1.5 GHz-es Duron XP gépen).

Most, hogy a programkönyvtár is le lett fordítva, minden készen áll a telepítéshez, de az már nem lesz ilyen könnyű feladat.


4.2. A telepítés

A glibc telepítéséhez egy olyan rendszerre van szükség, amin semmi sem fut, mivel számos folyamat (például a sendmail) mindig megpróbálja használni a programkönyvtárat, így megakadályozza annak lecserélését. Tehát egy "lecsupaszított" rendszerre van szükségünk, amin tényleg csak a legszükségesebb dolgok futnak. Ezt úgy tudod elérni, hogy a boot opcióknál beállítod az
init=/bin/bash
értéket a rendszermaghoz. A rendszerbetöltőtől függően még meg kell tenned pár dolgot. A következőkben ezt fejtem ki, a két legelterjedtebb rendszerbetöltő, a LILO (LInux LOader) és a GNU grub esetére.


4.2.2. Grub

A Grub egy újabb rendszerbetöltő, amely támogat többféle operációs- és fájlrendszert (például támogatja a reiser fájlrendszerű partíciókról való rendszerbetöltést). Ha többet akarsz megtudni róla, látogass el a http://www.gnu.org/software/grub/ webhelyre, ahol minden szükséges dolgot megtalálsz.

Ha már van egy telepített Grub a gépen, akkor valószínűleg szöveges felületet használsz a megfelelő rendszer kiválasztására. A Grub-nak van egy szép jellegzetessége — ahelyett, hogy kézzel kéne beírnod mindent, egyszerűen kiválasztod a menüből a bejegyzést, és nyomsz egy e-t, amely megjelenít egy opciók menüt. Ebben a menüben látod a parancsokat, amelyeket a Grub a rendszerbetöltést megelőzően hajt végre. Válaszd ki a következő sort :
kernel="/ahol/a-kerneled-van és az-opcióid-vannak"
és nyomj újra egy e-t. Most szerkesztheted a sort. Itt add hozzá az
init=/bin/bash
sort, eztán nyomj Entert-t, hogy a változtatások érvényesüljenek, és nyomj b-t a rendszerbetöltéshez.


4.3. Miután a rendszer betöltődött

... Egy abszolút minimális bash környezetben találod magad.

Még a felhasználónevet és a jelszót sem kellett begépelned! Most te vagy az egyetlen szuper-felhasználó minden hatalommal, mivel a rendszer egyfelhasználós üzemmódban működik, tehát gondold végig mit csinálsz. Még fájl-elérési jogok és hasonlók sincsenek!

A prompt körülbelül így néz ki:
init-x.y#
A gyökérkönyvtár most csak olvashatóként van felcsatolva, így nem tudod ráírni az új programkönyvtárat sem. Az írhatóvá (r/w) tételhez, elég kiadni ezt a parancsot:
mount -o remount,rw /
Ha a forrásod más partíción van, akkor azt is fel kell csatolni (nálam a raid rendszert kell):
mount -t reiserfs /dev/md0 /usr/src
Amint látod, megadtam a fájlrendszer típusát is, mivel a mount nem nézi meg az /etc/fstab fájlban.

Most már beléphetsz a forrás-könyvtárába, és elkezdheted a fordítást:
make install

Ha akarsz, imádkozhatsz, hogy minden működjön... ;-)

Ha minden jól ment, akkor telepítés után mindenféle hibaüzenet nélkül visszakapod a promptot. Ha mégsem, akkor olvasd el az 5 fejezetet.

Ha nem volt semmi hiba, írd be ezt a parancsot:
ldconfig -v
a programkönyvtáraid frissítéséhez.

Gratulálok! A programkönyvtárat sikeresen telepítetted. Most írd be: mount -o remount,ro / biztosítékképpen, hogy minden adat a merevlemezre íródott.

Indítsd újra a rendszert:
exit
Ez egy hibaüzenetet fog eredményezni, miszerint rendszermag-pánikot okoztál. Ha lehet, CTRL-ALT-DEL-el próbáld meg újraindítani a számítógépet, ha nem megy, akkor csak a reset gomb marad.

Próbáld meg a rendes rendszermagot betölteni. Ha minden jól megy, már használhatod is az új programkönyvtáradat.


Fejezet 5. Hibakeresés — valami nem sikerült ...

Ha annak ellenére, hogy pontosan követted az összes utasítást és ehhez a részhez érkeztél, valószínűleg a különböző Linux kiadások miatt van valami probléma, némelyikük nem ott tárol bizonyos dolgokat, ahol azt elvileg kéne. A Suse Linux a leghíresebb az ilyen buta dolgokról, de a többivel is előfordulhat hasonló probléma. Ha ilyesmivel találkozol, és megtalálod a hiba okát — és remélhetőleg a megoldását is — tudasd velem, én hozzá fogom adni ehhez a HOGYANhoz.

Azt hiszem ez a rész sosem lesz teljesen kész, de leírok majd pár lehetséges hibát és megoldásukat.


5.1. Hibák a configure vagy a make futásakor a glibc fordítása közben

Néha találkozhatsz olyan beállítási hibával, amely szerint valamely kellék hiányzik — általában valamilyen szoftver, vagy a programkönyvtárak túl régiek. Ezzel egy csomó programnál találkoztam, különösen a statikus fordítások során. Általában semmi baj, szerezd be a szükséges szoftvereket, vagy programkönyvtárakat, azután fordítsd le őket a forrásban található leírásoknak megfelelően (általában README, INSTALL, vagy valami hasonló a nevük).

Viszont van néhány eset, amikor ez így nem működik. Például, az újabb változatú binutils fordításakor, amely szükséges a glibc fordításához (ezért is említettem a szükséges dolgok között), problémák adódtak. A binutils configure szkriptje azt írta, hogy "A glibc túl régi". Tehát azt hittem, a kígyó itt a saját farkába harap. Szerencsére erre a problémára is van megoldás, ha nem tudsz egyszerre megtenni egy nagy lépést, próbálj több, kisebb lépésben haladni.

A disztribúciómban egy 2.1.1-es változatú glibc volt. A probléma megoldásához először megpróbáltam lefordítani a 2.1.3-as glibc-t, ami sikerült is. Ezután feltelepítettem ezt az újabb változatot. Mikor újra megpróbáltam a binutils-t lefordítani, ezúttal mindent rendben talált.

Ha egy hasonló "ördögi körrel" találkoznál, nézz utána, hogy minimum milyen változatú szoftverre van szükség, aztán töltsd le azt. (Azt hiszem ezért is tartanak az FTP szervereken olyan sok régi változatot). A sikeres fordítás és telepítés után próbáld meg fordítani azt a szoftvert, ami panaszkodott az előbbi szoftver változata miatt, a legtöbb esetben már le tudod fordítani. Lehetséges, hogy ezt a lépést többször is meg kell ismételned egy hiányzó, vagy régi szoftver fordításánál. Ez az amit úgy hívok, hogy "a patkány hosszú farka" vagy "dominó effektus". Valami megtételéhez több dolgot meg kell tenned. Ez elég idegesítő lehet, de a jó oldala a dolognak, hogy utána már biztos lehetsz benne, az igazán régi programok frissítve lesznek a telepítés végére.


5.2. Ha a make install során történik valami baj

A legáltalánosabb hiba, hogy nincsenek meg a statikus alapkellékek; ebben az esetben csak a cd parancsot tudod használni, semmi mást. Ezért írtam le a HOGYANban részletesen, hogyan tegyük azokat a kellékeket statikussá.

Az egyetlen nem statikus kellék a mount, amely a linux-utils csomagban van (véleményem szerint nagyon helyesen), amely tartalmazza még többek között a login, passwd stb. programokat. Mivel nem lehet statikus változatokat használni PAM vagy más biztonsághoz kapcsolódó szoftverekkel keverve, elég ésszerűtlen dolog lenne bármilyen körülmények közt is statikussan fordítani őket. Természetesen megteheted, ha tényleg tudod mit csinálsz.


5.2.1. Visszatérés egy működő rendszerhez

Visszaállítani egy működő rendszert elég egyszerű, ha megvannak a statikus kellékek: lépj be a /usr/local/lib/ könyvtárba, és tedd át az összes újonnan telepített fájlt egy másik könyvtárba (például /usr/local/lib/eltarolva). Könnyen azonosíthatod őket a változatszámuk alapján, amely ugyanaz, mint a telepített glibc programkönyvtáré, valamint a létrehozási dátum alapján. Elég ritka, hogy két különböző programkönyvtárnak azonos a változatszáma és létrehozási ideje — én személy szerint sosem láttam ilyet — de a biztonság kedvéért ellenőrizd a dátum/időt, hogy semmi fontosat ne törölj le. Ehhez jó segítséget nyújt a Midnight Commander, ha telepítve van.

Megpróbálhatod letörölni a ld-2.2.4.so és a libc-2.2.4.so fájlokat, majd kiadni egy ldconfig -v parancsot, mielőtt eltávolítanád az összes tönkrement fájlt. Ezzel lehetővé válik a legtöbb program használata, a Midnight Commander-t minden esetben tudod használni.

Ne felejts el legalább egy ldconfig -v parancsot kiadni, miután eltávolítottad az összes fájlt.