6.9. Glibc-2.31

Glibc pakken inneholder hovedbiblioteket. Dette biblioteket inneholder de grunnleggende rutinene for tildeling av minne, søking i kataloger, åpning og lukking av filer, lesing og skriving av filer, strenghåndtering, mønster matching, aritmetikk og så videre.

 

Omtrentlig byggetid: 19 SBU

Nødvendig diskplass: 5.5 GB

6.9.1. Installasjon av Glibc

Glibc byggesystem er selvforsynt og vil installere perfekt, selv om kompilatorens spesifikasjonsfil og linker fremdeles peker på /tools. Spesifikasjonene og linkeren kan ikke justeres før Glibc installasjonen fordi Glibc autoconf tester ville gi falske resultater og målet om å oppnå et rent bygg vil ikke oppnås.

Noen av Glibc programmene bruker den ikke FHS kompatible /var/db mappen for å lagre runtime-data. Bruk følgende oppdatering for å få slike programmer til å lagre runtime-data på FHS kompatible steder:

patch -Np1 -i ../glibc-2.31-fhs-1.patch

Lag en symlink for LSB samsvar. I tillegg, for x86_64, oppretter du en kompatibilitetssymlink som kreves for at den dynamiske lasteren skal fungere korrekt:

case $(uname -m) in
i?86) ln -sfv ld-linux.so.2 /lib/ld-lsb.so.3
        ;;
        x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64
                      ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3
        ;;
esac

Glibc dokumentasjonen anbefaler å bygge Glibc i en dedikert bygge mappe:

mkdir -v build
cd build

Forbered Glibc for kompilering:

CC="gcc -ffile-prefix-map=/tools=/usr" \
../configure --prefix=/usr \
                     --disable-werror \
                     --enable-kernel=3.2 \
                     --enable-stack-protector=strong \
                     --with-headers=/usr/include \
libc_cv_slibdir=/lib

Betydningen av alternativene og nye konfigurasjonsparametere:

CC="gcc -ffile-prefix-map=/tools=/usr"
   Som resultat av kompileringen få GCC til å registrere eventuelle referanser til filer i /tools som om filene bodde i /usr. Dette unngår introduksjon av ugyldige stier i feilsøkingssymboler.

--disable-werror
  Dette alternativet deaktiverer -Werror alternativet gitt til GCC. Dette er nødvendig for å kunne kjøre testserien.

--enable-stack-protector=strong
  Dette alternativet øker systemsikkerheten ved å legge til ekstra kode for å sjekke om buffer overflows, for eksempel stack smashing attacks.

--with-headers=/usr/include
  Dette alternativet forteller byggesystemet hvor du finner kjerne API deklarasjoner. Disse deklarasjonene søkes som standard i /tools/include.

libc_cv_slibdir=/lib
  Denne variabelen angir riktig bibliotek for alle systemer. Vi ønsker ikke at lib64 skal brukes.

Kompilere pakken:

make

I denne delen anses testsuiten for Glibc som kritisk. Ikke hopp over det under noen omstendigheter.

Vanligvis er det noen få tester som ikke består. Testfeilene som er oppført nedenfor er vanligvis trygge å ignorere.

case $(uname -m) in
    i?86) ln -sfnv $PWD/elf/ld-linux.so.2 /lib ;;
    x86_64) ln -sfnv $PWD/elf/ld-linux-x86-64.so.2 /lib ;;
esac

Den symbolske lenken over er nødvendig for å kjøre testene på dette stadiet av bygningen i chroot-miljøet. Det vil bli overskrevet i installasjonsfasen nedenfor.

make check

Du kan se noen testfeil. Glibc testpakken er noe avhengig av vertssystemet. Dette er en liste over de vanligste problemene som er sett for noen versjoner av LFS:

  • misc/tst-ttyname er kjent for å mislykkes i LFS chroot miljøet.
  • inet/tst-idna_name_classify er kjent for å mislykkes i LFS chroot miljøet.
  • posix/tst-getaddrinfo4 og posix/tst-getaddrinfo5 kan mislykkes på noen arkitekturer.
  • The nss/tst-nss-files-hosts-multi testen kan mislykkes av årsaker som ikke er bestemt.
  • The rt/tst-cputimer{1,2,3} tester avhenger av vertssystemkjernen. Kjerner 4.14.91–4.14.96, 4.19.13–4.19.18 og 4.20.0–4.20.5 er kjent for å føre til at disse testene mislykkes.
  • Math testene mislykkes noen ganger når de kjøres på systemer der CPU ikke er en relativt ny Intel- eller AMD-prosessor.

Selv om det er en ufarlig melding, vil installasjonsfasen til Glibc klage på fraværet av /etc/ld.so.conf. Forhindre denne advarselen med:

touch /etc/ld.so.conf

Fiks den genererte Makefile for å hoppe over en unødvendig tilregnelighetskontroll som mislykkes i LFS delvise miljø:

sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile

Installer pakken:

make install

Installer konfigurasjonsfilen og runtime mappen for nscd:

cp -v ../nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd

