4.4. Sette opp miljøet

Sett opp et godt arbeidsmiljø ved å lage to nye oppstartsfiler for bash skallet. Mens du er logget inn som bruker lfs, utsted følgende kommando for å lage en ny .bash_profile:

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

Når du er pålogget som bruker lfs, eller når du bytter til lfs bruker med en su kommando med «-» alternativet, det første skallet er et login skall som leser /etc/profile til verten (som sannsynligvis inneholder noen innstillinger og miljøvariabler) og deretter .bash_profile. exec env -i.../bin/bash kommandoen i .bash_profile filen erstatter det kjørende skallet med et nytt et med et helt tomt miljø bortsett fra HOME, TERM, og PS1 variabler. Dette sikrer at ingen uønskede og potensielt farlige miljøvariabler fra vertssystemet lekker inn i byggemiljøet.

Den nye instansen av skallet er et non-login skall, som ikke leser, og utfører, innholdet i /etc/profile eller .bash_profile filer, men heller leser og kjører .bashrc filen istedet. Opprett .bashrc filen nå

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
EOF

Betydningen av innstillingene i .bashrc

set +h

set +h kommandoen slår av bash sin hashfunksjon. Hashing er vanligvis en nyttig funksjon—bash bruker en hashtabell for å huske banen til kjørbare filer for å unngå å søke i PATH gang på gang for å finne den samme kjørbare filen. Imidlertid bør de nye verktøyene brukes så snart de er installert. Ved å slå av hashfunksjonen, vil skallet alltid søke PATH når et program kjøres. Som sådan vil skallet finne de nylig kompilerte verktøyene i $LFS/tools/bin så snart de er tilgjengelig uten å huske en tidligere versjon av det samme programmet levert av vertsdistroen, i /usr/bin eller /bin.

umask 022

Å sette brukerfilopprettingsmasken (umask) til 022 sikrer at nye opprettede filer og mapper bare kan skrives av eieren, men er lesbar og kjørbar av alle (forutsatt at standardmoduser brukes av open(2) systemkall, nye filer vil ende opp med tillatelsesmodus 644 og mapper med modus 755).

LFS=/mnt/lfs

LFS variabelen skal settes til det valgte monteringenspunktet.

LC_ALL=POSIX

LC_ALL variabelen styrer lokaliseringen av visse programmer, slik at meldingene deres fllger konvensjonene i et spesifisert land. Innstillingen LC_ALL til «POSIX» eller «C» (de to er likeverdige) sikrer at alt fungerer som forventet i chroot miljlet.

LFS_TGT=$(uname -m)-lfs-linux-gnu

The LFS_TGT variabel setter en ikkestandard, men kompatibel maskinbeskrivelse for bruk når du bygger vår krysskompiler og linker og når du krysskompiler vår midlertidige verktøykjede. Mer informasjon finnes i Verktøykjedens tekniske merknader.

PATH=/usr/bin

Mange moderne Linux distribusjoner har slått sammen /bin og /usr/bin. Når dette er tilfelle, standard PATH variabel burde settes til /usr/bin/ for Kapittel 6 miljøet. Når dette ikke er tilfelle, legger følgende linje /bin til stien.

if [ ! -L /bin ]; then PATH=/bin:$PATH; fi

Hvis /bin ikke er en symbolsk lenke, så må den legges til PATH variabelen.

PATH=$LFS/tools/bin:$PATH

Ved å putte $LFS/tools/bin foran standard PATH, krysskompilatoren installert i begynnelsen av Kapittel 5 blir plukket opp av skallet umiddelbart etter installasjonen. Dette, kombinert med å slå av hashing, begrenser risikoen for at kompilatoren fra verten brukes i stedet for krysskompilator.

CONFIG_SITE=$LFS/usr/share/config.site

I Kapittel 5 og Kapittel 6, hvis denne variabelen ikke er satt, configure skriptet kan forsøke å laste inn konfigurasjonselementer som er spesifikke for enkelte distribusjoner fra /usr/share/config.site på vertssystemet. Overstyr det for å forhindre potensiell forurensning fra verten.

export ...

Mens kommandoene ovenfor har satt noen variabler, for å gjøre dem synlige innenfor eventuelle underskall, eksporterer vi dem.

[Viktig]

Viktig

Flere kommersielle distribusjoner legger til en ikke dokumentert instansiering av /etc/bash.bashrc til initialisering av bash. Denne filen har potensial til å endre lfs brukerens miljø på måter som kan påvirke byggingen av kritiske LFS pakker. For å sikre at lfs brukerens miljø er rent, sjekk for tilstedeværelse av /etc/bash.bashrc og flytt den hvis den er tilstede Som root bruker, kjør:

[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE

Når lfs brukeren ikke lenger er nødvendig (i begynnelsen av Kapittel 7), kan du trygt gjenopprette /etc/bash.bashrc (hvis ønsket).

Legg merke til at LFS Bash pakken vi bygger i Seksjon 8.36, «Bash-5.2.37» ikke er konfigurert til å laste eller kjøre /etc/bash.bashrc, så denne filen er ubrukelig på et fullført LFS system.

For mange moderne systemer med flere prosessorer (eller kjerner) kan kompileringstiden for en pakke reduseres ved å utføre en "parallell make" ved å fortelle make programmet hvor mange prosessorer som er tilgjengelige via et kommandolinjealternativ eller en miljøvariabel. For eksempel en Intel Core i9-13900K-prosessor har 8 P (ytelse) kjerner og 16 E (effektivitet) kjerner, og en P-kjerne kan kjøre to tråder samtidig så hver P-kjerne er modellert som to logiske kjerner av Linuxkjernen. Som et resultat er det totalt 32 logiske kjerner. En åpenbar måte å bruke alle disse logiske kjernene er å tillate make å gjøre opptil 32 byggejobber. Dette kan gjøres ved å sende -j32 alternativet til make:

make -j32

Eller angi MAKEFLAGS miljøvariabel og dens innhold vil automatisk bli brukt av make som kommandolinjealternativer:

export MAKEFLAGS=-j32
[Viktig]

Viktig

Aldri send en -j alternativ uten nummer til make eller angi et slikt alternativ i MAKEFLAGS. Å gjøre det vil tillate make å skape uendelige byggejobber og forårsake problemer med systemstabilitet.

For å bruke alle logiske kjerner som er tilgjengelige for å bygge pakker i Kapittel 5 og Kapittel 6, sett MAKEFLAGS nå i .bashrc:

cat >> ~/.bashrc << "EOF"
export MAKEFLAGS=-j$(nproc)
EOF

Erstatt $(nproc) med antallet logiske kjerner du vil bruke hvis du ikke vil bruke alle de logiske kjernene.

Til slutt, å ha miljøet fullt forberedt for å bygge midlertidige verktøy, tving bash skallet å lese den nye brukerprofilen:

source ~/.bash_profile