Következő Előző Tartalom

5. Telepítés elsődleges C könyvtárként

Ez a rész arról szól, hogy hogyan telepítsd a 2-es glibc-t elsődleges C könyvtárként. Ezek után minden program amit a rendszereden fordítasz az új C programkönytárat fogja használni, hacsak nem beszéled le erről speciális fordító kapcsolók segítségével.

Ha RedHat vagy Debian linux-ot használsz és letöltötted a megfelelő rpm vagy deb csomagokat, átugorhatod ezt a részt, nézd meg a RedHat vagy Debian telepítési útmutatót.

5.1 A könyvtár fordítása forráskódból

Ez a rész leírja, hogy hogyan fordítsd le a 2-es glibc-t és a kiegészítőit a forrásból. Akkor kell fordítanod a glibc-t, ha változtatni akarsz az alapbeállításain vagy az optimalizáláson, vagy olyan kiegészítőt akarsz használni, amihez nincsen bináris csomag.

Előkövetelmények

Egy i586@133 gépen 64 MB RAM-mal, kb. 3 órába telik, amíg elkészül a teljes könyvtár a kiegészítőkkel. Egy erősen kihasznált i686@200-en ugyanez kb. fél órába kerül.

A forrás kicsomagolása

Ahhoz, hogy le tudd fordítani a forrást, ki kell csomagolnod azt az archívból. Erre a legjobb megoldás a következő:

 tar xzf glibc-2.0.6.tar.gz
 cd glibc-2.0.6
 tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
 tar xzf ../glibc-crypt-2.0.6.tar.gz
 tar xzf ../glibc-localedata-2.0.6.tar.gz
 
Ez a glibc-2.0.6 könyvtárba csomagolja ki a linuxthreads, crypt és locale kiegészítőket, ahol a configure megtalálja őket.

Beállítások

A glibc-2.0.6 könyvtárba hozzál létre egy compile nevű könyvtárat majd lépjél bele. Mindent ebben a könytárban fogsz csinálni, ez egyszerűsíti a takarítást. (A fejlesztők eddig nem törték magukat, hogy a 'make clean' tökéletesen működjön.)

mkdir compile
cd compile

Futtasd le a ../configure szkriptet. Ha kiegészítő csomagokat is akarsz használni, meg kell adnod az --enable-add-ons kapcsolót, pl.: --enable-add-on\s=linuxthreads,crypt,localedata.