Deretter installerer du locales som kan få systemet til å svare på et annet språk. Ingen av locales er påkrevd, men hvis noen av dem mangler, ville testsuitene til fremtidige pakker hoppe over viktige testcases.

Individuelle regionaldata kan installeres ved hjelp av localedef programmet. F.eks. Den første localedef kommandoen nedenfor kombinerer /usr/share/i18n/locales/cs_CZ tegn-uavhengig språkdefinisjon med /usr/share/i18n/charmaps/UTF-8.gz tegntabell definisjonen og legger resultatet til /usr/lib/locale/locale-archive fil. Følgende instruksjoner vil installere det minste sett med regionaldata som er nødvendige for optimal dekning av tester:

mkdir -pv /usr/lib/locale
localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i el_GR -f ISO-8859-7 el_GR
localedef -i en_GB -f UTF-8 en_GB.UTF-8
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f UTF-8 it_IT.UTF-8
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ja_JP -f SHIFT_JIS ja_JP.SIJS 2> /dev/null || true
localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030
localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS

I tillegg kan du installere språk for ditt eget land, språk og tegnsett.

Alternativt kan du installere alle regionaldata som er oppført i glibc-2.31 /localedata/SUPPORTED filen (den inkluderer alle steder angitt ovenfor og mange flere) samtidig med følgende tidkrevende kommando:

make localedata/install-locales

Bruk deretter localedef kommandoen til å opprette og installere regionaldata som ikke er oppført i glibc-2.31 /localedata/SUPPORTED filen i det usannsynlige tilfellet du trenger dem.

Glibc bruker nå libidn2 når de skal løse internasjonaliserte domenenavn. Dette er en kjøre tidsavhengighet. Hvis denne funksjonen er nødvendig, er instruksjonene for å installere libidn2 på BLFS libidn2 siden.

6.9.2. Konfigurere Glibc

6.9.2.1. Legge til nsswitch.conf

Filen /etc/nsswitch.conf må opprettes fordi standardverdiene fra Glibc ikke fungerer bra i et nettverksmiljø.

Opprett en ny fil /etc/nsswitch.conf ved å kjøre følgende:

cat > /etc/nsswitch.conf << "EOF"

# Begin /etc/nsswitch.conf

 

passwd: files
group: files
shadow: files

 

hosts: files dns
networks: files

 

protocols: files
services: files
ethers: files
rpc: files

 

# End /etc/nsswitch.conf
EOF

6.9.2.2. Legge til data for tidssoner

Installer og konfigurer tidssonedataene med følgende:

tar -xf ../../tzdata2019c.tar.gz

 

ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}

 

for tz in etcetera southamerica northamerica europe africa antarctica \
               asia australasia backward pacificnew systemv; do
      zic -L /dev/null -d $ZONEINFO ${tz}
      zic -L /dev/null -d $ZONEINFO/posix ${tz}
      zic -L leapseconds -d $ZONEINFO/right ${tz}
done

 

cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p America/New_York
unset ZONEINFO

Betydningen av zic kommandoene:

zic -L /dev/null ...
   Dette skaper posix tidssoner, uten sprang sekunder. Det er konvensjonelt å legge disse i både zoneinfo og zoneinfo/posix. Det er nødvendig å sette POSIX-tidssonene i zoneinfo, ellers vil forskjellige testsuiter rapportere feil. På et innebygd system, der det er lite plass og du ikke har tenkt å oppdatere tidssonene, du kan spare 1,9 MB ved å ikke bruke posix mappen, men noen applikasjoner eller testsuiter kan gi noen feil.

zic -L leapseconds ...
   Dette skaper riktige tidssoner, inkludert sprang sekunder. På et innebygd system, der det er lite plass og du ikke har tenkt å oppdatere tidssonene, eller bry deg om riktig tid, kan du spare 1,9 MB ved å utelate right mappen.

zic ... -p ...
   
Dette oppretter posixrules filen. Vi bruker New York fordi POSIX krever at sommertidsreglene er i samsvar med amerikanske regler.

En måte å bestemme den lokale tidssonen på er å kjøre følgende skript:

tzselect

Etter å ha svart på noen spørsmål om plasseringen, vil skriptet skrive ut navnet på tidssonen (f.eks. Amerika/Edmonton). Det er også noen andre mulige tidssoner oppført i /usr/share/zoneinfo som Canada/Eastern eller EST5EDT som ikke er identifisert av skriptet, men som kan brukes.

Opprett deretter filen /etc/localtime ved å kjøre:

ln -sfv /usr/share/zoneinfo/<xxx> /etc/localtime

Erstatt <xxx> med navnet på den valgte tidssonen (f.eks. Canada/Eastern).

6.9.2.3. Konfigurere Dynamisk laster

Som standard søker den dynamiske lasteren (/lib/ld-linux.so.2) gjennom /lib og /usr/lib etter dynamiske biblioteker som er nødvendige av programmer mens de kjøres. Imidlertid, hvis det er biblioteker i andre kataloger enn /lib og /usr/lib, må disse legges til filen /etc/ld.so.conf for at den dynamiske lasteren skal finne dem. To kataloger som vanligvis er kjent for å inneholde flere biblioteker, er /usr/local/lib og /opt/lib, så legg disse katalogene til den dynamiske lasterens søkebane.

