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
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
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 zoneinfo
og zoneinfo/posix
. Det er nødvendig for å
legge POSIX tidssonene i zoneinfo
, 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 bruke
posix
mappen, 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
right
mappen.
-
zic ... -p
...
-
Dette oppretter posixrules
filen. 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