Valószínűleg meg akarod adni a célkönyvtárat is, ahova a glibc-t telepíteni akarod. Mivel a szabványos linux disztribúcióhoz akarsz igazodni, add meg a --prefix=/usr kapcsolót. (Ha egy linux rendszeren az /usr könyvtárat adod meg, a configure magától be tud állítani egyéb fontos elérési útvonalakat, ahova a libc.so és egyéb más fontos a /lib-ben lévő könyvtárakat kell tenni. A configure parancssora valahogy így fog kinézni:

 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr

Fordítás

A fordításhoz és ellenőrzéshez írd be a következőket:

 make
 make check
 

5.2 Felkészülés a telepítés előtt

Akár fordítod a glibc-t, akár bináris csomagokból rakod fel, néhány fájlt át kell mozgatnod, mert bár minden újonnan fordított program az új glibc-t fogja használni, a régi (nem statikusan linkelt) programoknak szükségük van a régi programkönyvtárra (libc5), ezért azt nem írhatod egyszerűen felül.

  1. Hozzál létre egy új könyvtárat a régi fájloknak:
     mkdir -p /usr/i486-linuxlibc5/lib
     
    
  2. A régi fejléc fájlokat ki kell venni a /usr/include-ból:
     mv /usr/include /usr/i486-linuxlibc5/include
     
    
  3. Csinálj egy új include könyvtárat és hozd létre a szükséges, más include könyvtárakra mutató kapcsokat:
     mkdir /usr/include
    
     ln -s /usr/src/linux/include/linux /usr/include/linux
     ln -s /usr/src/linux/include/asm /usr/include/asm
     ln -s /usr/X11R6/include/X11 /usr/include/X11
     ln -s /usr/lib/g++-include /usr/include/g++
     
    
    Ezek a kapcsok lehet, hogy kicsit eltérnek a megadottól, mert az include könyvtárak helye lehet disztribúciófüggő. Legalább is a Slackware linuxokon a g++ fejléc fájlok a /usr/local/g++-include könyvtárban vannak, míg a Debian linuxokon a /usr/include/g++ könyvtárban találhatók és a /usr/lib/g++-include kapocs a /usr/include/g++-re mutat. Az utóbbi esetben valószínűleg szerencsésebb az eredeti g++ include könyvtárat visszamozgatni a /usr/include-be.
  4. Állítsál vissza minden plusz fejléc fájlt és kapcsot, ami esetleg az eredeti /usr/include könyvtárban volt. Egyes szabványtalan programkönyvtárak, mint pl. az ncurses fájlokat raknak be a /usr/include könyvtárba, vagy kapcsokat hoznak ott létre, melyek az adott programkönyvtár include könyvtárára mutatnak. Ezeket a fájlokat és kapcsokat vissza kell állítanod, hogy továbbra is használni tudd a kérdéses programkönyvtárakat.
  5. Add hozzá az új programkönyvtár könyvtárát (pl. /usr/i486-linuxlibc5/lib) az /etc/ld.so.conf fájl elejére. Legalább az 1.8.8-as verziójú ld.so-ra van szükséged, különben bizarr hibaüzenetekkel találod magad szembe a glibc telepítése után.
  6. Mozgasd/másold át az összes régi C programkönyvtárat az új könyvtárba.
     mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
     mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
     mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
     mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
     mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
     mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
     mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
     cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
     cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib
     
    
    A libm.so.5 és libc.so.5 fájlokat másolni kell és nem mozgatni, ha a /usr nem a / partíción van, mert ezekre a programkönyvtárakra a linuxnak induláskor szüksége van, ezért a / köteten kell legyenek.
  7. Mozgasd az /usr/lib/*.o fájlokat az új könyvtárba.
     mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
     mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
     mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
     mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib
     
    
  8. Frissítsd a programkönyvtár gyorsítótárat, miután átrendezted a programkönyvtárakat.
     ldconfig -v
     
    

5.3 Telepítés bináris csomagból

Ha előre fordított bináris csomagokból telepíted a glibc-t, először ellenőrizd, hogy mi van a csomagokban:

 tar -tzvf glibc-2.0.bin.i386.tar.gz
 tar -tzvf glibc-crypt-2.0.bin.i386.tar.gz
 
Ha elégedett vagy az eredménnyel, telepítheted a glibc-t:
 cd /
 tar -xzf glibc-2.0.bin.i386.tar.gz
 tar -xzf glibc-crypt-2.0.bin.i386.tar.gz
 ldconfig -v
 
Ha más architektúrát vagy verziót használsz, értelemszerűen helyettesítsd a fájlneveket.

A glibc legújabb verziója általában nincs meg bináris csomagban, viszon a legújabb verzió használata mindig javasolt, a hibajavítások miatt. Ha nem tudod a glibc-t lefordítani a saját gépeden, töltsél le egy bináris programkönyvtárat tartalmazó csomagot egy olyan disztribúcióból, ami a glibc-t használja (pl. RedHat) és telepítsd fel.

5.4 Telepítés forráskódból

A programkönyvtár forráskódból való telepítéséhez, add ki root felhasználóként a compile/ könyvtárból a következő utasításokat:

 make install
 ldconfig -v
 

5.5 A gcc specs fájljának frissítése

A telepítés végső lépcsőjeként (mind a bináris csomagok, mind a forráskódból való telepítés esetén) frissíteni kell a gcc specs fájlját, hogy a fordító az új glibc-vel szerkessze össze a későbbiekben fordított programokat. Hogy meghatározd, a gcc melyik specs fájl használja, add ki a következő parancsot:

 % gcc -v
 reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2
 

Ebben az esetben a i486-unknown-linux írja le a rendszert és a 2.7.2.2 a verziót. Át kell másolnod a /usr/lib/gcc-lib/<system> könyvtárat a régi rendszer könyvtárba:

 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxlibc5
 

Lépjél be az eredeti könyvtáraba, majd a verziószám által jelölt könyvtárba:

 cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
 

Az ebben a könyvtárban található specs fájlt kell módosítanod. A fájlban írd át a /lib/ld-linux.so.1-t /lib/ld-linux.so.2-ra. Minden hivatkozást a %{...:-lgmon} kifekezésre törölnöd kell a fájlból, mert a glibc nem a gmon-t használja. Később e dokumentumban találsz egy Példa specs fájl című részt.

5.6 A feltelepített programkönyvtár tesztelése

A programkönyvtár ellenőrzése végett, hozzál létre a glibc.c nevű fájlt a következőkkel:

 #include <stdio.h>

 main()
 {
     printf("hello world!\n");
 }
 
Fordítsd le a programot.
 % gcc glibc.c -o glibc
 
Az ldd programmal ellenőrizd, hogy a fordító tényleg az új programkönyvtárat használja:
 % ldd glibc
 libc.so.6 => /lib/libc.so.6 (0x4000e000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
 
Ha a programot sikerül lefordítani, és futása eredményeként kiírja, hogy "hello world!" a telepítés sikerült.


Következő Előző Tartalom