Opprett en ny fil /etc/ld.so.conf ved å kjøre følgende:

cat > /etc/ld.so.conf << "EOF"

# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib

 

EOF

Om ønsket kan den dynamiske lasteren også søke i en mappe og inkludere innholdet i filene som finnes der. Vanligvis er filene i denne katalogen en linje som spesifiserer ønsket biblioteksti. For å legge til denne muligheten, kjør følgende kommandoer:

cat >> /etc/ld.so.conf << "EOF"

# Add an include directory
include /etc/ld.so.conf.d/*.conf

 

EOF
mkdir -pv /etc/ld.so.conf.d

6.9.3. Innholdet i Glibc

Installerte programmer: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, makedb, mtrace, nscd, pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, zdump, og zic

Installerte biblioteker: ld-2.31.so, libBrokenLocale.{a,so}, libSegFault.so, libanl.{a,so}, libc.{a,so}, libc_nonshared.a, libcrypt.{a,so}, libdl.{a,so}, libg.a, libm.{a,so}, libmcheck.a, libmemusage.so, libmvec.{a,so}, libnsl.{a,so}, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libpcprofile.so, libpthread.{a,so}, libpthread_nonshared.a, libresolv.{a,so}, librt.{a,so}, libthread_db.so, og libutil.{a,so}

Installerte mapper: /usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/netash, /usr/include/netatalk, /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /usr/include/rpc, /usr/include/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, /var/cache/nscd, og /var/lib/nss_db

 

Korte beskrivelser

catchsegv -Kan brukes til å lage en stakkspor når et program avsluttes med en segmenteringsfeil

gencat Genererer meldingskataloger

getconf Viser systemkonfigurasjonsverdiene for filsystemspesifikke variabler

getent Henter oppføringer fra en administrativ database

iconv Utfører tegnsettkonvertering

iconvconfig Oppretter hurtiglastende iconv modulkonfigurasjonsfiler

ldconfig Konfigurerer runtime bindinger for dynamiske lenker

ldd Rapporter hvilke delte biblioteker kreves av hvert gitt program eller delt bibliotek

lddlibc4 Hjelper ldd med objektfiler

locale Skriver ut forskjellige opplysninger om gjeldende tidssone

localedef Kompilerer landspesifikasjoner

makedb - Oppretter en enkel database fra tekstinndata

mtrace - Leser og tolker en minnesporingsfil og viser et sammendrag i menneskelig lesbart format

nscd - En nisse (daemon) som gir en hurtigbuffer for de vanligste forespørslene om navnetjenester

pcprofiledump - Dumper informasjon generert av PC profilering

pldd - Viser dynamiske delte objekter som brukes av prosesser

sln - Et statisk koblet ln program

sotruss - Sporer delte biblioteksprosedyrer for en spesifisert kommando

sprof - Leser og viser delte objektprofileringsdata

tzselect - Spør brukeren om plasseringen av systemet og rapporterer den tilhørende tidssonebeskrivelsen

xtrace - Sporer utførelsen av et program ved å skrive ut den for øyeblikket utførte funksjonen

zdump - Tidssone dumperen

zic - Tidssone kompilatoren

ld-2.31.so - Hjelpeprogrammet for delte bibliotekkjørbare filer

libBrokenLocale - Brukes internt av Glibc som et grovt hack for å få ødelagte programmer (f.eks. Noen Motif-applikasjoner) som kjører. Se kommentarer i glibc-2.31 /locale/broken_cur_max.c for mer informasjon

libSegFault - Segmenteringsfeilsignalbehandleren, brukt av catchsegv

libanl - Et bibliotek med asynkron navnoppslag

libc - Hovedbiblioteket for C

libcrypt - Kryptografibiblioteket

libdl - Det dynamiske koblingsgrensesnittbiblioteket

libg - Dummy bibliotek som ikke inneholder noen funksjoner. Tidligere var et runtime bibliotek for g++

libm - Det matematiske biblioteket

libmcheck - Slår på kontroll av minnetildeling når det er koblet til

libmemusage - Brukes av memusage for å samle informasjon om minnebruken til et program

libnsl - Nettverkstjenestebiblioteket

libnss - Navnetjenestebytte bibliotekene, som inneholder funksjoner for å løse vertsnavn, brukernavn, gruppenavn, aliaser, tjenester, protokoller, etc.

libpcprofile - Kan forhåndsinnlastes til en PC profil, en kjørbar

libpthread - POSIX trådbiblioteket

libresolv - Inneholder funksjoner for å opprette, sende og tolke pakker til Internetts domenenavnservere

librt - Inneholder funksjoner som gir de fleste av grensesnittene som er spesifisert av POSIX.1b Realtime Extension

libthread_db - Inneholder funksjoner som er nyttige for å bygge feilsøkere for flertrådede programmer

libutil - Inneholder kode for “standard” -funksjoner som brukes i mange forskjellige Unix-verktøy

Forrige Hjem Neste