8.5.1. Installation of Glibc
        
        
          Noen av Glibc programmene bruker ikke-FHS kompatible /var/db mappen til å lagre kjøretidsdataene i.
          Bruk følgende oppdatering for å forsikre om at slike programmer
          lagrer kjøretidsdataene deres på de FHS kompatible stedene:
        
        patch -Np1 -i ../glibc-2.37-fhs-1.patch
        
          Fiks et sikkerhetsproblem identifisert oppstrøms:
        
        sed '/width -=/s/workend - string/number_length/' \
    -i stdio-common/vfprintf-process-arg.c
        
          Glibc dokumentasjonen anbefaler å bygge Glibc i en dedikert
          byggemappe:
        
        mkdir -v build
cd       build
        
          Sørg for at ldconfig
          og sln verktøyene vil
          bli installert i /usr/sbin:
        
        echo "rootsbindir=/usr/sbin" > configparms
        
          Forbered Glibc for kompilering:
        
        ../configure --prefix=/usr                            \
             --disable-werror                         \
             --enable-kernel=3.2                      \
             --enable-stack-protector=strong          \
             --with-headers=/usr/include              \
             libc_cv_slibdir=/usr/lib
        
          
            Betydningen av konfigureringsalternativene:
          
          
            - 
              --disable-werror
- 
              
                Dette alternativet deaktiverer alternativet -Werror sendt til
                GCC. Dette er nødvendig for å kjøre testpakken.
               
- 
              --enable-kernel=3.2
- 
              
                Dette alternativet forteller byggesystemet at denne glibc kan
                brukes med kjerner så gamle som 3.2. Dette betyr å generere
                løsninger i tilfelle et systemanrop introdusert i en senere
                versjon ikke kan brukes.
               
- 
              --enable-stack-protector=strong
- 
              
                Dette alternativet øker systemsikkerheten ved å legge til
                ekstra kode for å se etter bufferoverflyt "buffer overflows",
                for eksempel stabel (stack) knusende angrep.
               
- 
              --with-headers=/usr/include
- 
              
                Dette alternativet forteller byggesystemet hvor det skal
                finne kjernens API deklarasjoner.
               
- 
              libc_cv_slibdir=/usr/lib
- 
              
                Denne variabelen setter riktig bibliotek for alle systemer.
                Vi ønsker ikke at lib64 skal brukes.
               
 
        
          Kompiler pakken:
        
        make
        
          ![[Important]](../images/important.png) 
          
            Important
          
          
            I denne delen anses testpakken for Glibc som kritisk. Ikke hopp
            over den under noen omstendigheter.
          
         
        
          Vanligvis består ikke noen få tester. Testfeilene som er oppført
          nedenfor er vanligvis trygge å ignorere.
        
        make check
        
          Du kan se noen testfeil. Glibc testpakken er noe avhengig av
          vertssystemet. Noen få feil ut av over 5000 tester kan generelt
          ignoreres. Dette er en liste over de vanligste problemene som er
          sett for nyere versjoner av LFS:
        
        
          
            - 
              
                io/tst-lchmod er kjent
                for å mislykkes i LFS chroot miljøet.
               
- 
              
                misc/tst-ttyname er
                kjent for å mislykkes i LFS chroot miljøet.
               
- 
              
                stdlib/tst-arc4random-thread
                testen er kjent for å mislykkes hvis vertskjernen er relativt
                gammel.
               
- 
              
                Noen tester, for eksempel nss/tst-nss-files-hosts-multi, er
                kjent for å mislykkes på relativt trege systemer på grunn av
                et internt tidsavbrudd.
               
 
        
          Selv om det er en ufarlig melding, vil installasjonsstadiet til
          Glibc klage på fravær av /etc/ld.so.conf. Forhindre denne advarselen med:
        
        touch /etc/ld.so.conf
        
          Fiks Makefilen til å hoppe over en unødvendig sunnhetssjekk som
          svikter i LFS delmiljøet:
        
        sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
        
          Installer pakken:
        
        make install
        
          Fiks en hardkodet bane til den kjørbare lasteren i ldd skriptet:
        
        sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd
        
          Installer konfigurasjonsfilen og kjøretidsmappen for nscd:
        
        cp -v ../nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd
        
          Installer systemd støttefilene for nscd:
        
        install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf
install -v -Dm644 ../nscd/nscd.service /usr/lib/systemd/system/nscd.service
        
          Installer deretter lokalitetene som kan få systemet til å svare i
          et annet språk. Ingen av disse stedene er påkrevd, men hvis noen av
          dem mangler, vil testpakkene til noen pakker hoppe over viktige
          testsaker.
        
        
          Individuelle lokaliteter kan installeres ved å bruke localedef programmet. For
          eksempel den andre localedef kommandoen nedenfor
          kombinerer /usr/share/i18n/locales/cs_CZ tegnsettuavhengig
          lokalitetsdefinisjonen med /usr/share/i18n/charmaps/UTF-8.gz tegnsett
          definisjonen og legger resultatet til /usr/lib/locale/locale-archive filen. Følgende
          instruksjoner vil installere minimumssettet med lokaliteter 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 ISO-8859-1 en_GB
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_ES -f ISO-8859-15 es_ES@euro
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 is_IS -f ISO-8859-1 is_IS
localedef -i is_IS -f UTF-8 is_IS.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f ISO-8859-15 it_IT@euro
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.SJIS 2> /dev/null || true
localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i se_NO -f UTF-8 se_NO.UTF-8
localedef -i ta_IN -f UTF-8 ta_IN.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
localedef -i zh_TW -f UTF-8 zh_TW.UTF-8
        
          Installer i tillegg lokaliteten for ditt eget land, språk og
          tegnsett.
        
        
          Alternativt kan du installere alle lokaliteter som er oppført i
          glibc-2.37/localedata/SUPPORTED filen
          (den inkluderer alle lokaliteter oppført ovenfor og mange flere)
          med en gang med denne tidkrevende kommandoen:
        
        make localedata/install-locales
        
          Bruk deretter localedef kommandoen for å lage
          og installere lokaliteter som ikke er oppført i glibc-2.37/localedata/SUPPORTED filen når du
          trenger dem. For eksempel er følgende to lokaliteter nødvendig for
          noen tester senere i dette kapittelet:
        
        localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true
        
          ![[Note]](../images/note.png) 
          
            Note
          
          
            Glibc bruker nå libidn2 når den løser internasjonalisert
            domenenavn. Dette er en kjøretids avhengighet. Hvis denne evnen
            er nødvendig, er instruksjonene for installasjon av libidn2 i
            
            BLFS libidn2 siden.
          
         
       
      
        
          8.5.2. Konfigurere Glibc
        
        
          
            8.5.2.1. Legge til nsswitch.conf
          
          
            /etc/nsswitch.conf filen må
            opprettes fordi Glibc standardene 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
         
        
          
            8.5.2.2. Legge til tidssonedata
          
          
            Installer og sett opp tidssonedataene med følgende:
          
          tar -xf ../../tzdata2022g.tar.gz
ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}
for tz in etcetera southamerica northamerica europe africa antarctica  \
          asia australasia backward; 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 noen skuddsekunder. Det
                  er konvensjonelt å legge disse i både zoneinfoogzoneinfo/posix. Det er nødvendig for å
                  legge POSIX tidssonene izoneinfo, ellers vil forskjellige
                  testpakker rapportere feil. På et innebygd system, hvor
                  plass er stramt og du aldri har tenkt å oppdatere
                  tidssonene, kan du spare 1,9 MB ved å ikke brukeposixmappen, men noen
                  applikasjoner eller testpakker kan produsere noen feil.
 
- 
                zic -L
                leapseconds ...
- 
                
                  Dette skaper riktige tidssoner, inkludert skuddsekunder. På
                  en innebygd system, hvor det er trangt om plass og du ikke
                  har tenkt å oppdatere tidssonene noen gang, eller ikke bryr
                  deg om riktig tid, kan du spar 1,9 MB ved å utelate
                  rightmappen.
 
- 
                zic ... -p
                ...
- 
                
                  Dette oppretter posixrulesfilen. Vi bruker New York fordi POSIX krever at reglene for
                  sommertid 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 lokaliteten, vil skriptet
            skrive ut navnet på tidssonen (f.eks., America/Edmonton). Det er også noen
            andre mulige tidssoner oppført i /usr/share/zoneinfo som for eksempel
            Canada/Eastern eller
            EST5EDT som ikke
            identifiseres av skriptet, men kan brukes.
          
          
            Deretter oppretter du /etc/localtime filen med å kjøre:
          
          ln -sfv /usr/share/zoneinfo/<xxx> /etc/localtime
          
            Erstatt <xxx> med
            navnet på den valgte tidssonen (f.eks. Europe/Oslo).
          
         
        
          
            8.5.2.3. Konfigurere den
            dynamiske lasteren
          
          
            Som standard den dynamiske lasteren (/lib/ld-linux.so.2) søker gjennom /usr/lib for dynamiske biblioteker som trengs
            av programmer når de kjøres. Imidlertid, hvis det er biblioteker
            i andre kataloger enn /usr/lib, må
            disse legges til /etc/ld.so.conf
            filen for at den dynamiske lasteren skal finne dem. To kataloger
            som er allment kjent å inneholde flere biblioteker er
            /usr/local/lib og /opt/lib, så legg disse mappene 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 ønskelig kan den dynamiske lasteren også søke i en mappe og
            inkludere innholdet i filene som finnes der. Vanligvis vil filene
            i denne mappen inkludere en linje som spesifiserer ønsket
            biblioteksti. For å legge til denne funksjonen, 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