Detaljer om denne pakken finner du i avsnitt Section 8.18.2, “Innhold i Binutils.”
Copyright © 1999-2022 Gerard Beekmans
Opphavsrett © 1999-2022, Gerard Beekmans
Alle rettigheter forbeholdt.
Denne boken er lisensiert under Creative Commons License.
Datainstruksjoner kan trekkes ut fra boken under MIT License.
Linux® er et registrert varemerke for Linus Torvalds.
Min reise for å lære og bedre forstå Linux begynte tilbake i 1998. Jeg hadde nettopp installert min første Linux-distribusjon og hadde raskt blitt fascinert av hele konseptet og filosofien bak Linux.
Det er alltid mange måter å utføre en enkelt oppgave på. Det samme kan sies om Linux-distribusjoner. Svært mange har eksistert opp gjennom årene. Noen eksisterer fortsatt, noen har forvandlet seg til noe annet, mens andre har blitt henvist til våre minner. De gjør alle ting annerledes for å passe behovene til deres målgruppe. Fordi det eksisterer så mange forskjellige måter å oppnå det samme sluttmålet , begynte jeg å innse at jeg ikke lenger måtte være begrenset av noen gjennomføring. Før vi oppdaget Linux, stilte vi rett og slett opp med problemer i andre operativsystemer siden du ikke hadde noe valg. Det var hva det var, enten du likte det eller ikke. Med Linux begynte konseptet med valg å dukke opp. Hvis du ikke likte noe, du var fri, til og med oppmuntret, til å endre det.
Jeg prøvde en rekke distribusjoner og kunne ikke bestemme meg for noen. De var flotte systemer i seg selv. Det var ikke et spørsmål om rett og feil lenger. Det var blitt et spørsmål om personlig smak. Med allle de valgene tilgjengelig, ble det klart at det ikke ville være en eneste system som ville være perfekt for meg. Så jeg satte meg for å lage min egen Linux system som fullt ut samsvarer med mine personlige preferanser.
For å virkelig gjøre det til mitt eget system, bestemte jeg meg for å kompilere alt fra kildekode i stedet for å bruke forhåndskompilerte binære pakker. Dette “perfekt” Linux-system vil ha styrken til forskjellige systemer uten deres opplevde svakheter. Først var tanken snarere skremmende. Jeg forble forpliktet til ideen om at et slikt system kunne bli bygget.
Etter å ha sortert gjennom problemer som sirkulære avhengigheter og kompileringsfeil , bygget jeg endelig et spesialbygd Linux-system. Det var fullt operativ og perfekt brukbart som alle andre Linux-systemer ute der på den tiden. Men det var min egen skapelse. Det var veldig tilfredsstillende å har satt sammen et slikt system selv. Det eneste bedre ville ha vært å lage hvert stykke programvare selv. Dette var det nest beste .
Da jeg delte mine mål og erfaringer med andre medlemmer av Linux samfunnet, ble det tydelig at det var en vedvarende interesse for disse ideer. Det ble raskt klart at slike spesialbygde Linux-systemer tjener ikke bare for å møte brukerspesifikke krav, men også tjene som en ideell læringsmulighet for programmerere og systemadministratorer forbedre deres (eksisterende) Linux-ferdigheter. Ut fra denne utvidede interessen Linux From Scratch Project ble født.
Denne Linux From Scratch boken er den sentrale kjernen rundt det prosjektet. Den gir bakgrunnen og instruksjonene som er nødvendige for deg å designe og bygge ditt eget system. Mens denne boken gir en mal som vil resultere i et korrekt fungerende system står du fritt til å endre instruksjonene til å passer deg selv, som delvis er en viktig del av dette prosjektet. Du forblir i kontroll; vi gir bare en hjelpende hånd for å komme i gang på din egen reise.
Jeg håper inderlig at du vil ha en flott tid med å jobbe med din egen Linux From Scratch system og nyte de mange fordelene ved å ha et system som er virkelig din egen.
--
Gerard Beekmans
gerard AT linuxfromscratch D0T org
Det er mange grunner til at du ønsker å lese denne boken. Et av spørsmålene mange spørrer seg er, “hvorfor gå gjennom alt bryet med å manuelt bygge et Linux system fra bunnen av når du bare kan laste ned og installere en eksisterende?”
En viktig grunn til dette prosjektets eksistens er å hjelpe deg med å lære hvordan et Linux system fungerer fra innsiden og ut. Å bygge et LFS system hjelper å demonstrere hva som får Linux til å virke, og hvordan ting fungerer sammen og avhenger av hverandre. Noe av det beste denne læringsopplevelsen kan gi er muligheten til å tilpasse et Linux system for å passe dine egne unike behov.
En annen viktig fordel med LFS er at den lar deg ha mer kontroll over systemet uten å stole på andres Linux implementering. Med LFS, du er i førersetet og dikterer alle aspekter av systemet.
LFS lar deg lage svært kompakte Linux systemer. Ved installasjon av vanlige distribusjoner, blir du ofte tvunget til å installere svært mange programmer som sannsynligvis aldri blir brukt eller forstått. Disse programmene sløser ressurser. Du kan hevde at det med dagens harddisk og CPUer, f.eks ressurser er ikke lenger en vurdering. Noen ganger er du imidlertid fortsatt begrenset av størrelseshensyn om ikke annet. Tenk på oppstartbar CDer, USB-pinner og innebygde systemer. Det er områder hvor LFS kan være gunstig.
En annen fordel med et spesialbygd Linux system er sikkerhet. Ved å kompilere hele systemet fra kildekoden, har du fullmakt til å revidere alt og bruk alle sikkerhetsoppdateringene du ønsker. Det er ikke lenger nødvendig å vente på at noen andre skal kompilere binære pakker som fikser et sikkerhetshull. Med mindre du undersøker oppdateringen og implementerer den selv, har du ingen garantier på at den nye binære pakken ble bygget riktig og løser pråblemet tilstrekkelig.
Målet med Linux From Scratch er å bygge en komplett og brukbart system på fundamentnivå. Hvis du ikke ønsker å bygge ditt eget Linux system fra bunnen av kan du likevel ha nytte av informasjonen i denne boken.
Det er for mange andre gode grunner til å bygge ditt eget LFS-system til liste dem alle her. Til syvende og sist er utdanning den desidert mest kraftfulle av grunner. Når du fortsetter i LFS-opplevelsen din, vil du oppdage kraften som informasjon og kunnskap virkelig gir.
Det primære målarkitekturene til LFS er AMD/Intel x86 (32-bit) og x86_64 (64-bit) CPUer. På den annen side er instruksjonene i denne boken også kjent for å fungere, med noen modifikasjoner, med Power PC og ARM CPUer. Hovedforutsetningen for å bygge et system som bruker en av disse CPUene, i i tillegg til de på neste side, er et eksisterende Linux-system som f.eks tidligere LFS installasjon, Ubuntu, Red Hat/Fedora, SuSE eller annen distribusjon som retter seg mot arkitekturen du har. Vær også oppmerksom på at en 32-bit distribusjon kan installeres og brukes som et vertssystem på en 64-bit AMD/Intel datamaskin.
For å bygge LFS, gevinsten ved å bygge på et 64-bitssystem sammenlignet med et 32-bits system er minimal. For eksempel, i en testbygging av LFS-9.1 på et Core i7-4790 CPU-basert system, ved bruk av 4 kjerner ble følgende statistikk målt:
Arkitektur Byggetid Byggestørrelse
32-bit 239.9 minutes 3.6 GB
64-bit 233.2 minutes 4.4 GB
Som du kan se, på den samme maskinvaren, er 64-bits bygg bare 3% raskere og er 22 % større enn 32-bits bygg. Hvis du planlegger å bruke LFS som en LAMP server, eller en brannmur, kan en 32-bits CPU stort sett være tilstrekkelig. På den andre siden, trenger flere pakker i BLFS nå mer enn 4 GB RAM for å bygges og/eller å kjøre, slik at hvis du planlegger å bruke LFS som skrivebord, så anbefaler LFS-forfatterne å bygge på et 64-bitssystem.
Standard 64-bits bygg som et resultat av LFS regnes som et “rent” 64-bits system. Det vil si at den bare støtter 64-biters kjørbare filer . Å bygge et “flerarkitekturs” system krever kompilering av mange applikasjoner to ganger, én gang for et 32-bitssystem og én gang for et 64-bitssystem. Dette støttes ikke direkte i LFS fordi det ville forstyrre pedagogisk mål om å gi instruksjonene som trengs for et enkelt grunnleggende Linux-system. Noen LFS/BLFS-redaktører opprettholder en forgrening av LFS for flerarkitektur, som er tilgjengelig på https://www.linuxfromscratch.org/~thomas/multilib/index.html. Men det er et avansert tema.
Å bygge et LFS system er ikke en enkel oppgave. Det krever en viss nivå av eksisterende kunnskap om Unix systemadministrasjon for å løse problemer og utfør kommandoene som er oppført riktig. Spesielt som en absolutt minimum, bør du allerede ha muligheten til å bruke kommandolinje (skall) for å kopiere eller flytte filer og kataloger, liste katalog og filinnhold, og endre gjeldende katalog. Det forventes også at du har rimelig kunnskap om bruk og installasjon av Linux programvare.
Fordi LFS boka antar i det minste dette grunnleggende ferdighetsnivået, er det usannsynlig at de ulike LFS støtteforaene vil kunne gi deg mye hjelp på disse områdene. Du vil finne at dine spørsmål angående slik grunnleggende kunnskap vil sannsynligvis forbli ubesvart eller du vil ganske enkelt bli henvist til LFS essensielle forhåndsleseliste.
Før du bygger et LFS system, anbefaler vi å lese følgende:
Programvare-bygging-HOWTO http://www.tldp.org/HOWTO/Software-Building-HOWTO.html
Dette er en omfattende veiledning for bygging og installasjon av “generiske” Unix-programvarepakker under Linux. Selv om det ble skrevet for en tid siden, gir den fortsatt en god oppsummering av grunnleggende teknikker som trengs for å bygge og installere programvare.
Nybegynnerveiledning for å installere fra kilden http://moi.vonos.net/linux/beginners-installing-from-source/
Denne veiledningen gir en god oppsummering av grunnleggende ferdigheter og teknikker som trengs for å bygge programvare fra kildekode.
Strukturen til LFS følger Linux standarder så tett som mulig. De primære standardene er:
Linux Standard base (LSB) Version 5.0 (2015)
LSB har fire separate standarder: Kjerne, Skrivebord, Kjøretidsspråk og bildebehandling. I tillegg til generiske krav er det også arkitekturspesifikke krav. Det er også to områder for prøvebruk: Gtk3 og grafikk. LFS forsøker å tilpasse seg arkitekturer omtalt i forrige avsnitt.
Mange mennesker er ikke enige i kravene til LSB. Hovedformålet med å definere det er å sikre at proprietær programvare vil kunne installeres og kjøres riktig på et kompatibelt system. Siden LFS er kildebasert, har brukeren full kontroll over hvilke pakker som er ønsket og mange velger å ikke installere noen pakker som er spesifisert av LSB.
Å opprette et komplett LFS system som er i stand til å bestå LSB sertifiseringstester er mulig, men ikke uten mange tilleggspakker som er utenfor omfanget av LFS. Disse tilleggspakkene har installasjonsinstruksjoner i BLFS.
LSB Kjerne: |
Bash, Bc, Binutils, Coreutils, Diffutils, File, Findutils, Gawk, Grep, Gzip, M4, Man-DB, Ncurses, Procps, Psmisc, Sed, Shadow, Tar, Util-linux, Zlib |
LSB Skrivebord: |
None |
LSB Kjøretidsspråk: |
Perl, Python |
LSB Bildebehandling: |
None |
LSB Gtk3 og LSB Grafikk (Prøvebruk): |
None |
LSB Kjerne: |
At, Batch (a part of At), Cpio, Ed, Fcrontab, LSB-Tools, NSPR, NSS, PAM, Pax, Sendmail (or Postfix or Exim), time |
LSB Skrivebord: |
Alsa, ATK, Cairo, Desktop-file-utils, Freetype, Fontconfig, Gdk-pixbuf, Glib2, GTK+2, Icon-naming-utils, Libjpeg-turbo, Libpng, Libtiff, Libxml2, MesaLib, Pango, Xdg-utils, Xorg |
LSB Kjøretidsspråk: |
Libxml2, Libxslt |
LSB Bildebehandling: |
CUPS, Cups-filters, Ghostscript, SANE |
LSB Gtk3 and LSB Grafikk (Prøvebruk): |
GTK+3 |
Som nevnt tidligere er målet med LFS å bygge en komplett og brukbar system på fundamentnivå. Dette inkluderer alle pakker som trengs for å replikere seg selv samtidig som det gir en relativt minimal base å tilpasse for et mer komplett system basert på brukerens valg. Dette betyr ikke at LFS er det minste systemet som er mulig å bygge. Flere viktige pakker er inkludert som ikke er strengt påkrevd. Listene nedenfor dokumenterer begrunnelsen for hver pakke i boken.
Acl
Denne pakken inneholder verktøy for å administrere tilgangskontrolllister, som brukes til å definere mer finkornet skjønnsmessige tilgangsrettigheter for filer og kataloger.
Attr
Denne pakken inneholder programmer for administrasjon av utvidede attributter på filsystemobjekter.
Autoconf
Denne pakken inneholder programmer for å produsere skallskript som automatisk kan konfigurere kildekoden fra en utviklermal . Det er ofte nødvendig for å gjenoppbygge en pakke etter oppdateringer til byggeprosedyrene.
Automake
Denne pakken inneholder programmer for å generere Make filer fra en mal. Det er ofte nødvendig for å gjenoppbygge en pakke etter oppdateringer til byggeprosedyrene.
Bash
Denne pakken tilfredsstiller et LSB-kjernekrav for å gi et Bourne Shell grensesnitt til systemet. Det ble valgt over andre skallpakker på grunn av dens vanlige bruk og omfattende funksjoner utover grunnleggende skallfunksjoner.
Bc
Denne pakken gir et vilkårlig presisjons numerisk behandlingsspråk. Den tilfredsstiller et krav som er nødvendig når du bygger Linux kjernen.
Binutils
Denne pakken inneholder en linker, en assembler og annet verktøy for håndtering av objektfiler. Programmene i denne pakken er nødvendig for å kompilere de fleste pakkene i et LFS system og videre.
Bison
Denne pakken inneholder GNU-versjonen av yacc (Yet Another Compiler Compiler) nødvendig for å bygge flere andre LFS programmer.
Bzip2
Denne pakken inneholder programmer for komprimering og dekomprimering av filer. Det kreves for å dekomprimere mange LFS pakker.
Check
Denne pakken inneholder et testmiljø for andre programmer.
Coreutils
Denne pakken inneholder en rekke viktige programmer for visning og manipulering av filer og mapper. Disse programmene trengs for kommandolinjefilbehandling, og er nødvendige for installasjons prosedyrer for hver pakke i LFS.
DejaGNU
Denne pakken inneholder et rammeverk for å teste andre programmer.
Diffutils
Denne pakken inneholder programmer som viser forskjellene mellom filer eller mapper. Disse programmene kan brukes til å lage oppdateringer (patcher), og brukes også i mange pakkers byggeprosedyrer.
E2fsprogs
Denne pakken inneholder verktøyene for å håndtere ext2, ext3 og ext4 filsystemer. Disse er de mest vanlige og grundig testede filsystemer som Linux støtter.
Eudev
Denne pakken er en enhetsbehandler. Den styrer dynamisk eierskapet, tillatelser, navn og symbolske lenker til enheter i /dev mappen mens enheter legges til eller fjernes fra systemet.
Expat
Denne pakken inneholder et relativt lite XML analysebibliotek. Den kreves av Perl modulen XML::Parser.
Expect
Denne pakken inneholder et program for å utføre skriptete dialoger med andre interaktive programmer. Det er ofte brukt for testing av andre pakker.
File
Denne pakken inneholder et verktøy for å bestemme typen av en gitt fil eller filer. Noen få pakker trenger det i byggeskriptene deres.
Findutils
Denne pakken inneholder programmer for å finne filer i et filsystem. Det brukes i mange pakkers byggeskript.
Flex
Denne pakken inneholder et verktøy for å generere programmer som gjenkjenne mønstre i tekst. Det er GNU versjonen av lex (leksikalsk analysator) programmet. Det kreves for å bygge flere LFS pakker.
Gawk
Denne pakken inneholder programmer for å manipulere tekstfiler. Det er GNU versjonen av awk (Aho-Weinberg-Kernighan). Den brukes i mange andre pakkers byggeskript.
GCC
Denne pakken er Gnu Kompilatorsamlingen. Den inneholder C og C++ kompilatorer samt flere andre som ikke er bygget av LFS.
GDBM
Denne pakken inneholder GNU Database behandlings biblioteket. Den brukes av en annen LFS pakke, Man-DB.
Gettext
Denne pakken inneholder verktøy og biblioteker for internasjonalisering og lokalisering av en rekke pakker.
Glibc
Denne pakken inneholder C hovedbiblioteket. Linux programmer vil ikke kjøre uten.
GMP
Denne pakken inneholder matematiske biblioteker som gir nyttige funksjoner for vilkårlig presisjonsaritmetikk. Det kreves for å bygge GCC.
Gperf
Denne pakken inneholder et program som genererer en perfekt hash funksjon fra et nøkkelsett. Det kreves for Eudev.
Grep
Denne pakken inneholder programmer for å søke gjennom filer. Disse programmene brukes av de fleste pakkenes byggeskript.
Groff
Denne pakken inneholder programmer for behandling og formatering av tekst. En viktig funksjon av disse programmene er å formatere man sider.
GRUB
Denne pakken er Grand Unified Boot Loader. Det er en av flere tilgjengelige oppstartslastere, men er den mest fleksible.
Gzip
Denne pakken inneholder programmer for komprimering og dekomprimere av filer. Det er nødvendig for å dekomprimere mange pakker i LFS og utover.
Iana-etc
Denne pakken gir data for nettverkstjenester og protokoller. Det er nødvendig for å aktivere riktige nettverksfunksjoner.
Inetutils
Denne pakken inneholder programmer for grunnleggende nettverksadministrasjon.
Intltool
Denne pakken inneholder verktøy for å trekke ut oversettbare strenger fra kildefiler.
IProute2
Denne pakken inneholder programmer for grunnleggende og avansert IPv4 og IPv6 nettverk. Det ble valgt fremfor det andre felles nettverks verktøypakke (net-tools) for sine IPv6-funksjoner.
Kbd
Denne pakken inneholder nøkkeltabellfiler, tastaturverktøy for ikke-amerikanske tastaturer, og en rekke konsollfonter.
Kmod
Denne pakken inneholder programmer som trengs for å administrere Linux kjernemoduler.
Less
Denne pakken inneholder en veldig fin tekstfilviser som lar deg rulle opp eller ned når du viser en fil. Den brukes også av Man-DB for visning av man sider.
Libcap
Denne pakken implementerer brukerromsgrensesnittene til POSIX 1003.1e funksjonene tilgjengelig i Linux kjerner.
Libelf
Elfutils prosjektet gir biblioteker og verktøy for ELF filer og DWARF data. De fleste verktøyene i denne pakken er tilgjengelige i andre pakker, men biblioteket er nødvendig for å bygge Linux kjernen som bruker standard (og mest effektive) konfigurasjon.
Libffi
Denne pakken implementerer et grensesnitt for overførbart programmering på høyt nivå til ulike kallkonvensjoner. Noen programmer vet kanskje ikke på sammenstillingstidspunktet hvilke argumenter som skal overføres til en funksjon. For eksempel kan en tolk bli fortalt under kjøringen om antallet og typene argumenter som brukes til å kalle en gitt funksjon. Libffi kan brukes i slike programmer for å gi en bro fra tolkeprogrammet til kompilert kode.
Libpipeline
Libpipeline pakken inneholder et bibliotek for å manipulere kommandokøer av delprosesser på en fleksibel og praktisk måte. Det kreves av Man-DB pakken.
Libtool
Denne pakken inneholder GNU generiske bibliotekstøtte skript. Det omslutter kompleksiteten ved å bruke delte biblioteker i en konsekvent, bærbart grensesnitt. Det trengs av testpakker i andre LFS pakker.
Linux Kernel
Denne pakken er operativsystemet. Det er Linux i GNU/Linux miljøet.
M4
Denne pakken inneholder en generell tekstmakroprosessor som er nyttig som byggeverktøy for andre programmer.
Make
Denne pakken inneholder et program for å styre byggingen av pakker. Det kreves av nesten alle pakker i LFS.
Man-DB
Denne pakken inneholder programmer for å finne og vise man sider. Det ble valgt i stedet for man pakken på grunn av overlegne internasjonaliseringsevner. Det leverer man programmet.
Man-pages
Denne pakken inneholder det faktiske innholdet i det grunnleggende Linux man sider.
Meson
Denne pakken inneholder et programvareverktøy for å automatisere byggingen av programvare. Hovedmålet for Meson er å minimere tiden som programvareutviklere må bruke på å konfigurere bygge systemet. Det kreves for å bygge Systemd, så vel som mange BLFS pakker.
MPC
Denne pakken inneholder funksjoner for aritmetikk av komplekse tall. Det kreves av GCC.
MPFR
Denne pakken inneholder funksjoner for multiple presisjons aritmetikk. Det kreves av GCC.
Ninja
Denne pakken inneholder et lite byggesystem med fokus på hastighet. Den er designet for å ha inndatafilene generert på høyere nivå av et bygge system, og å kjøre bygget så raskt som mulig. Denne pakken kreves av Meson.
Ncurses
Denne pakken inneholder biblioteker for terminaluavhengig håndtering av skjermkarakterer. Det brukes ofte til å gi markørkontroll for et menysystem. Det trengs av en rekke pakker i LFS.
Openssl
Denne pakken inneholder administrasjonsverktøy og biblioteker knyttet til kryptografi. Disse er nyttige for å gi kryptografiske funksjoner til andre pakker, inkludert Linux kjernen.
Patch
Denne pakken inneholder et program for å endre eller lage filer ved å bruke en oppdateringsfil vanligvis opprettet av diff programmet. Det trengs av byggeprosedyren for flere LFS pakker.
Perl
Denne pakken er en tolk for kjøretidsspråket PERL. Det er nødvendig for installasjon og testpakker for flere LFS pakker.
Pkg-config
Denne pakken gir et program som returnerer metadata om en installert bibliotek eller pakke.
Procps-NG
Denne pakken inneholder programmer for overvåking av prosesser. Disse programmer er nyttige for systemadministrasjon, og brukes også av LFS Oppstartsskript.
Psmisc
Denne pakken inneholder programmer for å vise informasjon om prosesser som kjører. Disse programmene er nyttige for system administrasjon.
Python 3
Denne pakken gir et tolkeprogram som har en design filosofi som legger vekt på kodelesbarhet.
Readline
Denne pakken er et sett med biblioteker som tilbyr redigerings- og historikkfunksjoner på kommandolinjen. Den brukes av Bash.
Sed
Denne pakken tillater redigering av tekst uten å åpne den i en tekstredigerer. Det er også nødvendig for de fleste LFS pakkers konfigureringsskript.
Shadow
Denne pakken inneholder programmer for håndtering av passord på en sikker måte.
Sysklogd
Denne pakken inneholder programmer for logging av systemmeldinger, slik som de som er gitt av kjernen eller nisseprosessene (daemon processes) når uvanlig hendelser oppstår.
Sysvinit
Denne pakken inneholder init programmet, som er overordnet for alle andre prosesser på et Linux system.
Tar
Denne pakken gir arkiverings- og utpakkingssmuligheter av praktisk talt alle pakker som brukes i LFS.
Tcl
Denne pakken inneholder Verktøykommandospråk som brukes i mange testpakker i LFS pakker.
Texinfo
Denne pakken inneholder programmer for lesing, skriving og konvertere informasjonssider. Den brukes i installasjons prosedyrer for mange LFS pakker.
Util-linux
Denne pakken inneholder diverse hjelpeprogrammer. Blant dem er verktøy for håndtering av filsystemer, konsoller, partisjoner og meldinger.
Vim
Denne pakken inneholder et redigeringsprogram. Den ble valgt på grunn av sin kompatibilitet med det klassiske vi redigeringsprogrammet og dens enorme antall kraftige kapasiteter.. Et redigeringsprogram er et veldig personlig valg for mange brukere og andre redigeringsprogram kan brukes om ønskelig.
XML::Parser
Denne pakken er en Perl modul som har grensesnitt med Expat.
XZ Utils
Denne pakken inneholder programmer for komprimering og dekomprimering av filer. Det gir den høyeste kompresjonen som generelt er tilgjengelig og er nyttig for å dekomprimere pakker i XZ- eller LZMA-format.
Zlib
Denne pakken inneholder komprimerings- og dekompresjonsrutiner som brukes av noen programmer.
Zstd
Denne pakken inneholder komprimerings- og dekompresjonsrutiner som brukes av noen programmer. Det gir høyt kompresjonsforhold og en svært bredt utvalg av kompresjon/hastighets avveininger.
For å gjøre ting lettere å følge, er det noen få typografiske konvensjoner brukt gjennom denne boken. Denne delen inneholder noen eksempler på det typografiske formatet som finnes i hele Linux From Scratch.
./configure --prefix=/usr
Denne formen for tekst er designet for å skrives nøyaktig slik den er skrevet med mindre noe annet er notert i den omkringliggende teksten. Det brukes også i forklaringsseksjoner for å identifisere hvilke av kommandoene det refereres til.
I noen tilfeller utvides en logisk linje til to eller flere fysiske linjer med en omvendt skråstrek på slutten av linjen.
CC="gcc -B/usr/bin/" ../binutils-2.18/configure \ --prefix=/tools --disable-nls --disable-werror
Merk at omvendt skråstrek må følges av en umiddelbar retur. Annen mellomromstegn som mellomrom eller tabulatortegn vil lage feil resultater.
install-info: unknown option '--dir-file=/mnt/lfs/usr/info/dir'
Denne formen for tekst (tekst med fast bredde) viser
skjermutdata, vanligvis som resultatet av utstedte kommandoer.
Dette formatet brukes også til å vise filnavn, som for eksempel
/etc/ld.so.conf
.
Uthevet
Denne tekstformen brukes til flere formål i boken. Dens viktigste formålet er å understreke viktige punkter eller elementer.
https://www.linuxfromscratch.org/
Dette formatet brukes for hyperkoblinger både innenfor LFS-fellesskapet og til eksterne sider. Det inkluderer HOWTOer, nedlastingssteder og nettsteder.
cat > $LFS/etc/group << "EOF"
root:x:0:
bin:x:1:
......
EOF
Dette formatet brukes når du oppretter konfigurasjonsfiler. Den
første kommandoen ber systemet lage filen $LFS/etc/group
fra hva som enn skrives på de
følgende linjene til sekvensen End Of File (EOF) er påtruffet.
Derfor er hele denne delen vanligvis skrevet som det vises.
<REPLACED TEXT>
Dette formatet brukes til å kapsle inn tekst som ikke skal skrives som det vises eller for kopier-og-lim-operasjoner.
[VALGFRI TEKST]
Dette formatet brukes til å kapsle inn tekst som er valgfri.
passwd(5)
Dette formatet brukes til å referere til en spesifikk manual
(man) side. Tallet innenfor parentes indikerer en bestemt del i
manualene. For eksempel, passwd har to man sider. I
henhold til LFS installasjonsinstruksjoner, disse to man sidene
vil være plassert på /usr/share/man/man1/passwd.1
og /usr/share/man/man5/passwd.5
. Når boken bruker
passwd(5)
refererer den spesifikt
refererer til /usr/share/man/man5/passwd.5
. man passwd vil skrive ut den
første man siden den finner som stemmer med “passwd”,
som vil bli /usr/share/man/man1/passwd.1
. For dette
eksemplet må du kjøre man 5
passwd for å lese siden som blir spesifisert.
Merk at de fleste man sider ikke har duplikate sidenavn i
forskjellige seksjoner. Derfor, man
<programmet
name>
er generelt tilstrekkelig.
Denne boken er delt inn i følgende deler.
Del I forklarer noen viktige merknader om hvordan du går frem med LFS installasjon. Denne delen gir også metainformasjon om boken.
Del II beskriver hvordan du forbereder byggeprosessen—lage en partisjon, nedlasting av pakkene og kompilering av midlertidige verktøy.
Del III gir instruksjoner for å bygge verktøyene nødvendig for å konstruere det endelige LFS systemet.
Del IV guider leseren gjennom byggingen av LFS systemet—kompilere og installere alle pakkene én etter én, sette opp oppstartsskriptene og installere kjernen. Det resulterende Linux-systemet er grunnlaget som annen programvare kan bygges på, utvide systemet etter ønske. På slutten av denne boken er det en enkel å bruke referanse som viser alle programmene, bibliotekene og viktige filer som er installert.
Del V gir informasjon om selve boken inkludert akronymer og termer, anerkjennelser, pakkeavhengigheter, en liste over LFS-oppstartsskript, lisenser for distribusjon av bok, og en omfattende indeks over pakker, programmer, biblioteker, og skript.
Programvaren som brukes til å lage et LFS system blir kontinuerlig oppdatert og forbedret. Sikkerhetsadvarsler og feilrettinger kan bli tilgjengelige etter at LFS boken er utgitt. For å sjekke om pakkeversjonene eller instruksjonene i denne utgaven av LFS trenger eventuelle modifikasjoner for å imøtekomme sikkerhetssårbarheter eller andre feilrettinger, vennligst besøk https://www.linuxfromscratch.org/lfs/errata/11.1/ før du fortsetter med byggingen. Du bør merke noen endringer som vises, og bruke dem på den relevante delen av boken mens du bygger LFS systemetet.
I tillegg opprettholder Linux From Scratch redaktørene en liste over sikkerhetssårbarheter oppdaget etter at en bok ble utgitt. For å sjekke om det er noen aktive sikkerhetssårbarheter, vennligst besøk https://www.linuxfromscratch.org/lfs/advisories/ før du fortsetter med byggingen. Du bør merke deg eventuelle råd og utfør trinnene for å fikse eventuelle sikkerhetssårbarheter mens du bygger LFS systemet.
LFS-systemet vil bli bygget ved å bruke en allerede installert Linux-distribusjon (som Debian, OpenMandriva, Fedora eller openSUSE). Dette eksisterende Linux-system (verten) vil bli brukt som utgangspunkt for gi nødvendige programmer, inkludert en kompilator, linker og skall, å bygge det nye systemet. Velg “development” alternativ under distribusjonsinstallasjonen for å kunne få tilgang til disse verktøy.
Som et alternativ til å installere en separat distribusjon på din maskinen, du kanskje ønsker å bruke en LiveCD fra en kommersiell distribusjon.
Kapittel 2 i denne boken beskriver hvordan lage en ny Linuxpartisjon og et nytt filsystem. Dette er stedet hvor det nye LFS systemet skal kompileres og installeres. Kapittel 3 forklarer hvilke pakker og oppdateringer som må lastes ned for å bygge et LFS system og hvordan lagre dem på det nye filsystemet. Kapittel 4 diskuterer oppsettet av et hensiktsmessig arbeidsmiljø. Vennligst les Kapittel 4 nøye som det forklarer flere viktige problemer du må være klar over før du begynner å jobbe deg gjennom Kapittel 5 og utover.
Kapittel 5, forklarer installasjonen av den første verktøykjeden (binutils, gcc og glibc) ved bruk av krysskompilerings teknikker for å isolere de nye verktøyene fra vertssystemet.
Kapittel 6 viser hvordan du krysskompiler grunnleggende verktøy ved å bruke den nettopp bygde kryssverktøykjeden.
Kapittel 7 går deretter inn i et "chroot" miljø og bruker de tidligere bygde verktøyene til å bygge tilleggsverktøyene som trengs for å bygge og teste det endelige systemet.
Denne innsatsen for å isolere det nye systemet fra vertsdistribusjonen kan virke overdreven. En fullstendig teknisk forklaring på hvorfor dette gjøres er gitt inn Toolchain Technical Notes.
I Chapter 8, Det fulle LFS system blir bygget. En annen fordel gitt av chroot miljøet er at det lar deg fortsette å bruke vertssystemet mens LFS bygges. Mens du venter på at pakkesammenstillinger blir fullført, kan du fortsette å bruke datamaskinen som normalt.
For å fullføre installasjonen er den grunnleggende systemkonfigurasjonen satt opp i Kapittel 9, og kjernen og oppstartslasteren er satt opp i Kapittel 10. Kapittel 11 inneholder informasjon om å fortsette LFS opplevelsen utover denne boken. Etter at trinnene i denne boken er implementert, vil datamaskinen være klar til å starte på nytt i det nye LFS systemet.
Dette er prosessen i et nøtteskall. Detaljert informasjon om hvert trinn er diskutert i de følgende kapitlene og pakkebeskrivelsene. Punkter som kan virke kompliserte vil bli avklart, og alt vil falle på plass når du legger ut på LFS eventyret.
I denne versjonen av LFS har det skjedd en større omorganisering av boken ved å bruke teknikker som unngår å endre vertssystemet og gir en mer rett frem byggeprosess.
Nedenfor er en liste over pakkeoppdateringer gjort siden forrige utgivelse av boken.
Oppgradert til:
Automake-1.16.5
Bash 5.1.16
Bc 5.2.2
Binutils-2.38
Bison-3.8.2
Coreutils-9.0
E2fsprogs-1.46.5
Eudev-3.2.11
Expat-2.4.6
File-5.41
Findutils-4.9.0
Gawk-5.1.1
GDBM-1.23
Glibc-2.35
Gzip-1.11
IANA-Etc-20220207
Inetutils-2.2
IPRoute2-5.16.0
Libcap-2.63
Libelf-0.186 (from elfutils)
Libpipeline-1.5.5
Linux-5.16.9
Man-DB-2.10.1
Meson-0.61.1
Ncurses-6.3
Openssl-3.0.1
Python-3.10.2
Readline-8.1.2
Shadow-4.11.1
SysVinit-3.01
Tcl-8.6.12
Tzdata-2021e
Util-Linux-2.37.4
Vim-8.2.4383
Zstd-1.5.2
Lagt til:
binutils-2.38-lto_fix-1.patch
coreutils-9.0-chmod_fix-1.patch
file-5.40-upstream_fixes-1.patch
shadow-4.10-useradd_segfault-1.patch
sysvinit-3.01-consolidated-1.patch
Fjernet:
Dette er versjon 11.1 av Linux From Scratch-boken, datert 1. Mars 2022. Hvis denne boken er mer enn seks måneder gammel, en nyere og bedre versjonen er sannsynligvis allerede tilgjengelig. For å finne ut, vennligst sjekk et av speilene via https://www.linuxfromscratch.org/mirrors.html.
Nedenfor er en liste over endringer som er gjort siden forrige utgivelse av boken.
Endringsloggoppføringer:
01.03.2022
[bdubbs] - LFS-11.1 utgitt.
23.02.2022
[bdubbs] - Oppdatert til expat-2.4.6 (sikkerhetsretting). Rettinger #5011.
15.02.2022
[bdubbs] - LFS-11.1-rc1 utgitt.
[bdubbs] - La til binutils-2.38 LTO oppdatering. Rettinger #5011.
[bdubbs] - Oppdatert til util-linux-2.37.4. Rettinger #5010.
[bdubbs] - Oppdatert til man-db-2.10.1. Rettinger #5009.
[bdubbs] - Oppdatert til linux-5.16.9. Rettinger #5008.
[bdubbs] - Oppdatert til vim-8.2.4383 (Sikkerhetsrettinger). Adresserer #4500.
[bdubbs] - Oppdatert til iana-etc-20220207. Adresserer #5006.
10.02.2022
[xry111] - Omgå problemet som forårsaker at binærfiler lenker til biblioteker fra vertsdistroen for pass 2 binutils. Nå er det unødvendig å bygge zlib i kapittel 6.
09.02.2022
04.02.2022
[xry111] - Fjerne bash +h
direktiver i chroot. Rettinger
#4998.
[xry111] - Oppdatert til man-db-2.10.0. Rettinger #5002.
[xry111] - Flytt OpenSSL før Kmod og aktiver OpenSSL for Kmod bygge.
[xry111] - Oppdatert til gdbm-1.23. Rettinger #5000.
[xry111] - Oppdatert til tcl-8.6.12. Rettinger #5001.
[thomas] - Fjerne sed fra glibc-instruksjonene i kapittel 8. Den har blitt anvendt oppstrøms.
03.02.2022
[bdubbs] - La til coreutils-9.0 chmod oppdatering. Rettinger #4992.
[bdubbs] - Oppdatert til glibc-2.35. Rettinger #4999.
[bdubbs] - Oppdatert til linux-5.16.5. Rettinger #4996.
[bdubbs] - Oppdatert til findutils-4.9.0. Rettinger #4995.
[bdubbs] - Oppdatert til expat-2.4.4. Rettinger #4993.
[bdubbs] - Oppdatert til iana-etc-20220128. Rettinger #4994.
29.01.2022
[bdubbs] - Oppdatert til linux-5.16.4. Rettinger #4991.
27.01.2022
[bdubbs] - Oppdatert til vim-8.2.4236. Adresserer #4500.
[bdubbs] - Oppdatert til zstd-1.5.2. Rettinger #4988.
[bdubbs] - Oppdatert til util-linux-2.37.3 (sikkerhetsretting). Rettinger #4989.
[bdubbs] - Oppdatert til Python-3.10.2. Rettinger #4987.
[bdubbs] - Oppdatert til linux-5.16.2. Rettinger #4979.
[bdubbs] - Oppdatert til libcap-2.63. Rettinger #4990.
[bdubbs] - Oppdatert til iproute2-5.16.0. Rettinger #4982.
[bdubbs] - Oppdatert til iana-etc-20220120. Rettinger #4975.
20.01.2022
17.01.2022
[thomas] - Lagt til en rettelse av en skrivefeil i meson-0.61.0 oppdateringen.
15.01.2022
01.01.2022
[bdubbs] - Oppdatert til e2fsprogs-1.46.5. Rettinger #4974.
[bdubbs] - Oppdatert til zstd-1.5.1. Rettinger #4972.
[bdubbs] - Oppdatert til expat-2.4.2. Rettinger #4970.
[bdubbs] - Oppdatert til shadow-4.10. Rettinger #4969.
[bdubbs] - Oppdatert til sysvinit-3.01. Rettinger #4968.
[bdubbs] - Oppdatert til linux-5.15.12. Rettinger #4967.
[bdubbs] - Oppdatert til iana-etc-20211224. Rettinger #4962.
[bdubbs] - Oppdatert til openssl-3.0.1. Rettinger #4922.
[bdubbs] - Oppdatert til eudev-3.2.11. Rettinger #4914.
30.12.2021
[renodr] - Oppdatert til meson-0.60.3. Rettinger #4973.
15.12.2021
14.12.2021
[thomas] - Tillat å bygge findutils på 32-biters systemer. Valgt fra grenen multilib av [pierre].
01.12.2021
15.11.2021
[bdubbs] - Oppdatert til iana-etc-20211112. Rettinger #4955.
[bdubbs] - Oppdatert til elfutils-0.186. Rettinger #4954.
[bdubbs] - Oppdatert til bc-5.2.0. Rettinger #4952.
[bdubbs] - Oppdatert til ncurses-6.3. Rettinger #4951.
[bdubbs] - Oppdatert til libpipeline-1.5.4. Rettinger #4950.
[bdubbs] - Oppdatert til meson-0.60.1. Rettinger #4949.
[bdubbs] - Oppdatert til iproute2-5.15.0. Rettinger #4948.
[bdubbs] - Oppdatert til linux-5.15.2. Rettinger #4947.
01.11.2021
[bdubbs] - Oppdatert til gawk-5.1.1. Rettinger #4946.
[bdubbs] - Oppdatert til meson-0.60.0. Rettinger #4945.
[bdubbs] - Oppdatert til libcap-2.60. Rettinger #4944.
[bdubbs] - Oppdatert til gdbm-1.22. Rettinger #4943.
[bdubbs] - Oppdatert til file-5.41. Rettinger #4942.
[bdubbs] - Oppdatert til linux-5.14.15. Rettinger #4941.
[bdubbs] - Oppdatert til iana-etc-20211025. Rettinger #4940.
[bdubbs] - Oppdatert til tzdata-2021e. Rettinger #4939.
15.10.2021
[bdubbs] - Oppdatert til vim-8.2.3508. Adresserer #4500.
[bdubbs] - Oppdatert til tzdata-2021c. Rettinger #4934.
[bdubbs] - Oppdatert til Python-3.10.0. Rettinger #4938.
[bdubbs] - Oppdatert til Jinja2-3.0.2. Rettinger #4937.
[bdubbs] - Oppdatert til linux-5.14.12. Rettinger #4932.
[bdubbs] - Oppdatert til iana-etc-20211004. Rettinger #4933.
[bdubbs] - Oppdatert til bc-5.1.1. Rettinger #4936.
[bdubbs] - Oppdatert til automake-1.16.5. Rettinger #4935.
01.10.2021
[bdubbs] - Oppdatert til vim-8.2.3458. Adresserer #4500.
[bdubbs] - Oppdatert til iana-etc-20210924. Adresserer #4722.
[bdubbs] - Oppdatert til tzdata-2021b. Rettinger #4929.
[bdubbs] - Oppdatert til sysvinit-3.0.0. Rettinger #4927.
[bdubbs] - Oppdatert til meson-0.59.2. Rettinger #4931.
[bdubbs] - Oppdatert til linux-5.14.8. Rettinger #4925.
[bdubbs] - Oppdatert til libcap-2.59. Rettinger #4926.
[bdubbs] - Oppdatert til coreutils-9.0. Rettinger #4928.
[bdubbs] - Oppdatert til bison-3.8.2. Rettinger #4930.
15.09.2021
[bdubbs] - Sørget for at instruksjoner for tcl dokumentasjon er tilstede. Rettinger #4923.
[bdubbs] - Oppdatert til Python3-3.9.7. Rettinger #4916.
[bdubbs] - Oppdatert til linux-5.14.3. Rettinger #4913.
[bdubbs] - Oppdatert til libcap-2.57. Rettinger #4912.
[bdubbs] - Oppdatert til iproute2-5.14.0. Rettinger #4917.
[bdubbs] - Oppdatert til inetutils-2.2. Rettinger #4918.
[bdubbs] - Oppdatert til gzip-1.11. Rettinger #4920.
[bdubbs] - Oppdatert til gdbm-1.21. Rettinger #4919.
[bdubbs] - Oppdatert til bison-3.8.1. Rettinger #4921.
[bdubbs] - Oppdatert til bc-5.0.2. Rettinger #4905.
08.09.2021
[renodr] - Fiks regresjoner i File som resulterer i feil gjenkjenning av tekst og XZ filer.
06.09.2021
[bdubbs] - Tekstforklaringer i delen for sikkerhetskopiering/gjenoppretting av kapittel 7. Takk til Kevin Buckley for oppdateringen.
01.09.2021
[bdubbs] - LFS-11.0 utgitt.
Hvis du under byggingen av LFS systemet støter på noen feil, har spørsmål eller tror det er en skrivefeil i boken, vennligst start med å se de vanlige spørsmålene (FAQ) som befinner seg på https://www.linuxfromscratch.org/faq/.
linuxfromscratch.org
serveren er
vert for en rekke E-post lister brukt til utvikling av LFS
prosjektet. Disse listene inkluderer hovedutviklings- og
støttelister, blant annet. Hvis FAQ ikke løser problemet du
har, vil neste trinn være å søke i E-post listene på
https://www.linuxfromscratch.org/search.html.
For informasjon om de forskjellige listene, hvordan abonnere, arkiv steder og tilleggsinformasjon, besøk https://www.linuxfromscratch.org/mail.html.
Flere medlemmer av LFS fellesskapet tilbyr assistanse på
Internett Relay Chat (IRC). Før du bruker denne støtten, sørg
for at dine spørsmål ikke allerede er besvart i LFS FAQ eller
E-postlistenens arkiv. Du finner IRC-nettverket på
irc.libera.chat
. Støttekanalen heter
#lfs-support.
LFS prosjektet har en rekke verdensomspennende speil for å få tilgang til nettstedet og laste ned de nødvendige pakkene mer praktisk. Vær så snill besøk LFS nettstedet på https://www.linuxfromscratch.org/mirrors.html for en liste av nåværende speil.
Hvis det oppstår et problem eller et spørsmål mens du arbeider gjennom denne boken, vennligst sjekk siden FAQ på https://www.linuxfromscratch.org/faq/#generalfaq. Spørsmål er ofte allerede besvart der. Hvis spørsmålet ditt ikke er svart på denne siden, prøv å finne kilden til problemet. De følgende tips vil gi deg veiledning for feilsøking: https://www.linuxfromscratch.org/hints/downloads/files/errors.txt.
Hvis du ikke finner problemet oppført i vanlige spørsmål, søk i E-post listene på https://www.linuxfromscratch.org/search.html.
Vi har også et fantastisk LFS fellesskap som er villig til å tilby hjelp gjennom E-postlistene og IRC (se Section 1.4, “Ressurser” delen av denne boken). Imidlertid får vi flere brukerspørsmål hver dag, og mange av dem kan være besvart gjennom FAQ og gjennom E-postlistene, søk der først. Så for at vi skal kunne tilby best mulig hjelp, må du gjøre noe forskning på egen hånd først. Det lar oss fokusere på de mere uvanlige brukerstøtte. Hvis søkene dine ikke gir en løsning, vennligst ta med all relevant informasjon (nevnt nedenfor) i din forespørsel om hjelp.
Bortsett fra en kort forklaring av problemet som oppleves, de viktigste tingene å inkludere i enhver forespørsel om hjelp er:
Versjonen av boken som brukes (i dette tilfellet 11.1)
Vertsdistribusjonen og versjonen som brukes til å lage LFS
Utdata fra Systemkrav for vert skriptet
Pakken eller seksjonen problemet ble oppdaget i
Den nøyaktige feilmeldingen eller symptomet som mottas
Gi beskjed om du har avviket fra boken
Avvik fra denne boken gjør ikke at vi ikke vil hjelpe deg. Tross alt handler LFS om personlig preferanse. Å være på forhånd om eventuelle endringer i den etablerte prosedyren hjelper oss å vurdere og finne mulige årsaker til problemet ditt.
Hvis noe går galt mens du kjører configure skript, gjennomgå
config.log
filen. Denne filen
kan inneholde feil oppstått under configure som ikke ble
skrevet ut på skjermen. Inkluder relevante linjer hvis du trenger å
be om hjelp.
Både skjermutdata og innholdet i ulike filer er nyttige ved å fastslå årsaken til kompileringsproblemer. Skjermens utdata fra configure skriptet og make kjøringen kan være nyttig. Det er ikke nødvendig å inkludere hele utdataen, men inkludere nok av relevant informasjon. Nedenfor er et eksempel på type informasjon som skal inkluderes fra skjermens utdata fra make:
gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\"
-DLOCALEDIR=\"/mnt/lfs/usr/share/locale\"
-DLIBDIR=\"/mnt/lfs/usr/lib\"
-DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I.
-g -O2 -c getopt1.c
gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o
expand.o file.o function.o getopt.o implicit.o job.o main.o
misc.o read.o remake.o rule.o signame.o variable.o vpath.o
default.o remote-stub.o version.o opt1.o
-lutil job.o: In function `load_too_high':
/lfs/tmp/make-3.79.1/job.c:1565: undefined reference
to `getloadavg'
collect2: ld returned 1 exit status
make[2]: *** [make] Error 1
make[2]: Leaving directory `/lfs/tmp/make-3.79.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/lfs/tmp/make-3.79.1'
make: *** [all-recursive-am] Error 2
I dette tilfellet vil mange mennesker bare inkludere seksjonen fra bunnen:
make [2]: *** [make] Error 1
Dette er ikke nok informasjon til å diagnostisere problemet riktig fordi den bare merker at noe gikk galt, ikke hva som gikk galt. Hele delen, som i eksempelet ovenfor, er det som skal lagres fordi det inkluderer kommandoen som ble utført og tilhørende feilmelding(er).
En utmerket artikkel om å be om hjelp på Internett er tilgjengelig på nett på http://catb.org/~esr/faqs/smart-questions.html. Les og følg tipsene i dette dokumentet for å øke sannsynligheten for å få hjelpen du trenger.
I dette kapittelet, vertsverktøyene som trengs for å bygge LFS kontrolleres og om nødvendig installeres. Deretter vil en partisjon klargjøres som vert for LFS systemet. Vi lager partisjonen selv, lager et filsystem på den og monter den.
Vertssystemet ditt bør ha følgende programvare med minimumsversjoner angitt. Dette burde ikke være et problem for de fleste moderne Linux-distribusjoner. Vær også oppmerksom på at mange distribusjoner vil plassere programvaredeklarasjoner i separate pakker, ofte i form av “<package-name>-devel” eller “<package-name>-dev”. Pass på å installere disse hvis distribusjonen din gir dem.
Tidligere versjoner av de oppførte programvarepakkene kan fungere, men har ikke blitt testet.
Bash-3.2 (/bin/sh bør være en symbolsk eller hard lenke til bash)
Binutils-2.13.1 (Versjoner større enn 2.38 anbefales ikke ettersom de ikke har blitt testet)
Bison-2.7 (/usr/bin/yacc bør være en lenke til bison eller et lite skript som kjører bison)
Coreutils-6.9
Diffutils-2.8.1
Findutils-4.2.31
Gawk-4.0.1 (/usr/bin/awk bør være en link til gawk)
GCC-4.8 inkludert C++ kompilatoren, g++ (Versjoner større enn 11.2.0 er ikke anbefalt da de ikke er testet). C og C++ standard biblioteker (med deklarasjoner) må også være tilstede slik at C++ kompilatoren kan bygge vertsbaserte programmer
Grep-2.5.1a
Gzip-1.3.12
Linux Kernel-3.2
Grunnen til kravet om kjerneversjon er at vi spesifiserer den versjonen når du bygger glibc i Kapittel 5 og Chapter 8, etter anbefaling fra utviklerne. Det kreves også av udev.
Hvis vertskjernen er tidligere enn 3.2 du må erstatte kjernen med en mer oppdatert versjon. Det er to måter du kan gjøre dette på. Først, se om din Linux leverandør tilbyr en 3.2 eller senere kjernepakke. I så fall kan det være lurt å installere den. Hvis din leverandøren ikke tilbyr en akseptabel kjernepakke, eller du foretrekker å la være å installer den, kan du kompilere en kjerne selv. Instruksjoner for å kompilere kjernen og konfigurere oppstartslasteren (forutsatt at verten bruker GRUB) er lokalisert i Kapittel 10.
M4-1.4.10
Make-4.0
Patch-2.5.4
Perl-5.8.8
Python-3.4
Sed-4.1.5
Tar-1.22
Texinfo-4.7
Xz-5.0.0
Merk at symbollenkene nevnt ovenfor er nødvendige for å bygge et LFS system ved å bruke instruksjonene i denne boken. Symlinker som peker på annen programvare (som dash, mawk osv.) kan fungere, men er ikke testet eller støttet av LFS-utviklingsteamet, og kan kreve enten avvik fra instruksjonene eller tilleggsoppdateringer til noen pakker.
For å se om vertssystemet ditt har alle de riktige versjonene, og muligheten til å kompilere programmer, kjør følgende:
cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -h /usr/bin/yacc ]; then
echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
echo yacc is `/usr/bin/yacc --version | head -n1`
else
echo "yacc not found"
fi
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -h /usr/bin/awk ]; then
echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
echo awk is `/usr/bin/awk --version | head -n1`
else
echo "awk not found"
fi
gcc --version | head -n1
g++ --version | head -n1
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1 # texinfo version
xz --version | head -n1
echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF
bash version-check.sh
LFS er designet for å bygges i én økt. Det er det instruksjonene forutsetter, at systemet ikke vil bli slått av under prosessen. Det betyr ikke at systemet må gjøres i en økt. Problemet er at visse prosedyrer må gjenopprettes etter en omstart hvis LFS gjenopptas på forskjellige punkter.
Disse kapitlene er utført på vertssystemet. Ved omstart, vær forsiktig med følgende:
Prosedyrer utført som root
brukeren etter seksjon 2.4 må
ha LFS miljøvariabelen satt FOR BRUKEREN ROOT.
/mnt/lfs partisjonen må være montert.
Disse to kapitlene må gjøres som bruker
lfs
. En su - lfs må gjøres
før noen oppgaver i disse kapitlene. Hvis du ikke gjør
det, risikerer du å installere pakker til
vertssystemet, og potensielt gjøre det ubrukelig.
Prosedyrene i General Compilation Instructions er kritiske. Hvis det er noen tvil om installerte pakker, sørg for at tidligere utpakkede tarballs fjernes, pakk deretter ut pakkefilene på nytt og fullfør alle instruksjonene i den delen.
/mnt/lfs partisjonen må være montert.
Noen få operasjoner, fra “Skifte
eierskap” for “Gå inn i Chroot
miljøet” må gjøres som root
brukeren, med LFS
miljøvariabel satt for root
brukeren.
Når du går inn i chroot, må LFS miljøvariabelen angis
til root
. LFS
variabelen brukes ikke i etterkant.
De virtuelle filsystemene må være montert. Dette kan
gjøres før eller etter at chroot er gått inn i, ved å
bytte til en virtuell vertsterminal og som root
, kjøre kommandoene i Section 7.3.2,
“Montering og fylling av /dev” og
Section 7.3.3,
“Montering av virtuelle
kjernefilsystemer”.
Som de fleste andre operativsystemer er LFS vanligvis installert på en dedikert partisjon. Den anbefalte tilnærmingen til å bygge et LFS system er å bruke en tilgjengelig tom partisjon eller, hvis du har nok upartisjonert plass, å lage en.
Et minimalt system krever en partisjon på rundt 10 gigabyte (GB). Dette er nok til å lagre alle kildetarballene og kompilere pakkene. Men hvis LFS systemet er ment å være det primære Linux systemet, vil tilleggsprogramvare sannsynligvis bli installert som vil kreve ekstra plass. En 30 GB partisjon er en rimelig størrelse for å sørge for nok plass. LFS systemet i seg selv vil ikke ta så mye plass. En stor del av dette kravet er å sørge for tilstrekkelig ledig midlertidig lagring samt for å legge til flere funksjoner etter at LFS er fullført. I tillegg kompilering av pakker kan kreve mye diskplass som vil bli gjenvunnet etter at pakken er installert.
Fordi det ikke alltid er nok minne (RAM) tilgjengelig for
kompileringsprosesser er det en god idé å bruke en liten
diskpartisjon som swap
plass.
Dette brukes av kjernen for å lagre sjelden brukte data og la
mer minne være tilgjengelig for aktive prosesser. swap
partisjon for et LFS system kan være
det samme som det som brukes av vertssystemet, i det tilfellet
er det ikke er nødvendig å opprette en annen.
Start et diskpartisjoneringsprogram som f.eks cfdisk eller fdisk med et
kommandolinjealternativ som navngir harddisken som den nye
partisjonen vil bli opprettet på—for eksempel
/dev/sda
for den primære
diskstasjonen. Lag en innebygd Linux partisjon og en
swap
partisjon, hvis nødvendig.
Vennligst referere til cfdisk(8)
eller fdisk(8)
hvis du vet ennå
ikke vet hvordan du bruker programmene.
For erfarne brukere er andre partisjoneringsordninger mulig. Det nye LFS systemet kan være på et programvare RAID matrise eller en LVM logisk volum. Noen av disse alternativene krever imidlertid initramfs, som er et avansert emne. Disse partisjoneringsmetodene anbefales ikke for førstegangs LFS brukere.
Husk betegnelsen på den nye partisjonen (f.eks., sda5
). Denne boken vil referere til dette som
LFS partisjonen. Husk også betegnelsen på swap
partisjonen. Disse navnene vil være
nødvendig senere for /etc/fstab
filen.
Forespørsler om råd om systempartisjonering legges ofte ut på LFS E-post lister. Dette er et høyst subjektivt tema. Standard for de fleste distribusjoner er å bruke hele stasjonen med unntak av en liten partisjon til vekselminne. Dette er ikke optimalt for LFS av flere grunner. Det reduserer fleksibiliteten, gjør deling av data på tvers av flere distribusjoner eller LFS bygg vanskeligere, gjør sikkerhetskopiering mer tidkrevende, og kan kaste bort diskplass gjennom ineffektiv allokering av filsystemstrukturer.
En rot LFS partisjon (ikke å forveksle med /root
mappen) av tjue gigabyte er et godt
kompromiss for de fleste systemer. Det gir nok plass til å
bygge LFS og det meste av BLFS, men er liten nok til at
flere partisjoner kan enkelt lages for eksperimentering.
De fleste distribusjoner oppretter automatisk et vekselminnepartisjon. Som regel er den anbefalte størrelsen på vekselminnepartisjonen omtrent det dobbelte av fysisk RAM, men dette er sjelden nødvendig. Hvis diskplassen er begrenset, hold vekselminnepartisjonen til to gigabyte og overvåk mengden disk veksling.
Hvis du vil bruke dvalefunksjonen (suspend-to-disk) i Linux, den skriver ut innholdet i RAM til vekselminnepartisjonen før den slår av maskinen. I dette tilfellet bør størrelsen på vekselminnepartisjonen være minst like stor som systemets installerte RAM.
Bruk av vekselminne er aldri bra. For mekaniske harddisker kan du generelt fortelle om et system veksler ved å bare lytte til diskaktivitet og observere hvordan systemet reagerer på kommandoer. For en SSD stasjon vil du ikke kunne høre veksling, men du kan se hvor mye vekslingsplass som brukes ved å bruke top eller free programmene. Bruken av en SSD stasjon for en vekselminnepartisjon bør unngås hvis mulig. Den første reaksjon på veksling bør være å se etter en urimelig kommando som f.eks prøver å redigere en fil på fem gigabyte. Hvis veksling blir normalt , er den beste løsningen å kjøpe mer RAM til ditt system.
Hvis oppstartsdisken har blitt partisjonert med en GUID Partisjons Tabell (GPT), da må en liten, vanligvis 1 MB, partisjon bli opprettet hvis den ikke eksisterer allerede. Denne partisjonen er ikke formatert, men må være tilgjengelig for GRUB for å bruke under installasjonen av oppstarts lasteren. Denne partisjonen vil normalt være merket 'BIOS Boot' hvis den opprettes av fdisk eller har en kode på EF02 hvis den opprettes ved hjelp av gdisk.
Grub Bios partisjonen må være på stasjonen som BIOS bruker for å starte opp systemet. Dette er ikke nødvendigvis den samme stasjonen der LFS rotpartisjon er lokalisert. Disker på et system kan bruke forskjellig partisjonstabelltyper. Kravet til denne partisjonen avhenger bare på partisjonstabelltypen til oppstartsdisken.
Det er flere andre partisjoner som ikke er påkrevd, men som bør vurderes når du designer et diskoppsett. Følgende liste er ikke utfyllende, men er ment som en veiledning.
/boot – Sterkt anbefalt. Bruk denne partisjonen til å lagre kjerner og annen oppstartsinformasjon. For å minimere potensielle oppstarts problemer med større disker, gjør dette til den første fysiske partisjonen på din første diskstasjon. En partisjonsstørrelse på 200 megabyte er ganske tilstrekkelig.
/home – Sterkt anbefalt. Del hjemme mappen og brukertilpasning på tvers av flere distribusjoner eller LFS bygginger. Størrelsen er vanligvis ganske stor og avhenger av tilgjengelig disk plass.
/usr – I LFS, /bin
, /lib
, og /sbin
er symbolkoblinger til deres
motpart i /usr
. Så
/usr
inneholder alle
binærfiler nødvendig for at systemet skal kjøre. For
LFS en egen partisjon for /usr
er normalt ikke nødvendig.
Hvis du uansett trenger det, bør du lage en partisjon
som er stor nok til å passe til alle programmer og
biblioteker i systemet. Rotpartisjonen kan være
veldig liten (kanskje bare én gigabyte) i denne
konfigurasjonen, så det er det egnet for en tynn
klient eller diskløs arbeidsstasjon (hvor
/usr
monteres fra en
fjern server). Du bør imidlertid merke deg at
initramfs (ikke dekket av LFS) vil være nødvendig for
å starte et system med separat /usr
partisjon.
/opt – Denne mappen er mest nyttig for BLFS der flere installasjoner av store pakker som Gnome eller KDE kan installeres uten å bygge inn filene i /usr hierarkiet. Hvis den brukes, er 5 til 10 gigabyte generelt tilstrekkelig.
/tmp – En separat /tmp mappe er sjelden, men nyttig hvis du konfigurerer en tynn klient. Denne partisjonen, hvis den brukes, vil vanligvis ikke trenge å overstige et par gigabyte.
/usr/src – Denne partisjonen er veldig nyttig for å gi en plassering for å lagre BLFS kildefiler og dele dem på tvers av LFS bygg. Den kan også brukes som lokasjon for å bygge BLFS pakker. En rimelig stor partisjon på 30-50 gigabyte gir god plass.
Enhver separat partisjon du vil ha automatisk montert ved
oppstart må spesifiseres i /etc/fstab
. Detaljer om hvordan du
spesifiserer partisjoner vil bli diskutert i Section 10.2,
“Opprette /etc/fstab filen”.
Nå som en tom partisjon er satt opp, kan filsystemet bli opprettet. LFS kan bruke et hvilket som helst filsystem som gjenkjennes av Linux kjernen, men de vanligste typene er ext3 og ext4. Valget av filsystem kan være kompleks og avhenger av egenskapene til filene og størrelsen på partisjonen. For eksempel:
passer for små partisjoner som oppdateres sjelden slik som /boot.
er en oppgradering til ext2 som inkluderer en loggføring for å hjelpe til med å gjenopprette partisjonens status i tilfelle en uren avslutning. Det er ofte brukt som et generelt filsystem.
er den nyeste versjonen av ext filsystemfamilien til partisjonstyper. Det gir flere nye funksjoner, inkludert nano-sekunders tidsstempler, opprettelse og bruk av veldig store filer (16 TB), og hastighetsforbedringer.
Andre filsystemer, inkludert FAT32, NTFS, ReiserFS, JFS og XFS er nyttig for spesialiserte formål. Mer informasjon om disse filsystemene finner du på http://en.wikipedia.org/wiki/Comparison_of_file_systems.
LFS antar at rotfilsystemet (/) er av typen ext4. Å lage et
ext4
filsystemet på LFS
partisjonen, kjør følgende:
mkfs -v -t ext4 /dev/<xxx>
Erstatt <xxx>
med navnet på LFS partisjonen.
Hvis du bruker en eksisterende swap
partisjon, er det ikke nødvendig å
formatere den. Hvis en ny swap
partisjonen ble opprettet, må den initialiseres med denne
kommandoen:
mkswap /dev/<yyy>
Erstatt <yyy>
med navnet på swap
partisjonen.
Gjennom hele denne boken, miljøvariabelen LFS
vil brukes flere ganger. Du bør sørge for at
denne variabelen alltid er definert gjennom hele LFS
byggeprosessen. Det bør settes til navnet på mappen hvor du
skal bygge LFS systemet ditt - vi vil bruke /mnt/lfs
som et eksempel, men mappevalg er
opp til deg. Hvis du bygger LFS på en separat partisjon, vil
denne mappen være monteringspunktet for partisjonen. Velg en
mappeplassering og sett variabelen med følgende kommando:
export LFS=/mnt/lfs
Å ha dette variabelsettet er fordelaktig ved at kommandoer som f.eks mkdir -v $LFS/tools kan skrives bokstavelig. Skallet vil automatisk erstatte “$LFS” med “/mnt/lfs” (eller hva variabelen ble satt til) når den behandler kommandolinjen.
Ikke glem å sjekke at LFS
er satt
når du forlater og går inn i det nåværende arbeidsmiljøet
igjen (for eksempel når du gjør en su til root
eller en annen bruker). Sjekk at
LFS
variabelen er satt opp
skikkelig med:
echo $LFS
Sørg for at utdataene viser banen til LFS systemets bygge
plassering, som er /mnt/lfs
hvis gitt eksempel ble fulgt. Hvis utdaten er feil, bruk
kommandoen gitt tidligere på denne siden for å sette
$LFS
til det riktige mappenavnet.
En måte å sikre at LFS
variabelen
alltid er satt er å redigere .bash_profile
fil i både din personlig
hjemmemappe og i /root/.bash_profile
og skriv inn export
kommandoen ovenfor. I tillegg, skallet spesifisert i
/etc/passwd
fil for alle
brukere som trenger LFS
variabelen
må være bash for å sikre at /root/.bash_profile
filen er innlemmet som
en del av påloggingsprosessen.
En annen vurdering er metoden som brukes for å logge på
vertssystemet. Hvis du logger på via en grafisk
skjermbehandler, brukerens .bash_profile
brukes vanligvis ikke når en
virtuell terminal startes. I dette tilfellet legger du til
export kommandoen til filen .bashrc
for brukeren og root
. I tillegg, noen distribusjoner har
instruksjoner om å ikke kjøre .bashrc
instruksjoner i en ikke interaktiv
bash påkallelse. Sørg for å legge til export kommandoen før
testen for ikke interaktiv bruk.
Nå som et filsystem er opprettet, må partisjonen gjøres
tilgjengelig. For å gjøre dette, må partisjonen være montert på
et valgt monteringspunkt. For formålet med denne boken er det
antatt at filsystemet er montert under mappen spesifisert av
LFS
miljøvariabel som beskrevet i
forrige avsnitt.
Opprett monteringspunktet og monter LFS filsystemet ved å kjøre:
mkdir -pv $LFS
mount -v -t ext4 /dev/<xxx>
$LFS
Erstatt <xxx>
med betegnelsen for LFS partisjon.
Hvis du bruker flere partisjoner for LFS (f.eks. en for
/
og en annen for /home
), monter dem med:
mkdir -pv $LFS mount -v -t ext4 /dev/<xxx>
$LFS mkdir -v $LFS/home mount -v -t ext4 /dev/<yyy>
$LFS/home
Erstatt <xxx>
og <yyy>
med
riktige partisjons navn.
Sørg for at de nye partisjonene ikke er montert med tillatelser
som er for restriktiv (som f.eks nosuid
eller nodev
alternativer). Kjør mount kommandoen uten noen
parametere for å se hvilke alternativer som er satt for den
monterte LFS partisjonen. Hvis nosuid
og/eller nodev
er satt, partisjonene må monteres på
nytt.
Instruksjonene ovenfor forutsetter at du ikke starter datamaskinen på nytt din gjennom hele LFS prosessen. Hvis du slår av systemet, enten må du montere LFS partisjonen på nytt hver gang du starter byggeprosessen på nytt eller modifisere vertssystemets /etc/fstab-fil til å automatisk monter den på nytt ved oppstart. For eksempel:
/dev/<xxx>
/mnt/lfs ext4 defaults 1 1
Hvis du bruker flere valgfrie partisjoner, sørg for å legge dem til også.
Hvis du bruker en swap
partisjon, sørg for at den er aktivert, bruk swapon kommandoen:
/sbin/swapon -v /dev/<zzz>
Erstatt <zzz>
med navnet på swap
partisjonen.
Nå som det er etablert et sted å jobbe, er det på tide å laste ned pakkene.
Dette kapittelet inneholder en liste over pakker som må lastes ned for å bygge et grunnleggende Linux system. De oppførte versjonsnumrene tilsvarer versjoner av programvaren som er kjent for å fungere, og denne boken er basert på deres bruk. Vi anbefaler på det sterkeste å ikke bruke forskjellige versjoner fordi konstruksjonens kommandoer for én versjon kanskje ikke fungerer med en annen versjon, med mindre annen versjon er spesifisert av en LFS errata eller sikkerhetsrådgivning. De nyeste pakkeversjonene kan også ha problemer som krever løsninger. Disse løsningene vil bli utviklet og stabilisert i utviklingsversjon av boken.
For noen pakker, utgivelsens tarball og (Git eller SVN) øyeblikksbilde fra depotets tarball for denne utgivelsen kan publiseres med lignende filnavn. En utgivelses tarball inneholder genererte filer (for eksempel, configure skript generert av autoconf), i tillegg til innholdet i tilsvarende øyeblikksbilde av depot. Boken bruker utgivelses tarballer når det er mulig. Bruke et øyeblikksbilde av depot i stedet for en utgivelses tarball spesifisert av boken vil forårsake problemer.
Nedlastingsplasseringer er kanskje ikke alltid tilgjengelige. Hvis en nedlastings plasseringen har endret seg siden denne boken ble publisert, Google (http://www.google.com/) gir en nyttig søkemotor for de fleste pakkene. Hvis dette søket ikke lykkes, prøv en alternativ måte å laste ned på https://www.linuxfromscratch.org/lfs/mirrors.html#files.
Nedlastede pakker og oppdateringer må oppbevares et sted som er
praktisk tilgjengelig gjennom hele bygget. En fungerende mappe
er også nødvendig for å pakke ut kildene og bygge dem.
$LFS/sources
kan brukes både som
et sted å oppbevare tarballene og oppdateringene og som en
arbeids mappe. Ved å bruke denne mappen vil de nødvendige
elementene være plassert på LFS partisjonen og vil være
tilgjengelig under alle stadier av byggeprosessen.
For å opprette denne mappen, utfør følgende kommando, som
bruker root
, før du starter
nedlastingens økten:
mkdir -v $LFS/sources
Gjør denne mappen skrivbar og låst (sticky). “Låst” betyr at selv om flere brukere har skrivetillatelse på en mappe, er det bare eieren av en fil som kan slette filen i en låst mappe. Følgende kommando vil aktivere skrive og låste moduser:
chmod -v a+wt $LFS/sources
Det er flere måter å få tak i alle nødvendige pakker og oppdateringer å bygge LFS:
Filene kan lastes ned individuelt som beskrevet i neste to avsnitt.
For stabile versjoner av boken, en tarball av alle nødvendige filer kan lastes ned fra et av LFS filspeilene som er oppført på https://www.linuxfromscratch.org/mirrors.html#files.
Filene kan lastes ned ved hjelp av wget og en wget-liste som beskrevet nedenfor.
For å laste ned alle pakkene og oppdateringene ved å bruke wget-liste som inndata til wget kommanden, bruk:
wget --input-file=wget-list --continue --directory-prefix=$LFS/sources
wget-list
filen nevnt ovenfor
henter alle pakker for både sysV og systemd versjonene av
LFS. Det er totalt fem ekstra små pakker som ikke er
nødvendig for den gjeldende boken. md5sums
filen nevnt nedenfor er spesifikk
for gjeldende bok.
I tillegg, fra og med LFS-7.0, er det en egen fil, md5sums, som kan brukes til å
bekrefte at alle de riktige pakkene er tilgjengelige før du
fortsetter. Legg inn denne filen i $LFS/sources
og kjør:
pushd $LFS/sources md5sum -c md5sums popd
Denne sjekken kan brukes etter å ha hentet de nødvendige filene med en av de metodene oppført ovenfor.
Last ned eller på annen måte skaff deg følgende pakker:
Hjemmeside: https://savannah.nongnu.org/projects/acl
Laste ned: https://download.savannah.gnu.org/releases/acl/acl-2.3.1.tar.xz
MD5 sum: 95ce715fe09acca7c12d3306d0f076b2
Hjemmeside: https://savannah.nongnu.org/projects/attr
Laste ned: https://download.savannah.gnu.org/releases/attr/attr-2.5.1.tar.gz
MD5 sum: ac1c5a7a084f0f83b8cace34211f64d8
Hjemmeside: https://www.gnu.org/software/autoconf/
Laste ned: https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.xz
MD5 sum: 12cfa1687ffa2606337efe1a64416106
Hjemmeside: https://www.gnu.org/software/automake/
Laste ned: https://ftp.gnu.org/gnu/automake/automake-1.16.5.tar.xz
MD5 sum: 4017e96f89fca45ca946f1c5db6be714
SHA256 sum: 80facc09885a57e6d49d06972c0ae1089c5fa8f4d4c7cfe5baea58e5085f136d
Hjemmeside: https://www.gnu.org/software/bash/
Laste ned: https://ftp.gnu.org/gnu/bash/bash-5.1.16.tar.gz
MD5 sum: c17b20a09fc38d67fb303aeb6c130b4e
Hjemmeside: https://git.yzena.com/gavin/bc
Laste ned: https://github.com/gavinhoward/bc/releases/download/5.2.2/bc-5.2.2.tar.xz
MD5 sum: 632344cdb052af0e06087bd3b0034126
Hjemmeside: https://www.gnu.org/software/binutils/
Laste ned: https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.xz
MD5 sum: 6e39cad1bb414add02b5b1169c18fdc5
Hjemmeside: https://www.gnu.org/software/bison/
Laste ned: https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.xz
MD5 sum: c28f119f405a2304ff0a7ccdcc629713
Laste ned: https://www.sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz
MD5 sum: 67e051268d0c475ea773822f7500d0e5
Hjemmeside: https://libcheck.github.io/check
Laste ned: https://github.com/libcheck/check/releases/download/0.15.2/check-0.15.2.tar.gz
MD5 sum: 50fcafcecde5a380415b12e9c574e0b2
Hjemmeside: https://www.gnu.org/software/coreutils/
Laste ned: https://ftp.gnu.org/gnu/coreutils/coreutils-9.0.tar.xz
MD5 sum: 0d79ae8a6124546e3b94171375e5e5d0
Hjemmeside: https://www.gnu.org/software/dejagnu/
Laste ned: https://ftp.gnu.org/gnu/dejagnu/dejagnu-1.6.3.tar.gz
MD5 sum: 68c5208c58236eba447d7d6d1326b821
Hjemmeside: https://www.gnu.org/software/diffutils/
Laste ned: https://ftp.gnu.org/gnu/diffutils/diffutils-3.8.tar.xz
MD5 sum: 6a6b0fdc72acfe3f2829aab477876fbc
Hjemmeside: http://e2fsprogs.sourceforge.net/
Laste ned: https://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.46.5/e2fsprogs-1.46.5.tar.gz
MD5 sum: 3da91854c960ad8a819b48b2a404eb43
Hjemmeside: https://sourceware.org/elfutils/
Laste ned: https://sourceware.org/ftp/elfutils/0.186/elfutils-0.186.tar.bz2
MD5 sum: 2c095e31e35d6be7b3718477b6d52702
Laste ned: https://github.com/eudev-project/eudev/releases/download/v3.2.11/eudev-3.2.11.tar.gz
MD5 sum: 417ba948335736d4d81874fba47a30f7
Hjemmeside: https://libexpat.github.io/
Laste ned: https://prdownloads.sourceforge.net/expat/expat-2.4.6.tar.xz
MD5 sum: 22a30c888752fdda9f8dd1b7281c54b0
Oppstrøms kan fjerne tarballs av de spesifikke utgivelsene av Expat når disse utgivelsene inneholder en sikkerhetssårbarhet. du bør referere til LFS sikkerhetsrådgivning for å finne ut hvilken versjon (med sikkerhetsproblemet løst) som bør bli brukt. Du kan laste ned den sårbare versjonen fra et speil, men det anbefales ikke.
Hjemmeside: https://core.tcl.tk/expect/
Laste ned: https://prdownloads.sourceforge.net/expect/expect5.45.4.tar.gz
MD5 sum: 00fce8de158422f5ccd2666512329bd2
Hjemmeside: https://www.darwinsys.com/file/
Laste ned: https://astron.com/pub/file/file-5.41.tar.gz
MD5 sum: 18233bb0a0089dfdc7dfbc93b96f231b
Hjemmeside: https://www.gnu.org/software/findutils/
Laste ned: https://ftp.gnu.org/gnu/findutils/findutils-4.9.0.tar.xz
MD5 sum: 4a4a547e888a944b2f3af31d789a1137
Hjemmeside: https://github.com/westes/flex
Laste ned: https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz
MD5 sum: 2882e3179748cc9f9c23ec593d6adc8d
Hjemmeside: https://www.gnu.org/software/gawk/
Laste ned: https://ftp.gnu.org/gnu/gawk/gawk-5.1.1.tar.xz
MD5 sum: 83650aa943ff2fd519b2abedf8506ace
Hjemmeside: https://gcc.gnu.org/
Laste ned: https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz
MD5 sum: 31c86f2ced76acac66992eeedce2fce2
SHA256 sum: d08edc536b54c372a1010ff6619dd274c0f1603aa49212ba20f7aa2cda36fa8b
Hjemmeside: https://www.gnu.org/software/gdbm/
Laste ned: https://ftp.gnu.org/gnu/gdbm/gdbm-1.23.tar.gz
MD5 sum: 8551961e36bf8c70b7500d255d3658ec
Hjemmeside: https://www.gnu.org/software/gettext/
Laste ned: https://ftp.gnu.org/gnu/gettext/gettext-0.21.tar.xz
MD5 sum: 40996bbaf7d1356d3c22e33a8b255b31
Hjemmeside: https://www.gnu.org/software/libc/
Laste ned: https://ftp.gnu.org/gnu/glibc/glibc-2.35.tar.xz
MD5 sum: dd571c67d85d89d7f60b854a4e207423
Hjemmeside: https://www.gnu.org/software/gmp/
Laste ned: https://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz
MD5 sum: 0b82665c4a92fd2ade7440c13fcaa42b
Hjemmeside: https://www.gnu.org/software/gperf/
Laste ned: https://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz
MD5 sum: 9e251c0a618ad0824b51117d5d9db87e
Hjemmeside: https://www.gnu.org/software/grep/
Laste ned: https://ftp.gnu.org/gnu/grep/grep-3.7.tar.xz
MD5 sum: 7c9cca97fa18670a21e72638c3e1dabf
Hjemmeside: https://www.gnu.org/software/groff/
Laste ned: https://ftp.gnu.org/gnu/groff/groff-1.22.4.tar.gz
MD5 sum: 08fb04335e2f5e73f23ea4c3adbf0c5f
Hjemmeside: https://www.gnu.org/software/grub/
Laste ned: https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz
MD5 sum: cf0fd928b1e5479c8108ee52cb114363
Hjemmeside: https://www.gnu.org/software/gzip/
Laste ned: https://ftp.gnu.org/gnu/gzip/gzip-1.11.tar.xz
MD5 sum: d1e93996dba00cab0caa7903cd01d454
Hjemmeside: https://www.iana.org/protocols
Laste ned: https://github.com/Mic92/iana-etc/releases/download/20220207/iana-etc-20220207.tar.gz
MD5 sum: 81d865ce7fe4240d5abed48c3ca5fa9f
Hjemmeside: https://www.gnu.org/software/inetutils/
Laste ned: https://ftp.gnu.org/gnu/inetutils/inetutils-2.2.tar.xz
MD5 sum: de8c1b49cbde2b30e481c61c65357ad4
SHA256 sum: 01b9a4bc73a47e63f6e8a07b76122d9ad2a2e46ebf14870e9c91d660b5647a22
Hjemmeside: https://freedesktop.org/wiki/Software/intltool
Laste ned: https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz
MD5 sum: 12e517cac2b57a0121cda351570f1e63
Hjemmeside: https://www.kernel.org/pub/linux/utils/net/iproute2/
Laste ned: https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-5.16.0.tar.xz
MD5 sum: 994c1bad2a24aa9d70e89670c5b5dfcb
Hjemmeside: https://kbd-project.org/
Laste ned: https://www.kernel.org/pub/linux/utils/kbd/kbd-2.4.0.tar.xz
MD5 sum: 3cac5be0096fcf7b32dcbd3c53831380
Laste ned: https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-29.tar.xz
MD5 sum: e81e63acd80697d001c8d85c1acb38a0
Hjemmeside: https://www.greenwoodsoftware.com/less/
Laste ned: https://www.greenwoodsoftware.com/less/less-590.tar.gz
MD5 sum: f029087448357812fba450091a1172ab
Laste ned: https://www.linuxfromscratch.org/lfs/downloads/11.1/lfs-bootscripts-20210608.tar.xz
MD5 sum: 0f51a074cc4faaff93b3c80e9ab27b0c
Hjemmeside: https://sites.google.com/site/fullycapable/
Laste ned: https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.63.tar.xz
MD5 sum: 18410cec436f827e698ee9ea16ada9b7
Hjemmeside: https://sourceware.org/libffi/
Laste ned: https://github.com/libffi/libffi/releases/download/v3.4.2/libffi-3.4.2.tar.gz
MD5 sum: 294b921e6cf9ab0fbaea4b639f8fdbe8
Hjemmeside: http://libpipeline.nongnu.org/
Laste ned: https://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.5.5.tar.gz
MD5 sum: 3e725c76bfea1985e87e851ee50c2e29
Hjemmeside: https://www.gnu.org/software/libtool/
Laste ned: https://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.xz
MD5 sum: 1bfb9b923f2c1339b4d2ce1807064aa5
Hjemmeside: https://www.kernel.org/
Laste ned: https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.16.9.tar.xz
MD5 sum: 4d6a704bf3e249ef6189b6f17457084b
Linux kjernen oppdateres relativt ofte, mange ganger pga oppdagelser av sikkerhetssårbarheter. Den siste tilgjengelige stabile kjerne versjonen kan være brukt, med mindre errata siden sier noe annet.
For brukere med begrenset hastighet eller dyr båndbredde som ønsker å oppdatere Linux kjernen, en grunnlinjeversjon av pakken og oppdateringer kan lastes ned separat. Dette kan spare litt tid eller kostnad for en påfølgende nivåoppgradering av oppdateringer i en mindre utgivelse.
Hjemmeside: https://www.gnu.org/software/m4/
Laste ned: https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz
MD5 sum: 0d90823e1426f1da2fd872df0311298d
Hjemmeside: https://www.gnu.org/software/make/
Laste ned: https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
MD5 sum: fc7a67ea86ace13195b0bce683fd4469
Hjemmeside: https://www.nongnu.org/man-db/
Laste ned: https://download.savannah.gnu.org/releases/man-db/man-db-2.10.1.tar.xz
MD5 sum: b03b76a9a00d0d6b2299b823fba4f579
Hjemmeside: https://www.kernel.org/doc/man-pages/
Laste ned: https://www.kernel.org/pub/linux/docs/man-pages/man-pages-5.13.tar.xz
MD5 sum: 3ac24e8c6fae26b801cb87ceb63c0a30
Hjemmeside: https://mesonbuild.com
Laste ned: https://github.com/mesonbuild/meson/releases/download/0.61.1/meson-0.61.1.tar.gz
MD5 sum: 8ed66d5537275df3defffb66d1fb897f
Hjemmeside: http://www.multiprecision.org/
Laste ned: https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz
MD5 sum: 9f16c976c25bb0f76b50be749cd7a3a8
Hjemmeside: https://www.mpfr.org/
Laste ned: https://www.mpfr.org/mpfr-4.1.0/mpfr-4.1.0.tar.xz
MD5 sum: bdd3d5efba9c17da8d83a35ec552baef
Hjemmeside: https://www.gnu.org/software/ncurses/
Laste ned: https://invisible-mirror.net/archives/ncurses/ncurses-6.3.tar.gz
MD5 sum: a2736befde5fee7d2b7eb45eb281cdbe
Hjemmeside: https://ninja-build.org/
Laste ned: https://github.com/ninja-build/ninja/archive/v1.10.2/ninja-1.10.2.tar.gz
MD5 sum: 639f75bc2e3b19ab893eaf2c810d4eb4
Hjemmeside: https://www.openssl.org/
Laste ned: https://www.openssl.org/source/openssl-3.0.1.tar.gz
MD5 sum: 7d07e849d77d276891edd579a8832bb3
Hjemmeside: https://savannah.gnu.org/projects/patch/
Laste ned: https://ftp.gnu.org/gnu/patch/patch-2.7.6.tar.xz
MD5 sum: 78ad9937e4caadcba1526ef1853730d5
Hjemmeside: https://www.perl.org/
Laste ned: https://www.cpan.org/src/5.0/perl-5.34.0.tar.xz
MD5 sum: df7ecb0653440b26dc951ad9dbfab517
Hjemmeside: https://www.freedesktop.org/wiki/Software/pkg-config
Laste ned: https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
MD5 sum: f6e931e319531b736fadc017f470e68a
Hjemmeside: https://sourceforge.net/projects/procps-ng
Laste ned: https://sourceforge.net/projects/procps-ng/files/Production/procps-ng-3.3.17.tar.xz
MD5 sum: d60613e88c2f442ebd462b5a75313d56
Hjemmeside: https://gitlab.com/psmisc/psmisc
Laste ned: https://sourceforge.net/projects/psmisc/files/psmisc/psmisc-23.4.tar.xz
MD5 sum: 8114cd4489b95308efe2509c3a406bbf
Hjemmeside: https://www.python.org/
Laste ned: https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz
MD5 sum: 14e8c22458ed7779a1957b26cde01db9
Laste ned: https://www.python.org/ftp/python/doc/3.10.2/python-3.10.2-docs-html.tar.bz2
MD5 sum: ffa52f0017baf72df9d32dec785fd6ab
Hjemmeside: https://tiswww.case.edu/php/chet/readline/rltop.html
Laste ned: https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz
MD5 sum: 12819fa739a78a6172400f399ab34f81
Hjemmeside: https://www.gnu.org/software/sed/
Laste ned: https://ftp.gnu.org/gnu/sed/sed-4.8.tar.xz
MD5 sum: 6d906edfdb3202304059233f51f9a71d
Hjemmeside: https://shadow-maint.github.io/shadow/
Laste ned: https://github.com/shadow-maint/shadow/releases/download/v4.11.1/shadow-4.11.1.tar.xz
MD5 sum: 5a95ec069aa91508167d02fecafaa912
Hjemmeside: https://www.infodrom.org/projects/sysklogd/
Laste ned: https://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.1.tar.gz
MD5 sum: c70599ab0d037fde724f7210c2c8d7f8
Hjemmeside: https://savannah.nongnu.org/projects/sysvinit
Laste ned: https://download.savannah.gnu.org/releases/sysvinit/sysvinit-3.01.tar.xz
MD5 sum: dc14f92af715bcfa33cc25341730452e
Hjemmeside: https://www.gnu.org/software/tar/
Laste ned: https://ftp.gnu.org/gnu/tar/tar-1.34.tar.xz
MD5 sum: 9a08d29a9ac4727130b5708347c0f5cf
Hjemmeside: http://tcl.sourceforge.net/
Laste ned: https://downloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz
MD5 sum: 87ea890821d2221f2ab5157bc5eb885f
Laste ned: https://downloads.sourceforge.net/tcl/tcl8.6.12-html.tar.gz
MD5 sum: a0d1a5b60bbb68f2f0bd3066a19c527a
Hjemmeside: https://www.gnu.org/software/texinfo/
Laste ned: https://ftp.gnu.org/gnu/texinfo/texinfo-6.8.tar.xz
MD5 sum: a91b404e30561a5df803e6eb3a53be71
Hjemmeside: https://www.iana.org/time-zones
Laste ned: https://www.iana.org/time-zones/repository/releases/tzdata2021e.tar.gz
MD5 sum: 4fdfad906ebc85fef30221c10964cce9
Laste ned: https://anduin.linuxfromscratch.org/LFS/udev-lfs-20171102.tar.xz
MD5 sum: 27cd82f9a61422e186b9d6759ddf1634
Hjemmeside: https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/
Laste ned: https://www.kernel.org/pub/linux/utils/util-linux/v2.37/util-linux-2.37.4.tar.xz
MD5 sum: 755919e658c349cad9e1c7c771742d48
Hjemmeside: https://www.vim.org
Laste ned: https://anduin.linuxfromscratch.org/LFS/vim-8.2.4383.tar.gz
MD5 sum: 3168ff48e382a1201bd0cbd0209bd3e0
Versjonen av vim endres daglig. For å få den nyeste versjonen, gå til https://github.com/vim/vim/tags.
Hjemmeside: https://github.com/chorny/XML-Parser
Laste ned: https://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-2.46.tar.gz
MD5 sum: 80bb18a8e6240fcf7ec2f7b57601c170
Hjemmeside: https://tukaani.org/xz
Laste ned: https://tukaani.org/xz/xz-5.2.5.tar.xz
MD5 sum: aa1621ec7013a19abab52a8aff04fe5b
Hjemmeside: https://www.zlib.net/
Laste ned: https://zlib.net/zlib-1.2.11.tar.xz
MD5 sum: 85adef240c5f370b308da8c938951a68
Hjemmeside: https://facebook.github.io/zstd/
Laste ned: https://github.com/facebook/zstd/releases/download/v1.5.2/zstd-1.5.2.tar.gz
MD5 sum: 072b10f71f5820c24761a65f31f43e73
Total størrelse på disse pakkene: ca 446 MB
I tillegg til pakkene kreves det også flere oppdateringer. Disse oppdateringene retter eventuelle feil i pakkene som skal være fikset av vedlikeholderen. Oppdateringene gjør også små modifikasjoner som gjør pakkene lettere å jobbe med. Følgende oppdateringene vil være nødvendig for å bygge et LFS-system:
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/binutils-2.38-lto_fix-1.patch
MD5 sum: 3df11b6123d5bbdb0fc83862a003827a
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/bzip2-1.0.8-install_docs-1.patch
MD5 sum: 6a5ac7e89b791aae556de0f745916f7f
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/coreutils-9.0-i18n-1.patch
MD5 sum: 1eeba2736dfea013509f9975365e4e32
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/coreutils-9.0-chmod_fix-1.patch
MD5 sum: 4709df88e68279e6ef357aa819ba5b1a
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/glibc-2.35-fhs-1.patch
MD5 sum: 9a5997c3452909b1769918c759eff8a2
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/kbd-2.4.0-backspace-1.patch
MD5 sum: f75cca16a38da6caa7d52151f7136895
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/sysvinit-3.01-consolidated-1.patch
MD5 sum: 4900322141d493e74020c9cf437b2cdc
Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/zstd-1.5.2-upstream_fixes-1.patch
MD5 sum: a7e576e3f87415fdf388392b257cdcf3
Total størrelse på disse oppdateringene: ca 196.1 KB
I tillegg til de ovennevnte nødvendige oppdateringene, finnes det en rekke valgfrie oppdateringer laget av LFS fellesskapet. Disse valgfrie oppdateringene løser mindre problemer eller aktiverer funksjonalitet som ikke er aktivert som standard. Les gjerne oppdateringsdatabasen som ligger på https://www.linuxfromscratch.org/patches/downloads/ og anskaff eventuelle tilleggs oppdateringer som passer dine systembehov.
I dette kapittelet vil vi utføre noen tilleggsoppgaver for å
forberede byggingen av det midlertidige systemet. Vi vil lage
et sett med mapper i $LFS
for
installasjon av midlertidige verktøy, legg til en uprivilegert
bruker for å redusere risikoen, og skape et passende byggemiljø
for den brukeren. Det vil også bli forklart tidsenheten vi
bruker for å måle hvor lang tid LFS pakker tar å bygge, som er
“SBU”, og gi litt informasjon om
pakkenes testpakker.
Den første oppgaven som utføres i LFS partisjonen er å lage et begrenset mappehierarki slik at programmer kompilert i Kapittel 6 (i tillegg til glibc og libstdc++ i Kapittel 5) kan installeres i deres endelige plassering. Dette er nødvendig for at de midlertidige programmene skal overskrives når du bygger dem igjen i Chapter 8.
Opprett det nødvendige mappeoppsettet ved å kjøre følgende som
root
:
mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin} for i in bin lib sbin; do ln -sv usr/$i $LFS/$i done case $(uname -m) in x86_64) mkdir -pv $LFS/lib64 ;; esac
Programmer i Kapittel 6 vil bli kompilert med en krysskompilator (mer detaljer i avsnitt Toolchain Technical Notes). For å skille denne krysskompilatoren fra de andre programmene, vil den bli installert i en spesiell mappe. Opprett denne mappen med:
mkdir -pv $LFS/tools
Når du er logget inn som bruker root
, kan det å gjøre en enkelt feil skade
eller ødelegge et system. Derfor, pakkene i de neste to
kapitlene er bygget som en uprivilegert bruker. Du kan bruke
ditt eget brukernavn, men for å gjøre det enklere å sette opp
en ren arbeidsmiljø, opprett en ny bruker kalt lfs
som medlem av en ny gruppe (også kalt
lfs
) og bruk denne brukeren
under installasjonsprosessen. Som root
, utfør følgende kommandoer for å legge
til den nye brukeren:
groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs
Betydningen av kommandolinjealternativene:
-s
/bin/bash
Dette gjør bash standard skall for
brukeren lfs
.
-g
lfs
Dette alternativet legger til bruker lfs
til gruppe lfs
.
-m
Dette oppretter en hjemmemappe for lfs
.
-k
/dev/null
Denne parameteren forhindrer mulig kopiering av filer fra
et skjelett mappe (standard er /etc/skel
) ved å endre
inndataplasseringen til den spesielle nullenheten.
lfs
Dette er det faktiske navnet på den opprettede brukeren.
For å logge inn som lfs
(i
motsetning til å bytte til bruker lfs
når logget i som root
, som ikke krever at lfs
bruker å ha et passord), gi
lfs
et passord:
passwd lfs
Bevilg lfs
full tilgang til
alle mapper under $LFS
ved å
gjøre lfs
eier av mappene:
chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools} case $(uname -m) in x86_64) chown -v lfs $LFS/lib64 ;; esac
Hvis en egen arbeidsmappe ble opprettet som foreslått, gi
bruker lfs
eierskap til denne
mappen:
chown -v lfs $LFS/sources
I noen vertssystemer fullføres ikke følgende kommando riktig og suspenderer påloggingen til lfs brukeren til bakgrunnen. Hvis ledeteksten "lfs:~$" ikke vises umiddelbart, å skrive inn fg kommando vil fikse problemet.
Deretter logger du på som bruker lfs
. Dette kan gjøres via en virtuell
konsoll, gjennom en skjermbehandler eller med følgende
erstatt/bytt brukerkommando:
su - lfs
“-
” instruerer
su å starte et
påloggingsskall i motsetning til et ikke-påloggingsskall.
Forskjellen mellom disse to skjelltypene finner du i detalj i
bash(1)
og info bash.
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 å 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 logget på som bruker lfs
, det første skallet er vanligvis et
login skall som leser
filen /etc/profile
fra 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 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. Teknikken som brukes her oppnår målet om å
sikre et rent miljø.
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's 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 det 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, vil nye filer ende
opp med tillatelse modus 644 og mapper med modus 755).
LFS=/mnt/lfs
LFS
variabelen skal settes til
det valgte monteringens punkt.
LC_ALL=POSIX
LC_ALL
variabel styrer
lokaliseringen av visse programmer, slik at meldingene
deres følger konvensjonene i et spesifisert land.
Innstillingen LC_ALL
til
“POSIX” eller “C”
(de to er likeverdige) sikrer at alt fungerer som
forventet i chroot miljøet.
LFS_TGT=(uname
-m)-lfs-linux-gnu
LFS_TGT
variabel setter en
ikkestandard, men kompatibel maskin beskrivelse 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 Toolchain Technical
Notes.
PATH=/usr/bin
Mange moderne Linux distribusjoner har slått sammen
/bin
og /usr/bin
. Når dette er tilfelle,
standard PATH
variabel må
settes bare til /usr/bin/
for
Kapittel 6 miljøet. Når dette ikke er tilfelle,
legger følgende linje til /bin
til stien.
if [ ! -L
/bin ]; then PATH=/bin:$PATH; fi
Hvis /bin
er ikke et
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, i rekkefølge for å gjøre dem synlige innenfor eventuelle underskall, eksporterer vi dem.
Flere kommersielle distribusjoner legger til en ikke
dokumentert instansiering of /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 nærvær av /etc/bash.bashrc
og flytt den ut av veienh
vis den er tilstede. Som root
bruker, kjør:
[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE
Etter at bruken av lfs
brukeren er ferdig i begynnelsen av
Kapittel 7, du kan gjenopprette /etc/bash.bashrc
(hvis ønsket).
Legg merke til at LFS Bash pakken vi vil bygge i Section 8.34,
“Bash-5.1.16” ikke er konfigurert til å laste
eller kjøre /etc/bash.bashrc
,
så denne filen er ubrukelig på et fullført LFS system.
Til slutt, å ha miljøet fullt forberedt for å bygge midlertidige verktøy, hente den nettopp opprettede brukerprofilen:
source ~/.bash_profile
Mange vil gjerne vite på forhånd hvor lenge det tar å kompilere og installere hver pakke. Fordi Linux Fra Scratch kan bygges på mange forskjellige systemer, er det umulig å gi nøyaktige tidsanslag. Den største pakken (Glibc) vil ta omtrent 20 minutter på de raskeste systemene, men kan ta opptil tre dager på tregere systemer! I stedet for å oppgi faktiske tider, vil Standard byggenhet (SBU) brukes i stedet.
SBU fungerer som følgende. Den første pakken som skal kompileres fra denne boken er binutils i Kapittel 5. Den tiden det tar å kompilere denne pakken er det som vil bli referert til som Standard byggenhet eller SBU. Alle andre kompileringstider vil bli uttrykt relative til denne tiden.
Tenk for eksempel på en pakke hvis kompileringstid er 4,5 SBU. Dette betyr at hvis et system tok 10 minutter å kompilere og installer det første passet med binutils, vil det ta omtrent 45 minutter å bygge denne eksempelpakken. Heldigvis er de fleste byggetidene kortere enn den for binutils.
Generelt er ikke SBU helt nøyaktige fordi de er avhengige av mange faktorer, inkludert vertssystemets versjon av GCC. De er gitt her for å gi et estimat på hvor lang tid det kan ta å installere en pakke, men tall kan variere med så mye som dusinvis av minutter i noen tilfeller.
For mange moderne systemer med flere prosessorer (eller kjerner) kan kompileringstiden for en pakke reduseres ved å utføre en "parallell make" ved å enten sette en miljøvariabel eller fortelle make programmer hvor mange prosessorer som er tilgjengelige. For eksempel kan en Intel i5-6500 CPU støtte fire samtidige prosesser med:
export MAKEFLAGS='-j4'
eller bare bygge med:
make -j4
Når flere prosessorer brukes på denne måten, vil SBU enhetene i boken variere enda mer enn de normalt ville gjort. I noen tilfeller, make trinnet vil rett og slett mislykkes. Å analysere resultatet av byggeprosessen vil også være vanskeligere fordi linjene i forskjellige prosesser vil være sammenflettet. Hvis du får et problem med et byggetrinn, gå tilbake til et enkelt prosessorbygg for å analysere feilmeldingene på riktig måte.
De fleste pakkene gir en testpakke. Å kjøre testpakken for en nybygd pakke er en god idé fordi den kan gi en “tilregnelighets sjekk” som indikerer at alt er kompilert riktig. En testpakke som består sitt sett med kontroller, beviser vanligvis at pakken fungerer slik utvikleren har tenkt. Det gir imidlertid ingen garanti at pakken er helt feilfri.
Noen testpakker er viktigere enn andre. For eksempel, testpakkene for kjerneverktøykjedepakkene—GCC, binutils, og glibc—er av største betydning på grunn av deres sentrale rolle i et riktig fungerende system. Testpakkene for GCC og glibc kan ta veldig lang tid å fullføre, spesielt på tregere maskinvare, men anbefales på det sterkeste.
Å kjører testpakkene i Kapittel 5 og Kapittel 6 er umulig, siden programmene er kompilert med en krysskompilator, som ikke ment å kunne kjøre på byggeverten.
Et vanlig problem med å kjøre testpakkene for binutils og GCC
er å gå tom for pseudoterminaler (PTY). Dette kan resultere i
et høyt antall feilende prøver. Dette kan skje av flere
grunner, men den mest sannsynlig årsaken er at vertssystemet
ikke har devpts
filsystemet
satt opp riktig. Dette spørsmålet diskuteres mer detaljert på
https://www.linuxfromscratch.org/lfs/faq.html#no-ptys.
Noen ganger vil pakkers testpakker mislykkes, men av årsaker som utviklere er klar over og har ansett som ikke kritiske. Se loggene som finnes på https://www.linuxfromscratch.org/lfs/build-logs/11.1/ for å bekrefte om disse feilene er forventet eller ikke. Denne siden er gyldig for alle tester i denne boken.
Denne delen er delt inn i tre stadier: først bygge en krysskompilator og tilhørende biblioteker; for det andre, bruke denne kryssverktøykjeden å bygge flere verktøy på en måte som isolerer dem fra vertens distribusjon; for det tredje, gå inn i chroot miljøet, som forbedrer ytterligere vertsisolasjon, og bygge de resterende verktøyene som trengs for å bygge det endelige systemet.
Med denne delen begynner det virkelige arbeidet med å bygge et nytt system. Det krever mye forsiktighet for å sikre at instruksjonene blir fulgt nøyaktig slik boken viser dem. Du bør prøve å forstå hva de gjør, og uansett hvor ivrig du er etter å fullføre bygget, bør du avstå fra å skrive dem blindt som vist, men les heller dokumentasjon når det er noe du ikke forstår. Hold også styr på skrivingen din og utdata av kommandoer, ved å sende dem til en fil ved å bruke tee verktøyet. Dette gir bedre diagnose hvis noe går galt.
Den neste delen gir en teknisk introduksjon til byggeprosessen, mens den følgende inneholder veldig viktige generelle instruksjoner.
Denne delen forklarer noen av begrunnelsen og de tekniske detaljene bak den overordnede byggemetoden. Det er ikke nødvendig å umiddelbart forstå alt i denne delen. Det meste av denne informasjonen vil være klarere etter å ha utført en faktisk konstruksjon. Denne delen kan refereres til når som helst under prosessen.
Det overordnede målet for Kapittel 5 og Kapittel 6 er å produsere et midlertidig område som inneholder et kjent sett med verktøy som kan isoleres fra vertssystemet. Ved bruk av chroot, kommandoene i de resterende kapitlene vil være inne i det miljøet, og sikre en ren, problemfri bygging av det nye LFS systemet. Byggeprosessen er designet for å minimere risikoen for nye lesere og gi den mest pedagogiske verdien samtidig.
Byggeprosessen baserer seg på prosessen med krysskompilering. Krysskompilering brukes normalt for å bygge en kompilator og dens verktøykjede for en annen maskin enn den som brukes til byggingen. Dette er strengt tatt ikke nødvendig for LFS, siden maskinen der det nye systemet skal kjøre er den samme som den brukt til byggingen. Men krysskompilering har den store fordelen at alt som er krysskompilert ikke avhenger av vertsmiljøet.
LFS boken er ikke, og inneholder ikke en generell veiledning til å bygge en kryss (eller lokal) verktøykjede. Ikke bruk kommandoen i boken for en kryssverktøykjede som skal brukes til andre formål enn å bygge LFS, med mindre du virkelig forstår hva du gjør.
Krysskompilering involverer noen begreper som fortjener en seksjon for seg selv. Selv om denne delen kan utelates i en første lesning, å komme tilbake til det senere vil være gunstig for din fulle forståelse av prosessen.
La oss først definere noen begreper som brukes i denne sammenhengen:
er maskinen der vi bygger programmer. Merk at denne maskinen refereres til som “verten” i andre seksjoner.
er maskinen/systemet der de bygde programmene skal kjøres. Merk at denne bruken av “host” ikke er den samme som i andre seksjoner.
brukes kun for kompilatorer. Det er maskinen kompilatoren produserer kode for. Det kan være forskjellig fra både build og host.
Som et eksempel, la oss forestille oss følgende scenario (noen ganger referert til som “Canadian Cross”): vi kan ha en kompilator bare på en treg maskin, la oss kalle det maskin A, og kompilatoren ccA. Vi kan også ha en rask maskin (B), men uten kompilator, og vi ønsker å produsere kode for en annen treg maskin (C). Å bygge en kompilator for maskin C, ville vi ha tre trinn:
Stadie | Bygg | Vert | Mål | Handling |
---|---|---|---|---|
1 | A | A | B | bygg krysskompilator cc1 med ccA på maskin A |
2 | A | B | C | bygg krysskompilator cc2 med cc1 på maskin A |
3 | B | C | C | bygg kompilator ccC med cc2 på maskin B |
Deretter kan alle de andre programmene som trengs av maskin C kompileres ved å bruke cc2 på den raske maskinen B. Merk at med mindre B kan kjøre programmer produsert for C, er det ingen måte å teste de bygde programmene før maskinen C selv kjører. For eksempel, for å teste ccC, vil vi kanskje legge til en fjerde trinn:
Stadie | Bygg | Vert | Mål | Handling |
---|---|---|---|---|
4 | C | C | C | bygge om og teste ccC ved å bruke seg selv på maskin C |
I eksemplet ovenfor er bare cc1 og cc2 krysskompilatorer, det vil si de produserer kode for en annen maskin enn de de kjører på. De andre kompilatorene ccA og ccC produserer kode for maskinen de kjører på. Slike kompilatorer kalles lokale kompilatorer.
Nesten alle byggesystemer bruker navn i formen
cpu-vendor-kernel-os referert til som maskintripletten. En
klok leseren kan lure på hvorfor en “triplett” refererer til et
firekomponents navn. Årsaken er historie: i utgangspunktet
var tre komponentnavn nok å angi en maskin entydig, men nye
maskiner og systemer dukket opp, som viste seg
utilstrekkelig. Ordet “triplett” hang igjen. En enkel
måte å finne din maskintriplett på er å kjøre config.guess skript som
følger med kilden for mange pakker. Pakk ut binutils kilder
og kjør skriptet: ./config.guess
og merk
deg utdataen. For eksempel, for en 32-bits Intel-prosessor
utdataen vil være i686-pc-linux-gnu. På et 64-bit
system blir det x86_64-pc-linux-gnu.
Vær også oppmerksom på navnet på plattformens dynamiske
lenker, ofte referert til som den dynamiske lasteren (ikke
å forveksle med standard lenker ld som er en del av
binutils). Den dynamiske lenkeren levert av Glibc finner og
laster de delte bibliotekene som trengs av et program,
forbereder programmet for kjøring, og deretter kjører det.
Navnet på dynamisk lenker for en 32-bits Intel-maskin er
ld-linux.so.2
og er
ld-linux-x86-64.so.2
for
64-bits systemer. En sikker måte å bestemme navnet på den
dynamiske lenkeren på er å inspisere en tilfeldig binær fra
vertssystemet ved å kjøre: readelf -l <name of binary> | grep
interpreter
og legger merke til utdataen.
Den autoritative referansen som dekker alle plattformer er
i shlib-versions
filen i
roten til Glibc kildetreet.
For å forfalske en krysskompilering i LFS, navnet på
vertstripletten justeres litt ved å endre "vendor" feltet i
LFS_TGT
variabelen. Vi bruker også
--with-sysroot
alternativet når du bygger krysslenkeren og krysskompilatoren
for å fortelle dem hvor de skal finne de nødvendige
vertsfilene. Dette sikrer at ingen av de andre programmene
bygget i
Kapittel 6 kan lenke til biblioteker på
byggemaskinen. Kun to trinn er obligatoriske, og ett til for
tester:
Stadie | Bygg | Vert | Mål | Handling |
---|---|---|---|---|
1 | pc | pc | lfs | bygg krysskompilator cc1 ved å bruke cc-pc på pc |
2 | pc | lfs | lfs | bygg kompilator cc-lfs ved å bruke cc1 på pc |
3 | lfs | lfs | lfs | bygge om og teste cc-lfs ved å bruke seg selv på lfs |
I tabellen ovenfor, “på pc” betyr at kommandoene kjøres på en maskin som bruker den allerede installerte distribusjonen. “på lfs” betyr at kommandoene kjøres i et chroot-miljø.
Nå er det mer om krysskompilering: C-språket er ikke bare en kompilator, men definerer også et standardbibliotek. I denne boken blir GNU C-biblioteket, kalt glibc, brukt. Dette biblioteket må kompileres for lfs-maskinen, det vil si ved å bruke krysskompilatoren cc1. Men kompilatoren selv bruker interne bibliotekimplementeringskomplekse instruksjoner som ikke tilgjengelige i assembleranvisningssettet. Dette interne biblioteket heter libgcc, og må være koblet til glibc biblioteket for å være fullt funksjonelt! Videre må standardbiblioteket for C++ (libstdc++) også kobles til glibc. Løsningen på dette kylling og egg problemet er først å bygge en degradert cc1 basert libgcc, som mangler noen funksjoner som tråder og unntakshåndtering, bygge glibc ved å bruke denne degraderte kompilatoren (glibc selv er ikke degradert), og bygg deretter libstdc++. Men dette siste biblioteket vil mangle samme funksjonalitet som libgcc.
Dette er ikke slutten på historien: konklusjonen av det foregående avsnittet er at cc1 ikke er i stand til å bygge en fullt funksjonell libstdc++, men dette er den eneste kompilatoren som er tilgjengelig for å bygge C/C++ bibliotekene under trinn 2! Selvfølgelig, kompilatoren bygget under trinn 2, cc-lfs, ville være i stand til å bygge disse bibliotekene, men (1) byggesystemet til GCC vet ikke at det er brukbart på pc, og (2) å bruke det på pc vil være en fare for å koble til pc-bibliotekene, siden cc-lfs er en lokal kompilator. Så vi må bygge libstdc++ senere, i chroot.
Krysskompilatoren vil bli installert i en separat
$LFS/tools
mappe, siden det
ikke vil være en del av det endelige systemet.
Binutils installeres først fordi configure kjøringer av både GCC og Glibc utfører forskjellige funksjonstester på assembleren og lenker for å bestemme hvilke programvarefunksjoner som skal aktiveres eller deaktiveres. Dette er viktigere enn man kanskje først er klar over. En feilkonfigurert GCC eller Glibc kan resultere i en subtilt ødelagt verktøykjede, hvor virkningen av et slikt brudd ikke vises før mot slutten av konstruksjonen av hele distribusjonen. En feil i testserien vil vanligvis fremheve denne feilen før det utføres for mye tilleggsarbeid.
Binutils installerer sin assembler og lenker på to steder,
$LFS/tools/bin
og $LFS/tools/$LFS_TGT/bin
. Verktøyene i en
plassering er hardlenket til den andre. En viktig fasett av
lenkeren er bibliotekets søkerekkefølge. Detaljert
informasjon kan fås fra ld ved å gi den --verbose
flagget. For
eksempel, $LFS_TGT-ld --verbose
| grep SEARCH vil illustrere gjeldende
søkestier og rekkefølgen deres. Det viser hvilken filer som
er lenket av ld
ved å kompilere et dummyprogram og gi --verbose
parameteren til
lenkeren. For eksempel, $LFS_TGT-gcc dummy.c -Wl,--verbose
2>&1 | grep succeeded vil vise alle
filene som ble åpnet under koblingen.
Den neste pakken som er installert er GCC. Et eksempel på hva som kan bli sett under kjøringen av configure er:
checking what assembler to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/as
checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld
Dette er viktig av grunnene nevnt ovenfor. Det viser også at GCCs konfigureringsskript ikke søker i PATH mapper for å finne hvilke verktøy det skal bruke. Imidlertid under selve kjøringen av gcc, er det ikke de samme søkestiene nødvendigvis brukt. For å finne ut hvilke standardlenker gcc vil bruke, kjør: $LFS_TGT-gcc -print-prog-name=ld.
Detaljert informasjon kan fås fra gcc med å gi alternativet
-v
på kommandolinjen
under kompilering av et dummy-program. For eksempel,
gcc -v dummy.c
Vil vise detaljert informasjon om forprosessorenkompileringen
og sammenstillings stadier, inkludert gcc sine inkluderte
søkestier og deres rekkefølge.
Neste installert er desinfiserte Linux API deklarasjoner (headers). Disse tillater standard C-bibliotek (Glibc) å bruke funksjoner som Linux kjernen vil gi.
Den neste pakken som blir installert er Glibc. Det viktigste
hensyn for å bygge Glibc er kompilatoren, binære verktøy og
kjernedeklarasjoner. Kompilatoren er generelt ikke et problem
siden Glibc vil alltid bruke kompilatoren som er relatert til
--host
parameteret
sendt til konfigureringsskriptet; f.eks. i vårt tilfelle
kompilatoren vil være $LFS_TGT-gcc. De binære
verktøyene og kjerne deklarasjoner kan være litt mer
kompliserte. Derfor tar vi ingen risiko og bruker de
tilgjengelige konfigurasjonsbryterne for å fremtvinge de
riktige valgene. Etter kjøring av configure, sjekk innholdet
i config.make
filen i
build
mappen for alle viktige
detaljer. Legg merke til bruken av CC="$LFS_TGT-gcc"
(med
$LFS_TGT
utvidet) for å
kontrollere hvilke binære verktøy som brukes og bruken av
-nostdinc
og
-isystem
flaggfor å
kontrollere kompilatorens inkluderte søkeveier. Disse
elementene fremhever et viktig aspekt ved Glibc
pakken—den er veldig selvforsynt med tanke på
byggemaskineriet og er generelt ikke avhengig av
standardinnstillinger for verktøykjeder.
Som nevnt ovenfor, blir standard C++-biblioteket kompilert
som neste, etterfulgt i
Kapittel 6 av alle programmene som må bygges selv.
Installasjonstrinnet for alle disse pakkene bruker
DESTDIR
variabelen for å få
programmene til å lande i LFS filsystemet.
Ved slutten av
Kapittel 6 den lokale lfs kompilatoren er
installert. Første binutils-pass2 blir bygget, med det samme
DESTDIR
installasjon som de andre
programmene, deretter konstrueres den andre passeringen av
GCC, og utelater libstdc++ og andre ikke-viktige biblioteker.
På grunn av en merkelig logikk i GCC konfigureringsskript,
CC_FOR_TARGET
ender opp som
cc når verten
er den samme som målet, men er forskjellig fra byggesystemet.
Det er derfor CC_FOR_TARGET=$LFS_TGT-gcc
er
satt eksplisitt inn i konfigureringsalternativene.
Når du kommer inn i chroot-miljøet i Kapittel 7, den første oppgaven er å installere libstdc++. Deretter utføres midlertidige installasjoner av programmer som trengs for riktig betjening av verktøykjeden. Fra dette tidspunktet og fremover er kjerneverktøykjeden selvstendig og selvbetjent. I Chapter 8, bygges, testes og installeres de endelige versjonene av alle pakker som trengs for et fullt funksjonelt system.
Ved bygging av pakker er det flere forutsetninger som er gjort innenfor instruksjonene:
Flere av pakkene oppdateres før kompilering, men kun når oppdateringen er nødvendig for å omgå et problem. En oppdatering er ofte nødvendig i både dette og de følgende kapitlene, men noen ganger på bare ett sted. Vær derfor ikke bekymret hvis instruksjoner for en nedlastet oppdatering vises å være savnet. Advarselsmeldinger om offset eller fuzz kan også oppstå ved en oppdatering. Ikke bekymre deg for disse advarslene, siden oppdateringen fortsatt var vellykket anvendt.
Under kompileringen av de fleste pakkene vil det være flere advarsler som ruller forbi på skjermen. Disse er normale og kan trygt bli ignorert. Disse advarslene er slik de vises—advarsler om utdatert, men ikke ugyldig, bruk av C- eller C++-syntaksen. C-standardene endres ganske ofte, og noen pakker bruker fortsatt den eldre standarden. Dette er ikke et problem, men gir en advarsel.
Sjekk en siste gang at LFS
miljøvariabelen er riktig satt opp:
echo $LFS
Sørg for at utdataen viser banen til LFS partisjonens
monterings punkt, som er /mnt/lfs
, ved bruken av vårt eksempel.
Til slutt må to viktige punkter understrekes:
Byggeinstruksjonene forutsetter at Systemkrav for vert, inkludert symbolske lenker, har blitt riktig innstilt:
bash er skallet i bruk.
sh er en symbolsk lenke til bash.
/usr/bin/awk er en symbolsk lenke til gawk.
/usr/bin/yacc er en symbolsk lenke til bison eller et lite skript som starter bison.
Å understreke byggeprosessen på nytt:
Plasser alle kildene og oppdateringene i en mappe
som vil være tilgjengelig fra chroot-miljøet som
f.eks /mnt/lfs/sources/
.
Bytt til kildemappen.
Bruk tar programmet, til å pakke ut pakken som skal bygges. I Kapittel 5 og Kapittel 6, sikre at du er lfs brukeren når du pakker ut pakken.
Alle metoder for å få bygget kildekodetreet på sin plass, bortsett fra å trekke ut pakkens tarball, er ikke støttet. Spesielt ved å bruke cp -R for å kopiere kildekodetre til et annet sted kan ødelegge koblinger og tidsstempler i kildetreet og forårsake at byggingen feiler.
Bytt til mappen som ble opprettet da pakken ble pakket ut.
Følg bokens instruksjoner for å bygge pakken.
Bytt tilbake til kildemappen.
Slett den utpakkede kildemappen med mindre du blir bedt om noe annet.
Dette kapittelet viser hvordan du bygger en krysskompilator og dens tilhørende verktøy. Selv om krysskompilering her er forfalsket, er prinsippene det det samme som for en ekte kryssverktøykjede.
Programmene som er kompilert i dette kapittelet vil bli
installert under $LFS/tools
mappe
for å beholde dem atskilt fra filene som er installert i de
følgende kapitlene. Bibliotekene, på den annen side, er
installert på sin endelige plass, siden de er knyttet til
systemet vi ønsker å bygge.
Binutils pakken inneholder en linker, en assembler og annet verktøy for håndtering av objektfiler.
Gå tilbake og les notatene i avsnittet med tittelen General Compilation Instructions på nytt. Å forstå notatene merket som viktig kan spare deg for mange problemer senere.
Det er viktig at Binutils er den første pakken som blir satt sammen fordi både Glibc og GCC utfører ulike tester på tilgjengelige linker og assembler for å bestemme hvilke av deres egne funksjoner som skal aktiveres.
Binutils dokumentasjonen anbefaler å bygge Binutils i en dedikert byggemappe:
mkdir -v build cd build
For at SBU verdiene som er oppført i resten av boken skal
kunne brukes, måler du tiden det tar å bygge denne pakken
fra konfigurasjonen, til og med den første installasjonen.
For å oppnå dette enkelt, pakk kommandoene inn i en
time kommando
som dette: time {
../configure ... && make && make install;
}
.
Forbered nå Binutils til kompilering:
../configure --prefix=$LFS/tools \ --with-sysroot=$LFS \ --target=$LFS_TGT \ --disable-nls \ --disable-werror
Betydningen av konfigurasjonsalternativene:
--prefix=$LFS/tools
Dette forteller konfigurasjonsskriptet å forberede for
å installere Binutils programmene i $LFS/tools
mappen.
--with-sysroot=$LFS
For krysskompilering, dette forteller byggesystemet å søke i $LFS etter målsystembibliotekene etter behov.
--target=$LFS_TGT
Fordi maskinbeskrivelsen i variabelen LFS_TGT
er litt annerledes enn verdien
som returneres av config.guess
skriptet, vil denne bryteren fortelle skriptet
configure
om å justere Binutils byggesystem for å bygge en
tverrlinker.
--disable-nls
Dette deaktiverer internasjonalisering ettersom i18n ikke er nødvendig for de midlertidige verktøyene.
--disable-werror
Dette forhindrer byggingen i å stoppe i tilfelle det er advarsler fra vertens kompilator.
Fortsett med å kompilere pakken:
make
Installer pakken:
make install
Detaljer om denne pakken finner du i avsnitt Section 8.18.2, “Innhold i Binutils.”
GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.
GCC krever GMP-, MPFR- og MPC pakkene. Siden disse pakkene kanskje ikke er inkludert i vertsdistribusjonen din, blir de bygget med GCC. Pakk ut hver pakke i GCC-kildemappen, og gi nytt navn til de resulterende mappene slik at GCC byggprosedyrene automatisk bruker dem:
Det er hyppige misforståelser om dette kapittelet. Prosedyrene er de samme som alle andre kapitler som forklart tidligere (Package build instructions). Pakk først ut gcc-tarballen fra kildemappen og bytt deretter til den opprettede mappen. Først da bør du fortsette med instruksjonene nedenfor.
tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc
På x86_64-verter, sett standard mappenavn for 64-bits biblioteker til “lib”:
case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac
GCC dokumentasjonen anbefaler å bygge GCC i en dedikert byggemappe:
mkdir -v build cd build
Forbered GCC for kompilering:
../configure \ --target=$LFS_TGT \ --prefix=$LFS/tools \ --with-glibc-version=2.35 \ --with-sysroot=$LFS \ --with-newlib \ --without-headers \ --enable-initfini-array \ --disable-nls \ --disable-shared \ --disable-multilib \ --disable-decimal-float \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++
Betydningen av konfigurasjonsalternativene:
--with-glibc-version=2.35
Dette alternativet spesifiserer versjonen av glibc som vil være brukt på målet. Det er ikke relevant for vertens libc distribusjon fordi alt kompilert av pass1 gcc vil kjøre i chroot miljøet, som er isolert fra libc til vertens distribusjon.
--with-newlib
Siden et fungerende C-bibliotek ikke er tilgjengelig ennå, sikrer dette at inhibit_libc-konstanten blir definert når du bygger libgcc. Dette forhindrer kompilering av kode som krever libc støtte.
--without-headers
Når du oppretter en komplett tverrkompilator, krever GCC standarddeklarasjoner som er kompatible med målsystemet. For våre formål vil disse deklarasjonene ikke være nødvendige. Denne bryteren hindrer GCC i å lete etter dem.
--enable-initfini-array
Denne bryteren tvinger bruk av noen interne datastrukturer som er nødvendige, men som ikke kan oppdages når du bygger en krysskompilator.
--disable-shared
Denne bryteren tvinger GCC til å koble sine interne biblioteker statisk. Vi trenger dette fordi de delte bibliotekene krever glibc, som ennå ikke er installert på målsystemet.
--disable-multilib
På x86_64 støtter LFS ennå ikke en multilib-konfigurasjon. Denne bryteren er ufarlig for x86.
--disable-decimal-float,
--disable-threads, --disable-libatomic,
--disable-libgomp, --disable-libquadmath,
--disable-libssp, --disable-libvtv,
--disable-libstdcxx
Disse bryterne deaktiverer støtte for flytende desimal punkter, tråd, libatomic, libgomp, libquadmath, libssp, henholdsvis libvtv og C++ standardbiblioteket. Disse funksjonene klarer ikke å kompilere når du bygger en tverrkompilator og er ikke nødvendig for oppgaven med å krysskompilere den midlertidige libc.
--enable-languages=c,c++
Dette alternativet sikrer at bare C- og C ++ -kompilatorene blir bygget. Dette er de eneste språkene som trengs nå.
Kompiler GCC ved å kjøre:
make
Installer pakken:
make install
Denne versjonen av GCC har installert et par interne
systemoverskrifter. Normalt vil en av dem, limits.h
, i sin tur inkludere den
tilsvarende system limits.h
systemoverskrift, i dette tilfellet, $LFS/usr/include/limits.h
. På tidspunktet
for denne byggingen av GCC eksisterer imidlertid ikke
$LFS/usr/include/limits.h
så
den interne overskriften som nettopp har blitt installert er
en delvis, selvstendig fil og inkluderer ikke de utvidede
funksjonene til systemoverskriften. Dette er tilstrekkelig
for å bygge glibc, men den fullstendige interne overskriften
vil være nødvendig senere. Lag en fullversjon av den interne
overskriften ved å bruke en kommando som er identisk med det
GCC-byggesystemet gjør under normale omstendigheter:
cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h
Detaljer om denne pakken finner du i avsnitt Section 8.26.2, “Innhold i GCC.”
Linux API deklarasjonene (i linux-5.16.9.tar.xz) eksponerer kjernens API for bruk av Glibc.
Linux-kjernen må eksponere et applikasjonsprogrammeringsgrensesnitt (API) som systemets C bibliotek (Glibc i LFS) kan bruke. Dette har blitt gjort ved å rense ulike C deklarasjonsfiler som er i Linux kjernekilde tarball.
Sørg for at det ikke er noen gamle filer innebygd i pakken:
make mrproper
Trekk nå ut de brukersynlige kjernedeklarasjonene fra kilden.
Det anbefalte målet “headers_install” Kan ikke brukes,
fordi det krever rsync, som
kanskje ikke er tilgjengelig. Overskriftene plasseres først i
./usr
, deretter kopiert til
nødvendig plassering.
make headers find usr/include -name '.*' -delete rm usr/include/Makefile cp -rv usr/include $LFS/usr
Linux API ASM deklarasjoner |
|
Linux API ASM Generiske deklarasjoner |
|
Linux API DRM deklarasjoner |
|
Linux API Linux deklarasjoner |
|
Linux API Diverse deklarasjoner |
|
Linux API MTD deklarasjoner |
|
Linux API RDMA deklarasjoner |
|
Linux API SCSI deklarasjoner |
|
Linux API Lyd deklarasjoner |
|
Linux API Video deklarasjoner |
|
Linux API Xen deklarasjoner |
Glibc pakken inneholder C hovedbiblioteket. Dette biblioteket tilbyr de grunnleggende rutinene for tildeling av minne, søk i kataloger, åpne og lukke filer, lese og skrive filer, strenghåndtering, mønstertilpasning, aritmetikk og så videre.
Først oppretter du en symbolsk lenke for LSB kompalitet. I tillegg, for x86_64 oppretter du en symbolsk kompatibilitetskobling som kreves for korrekt operasjon av den dynamiske biblioteklasteren:
case $(uname -m) in i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 ;; x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 ;; esac
Kommandoen ovenfor er riktig. ln kommandoen har noen få
syntaktiske versjoner, så sørg for å sjekke info coreutils ln og
ln(1)
før du rapporterer det
du kanskje tror er en feil.
Noen av Glibc-programmene bruker FHS inkompatible
/var/db
mappen for å lagre
deres kjøretidsdata. Bruk følgende oppdatering for å få slike
programmer til å lagre sine kjøretidsdata på de FHS
kompatible stedene:
patch -Np1 -i ../glibc-2.35-fhs-1.patch
Glibc dokumentasjonen anbefaler å bygge Glibc i en dedikert byggemappe:
mkdir -v build cd build
Sørg for at ldconfig og sln verktøy er installert i
/usr/sbin
:
echo "rootsbindir=/usr/sbin" > configparms
Deretter forbereder du Glibc for kompilering:
../configure \ --prefix=/usr \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=3.2 \ --with-headers=$LFS/usr/include \ libc_cv_slibdir=/usr/lib
Betydningen av konfigureringsalternativene:
--host=$LFS_TGT,
--build=$(../scripts/config.guess)
Den kombinerte effekten av disse bryterne er at Glibcs
byggesystem konfigurerer seg selv til å være
krysskompilert, ved hjelp av krysskoblingen og
krysskompilator i $LFS/tools
.
--enable-kernel=3.2
Dette forteller Glibc å kompilere biblioteket med støtte til 3.2 og senere Linux kjerner. Løsninger for eldre kjerner er ikke aktivert.
--with-headers=$LFS/usr/include
Dette forteller Glibc å kompilere seg selv mot deklarasjonene nylig installert i mappen $LFS/usr/include, slik at den vet nøyaktig hvilke funksjoner kjernen har og kan optimalisere seg selv deretter.
libc_cv_slibdir=/usr/lib
Dette sikrer at biblioteket er installert i /usr/lib i stedet for standard /lib64 på 64-bits maskiner.
I løpet av dette stadiet kan følgende advarsel vises:
configure: WARNING: *** These auxiliary programs are missing or *** incompatible versions: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions.
Den manglende eller inkompatible msgfmt programmet er generelt ufarlig. Dette msgfmt programmet er en del av Gettext pakken som vertsdistribusjonen skal gi.
Det har vært rapporter om at denne pakken kan mislykkes når bygning som et "parallell make". Hvis dette skjer, kjør make kommandoen på nytt med et "-j1"-alternativ.
Kompiler pakken:
make
Installer pakken:
Hvis LFS
ikke er riktig
innstilt, og til tross for anbefalinger, bygger du som
root
, neste kommando vil
installer den nybygde glibc til vertssystemet ditt, som
mest sannsynlig vil gjøre det ubrukelig. Så dobbeltsjekk at
miljøet er riktig innstilt før du kjører følgende kommando.
make DESTDIR=$LFS install
Betydningen av make install alternativene:
DESTDIR=$LFS
DESTDIR
make variabelen
brukes av nesten alle pakker for å definere
plasseringen der pakken skal være installert. Hvis den
ikke er angitt, er den standard til roten (/
) mappen. Her spesifiserer vi at
pakken installeres i $LFS
, som vil bli roten etter Section 7.4,
“Gå inn i Chroot miljøet”.
Fiks hardkodet bane til den kjørbare lasteren i ldd skriptet:
sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
På dette tidspunktet er det viktig å stoppe og sikre at de grunnleggende funksjoner (kompilering og lenker) til den nye verktøykjeden fungerer som forventet. For å utføre en tilregnelighetssjekk, kjør følgende kommandoer:
echo 'int main(){}' > dummy.c $LFS_TGT-gcc dummy.c readelf -l a.out | grep '/ld-linux'
Hvis alt fungerer som det skal, skal det ikke være noen feil, og utdata fra den siste kommandoen vil være av formen:
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
Merk at for 32-bits maskiner vil fortolkenavnet være
/lib/ld-linux.so.2
.
Hvis utdataen ikke vises som ovenfor eller det ikke var noen utdata i det hele tatt, da er det noe galt. Undersøk og følg trinnene for å finne ut hvor problemet er og korriger det. Dette problemet må løses før fortsetter.
Når alt er bra, rydd opp i testfilene:
rm -v dummy.c a.out
Byggepakker i neste kapittel vil fungere som en ekstra sjekk at verktøykjeden er riktig bygget. Hvis noen pakken, spesielt binutils-pass2 eller gcc-pass2, klarer ikke å bygge, er det en indikasjon på at noe har gått galt med tidligere Binutils-, GCC- eller Glibc-installasjoner.
Nå som vår kryssverktøykjede er fullført, fullfør installasjonen limits.h deklarasjoner. For å gjøre det, kjør et verktøy levert av GCC utviklere:
$LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/install-tools/mkheaders
Detaljer om denne pakken finner du i Section 8.5.3, “Innhold i Glibc.”
Libstdc++ er standard C++-biblioteket. Det trengs for å kompilere C++-kode (en del av GCC er skrevet i C++), men vi måtte utsette installasjonen da vi bygde gcc-pass1 fordi det avhenger av glibc, som ennå ikke var tilgjengelig i mål mappen.
Libstdc++ er en del av GCC
kildene. Du bør først pakke ut GCC tarball og bytte til
gcc-11.2.0
mappen.
Opprett en egen byggemappe for libstdc++ og gå inn i den:
mkdir -v build cd build
Forbered libstdc++ for kompilering:
../libstdc++-v3/configure \ --host=$LFS_TGT \ --build=$(../config.guess) \ --prefix=/usr \ --disable-multilib \ --disable-nls \ --disable-libstdcxx-pch \ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/11.2.0
Betydningen av konfigureringsalternativene:
--host=...
Spesifiserer at krysskompilatoren vi nettopp har bygget
skal brukes i stedet for den i /usr/bin
.
--disable-libstdcxx-pch
Denne bryteren forhindrer installasjon av inkluderte forhåndskompilerte filer som ikke er nødvendige på dette stadiet.
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/11.2.0
Dette spesifiserer installasjonsmappen for inkluderende
filer. Fordi libstdc++ er standard C++-biblioteket for
LFS, skal denne mappen samsvare med plasseringen der
C++-kompilatoren ($LFS_TGT-g++) ville
søke etter standard C++ inkludererende filer. I en
normal konstruksjon, sendes denne informasjonen
automatisk til libstdc++ configure
alternativer fra toppnivåmappen. I vårt tilfelle, denne
informasjonen må gis eksplisitt. C++-kompilatoren vil
legge til sysroot banen $LFS
(spesifisert bygning GCC
passerer 1) til inkludere filsøkebanen, så den vil
faktisk søke i $LFS/tools/$LFS_TGT/include/c++/11.2.0
.
Kombinasjonen av DESTDIR
variabel (i
make
install kommando nedenfor) og denne
bryteren sørger for å installere deklarasjonene der.
Kompiler libstdc++ ved å kjøre:
make
Installer biblioteket:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.26.2, “Innhold i GCC.”
Dette kapittelet viser hvordan du krysskompilerer grunnleggende verktøy ved å bruke den nettopp bygde kryssverktøykjeden. Disse verktøyene er installert i deres endelige plassering, men kan ikke brukes ennå. Grunnleggende oppgaver er fortsatt avhengige av vertens verktøy. Likevel brukes de installerte bibliotekene ved koblinger.
Bruk av verktøyene vil være mulig i neste kapittel etter å ha gått inn i “chroot” miljøet. Men alle pakkene som bygges i nåværende kapittel må bygges før vi gjør det. Derfor kan vi ikke være uavhengig av vertssystemet ennå.
Nok en gang, la oss huske den feilaktige innstillingen av
LFS
sammen med å bygge som
root
, kan gjøre datamaskinen
din ubrukelig. Hele dette kapittelet må gjøres som bruker
lfs
, med miljøet som beskrevet
i Section 4.4, “Sette
opp miljøet”.
M4 pakken inneholder en makroprosessor.
Forbered M4 for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess)
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.12.2, “Innhold i M4.”
Ncurses pakken inneholder biblioteker for terminaluavhengig håndtering av karakterskjermer.
Først, sørg for at gawk blir funnet først under konfigurasjonen:
sed -i s/mawk// configure
Kjør deretter følgende kommandoer for å bygge “tic” programmet på byggeverten:
mkdir build pushd build ../configure make -C include make -C progs tic popd
Forbered Ncurses for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(./config.guess) \ --mandir=/usr/share/man \ --with-manpage-format=normal \ --with-shared \ --without-debug \ --without-ada \ --without-normal \ --disable-stripping \ --enable-widec
Betydningen av de nye konfigureringsalternativene:
--with-manpage-format=normal
Dette forhindrer Ncurses fra å installere komprimerte manual sider, noe som kan skje hvis selve vertsdistribusjonen har komprimerte manual sider.
--without-ada
Dette sikrer at Ncurses ikke bygger støtte for Ada kompilator som kan være til stede på verten, men som ikke vil være tilgjengelig når vi går inn i chroot miljøet.
--disable-stripping
Denne bryteren hindrer byggesystemet å strippe programmene som bruker strip programmet fra verten. Bruk av vertsverktøy på krysskompilerte program kan forårsake feil.
--enable-widec
Denne bryteren forårsaker biblioteker med store tegn
(f.eks., libncursesw.so.6.3
) skal bygges i
stedet for vanlige (f.eks., libncurses.so.6.3
). Disse brede
tegnbibliotekene er brukbare i både multibyte og
tradisjonelle 8-biters lokaliteter, mens vanlige
biblioteker fungerer som de skal bare i 8-biters
lokaliteter. Brede karakterer og normale biblioteker er
kildekompatibel, men ikke binærkompatibel.
--without-normal
Denne bryteren deaktiverer bygging og installasjon av de fleste statiske biblioteker.
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so
Betydningen av installasjonsalternativene:
TIC_PATH=$(pwd)/build/progs/tic
Vi må sende stien til den nettopp bygde tic så den er i stand til å kjøre på byggemaskinen, slik at terminaldatabasen kan opprettes uten feil.
libncurses.so
biblioteket
trengs av noen få pakker vi skal bygge snart. Vi lager
denne lille linkskriptet , da dette er det som gjøres i
Chapter 8.
Detaljer om denne pakken finner du i Section 8.28.2, “Innhold i Ncurses.”
Bash pakken inneholder Bourne-Again Skallet (Bourne-Again SHell).
Forbered Bash for kompilering:
./configure --prefix=/usr \ --build=$(support/config.guess) \ --host=$LFS_TGT \ --without-bash-malloc
Betydningen av konfigureringsalternativene:
--without-bash-malloc
Dette alternativet slår av bruken av Bash
minnetildelings funksjon (malloc
) som er kjent for å forårsake
segmenteringsfeil. Ved å slå av dette alternativet vil
Bash bruke malloc
funksjonen fra Glibc som er mer stabil.
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Lag en lenke for programmene som bruker sh til et skall:
ln -sv bash $LFS/bin/sh
Detaljer om denne pakken finner du i Section 8.34.2, “Innholdet i Bash.”
Pakken Coreutils inneholder verktøy for å vise og stille inn grunnleggende systemegenskaper.
Forbered Coreutils for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) \ --enable-install-program=hostname \ --enable-no-install-program=kill,uptime
Betydningen av konfigureringsalternativene:
--enable-install-program=hostname
Dette muliggjør hostname binær å bli bygget og installert – den er deaktivert som standard, men kreves av testpakken til Perl.
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Flytt programmer til deres endelige forventede plasseringer. Selv om dette ikke er nødvendig i dette midlertidige miljøet, må vi gjøre det fordi noen programmer hardkoder kjørbare steder:
mv -v $LFS/usr/bin/chroot $LFS/usr/sbin mkdir -pv $LFS/usr/share/man/man8 mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8 sed -i 's/"1"/"8"/' $LFS/usr/share/man/man8/chroot.8
Detaljer om denne pakken finner du i Section 8.53.2, “Innhold i Coreutils.”
Diffutils pakken inneholder programmer som viser forskjellene mellom filer eller mapper.
Forbered Diffutils for kompilering:
./configure --prefix=/usr --host=$LFS_TGT
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.55.2, “Innhold i Diffutils.”
File pakken inneholder et verktøy for å bestemme typen av en gitt fil eller filer.
file kommando på byggeverten trenger å være samme versjon som den vi bygger for å opprette signaturfilen. Kjør følgende kommandoer for å bygge den:
mkdir build pushd build ../configure --disable-bzlib \ --disable-libseccomp \ --disable-xzlib \ --disable-zlib make popd
Betydningen av det nye konfigureringsalternativet:
--disable-*
Konfigurasjonsskriptet prøver å bruke noen pakker fra vertsdistribusjonen hvis de tilsvarende bibliotekfilene finnes. Det kan føre til kompileringsfeil hvis det finnes en bibliotekfil, men de tilsvarende deklarasjonsfilene ikke gjør det. Disse alternativene forhindrer at det brukes disse unødvendige egenskapene fra verten.
Forbered File for kompilering:
./configure --prefix=/usr --host=$LFS_TGT --build=$(./config.guess)
Kompiler pakken:
make FILE_COMPILE=$(pwd)/build/src/file
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.10.2, “Innholdet i File.”
Findutils pakken inneholder programmer for å finne filer. Disse programmene er gitt for å rekursivt søke gjennom et katalogtre og til å opprette, vedlikeholde og søke i en database (ofte raskere enn den rekursive letingen, men er upålitelig hvis databasen ikke nylig har blitt oppdatert).
Forbered Findutils for kompilering:
./configure --prefix=/usr \ --localstatedir=/var/lib/locate \ --host=$LFS_TGT \ --build=$(build-aux/config.guess)
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.57.2, “Innhold i Findutils.”
Gawk pakken inneholder programmer for å manipulere tekstfiler.
Først, sørg for at noen unødvendige filer ikke blir installert:
sed -i 's/extras//' Makefile.in
Forbered Gawk for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess)
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.56.2, “Innhold i Gawk.”
Grep pakken inneholder programmer for å søke gjennom innholdet i filer.
Forbered Grep for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.33.2, “Innhold i Grep.”
Gzip pakken inneholder programmer for komprimering og dekomprimering av filer.
Forbered Gzip for kompilering:
./configure --prefix=/usr --host=$LFS_TGT
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.60.2, “Contents of Gzip.”
Make pakken inneholder et program for å kontrollere genereringen av kjørbare filer og andre ikke-kildefiler av en pakke fra kildefiler.
Forbered Make for kompilering:
./configure --prefix=/usr \ --without-guile \ --host=$LFS_TGT \ --build=$(build-aux/config.guess)
Betydningen av det nye konfigureringsalternativet:
--without-guile
Selv om vi krysskompilerer, prøver configure å bruke guile fra byggeverten hvis den finner det. Dette gjør at kompileringen mislykkes, så denne bryteren forhindrer bruk av den.
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.64.2, “Innhold i Make.”
Patch pakken inneholder et program for å endre eller lage filer ved å bruke en “patch” fil som vanligvis opprettes av diff programmet.
Forbered Patch for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess)
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.65.2, “Innhold i oppdateringen.”
Sed pakken inneholder en dataflyt (stream) redigerer.
Forbered Sed for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.29.2, “Innhold i Sed.”
Tar pakken gir muligheten til å lage tar arkiver også å utføre forskjellige andre typer arkivmanipulering. Tar kan brukes på tidligere opprettede arkiver for å trekke ut filer, for å lagre flere filer, eller for å oppdatere eller liste filer som allerede var lagret.
Forbered Tar for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess)
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.66.2, “Innhold i Tar.”
Xz pakken inneholder programmer for komprimering og dekomprimering av filer. Det gir muligheter for lzma og den nyere xz komprimerings formatene. Komprimering av tekstfiler med xz gir en bedre kompresjonsprosent enn med de tradisjonelle gzip eller bzip2 kommandoene.
Forbered Xz for kompilering:
./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) \ --disable-static \ --docdir=/usr/share/doc/xz-5.2.5
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.8.2, “Innhold i Xz.”
Binutils pakken inneholder en linker, en assembler og annet verktøy for håndtering av objektfiler.
Binutils sender en utdatert kopi av libtool i tarballen. Det mangler støtte for sysroot slik at de produserte binærfilene feilaktig kobles til biblioteker fra vertsdistroen. Omgå dette problemet:
sed '6009s/$add_dir//' -i ltmain.sh
Opprett en egen byggemappe igjen:
mkdir -v build cd build
Forbered Binutils for kompilering:
../configure \ --prefix=/usr \ --build=$(../config.guess) \ --host=$LFS_TGT \ --disable-nls \ --enable-shared \ --disable-werror \ --enable-64-bit-bfd
Betydningen av de nye konfigureringsalternativene:
--enable-shared
Bygger libbfd
som et delt
bibliotek.
--enable-64-bit-bfd
Aktiverer 64-biters støtte (på verter med smalere ordstørrelser). Kanskje ikke nødvendig på 64-bits systemer, men skader ikke.
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Detaljer om denne pakken finner du i Section 8.18.2, “Innhold i Binutils.”
GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.
Som i den første versjonen av GCC, er GMP-, MPFR- og MPC-pakkene nødvendig. Pakk ut tarballene og flytt dem til den nødvendige mappen :
tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc
Hvis du bygger på x86_64, endre standard mappenavn for 64-bit bibliotekene til “lib”:
case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 ;; esac
Opprett en egen byggemappe igjen:
mkdir -v build cd build
Lag en symbolkobling som lar libgcc bygges med brukerstøtte for posix tråder:
mkdir -pv $LFS_TGT/libgcc ln -s ../../../libgcc/gthr-posix.h $LFS_TGT/libgcc/gthr-default.h
Før du begynner å bygge GCC, husk å deaktivere alle miljø variabler som overstyrer standard optimaliseringsflagg.
Forbered nå GCC for kompilering:
../configure \ --build=$(../config.guess) \ --host=$LFS_TGT \ --prefix=/usr \ CC_FOR_TARGET=$LFS_TGT-gcc \ --with-build-sysroot=$LFS \ --enable-initfini-array \ --disable-nls \ --disable-multilib \ --disable-decimal-float \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++
Betydningen av de nye konfigureringsalternativene:
-with-build-sysroot=$LFS
Normalt bruker --host
å sørge for at en
krysskompilator brukes til å bygge GCC, og da vet
dennne kompilatoren at den må lete etter overskrifter
og biblioteker i $LFS
.
Men byggesystemet til GCC bruker andre verktøy som ikke
er klar over denne plasseringen. Denne bryteren sørger
for at de finner de nødvendige filene på $LFS
, og ikke på verten.
--enable-initfini-array
Dette alternativet aktiveres automatisk når du bygger en lokal kompilator med en lokal kompilator på x86. Men her bygger vi med en krysskompilator, så vi må eksplisitt angi dette alternativet.
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Som en siste finpuss kan du lage en symbolkobling. Mange programmer og skript bruker cc i stedet for gcc, som brukes til å holde programmer generiske og derfor brukbare på alle typer UNIX systemer der GNU C-kompilatoren ikke alltid er installert. Kjøre cc lar systemadministratoren bestemme hvilken C-kompilator som skal installeres:
ln -sv gcc $LFS/usr/bin/cc
Detaljer om denne pakken finner du i Section 8.26.2, “Innhold i GCC.”
Dette kapittelet viser hvordan du bygger de siste manglende delene av det midlertidige systemet: verktøyene som trengs for å bygge maskineriet av forskjellige pakker. Nå som alle sirkulære avhengigheter er løst, et “chroot” miljø, fullstendig isolert fra vertsoperativsystemet (bortsett fra den kjørende kjernen), kan brukes til byggingen.
For riktig drift av det isolerte miljøet, noe kommunikasjon med den kjørende kjernen må være etablert. Dette gjøres gjennom det såkalte Virtuelle kjernefilsystemer (Virtual Kernel File Systems), som må være montert når du går inn i chroot miljøet. Det kan være lurt å sjekke at de er montert ved å kjøre findmnt.
Før Section 7.4, “Gå
inn i Chroot miljøet”, kommandoene må kjøres som
root
, med LFS
variabelsett. Etter å ha gått inn i inn
chroot, alle kommandoer kjøres som root, heldigvis uten tilgang
til operativsystemet til datamaskinen du bygde LFS på. Vær
forsiktig uansett, da det er lett å ødelegge hele LFS system
med dårlig utformede kommandoer.
Kommandoene i resten av denne boken må utføres logget på som
bruker root
og ikke lenger
som bruker lfs
. Også dobbelt
sjekk at $LFS
er satt i
root
sitt miljø.
For øyeblikket er hele mappehierarkiet i $LFS
eid av brukeren lfs
, en bruker som bare eksisterer på
vertssystemet. Hvis mappene og filene under $LFS
blir holdt som de er, vil de være eid av
en bruker-ID uten en tilsvarende konto. Dette er farlig pga en
brukerkonto opprettet senere kan få samme bruker-ID og eie alle
filene under $LFS
, dermed
eksponere disse filene til mulig ondsinnet manipulasjon.
For å løse dette problemet, endre eierskap til $LFS/*
mapper til bruker root
ved å kjøre følgende kommando:
chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools} case $(uname -m) in x86_64) chown -R root:root $LFS/lib64 ;; esac
Ulike filsystemer eksportert av kjernen brukes til å kommunisere til og fra selve kjernen. Disse filsystemene er virtuelle ved at ingen disk plass brukes til dem. Innholdet i filsystemene ligger i minnet.
Begynn med å lage mapper som filsystemene vil bli montert på:
mkdir -pv $LFS/{dev,proc,sys,run}
Når kjernen starter opp systemet, krever det tilstedeværelse
av noen få enhetsnoder, spesielt console
og null
enheter. Enhetsnodene må være
opprettet på harddisken slik at de er tilgjengelige før
kjernen fyller /dev
), og i
tillegg når Linux startes med init=/bin/bash
. Opprett
enhetene ved å kjøre følgende kommandoer:
mknod -m 600 $LFS/dev/console c 5 1 mknod -m 666 $LFS/dev/null c 1 3
Den anbefalte metoden for å fylle /dev
mappen med enheter er å montere et
virtuelt filsystem (som f.eks tmpfs
) på /dev
mappen, og la enhetene være opprettet
dynamisk på det virtuelle filsystemet etter hvert som de
oppdages eller gitt tilgang til. Enhetsopprettingen gjøres
vanligvis under oppstartsprosessen av Udev. Siden dette nye
systemet ennå ikke har Udev og har ennå ikke blitt startet
opp, er det nødvendig å montere og fylle /dev
manuelt. Dette oppnås ved å binde
montering av vertssystemets /dev
mappen. Et bind mount er en spesiell
type montering som lar deg lage et speil av en mappe eller
monteringspunkt til et annet sted. Bruk følgende kommando for
å oppnå dette:
mount -v --bind /dev $LFS/dev
Monter nå de gjenværende virtuelle kjernefilsystemene:
mount -v --bind /dev/pts $LFS/dev/pts mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run
I noen vertssystemer, /dev/shm
er en symbolsk lenke til /run/shm
. /run tmpfs ble montert ovenfor,
så i dette tilfellet er det bare en mappe som må opprettes.
if [ -h $LFS/dev/shm ]; then mkdir -pv $LFS/$(readlink $LFS/dev/shm) fi
Nå som alle pakkene som kreves for å bygge resten av nødvendige
verktøy er på systemet, er det på tide å gå inn i chroot
miljøet for å fullføre installasjonen av de gjenværende
midlertidige verktøyene. Dette miljøet vil også brukes for å
installere det endelige systemet. Som bruker root
, kjør følgende kommando for å gå inn i
miljøet som for øyeblikket er befolket med bare midlertidige
verktøy:
chroot "$LFS" /usr/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='(lfs chroot) \u:\w\$ ' \ PATH=/usr/bin:/usr/sbin \ /bin/bash --login
-i
alternativet gitt
til env
kommandoen vil slette alle variabler i chroot miljøet. Etter
det, bare HOME
, TERM
, PS1
, og
PATH
variablene settes på nytt.
TERM=$TERM
konstruksjonen vil sette TERM
variabelen inne i chroot til samme verdi som utenfor chroot.
Denne variabelen er nødvendig for programmer som vim og less å fungere skikkelig.
Hvis andre variabler ønskes, som f.eks CFLAGS
eller CXXFLAGS
, dette er et bra sted å sette dem
igjen.
Fra dette tidspunktet er det ikke nødvendig å bruke
LFS
variabelen lenger fordi alt
arbeid vil være begrenset til LFS filsystemet. Dette er fordi
Bash skallet blir fortalt at for $LFS
er roten nå (/
) mappen.
Legg merke til at /tools/bin
ikke
er i PATH
. Dette betyr at
kryssverktøykjeden ikke lenger vil være det som brukes i chroot
miljøet.
Merk at ledeteksten til bash vil si I have no name!
Dette er normalt fordi
/etc/passwd
filen ikke er
opprettet ennå.
Det er viktig at alle kommandoene gjennom resten av dette kapittel og de følgende kapitlene kjøres fra chroot miljøet. Hvis du forlater dette miljøet av en eller annen grunn (omstart for eksempel), sørg for at de virtuelle kjernefilsystemene er montert som forklart i Section 7.3.2, “Montering og fylling av /dev” og Section 7.3.3, “Montering av virtuelle kjernefilsystemer” og gå inn i chroot igjen før du fortsetter med installasjonen.
Det er på tide å lage hele strukturen i LFS filsystemet.
Lag noen mapper på rotnivå som ikke er i det begrensede settet som kreves i de foregående kapitlene ved å gi følgende kommando:
Noen av mappene nedenfor er allerede opprettet med eksplisitte instruksjoner eller når du installerte noen pakker. De gjentas nedenfor for fullstendighet.
mkdir -pv /{boot,home,mnt,opt,srv}
Lag det nødvendige settet med undermapper under rotnivået ved å utstede følgende kommandoer:
mkdir -pv /etc/{opt,sysconfig} mkdir -pv /lib/firmware mkdir -pv /media/{floppy,cdrom} mkdir -pv /usr/{,local/}{include,src} mkdir -pv /usr/local/{bin,lib,sbin} mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo} mkdir -pv /usr/{,local/}share/man/man{1..8} mkdir -pv /var/{cache,local,log,mail,opt,spool} mkdir -pv /var/lib/{color,misc,locate} ln -sfv /run /var/run ln -sfv /run/lock /var/lock install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp
mapper er som standard opprettet med tillatelsesmodus 755, men
dette er ikke ønskelig for alle mapper. I kommandoene ovenfor,
to endringer gjøres—en til root
brukerens hjemmemappe, og en annen til
mappene for midlertidige filer.
Den første modusendringen sikrer at ikke hvem som helst kan
komme inn /root
mappen—det
samme som en vanlig bruker ville gjort med sin hjemmemappe. De
andre modusendring sørger for at enhver bruker kan skrive til
/tmp
og /var/tmp
mapper, men kan ikke fjernes en
annen brukers filer fra dem. Sistnevnte er forbudt av den
såkalte “låst bit
(sticky bit),” den høyeste biten (1) i 1777
bitmasken.
mappetreet er basert på Filsystemhierarkistandard (Filesystem
Hierarchy Standard) (FHS) (tilgjengelig på https://refspecs.linuxfoundation.org/fhs.shtml).
FHS spesifiserer også den valgfrie tilstedeværelsen av noen
mapper som f.eks /usr/local/games
og /usr/share/games
. Vi skaper kun mapper som
trengs. Du må imidlertid gjerne lage disse mappene.
Historisk sett har Linux en liste over de monterte filsystemene
i filen /etc/mtab
. Moderne
kjerner opprettholder denne listen internt og eksponerer det
for brukeren via /proc
filsystemet. For å tilfredsstille verktøy som forventer
tilstedeværelse av /etc/mtab
,
opprett følgende symbolske lenke:
ln -sv /proc/self/mounts /etc/mtab
Lag en grunnleggende /etc/hosts
fil som blr referert til i noen testsuiter, og også i en av
Perls konfigurasjonsfiler :
cat > /etc/hosts << EOF 127.0.0.1 localhost $(hostname) ::1 localhost EOF
For at bruker root
skal kunne
logge inn og for navnet “root” å bli gjenkjent, det må være
relevante oppføringer i /etc/passwd
og /etc/group
filene.
Opprett /etc/passwd
filen ved å
kjøre følgende kommando:
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/usr/bin/false
daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/usr/bin/false
EOF
Selve passordet for root
velges
senere.
Opprett /etc/group
filen ved å
kjøre følgende kommando:
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
input:x:24:
mail:x:34:
kvm:x:61:
uuidd:x:80:
wheel:x:97:
nogroup:x:99:
users:x:999:
EOF
De opprettede gruppene er ikke en del av noen standard—de
er grupper delvis bestemt av kravene til Udev konfigurasjonen i
kapittel 9, og delvis etter felles konvensjon brukt av en rekke
eksisterende Linux distribusjoner. I tillegg er noen testsuiter
avhengige av spesifikke brukere eller grupper. Linux Standard
Base (LSB, tilgjengelig på http://refspecs.linuxfoundation.org/lsb.shtml)
anbefaler bare at, foruten gruppen root
med en Gruppe ID (GID) på 0, en gruppe
bin
med en GID på 1 å være
tilstede. Alle andre gruppenavn og GID-er kan velges fritt av
systemadministratoren siden velskrevne programmer ikke er
avhengige av GID-nummer, men bruk heller gruppens navn.
Noen tester i Chapter 8 trenger en vanlig bruker. Vi legger til denne brukeren her og sletter denne kontoen på slutten av det kapittelet.
echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd echo "tester:x:101:" >> /etc/group install -o tester -d /home/tester
For å fjerne “I
have no name!” ledetekst, start et nytt
skall. Siden /etc/passwd
og
/etc/group
filer har blitt
opprettet, vil brukernavn og gruppenavnoppløsning nå virke:
exec /usr/bin/bash --login
login, agetty, og init programmene (og andre) bruker en rekke logg filer for å registrere informasjon som hvem som var logget inn på systemet og når. Disse programmene vil imidlertid ikke skrive til loggfilene hvis de ikke allerede eksisterer. Initialiser loggfilene og gi dem riktige tillatelser:
touch /var/log/{btmp,lastlog,faillog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp
/var/log/wtmp
filen registrerer
alle pålogginger og logger ut. /var/log/lastlog
filen registrerer når hver
bruker sist logget på. /var/log/faillog
filen registrerer mislykkede
påloggingsforsøk. /var/log/btmp
filen registrerer de dårlige påloggingsforsøkene.
/run/utmp
filen registrerer
brukerne som for øyeblikket er pålogget. Denne filen
opprettes dynamisk i oppstart skriptet.
Ved bygging av gcc-pass2 måtte vi utsette installasjonen av C++ standardbiblioteket fordi ingen passende kompilator var tilgjengelig for å kompilere den. Vi kunne ikke bruke den innebygde kompilatoren fordi det er en innebygd kompilator og ikke bør brukes utenfor chroot og risikere å forurense bibliotekene med enkelte vertskomponenter.
Libstdc++ er en del av GCC
kildene. Du bør først pakke ut GCC tarballen og bytte til
gcc-11.2.0
mappen.
Lag en lenke som eksisterer når du bygger libstdc++ i gcc treet:
ln -s gthr-posix.h libgcc/gthr-default.h
Opprett en egen byggemappe for libstdc++ og skriv gå inn i den:
mkdir -v build cd build
Forbered libstdc++ for kompilering:
../libstdc++-v3/configure \ CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ --prefix=/usr \ --disable-multilib \ --disable-nls \ --host=$(uname -m)-lfs-linux-gnu \ --disable-libstdcxx-pch
Betydningen av konfigureringsalternativene:
CXXFLAGS="-g -O2
-D_GNU_SOURCE"
Disse flaggene sendes av Makefile på øverste nivå når det bygges en komplett versjon av GCC.
--host=$(uname
-m)-lfs-linux-gnu
Vi må etterligne hva som ville skje hvis denne pakken ble bygget som en del av et komplett kompilatorbygg. Denne bryteren vil bli sendt til configure av GCCs byggemaskineri.
--disable-libstdcxx-pch
Denne bryteren forhindrer installasjon av forhåndskompilerte inkluderte filer som ikke er nødvendige på dette stadiet.
Kompiler libstdc++ ved å kjøre:
make
Installer biblioteket:
make install
Detaljer om denne pakken finner du i Section 8.26.2, “Innhold i GCC.”
Gettext pakken inneholder verktøy for internasjonalisering og lokalisering. Disse gjør at programmer kan kompileres med NLS (Lokal Språk Støtte), slik at de kan sende ut meldinger i brukerens lokale språkformat.
For vårt midlertidige sett med verktøy trenger vi bare å installere tre programmer fra Gettext.
Forbered Gettext for kompilering:
./configure --disable-shared
Betydningen av konfigureringsalternativet:
--disable-shared
Vi trenger ikke å installere noen av de delte Gettext bibliotekene, denne gangen er det derfor ikke nødvendig å bygge dem.
Kompiler pakken:
make
Installer msgfmt, msgmerge, og xgettext programmene:
cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin
Detaljer om denne pakken finner du i Section 8.31.2, “Innhold i Gettext.”
Bison pakken inneholder en parsergenerator.
Forbered Bison for kompilering:
./configure --prefix=/usr \ --docdir=/usr/share/doc/bison-3.8.2
Betydningen av det nye konfigureringsalternativet:
--docdir=/usr/share/doc/bison-3.8.2
Dette forteller byggesystemet å installere bison dokumentasjonen i en versjonert mappe.
Kompiler pakken:
make
Installer pakken:
make install
Detaljer om denne pakken finner du i Section 8.32.2, “Innholdet i Bison.”
Perl pakken inneholder den praktiske utvinnings og rapporterings språket (Practical Extraction and Report Language).
Forbered Perl for kompilering:
sh Configure -des \ -Dprefix=/usr \ -Dvendorprefix=/usr \ -Dprivlib=/usr/lib/perl5/5.34/core_perl \ -Darchlib=/usr/lib/perl5/5.34/core_perl \ -Dsitelib=/usr/lib/perl5/5.34/site_perl \ -Dsitearch=/usr/lib/perl5/5.34/site_perl \ -Dvendorlib=/usr/lib/perl5/5.34/vendor_perl \ -Dvendorarch=/usr/lib/perl5/5.34/vendor_perl
Betydningen av de nye konfigureringsalternativene:
-des
Dette er en kombinasjon av tre alternativer: -d bruker standardinnstillinger for alle elementer; -e sikrer gjennomføring av alle oppgaver; -s sender ikke ut ikke-essensielle utdata.
Kompiler pakken:
make
Installer pakken:
make install
Detaljer om denne pakken finner du i Section 8.41.2, “Innhold i Perl.”
Python 3 pakken inneholder Python utviklingsmiljøet. Den er nyttig for objektorientert programmering, skriving av skript, prototyping store programmer, eller utvikle hele applikasjoner.
Det er to pakkefiler som navnet begynner med “python”. Den å pakke ut er
Python-3.10.2.tar.xz
(legg
merke til stor bokstav først).
Forbered Python for kompilering:
./configure --prefix=/usr \ --enable-shared \ --without-ensurepip
Betydningen av konfigureringsalternativet:
--enable-shared
Denne bryteren forhindrer installasjon av statiske biblioteker.
--without-ensurepip
Denne bryteren deaktiverer Python pakkeinstallasjonsprogrammet, som ikke er nødvendig på dette stadiet.
Kompiler pakken:
make
Noen Python 3 moduler kan ikke bygges nå på grunn av avhengighetene ikke er installert ennå. Byggesystemet prøver imidlertid å bygge dem, så kompileringen av noen filer vil mislykkes og kompilatormeldingen kan synes å indikere “fatal error”. Meldingen bør ignoreres. Bare sørg for toppnivåets make kommando ikke har feilet. De valgfrie modulene er ikke nødvendig nå, og de vil bli bygget i Chapter 8.
Installer pakken:
make install
Detaljer om denne pakken finner du i Section 8.50.2, “Innhold i Python 3.”
Texinfo pakken inneholder programmer for lesing, skriving og konvertere informasjonssider.
Først, fiks et problem med å bygge pakken med Glibc-2.34 eller nyere:
sed -e 's/__attribute_nonnull__/__nonnull/' \ -i gnulib/lib/malloc/dynarray-skeleton.c
Forbered Texinfo for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
Installer pakken:
make install
Detaljer om denne pakken finner du i Section 8.67.2, “Innhold i Texinfo.”
Util-linux pakken inneholder diverse hjelpeprogrammer.
FHS anbefaler å bruke /var/lib/hwclock
mappen i stedet for den
vanlige /etc
mappen som
plassering for adjtime
filen.
Opprett denne mappen med:
mkdir -pv /var/lib/hwclock
Forbered Util-linux for kompilering:
./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ --libdir=/usr/lib \ --docdir=/usr/share/doc/util-linux-2.37.4 \ --disable-chfn-chsh \ --disable-login \ --disable-nologin \ --disable-su \ --disable-setpriv \ --disable-runuser \ --disable-pylibmount \ --disable-static \ --without-python \ runstatedir=/run
Betydningen av konfigureringsalternativene:
ADJTIME_PATH=/var/lib/hwclock/adjtime
Dette angir plasseringen av filopptaksinformasjonen om maskinvareklokken i henhold til FHS. Dette er ikke strengt tatt nødvendig for dette midlertidige verktøyet, men det forhindrer at det lages en fil på et annet sted, som ikke ville bli overskrevet eller fjernet når du bygger den endelige util-linux pakken.
--libdir=/usr/lib
Denne bryteren sikrer .so
målrettes mot symbolkoblinger i den delte
bibliotekfilen i samme mappe (/usr/lib
) direkte.
--disable-*
Disse bryterne forhindrer advarsler om bygningskomponenter som krever pakker som ikke er i LFS eller ikke er installert ennå.
--without-python
Denne bryteren deaktiverer bruk av Python. Den unngår å prøve å bygge unødvendige bindinger.
runstatedir=/run
Denne bryteren angir plasseringen av socket som brukes
av uuidd
og libuuid
riktig.
Kompiler pakken:
make
Installer pakken:
make install
Detaljer om denne pakken finner du i Section 8.72.2, “Innhold i Util-linux.”
Fjern først den installerte dokumentasjonen for å forhindre dem fra å havne i det endelige systemet, og å spare ca 35 MB:
rm -rf /usr/share/{info,man,doc}/*
For det andre er .la filene til libtool bare nyttige når du kobler til statiske biblioteker. De er unødvendige og potensielt skadelige ved bruk av dynamiske delte biblioteker, spesielt når du bruker byggesystemer som ikke er autoverktøy. Mens du fortsatt er i chroot, fjern disse filene nå:
find /usr/{lib,libexec} -name \*.la -delete
Den nåværende systemstørrelsen er nå omtrent 3 GB, /tools mappen er ikke lenger nødvendig. Den bruker ca 1 GB diskplass. Slett den nå:
rm -rf /tools
På dette tidspunktet er de essensielle programmene og bibliotekene opprettet og ditt nåværende LFS system er i god stand. Systemet ditt kan nå bli sikkerhetskopiert for senere gjenbruk. Ved fatale feil i de påfølgende kapitler, viser det seg ofte at å fjerne alt og starte på nytt (mer forsiktig) er det beste alternativet for å gjenopprette. Dessverre, alle midlertidige filer vil også bli fjernet. For å unngå å bruke ekstra tid på gjøre om noe som har blitt bygget vellykket, og lage en sikkerhetskopi av det nåværende LFS systemet kan vise seg å være nyttig.
Alle de resterende trinnene i denne delen er valgfrie. Likevel, så snart du begynner å installere pakker i Chapter 8, vil de midlertidige filene bli overskrevet. Så det kan være lurt å ta en sikkerhetskopi av systemet som beskrevet nedenfor.
Følgende trinn utføres fra utenfor chroot miljøet. Det betyr
at du må forlate chroot miljøet før du fortsetter. Grunnen
til det er å få tilgang til filsystemplasseringer utenfor
chroot miljøet for å lagre/lese sikkerhetskopiarkivet som
ikke skal plasseres innenfor $LFS
hierarkiet for sikkerhetsmessige
årsaker.
Hvis du har bestemt deg for å ta en sikkerhetskopi, forlat chroot miljøet:
exit
Alle de følgende instruksjonene utføres av root
på vertssystemet ditt. Vær ekstra
forsiktig med kommandoene du skal kjøre ettersom feil her
kan du endre vertssystemet ditt. Vær oppmerksom på at
miljøvariabelen LFS
er satt for
bruker lfs
som standard er
kanskje ikke satt
for root
.
Når kommandoer skal utføres av root
, sørg for at du har satt
LFS
.
Dette har vært diskutert i Section 2.6, “Stille inn $LFS variabelen”.
Før du lager en sikkerhetskopi, avmonter de virtuelle filsystemene:
umount $LFS/dev/pts umount $LFS/{sys,proc,run,dev}
Sørg for at du har minst 1 GB ledig diskplass (kildenes tarballer vil bli inkludert i sikkerhetskopiarkivet) på filsystemet som inneholder mappen der du oppretter sikkerhetskopiarkivet.
Merk at instruksjonene nedenfor spesifiserer hjemmemappen til
vertenssystemets bruker root
som vanligvis finnes på rotfilsystemet.
Erstatt $HOME
av en mappe etter
eget valg hvis du ikke ønsker å ha sikkerhetskopien lagret i
root
sin hjemmemappe.
Opprett sikkerhetskopiarkivet ved å kjøre følgende kommando:
Fordi sikkerhetskopieringsarkivet er komprimert, tar det relativt lang tid lang tid (over 10 minutter) selv på et rimelig raskt system.
cd $LFS tar -cJpf $HOME/lfs-temp-tools-11.1.tar.xz .
Hvis du fortsetter til kapittel 8, ikke glem å gå inn i chroot miljøet på nytt som forklart i “Viktig” boksen under.
I tilfelle noen feil har blitt gjort og du må begynne på
nytt, kan du bruk denne sikkerhetskopien til å gjenopprette
systemet og spare litt gjenopprettingstid. Siden kildene
ligger under $LFS
, er de
inkludert i sikkerhetskopieringsarkivet, slik at de ikke
trenger å lastes ned igjen. Etter å ha sjekket at
$LFS
er riktig innstilt,
gjenopprett sikkerhetskopien ved å utføre følgende
kommandoer:
Følgende kommandoer er ekstremt farlige. Hvis du kjører
rm -rf ./*
som root brukeren og du ikke endret til $LFS-mappen eller
LFS
miljøvariabelen ikke er satt
for brukeren root, vil den ødelegge hele vertssystemet
ditt. DU ER ADVART.
cd $LFS
rm -rf ./*
tar -xpf $HOME/lfs-temp-tools-11.1.tar.xz
Igjen, dobbeltsjekk at miljøet er riktig konfigurert og fortsett å bygge resten av systemet.
Hvis du forlot chroot-miljøet for å lage en sikkerhetskopi eller starte byggingen på nytt ved hjelp av en gjenoppretting, husk å sjekke at det virtuelle filsystemer fortsatt er montert (findmnt | grep $LFS). Hvis de ikke er montert, monter dem på nytt nå som beskrevet i Section 7.3, “Klargjøring av virtuelle kjernefilsystemer” og gå inn i chroot miljøet igjen (se Section 7.4, “Gå inn i Chroot miljøet”) før du fortsetter.
I dette kapittelet begynner vi for alvor å bygge LFS systemet.
Installasjonen av denne programvaren er enkel. Skjønt i mange tilfeller kan installasjonsinstruksjonene gjøres kortere og mer generelle, vi har valgt å gi de fullstendige instruksjonene for hver pakke for å minimere mulighetene for feil. Nøkkelen til å lære hva som gjør et at et Linux system virker er å vite hva hver pakke brukes til og hvorfor du (eller systemet) kan trenge det.
Vi anbefaler ikke å bruke optimaliseringer. De kan gjøre at et
program kjører litt raskere, men de kan også forårsake
kompilerings vanskeligheter og problemer når du kjører
programmet. Hvis en pakke nekter å kompilere når du bruker
optimalisering, prøv å kompilere den uten optimalisering og se
om det løser problemet. Selv om pakken kompileres ved bruk av
optimalisering, er det risiko for at det kan ha blitt kompilert
feil fordi de komplekse interaksjonene mellom koden og
byggeverktøyene. Legg også merke til at -march
og -mtune
alternativene som ikke er spesifisert i boken er ikke testet.
Dette kan skape problemer med verktøykjedepakkene (Binutils,
GCC og Glibc). De små potensielle gevinstene oppnådd ved bruk
av kompilatoroptimaliseringer oppveies ofte av risikoen.
Førstegangsbyggere av LFS oppfordres til å bygge uten
tilpassete optimaliseringer. Det påfølgende systemet vil
fortsatt kjøre veldig raskt og være stabilt samtidig.
Før installasjonsinstruksjonene gir hver installasjonsside informasjon om pakken, inkludert en kortfattet beskrivelse av hva den inneholder, omtrent hvor lang tid det vil ta å bygge, og hvor mye diskplass kreves under denne byggeprosessen. Etter installasjoneninstruksene , er det en liste over programmer og biblioteker (sammen med korte beskrivelser) som pakken installerer.
SBU verdiene og nødvendig diskplass inkluderer testpakkedata for alle gjeldende pakker i Chapter 8. SBU verdier har blitt beregnet ved å bruke en enkelt CPU-kjerne (-j1) for alle operasjoner.
Generelt fraråder LFS redaktørene å bygge og installere statiske biblioteker. Det opprinnelige formålet for de fleste statiske biblioteker er nå foreldet i et moderne Linux system. I tillegg kan koblinger for et statiske biblioteker i et program være skadelig. Hvis en oppdatering til biblioteket er nødvendig for å fjerne et sikkerhetsproblem, må alle programmer som bruker det statiske biblioteket kobles til det nye biblioteket. Siden bruken av statiske biblioteker ikke alltid er åpenbart, de relevante programmene (og prosedyrene som trengs for å gjør koblingen) er kanskje ikke engang kjent.
I prosedyrene i dette kapittelet fjerner eller deaktiverer vi
installasjon av de fleste statiske biblioteker. Vanligvis
gjøres dette ved å utstede en --disable-static
alternativ til configure. I andre
tilfeller er det nødvendig med alternative midler. I noen få
tilfeller, spesielt glibc og gcc, forblir bruken av statiske
biblioteker avgjørende for det generelle pakke byggeprosess.
For en mer fullstendig diskusjon av biblioteker, se diskusjonen Biblioteker: Statiske eller delte? i BLFS boken.
Pakkebehandling er et ofte etterspurt tillegg til LFS boken. En pakkebehandler lar deg spore installasjonen av filer som gjør det enkelt å fjerne og oppgradere pakker. I tillegg til binær- og biblioteksfilene, en pakkebehandler vil håndtere installasjonen av konfigurasjonsfiler. Før du begynner å lure på, NEI—denne delen vil ikke snakke om eller anbefale noen spesiell pakkebehandler. Det den gir er en oppsummering av de fleste populære teknikker og hvordan de fungerer. Den perfekte pakkebehandleren for deg vil kanskje være blant disse teknikkene eller kan være en kombinasjon av to eller flere av disse teknikker. Denne delen nevner kort problemer som kan oppstå ved oppgradering av pakker.
Noen grunner til at ingen pakkebehandler er nevnt i LFS eller BLFS inkludere:
Å håndtere pakkehåndtering fjerner fokus fra målene til disse bøkene—som lærer hvordan et Linux system er bygget.
Det er flere løsninger for pakkehåndtering, som hver har dens styrker og ulemper. Inkludere en som tilfredsstiller alle målgrupper er vanskelig.
Det er skrevet noen tips om emnet pakkehåndtering. Besøk Hints Project og se om en av dem passer ditt behov.
En Pakkehåndterer gjør det enkelt å oppgradere til nyere versjoner når de er utgitt. Generelt kan instruksjonene i LFS- og BLFS-bøkene brukes til å oppgradere til nyere versjoner. Her er noen punkter du bør være oppmerksom på når du oppgraderer pakker, spesielt på et kjørende system.
Hvis Linux kjernen må oppgraderes (for eksempel fra 5.10.17 til 5.10.18 eller 5.11.1), må ikke noe annet bygges om. Systemet vil fortsette å fungere bra takket være den veldefinerte grensen mellom kjernen og brukerområdet. Nærmere bestemt Linux API-deklarasjoner trenger ikke å (og bør ikke bli, se neste element) oppgraderes ved siden av kjernen. Du må starte systemet på nytt for å bruke den oppgraderte kjernen.
Hvis Linux API-deklarasjoner eller Glibc må oppgraderes til en nyere versjon, (f.eks. fra glibc-2.31 til glibc-2.32), er det tryggere å gjenoppbygge LFS. Selv om du kanskje kan gjenoppbygge alle pakkene i deres avhengighetsrekkefølge, anbefaler vi ikke den.
Hvis en pakke som inneholder et delt bibliotek
oppdateres, og hvis navnet på biblioteket endres, vil
eventuelle pakker dynamisk koblet til biblioteket måtte
kompileres på nytt for å kunne kobles mot det nyere
biblioteket. (Merk at det ikke er noen sammenheng
mellom pakkeversjon og navnet på biblioteket.) Tenk for
eksempel på en pakke foo-1.2.3 som installerer et delt
bibliotek med navn libfoo.so.1
. Hvis du oppgraderer
pakken til en nyere versjon foo-1.2.4 som installerer
et delt bibliotek med navn libfoo.so.2
. I dette tilfellet, alle
pakker som er dynamisk koblet til libfoo.so.1
må kompileres på nytt for
å lenke imot libfoo.so.2
for å bruke den nye bibliotekversjonen. Du bør ikke
fjerne den forrige biblioteker med mindre alle de
avhengige pakkene er rekompilert.
Hvis en pakke som inneholder et delt bibliotek
oppdateres, og navnet på biblioteket ikke endres, men
versjonsnummeret til biblioteket file reduseres (f.eks.
navnet på biblioteket beholdes ved navn libfoo.so.1
, men navnet på
bibliotekfilen er endret fra libfoo.so.1.25
til libfoo.so.1.24
), bør du fjerne
bibliotekfilen fra den tidligere installerte versjonen
(libfoo.so.1.25
i dette
tilfellet). Eller, et ldconfig kjør (selv
ved å bruke en kommando linje, eller ved installasjon
av en pakke) vil tilbakestille symbolkoblingen
libfoo.so.1
til å peke på
den gamle bibliotekfilen fordi den ser ut til å ha en
“nyere” versjon, ettersom
versjonsnummeret er større. Denne situasjonen kan skje
hvis du må nedgradere en pakke, ellers endrer pakken
versjonen ordningen med bibliotekfiler plutselig.
Hvis en pakke som inneholder et delt bibliotek
oppdateres, og navnet på biblioteket ikke endres, men
et alvorlig problem (spesielt en sikkerhetssårbarhet)
er fikset, alle programmer som kjører koblet til det
delte biblioteket bør startes på nytt. Følgende
kommando, kjørt som root
etter oppdateringen, vil liste
opp hva som bruker de gamle versjonene av disse
bibliotekene (erstatt libfoo
med navnet på
biblioteket):
grep -l -e 'libfoo
.*deleted' /proc/*/maps |
tr -cd 0-9\\n | xargs -r ps u
Hvis OpenSSH brukes for tilgang til systemet og det er koblet til det oppdaterte biblioteket, må du omstarte sshd tjeneste, deretter logg ut, logg på igjen, og kjør kommandoen på nytt for å bekrefte at ingenting fortsatt bruker de slettede bibliotekene.
Hvis et binært eller et delt bibliotek overskrives, kan prosessene som bruker koden eller dataene i binærfilen eller biblioteket krasje. Den riktige måten å oppdatere et binært eller et delt bibliotek uten å forårsake at prosessen krasjer er å fjerne den først, og deretter installere den nye versjonen. install kommandoen levert av Coreutils har allerede implementert dette og de fleste pakker bruker det til å installere binærfiler og biblioteker. Dette betyr at du ikke vil bli plaget av dette problemet mesteparten av tiden. Imidlertid er installasjonsprosessen for noen pakker (spesielt Mozilla JS i BLFS) bare å overskrive filen hvis den eksisterer og forårsaker et krasj, så det er tryggere å lagre arbeidet ditt og lukke unødvendige kjørende prosesser før du oppdaterer en pakke.
Følgende er noen vanlige pakkehåndteringsteknikker. Før du ta en avgjørelse om en pakkeforvalter, gjør litt research på de forskjellige teknikker, spesielt ulempene ved den spesielle ordningen.
Ja, dette er en pakkehåndteringsteknikk. Noen mennesker finner ikke behovet for en pakkehåndterer fordi de kjenner pakkene inngående og vet hvilke filer som er installert av hver pakke. Noen brukere trenger heller ikke pakkehåndtering fordi de planlegger å gjenoppbygge hele system når en pakke endres.
Dette er en forenklet pakkehåndtering som ikke trenger noe
ekstra pakke for å administrere installasjonene. Hver pakke
er installert i en egen katalog. For eksempel er pakke
foo-1.1 installert i /usr/pkg/foo-1.1
og en symbolkobling er
laget fra /usr/pkg/foo
til
/usr/pkg/foo-1.1
. Ved
installasjon en ny versjon foo-1.2, installeres den i
/usr/pkg/foo-1.2
og den
forrige symbolkoblingen erstattes av en symbolkobling til
den nye versjonen.
Miljøvariabler som f.eks PATH
,
LD_LIBRARY_PATH
, MANPATH
, INFOPATH
og CPPFLAGS
må utvides til å
inkludere /usr/pkg/foo
. For
mer enn noen få pakker, blir denne ordningen uhåndterlig.
Dette er en variant av den tidligere
pakkehåndteringsteknikken. Hver pakke er installert på
samme måte som den forrige ordningen. Men i stedet for å
gjøre symbolkoblingen, er hver fil symlinked inn i
/usr
hierarkiet. Dette
fjerner behovet for å utvide miljøvariablene. Selv om
symbolkoblingene kan være opprettet av brukeren for å
automatisere opprettelsen, har mange pakkeforvaltere blitt
skrevet ved hjelp av denne tilnærmingen. Noen av de
populære inkluderer Stow, Epkg, Graft og Depot.
Installasjonen må forfalskes, slik at pakken tror det den
er installert i /usr
skjønt i
virkeligheten er den installert i /usr/pkg
hierarkiet. Installering på
denne måten er vanligvis ikke en triviell oppgave. Tenk for
eksempel på at du installerer en pakke libfoo-1.1. Følgende
instruksjoner kan ikke installere pakken riktig:
./configure --prefix=/usr/pkg/libfoo/1.1 make make install
Installasjonen vil fungere, men de avhengige pakkene kan
ikke kobles til libfoo som du forventer. Hvis du kompilerer
en pakke som lenker mot libfoo, kan du legge merke til at
den er koblet til /usr/pkg/libfoo/1.1/lib/libfoo.so.1
i
stedet for /usr/lib/libfoo.so.1
som du forventer.
Den riktige tilnærmingen er å bruke DESTDIR
strategi for forfalske installasjon
av pakken. Dette tilnærmingen fungerer som følger:
./configure --prefix=/usr make make DESTDIR=/usr/pkg/libfoo/1.1 install
De fleste pakker støtter denne tilnærmingen, men det er
noen som ikke gjør det. For de ikke-kompatible pakkene kan
det hende du må installere pakken manuelt , eller du kan
finne ut at det er lettere å installere noen problematiske
pakker inn i /opt
.
I denne teknikken blir en fil tidsstemplet før installasjonen av pakken. Etter installasjonen, en enkel bruk av find kommandoen med de riktige alternativene kan generere en logg over alle filene som er installert etter at tidsstempelfilen ble opprettet. En pakkebehandler skrevet med denne tilnærmingen er install-log.
Selv om denne ordningen har fordelen av å være enkel, har den to ulemper. Hvis filene under installasjonen er installert med et andre tidsstempel enn gjeldende tid, vil disse filene ikke spores av pakkebehandleren. Dessuten kan denne ordningen bare brukes når én pakke installeres om gangen. Loggene er ikke pålitelige hvis to pakker installeres på to forskjellige konsoller.
I denne tilnærmingen, blir kommandoene som installasjonsskriptene utfører registrert. Det er to teknikker man kan bruke:
LD_PRELOAD
miljøvariabelen kan
settes til å peke på et bibliotek som skal forhåndslastes
før installasjonen. Under installasjonen, sporer dette
biblioteket pakkene som blir installert og fester seg til
ulike kjørbare filer som f.eks cp, install, mv og sporing av
systemets anrop som endrer filsystemet. For å få denne
tilnærmingen til å virke, alle kjørbare filer må være
dynamisk koblet uten suid- eller sgid-biten.
Forhåndsinnlasting av biblioteket kan forårsake noen
uønskede bivirkninger under installasjon. Derfor anbefales
det at man utfører noen tester for å sørge for at
pakkebehandlingen ikke bryter noe og logger alle passende
filer.
Den andre teknikken er å bruke strace, som logger alle systemanrop som gjøres under utførelse av installasjonensskriptet.
I denne ordningen er pakkeinstallasjonen forfalsket til et separat tre som beskrevet i Symlink pakkebehandlingenen. Etter installasjon, opprettes et pakkearkiv ved hjelp av de installerte filene. Dette arkivet brukes deretter til å installere pakken enten på den lokale maskin eller kan til og med brukes til å installere pakken på andre maskiner.
Denne tilnærmingen brukes av de fleste pakkebehandlere som finnes i kommersielle distribusjoner. Eksempler på pakkeforvaltere som følger dette tilnærmingen er RPM (som for øvrig kreves av Linux Standard Base Specification), pkg-utils, Debian's apt, og Gentoo's Portage system. Et hint som beskriver hvordan du adopterer denne stilen av pakkehåndtering for LFS systemer ligger på https://www.linuxfromscratch.org/hints/downloads/files/fakeroot.txt.
Oppretting av pakkefiler som inkluderer avhengighetsinformasjon er kompleks og er utenfor omfanget av LFS.
Slackware bruker et tar basert system for pakke arkiv. Dette systemet håndterer med vilje ikke pakkeavhengigheter som mer komplekse pakkeforvaltere gjør. For detaljer om Slackware pakkebehandling, se http://www.slackbook.org/html/package-management.html.
Denne ordningen, unik for LFS, ble utviklet av Matthias Benkmann, og er tilgjengelig fra Hints Project. I denne ordningen, er hver pakke installert som en separat bruker i standardplasseringer. Filer som tilhører en pakke identifiseres enkelt med å sjekke bruker-ID. Funksjonene og manglene ved denne tilnærmingen er for komplisert til å beskrive i denne delen. For detaljer, se hintene på https://www.linuxfromscratch.org/hints/downloads/files/more_control_and_pkg_man.txt.
En av fordelene med et LFS system er at det ikke er noen
filer som avhenger av plasseringen til filene på et
disksystem. Kloning av et LFS bygg til en annen datamaskin
med samme arkitektur som basissystemet er like enkelt som å
bruke tar på
LFS partisjonen som inneholder rotkatalogen (ca. 250 MB
ukomprimert for en standard LFS bygg), kopiere den filen via
nettverksoverføring eller CD-ROM til det nye systemet og
utvide den. Fra det tidspunktet må noen få
konfigurasjonsfiler endres. Konfigurasjonsfiler som kanskje
må oppdateres inkluderer: /etc/hosts
, /etc/fstab
, /etc/passwd
, /etc/group
, /etc/shadow
,
/etc/ld.so.conf
, /etc/sysconfig/rc.site
, /etc/sysconfig/network
, og /etc/sysconfig/ifconfig.eth0
.
En tilpasset kjerne må kanskje bygges for det nye systemet avhengig av forskjeller i systemmaskinvare og den originale kjerne konfigurasjonen.
Det har vært noen rapporter om problemer ved kopiering mellom lignende, men ikke identiske arkitekturer. For eksempel instruksjonssettet for et Intel-system er ikke identisk med en AMD-prosessor og nyere versjoner av enkelte prosessorer kan ha instruksjoner som ikke er tilgjengelige i tidligere versjoner.
Til slutt må det nye systemet gjøres oppstartbart via Section 10.4, “Bruke GRUB til å sette opp oppstartsprosessen”.
Man-pages pakken inneholder over 2200 Man-sider.
Installer Man-sider ved å kjøre:
make prefix=/usr install
Iana-Etc pakken leverer data for nettverkstjenester og protokoller.
For denne pakken trenger vi bare å kopiere filene på plass:
cp services protocols /etc
Glibc pakken inneholder C hovedbiblioteket. Dette biblioteket tilbyr de grunnleggende rutinene for tildeling av minne, søk i kataloger, åpne og lukke filer, lese og skrive filer, strenghåndtering, mønstertilpasning, aritmetikk og så videre.
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.35-fhs-1.patch
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 bufferoverløp, 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
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 4200 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.
nss/tst-nss-files-hosts-multi testen er kjent for å mislykkes hvis systemet ikke har noen ikke-tilbakekoblings IP-adresser.
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 fornuftssjekk som svikter i LFS delmiljøet:
sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
Installer pakken:
make install
Fiks 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 deretter lokalitetene som kan få systemet til å svare i en annet språk. Ingen av lokalitetene er påkrevd, men hvis noen av dem mangler, vil testpakkene til fremtidige pakker hoppe over viktig tester.
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.35/localedata/SUPPORTED
filen (den
inkluderer alle lokaliteter oppført ovenfor og mange flere)
samtidig 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.35/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
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.
/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
Installer og sett opp tidssonedataene med følgende:
tar -xf ../../tzdata2021e.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. Canada/Eastern).
Som standard den dynamiske lasteren (/lib/ld-linux.so.2
) søker gjennom
/lib
og /usr/lib
for dynamiske biblioteker som
trengs av programmer etter hvert som de kjøres. Men hvis
det er biblioteker i andre kataloger enn /lib
og /usr/lib
, disse må legges til i
/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
Genererer meldingskataloger |
|
Viser systemkonfigurasjonsverdiene for filsystem spesifikke variabler |
|
Henter oppføringer fra en administrativ database |
|
Utfører tegnsettkonvertering |
|
Skaper hurtiglastings iconv modulkonfigurasjons filer |
|
Konfigurerer dynamiske lenker til kjøretidsbindingene |
|
Rapporter hvilke delte biblioteker som kreves av hvert gitt program eller delte bibliotek |
|
Assisterer ldd med objektfiler. Det eksisterer ikke på nyere arkitekturer som x86_64 |
|
Skriver ut forskjellig informasjon om gjeldende lokalitet |
|
Kompilerer lokalitets spesifikasjoner |
|
Oppretter en enkel database fra tekst inndata |
|
Leser og tolker en minnesporingsfil og viser et sammendrag i menneskelestbart format |
|
En nisse (daemon) som gir et hurtiglager for de vanligste navne tjenesteforespørsler |
|
Dumper informasjon generert av PC profiling |
|
Viser dynamiske delte objekter som brukes av kjørende prosesser |
|
En statisk koblet ln programm |
|
Sporer delte biblioteksprosedyrekall for en spesifisert kommando |
|
Leser og viser profileringsdata for delte objekter |
|
Spør brukeren om lokaliteten til systemet og rapporterer den tilsvarende tidssonebeskrivelsen |
|
Sporer kjøringen av et program ved å skrive ut gjeldende utført funksjon |
|
Tidssone dumperen |
|
Tidssonekompilatoren |
|
Hjelpeprogrammet for kjørbare delte biblioteker |
|
Brukes internt av Glibc som et grovt hack for å få
ødelagte programmer (f.eks. noen
Motif-applikasjoner) kjørende. Se kommentarer i
|
|
Et asynkront navneoppslagsbibliotek |
|
C hovedbiblioteket |
|
Slår på minneallokeringskontroll når den er forhåndslastet |
|
Kryptografibiblioteket |
|
Dummy bibliotek som ikke inneholder noen
funksjoner. Tidligere var den dynamisk
koblingsgrensesnittbibliotek, funksjonene er nå i
|
|
Dummy bibliotek som ikke inneholder noen funksjoner. Tidligere var det et kjøretidsbibliotek for g++ |
|
Det matematiske biblioteket |
|
Matematisk vektorbibliotek, koblet inn etter behov
når |
|
Slår på minneallokeringskontroll når den er koblet til |
|
Brukt av memusage for å hjelpe til med å samle inn informasjon om minnebruken til et program |
|
Nettverkstjenestebiblioteket, nå avviklet |
|
Navnetjenestebrytermodulene, som inneholder
funksjoner for å løse vertsnavn, brukernavn,
gruppenavn, aliaser, tjenester, protokoller osv.
Lastet av |
|
Kan forhåndslastes til PC profile en kjørbar fil |
|
Dummy bibliotek som ikke inneholder noen
funksjoner. Tidligere inneholdt den funksjoner som
gir de fleste grensesnittene som er spesifisert av
POSIX.1b Realtime Extension, nå er funksjonene i
|
|
Inneholder funksjoner for å lage, sende og tolke pakker til domenenavnservere |
|
Inneholder funksjoner som gir de fleste grensesnittene som er spesifisert av POSIX.1b Realtime Extension |
|
Inneholder funksjoner som er nyttige for å bygge feilsøkere for flertrådede programmer |
|
Dummy bibliotek som ikke inneholder noen
funksjoner. Tidligere inneholdt den kode for
“standard” funksjoner
som brukes i mange forskjellige Unix verktøy. Disse
funksjonene er nå i |
Zlib pakken inneholder komprimerings- og dekompresjonsrutiner som brukes av noen programmer.
Forbered Zlib for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Fjern et ubrukelig statisk bibliotek:
rm -fv /usr/lib/libz.a
Bzip2 pakken inneholder programmer for komprimering og dekomprimering av filer. Komprimering av tekstfiler med bzip2 gir mye bedre kompresjonsprosent enn med den tradisjonelle gzip.
Bruk en oppdatering som vil installere dokumentasjonen for denne pakken:
patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch
Følgende kommando sikrer at installasjonen av symbolske lenker er relative:
sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
Sørg for at man sidene er installert på riktig sted:
sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile
Forbered Bzip2 for kompilering med:
make -f Makefile-libbz2_so make clean
Betydningen av make parameteren:
-f
Makefile-libbz2_so
Vil føre til at Bzip2 bygges med en annen Makefile
fil, i dette tilfellet
Makefile-libbz2_so
filen,
som skaper en dynamisk libbz2.so
bibliotek og lenker Bzip2
verktøyene mot det.
Kompiler og test pakken:
make
Installer programmene:
make PREFIX=/usr install
Installer det delte biblioteket:
cp -av libbz2.so.* /usr/lib ln -sv libbz2.so.1.0.8 /usr/lib/libbz2.so
Installer den delte bzip2 binær inn i
/usr/bin
mappen, og erstatt to
eksemplarer av bzip2 med symbolske lenker:
cp -v bzip2-shared /usr/bin/bzip2 for i in /usr/bin/{bzcat,bunzip2}; do ln -sfv bzip2 $i done
Fjern et ubrukelig statisk bibliotek:
rm -fv /usr/lib/libbz2.a
Dekomprimerer bzippede filer |
|
Dekomprimerer til standard utgang |
|
Kjører cmp på bzippede filer |
|
Kjører diff på bzippede filer |
|
Kjører egrep på bzippede filer |
|
Kjører fgrep på bzippede filer |
|
Kjører grep på bzippede filer |
|
Komprimerer filer ved å bruke Burrows-Wheeler sortering på blokktekst komprimeringsalgoritme med Huffman-koding; kompresjonshastigheten er bedre enn det som oppnås med mer konvensjonelle kompressorer som bruker “Lempel-Ziv” algoritmer, som gzip |
|
Prøver å gjenopprette data fra skadde bzippede filer |
|
Kjører less på bzippede filer |
|
Kjører more på bzippede filer |
|
Biblioteket implementerer tapsfri, blokksorterende data komprimering ved å bruke Burrows-Wheeler-algoritmen |
Xz pakken inneholder programmer for komprimering og dekomprimering av filer. Det gir muligheter for lzma og den nyere xz komprimerings formatene. Komprimering av tekstfiler med xz gir en bedre kompresjonsprosent enn med de tradisjonelle gzip eller bzip2 kommandoene.
Forbered Xz for kompilering med:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/xz-5.2.5
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Dekomprimerer til standard utgang |
|
Kjører cmp på LZMA komprimerte filer |
|
Kjører diff på LZMA komprimerte filer |
|
Kjører egrep på LZMA komprimerte filer |
|
Kjører fgrep på LZMA komprimerte filer |
|
Kjører grep på LZMA komprimerte filer |
|
Kjører less på LZMA komprimerte filer |
|
Komprimerer eller dekomprimerer filer ved å bruke LZMA formatet |
|
En liten og rask dekoder for LZMA komprimerte filer |
|
Viser informasjon som er lagret i den komprimerte LZMA filoverskriften |
|
Kjører more på LZMA komprimerte filer |
|
Dekomprimerer filer ved å bruke LZMA formatet |
|
Dekomprimerer filer ved å bruke XZ formatet |
|
Komprimerer eller dekomprimerer filer ved å bruke XZ formatet |
|
Dekomprimerer til standard utgang |
|
Kjører cmp på XZ komprimerte filer |
|
En liten og rask dekoder for XZ komprimerte filer |
|
Kjører diff på XZ komprimerte filer |
|
Kjører egrep på XZ komprimerte filer |
|
Kjører fgrep på XZ komprimerte filer |
|
Kjører grep på XZ komprimerte filer |
|
Kjører less på XZ komprimerte filer |
|
Kjører more på XZ komprimerte filer |
|
Bibliotek som implementerer tapsfri, blokksorterende data komprimering ved å bruke Lempel-Ziv-Markov kjedealgoritmen |
Zstandard er en sanntidskomprimeringsalgoritme som gir høyt kompresjonsforhold. Den tilbyr et veldig bredt spekter av kompresjons/hastighets avveininger, samtidig som den støttes av en veldig rask dekoder.
Kompiler pakken:
make
I testutdataen er det flere steder som angir 'failed'. Disse er forventet og bare 'FAIL' er en reell testfeil. Det skal ikke være noen testfeil.
For å teste resultatene, utsted:
make check
Installer pakken:
make prefix=/usr install
Fjern det statiske biblioteket:
rm -v /usr/lib/libzstd.a
File pakken inneholder et verktøy for å bestemme typen av en gitt fil eller filer.
Forbered File for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Readline pakken er et sett med biblioteker som tilbyr kommandolinje redigerings- og historikkfunksjoner.
Å installere Readline på nytt vil føre til at de gamle bibliotekene flyttes til <libraryname>.old. Selv om dette normalt ikke er et problem, i noen tilfeller kan det utløse en koblingsfeil i ldconfig. Dette kan være unngås ved å utstede følgende to seds:
sed -i '/MV.*old/d' Makefile.in sed -i '/{OLDSUFF}/c:' support/shlib-install
Forbered Readline for kompilering:
./configure --prefix=/usr \ --disable-static \ --with-curses \ --docdir=/usr/share/doc/readline-8.1.2
Betydningen av konfigureringsalternativet:
--with-curses
Dette alternativet forteller Readline at det kan finne
termcap bibliotekfunksjoner i curses biblioteket, i
stedet for et separat termcap bibliotek. Det gjør det
mulig å generere en korrekt readline.pc
fil.
Kompiler pakken:
make SHLIB_LIBS="-lncursesw"
Betydningen av make alternativet:
SHLIB_LIBS="-lncursesw"
Dette alternativet tvinger Readline til å lenke mot
libncursesw
biblioteket.
Denne pakken kommer ikke med en testpakke.
Installer pakken:
make SHLIB_LIBS="-lncursesw" install
Hvis ønskelig, installer dokumentasjonen:
install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.1.2
M4 pakken inneholder en makroprosessor.
Forbered M4 for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Kopierer de gitte filene mens de utvider makroene som de inneholder. Disse makroene er enten innebygde eller brukerdefinerte og kan ta et hvilket som helst antall argumenter. Foruten å utføre makroutvidelse, m4 har innebygde funksjoner for å inkludere navngitte filer, kjører Unix kommandoer, utfører heltallsaritmetikk, manipulere tekst, rekursjon osv. m4 programmet kan brukes enten som en grenseflate til en kompilator eller som en makroprosessor på egen hånd |
Bc pakken inneholder et vilkårlig behandlingsspråk for numerisk presisjon.
Forbered Bc for kompilering:
CC=gcc ./configure --prefix=/usr -G -O3
Betydningen av konfigureringsalternativene:
CC=gcc
Denne parameteren spesifiserer kompilatoren som skal brukes.
-O3
Spesifiser optimaliseringen som skal brukes.
-G
Utelater deler av testpakken som ikke vil fungere uten GNU bc tilstede.
Kompiler pakken:
make
For å teste bc, kjør:
make test
Installer pakken:
make install
Flex pakken inneholder et verktøy for å generere programmerer som gjenkjenner mønstre i tekst.
Forbered Flex for kompilering:
./configure --prefix=/usr \ --docdir=/usr/share/doc/flex-2.6.4 \ --disable-static
Kompiler pakken:
make
For å teste resultatene (ca. 0,5 SBU), utsted:
make check
Installer pakken:
make install
Noen få programmer vet ikke om flex ennå og prøver å kjøre
forgjengeren, lex. For å støtte de
programmene, opprett en symbolsk lenke kalt lex
som kjører flex
i lex emuleringsmodus:
ln -sv flex /usr/bin/lex
Et verktøy for å generere programmer som gjenkjenner mønstre i tekst; det gir mulighet for allsidigheten til å spesifisere reglene for mønstersøking, eliminere behovet for å utvikle et spesialisert program |
|
En utvidelse av flex brukes til å generere C++ kode og klasser. Det er en symbolsk kobling til flex |
|
En symbolsk lenke som kjører flex i lex emuleringsmodus |
|
|
Tcl pakken inneholder Tool Command Language, et robust skriptspråk for generelt bruk. Expect pakken er skrevet i Tcl språket.
Denne pakken og de to neste (Expect og DejaGNU) er installert for å støtte kjøring av testpakkene for binutils og GCC og andre pakker. Å installere tre pakker for testformål kan virke overdrevent, men det er veldig betryggende, om ikke avgjørende, å vite at de viktigste verktøyene fungerer som de skal.
Pakk først ut dokumentasjonen ved å gi følgende kommando:
tar -xf ../tcl8.6.12-html.tar.gz --strip-components=1
Forbered Tcl for kompilering:
SRCDIR=$(pwd) cd unix ./configure --prefix=/usr \ --mandir=/usr/share/man \ $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit)
Betydningen av konfigureringsalternativene:
$([
"$(uname -m)" = x86_64 ] && echo
--enable-64bit)
construct $(<shell
command>)
erstattes av utdataene fra
shell kommandoen. Her er denne utgangen tom hvis den
kjøres på en 32-bits maskin, og er --enable-64bit
hvis du
kjører på en 64-bits maskin.
Bygg pakken:
make sed -e "s|$SRCDIR/unix|/usr/lib|" \ -e "s|$SRCDIR|/usr/include|" \ -i tclConfig.sh sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.3|/usr/lib/tdbc1.1.3|" \ -e "s|$SRCDIR/pkgs/tdbc1.1.3/generic|/usr/include|" \ -e "s|$SRCDIR/pkgs/tdbc1.1.3/library|/usr/lib/tcl8.6|" \ -e "s|$SRCDIR/pkgs/tdbc1.1.3|/usr/include|" \ -i pkgs/tdbc1.1.3/tdbcConfig.sh sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.2|/usr/lib/itcl4.2.2|" \ -e "s|$SRCDIR/pkgs/itcl4.2.2/generic|/usr/include|" \ -e "s|$SRCDIR/pkgs/itcl4.2.2|/usr/include|" \ -i pkgs/itcl4.2.2/itclConfig.sh unset SRCDIR
De ulike “sed” instruksjonene etter “make” kommandoen fjerner referanser til byggemappen fra konfigurasjonsfilene og erstatter dem med installasjonsmappen. Dette er ikke obligatorisk for resten av LFS, men kan være nødvendig i tilfelle en pakke bygget senere bruker Tcl.
For å teste resultatene, utsted:
make test
Installer pakken:
make install
Gjør det installerte biblioteket skrivbart slik at feilsøkingssymboler kan fjernes senere:
chmod -v u+w /usr/lib/libtcl8.6.so
Installer Tcl sine deklarasjoner. Den neste pakken, Expect, krever dem.
make install-private-headers
Lag nå en nødvendig symbolsk kobling:
ln -sfv tclsh8.6 /usr/bin/tclsh
Gi nytt navn til en man side som er i konflikt med en man side for Perl:
mv /usr/share/man/man3/{Thread,Tcl_Thread}.3
Hvis du lastet ned den valgfrie dokumentasjonen, installer den ved å utstede den følgende kommandoer:
mkdir -v -p /usr/share/doc/tcl-8.6.12 cp -v -r ../html/* /usr/share/doc/tcl-8.6.12
Expect pakken inneholder verktøy for å automatisere, via skriptede dialoger, interaktive applikasjoner som f.eks telnet, ftp, passwd, fsck, rlogin, og tip. Expect er også nyttig for å teste disse samme applikasjoner i tillegg til å lette alle slags oppgaver som er uoverkommelige vanskelig med noe annet. DejaGnu rammeverket er skrevet i Expect.
Forbered Expect for kompilering:
./configure --prefix=/usr \ --with-tcl=/usr/lib \ --enable-shared \ --mandir=/usr/share/man \ --with-tclinclude=/usr/include
Betydningen av konfigureringsalternativene:
--with-tcl=/usr/lib
Denne parameteren er nødvendig for å fortelle configure hvor tclConfig.sh skriptet er plassert.
--with-tclinclude=/usr/include
Dette forteller Expect eksplisitt hvor du finner Tcls interne deklarasjoner.
Bygg pakken:
make
For å teste resultatene, utsted:
make test
Installer pakken:
make install ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib
DejaGnu pakken inneholder et rammeverk for å kjøre test pakker på GNU-verktøy. Det er skrevet i expect, som selv bruker Tcl verktøykommandospråk (Tool Command Language).
Upstream anbefaler å bygge DejaGNU i en dedikert byggemappe :
mkdir -v build cd build
Forbered DejaGNU for kompilering:
../configure --prefix=/usr makeinfo --html --no-split -o doc/dejagnu.html ../doc/dejagnu.texi makeinfo --plaintext -o doc/dejagnu.txt ../doc/dejagnu.texi
Bygg og installer pakken:
make install install -v -dm755 /usr/share/doc/dejagnu-1.6.3 install -v -m644 doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.3
For å teste resultatene, utsted:
make check
Binutils pakken inneholder en linker, en assembler og annet verktøy for håndtering av objektfiler.
Kontroller at PTY-ene fungerer som de skal inne i chroot miljøet ved å utføre en enkel test:
expect -c "spawn ls"
Denne kommandoen skal gi følgende utdata:
spawn ls
Hvis utdataene i stedet inkluderer meldingen nedenfor, er miljøet ikke satt opp for riktig PTY drift. Dette problemet må løses før testpakkene for Binutils og GCC kjøres:
The system has no more ptys.
Ask your system administrator to create more.
Upstream har laget en oppdatering for å fikse et problem ved bruk av binutils for å bygge noen BLFS pakker med Optimalisering av koblingstid (Link Time Optimization) (LTO) aktivert. Bruk det nå:
patch -Np1 -i ../binutils-2.38-lto_fix-1.patch
Lag nå en rettelse identifisert upstream som påvirker byggingen av noen pakker:
sed -e '/R_386_TLS_LE /i \ || (TYPE) == R_386_TLS_IE \\' \ -i ./bfd/elfxx-x86.h
Binutils dokumentasjonen anbefaler å bygge Binutils i en dedikert byggemappe:
mkdir -v build cd build
Forbered Binutils for kompilering:
../configure --prefix=/usr \ --enable-gold \ --enable-ld=default \ --enable-plugins \ --enable-shared \ --disable-werror \ --enable-64-bit-bfd \ --with-system-zlib
Betydningen av konfigureringsparametrene:
--enable-gold
Bygg gold linken og installer den som ld.gold (ved siden av standard linker).
--enable-ld=default
Bygg den originale bfd linkeren og installer den som både ld (som er standard linker) og ld.bfd.
--enable-plugins
Aktiverer støtte for programtillegg for linkeren.
--enable-64-bit-bfd
Aktiverer 64 bits støtte (på verter med smalere ordstørrelser). Kanskje ikke nødvendig på 64 bits systemer, men skader ikke.
--with-system-zlib
Bruk det installerte zlib biblioteket i stedet for å bygge den inkluderte versjonen.
Kompiler pakken:
make tooldir=/usr
Betydningen av make parameteren:
tooldir=/usr
Vanligvis er verktøykatalogen (mappen der de kjørbare
filene vil til slutt bli lokalisert i) satt til
$(exec_prefix)/$(target_alias)
. For
eksempel, x86_64-maskiner vil utvide det til
/usr/x86_64-pc-linux-gnu
.
Fordi dette er et tilpasset system, er denne
målspesifikke katalogen i /usr
ikke påkrevd. $(exec_prefix)/$(target_alias)
ville
vært brukt hvis systemet ble brukt til å krysskompilere
(for eksempel kompilering av en pakke på en Intel
maskin som genererer kode som kan kjøres på PowerPC
maskiner).
Testpakken for Binutils i denne delen anses som kritisk. Ikke hopp over det under noen omstendigheter.
Test resultatene:
make -k check
Installer pakken:
make tooldir=/usr install
Fjern ubrukelige statiske biblioteker:
rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.a
Oversetter programadresser til filnavn og linjenumre; gitt en adresse og navnet på en kjørbar fil, bruker den feilsøkings informasjonen i den kjørbare filen for å bestemme hvilken kildefil og linje nummer som er knyttet til adressen |
|
Oppretter, endrer og trekker ut fra arkiver |
|
En assembler som setter sammen utdataene til gcc inn i objektfiler |
|
Brukes av linkeren til å ikke ødelegge C++ og Java symboler og hindre overbelastede funksjoner å krasje |
|
DWARF pakkeverktøyet |
|
Oppdaterer ELF deklarasjonen til ELF filer |
|
Viser profildata for kallgrafen |
|
En linker som kombinerer en rekke objekt og arkivfiler inn i en enkelt fil, flytter dataene deres og rydder opp i symbolreferanser |
|
En nedskalert versjon av ld som bare støtter objektfil formatet elf |
|
Hardlenke til ld |
|
Viser symbolene som forekommer i en gitt objektfil |
|
Oversetter én type objektfil til en annen |
|
Viser informasjon om den gitte objektfilen, med alternativer kontrollerer den hvilken informasjonen som skal vises; informasjonen som vises er nyttig for programmerere som jobber med kompileringens verktøy |
|
Genererer en indeks over innholdet i et arkiv og lagrer det i arkivet; indeksen viser alle symbolene som er definert av arkivmedlemmer som er flyttbare objektfiler |
|
Viser informasjon om binærfiler av ELF typen |
|
Viser seksjonsstørrelsene og totalstørrelsen for de gitte objektfilene |
|
Utdata, for hver gitt fil, sekvensene av utskrivbare tegn som er av minst den angitte lengden (som standard til fire); for objektfiler skriver den som standard bare strengene fra initialiserings- og lastingsseksjonene mens for andre typer filer, skanner den hele filen |
|
Kaster symboler fra objektfiler |
|
Biblioteket med binære filbeskrivelser |
|
Compat ANSI-C Type Format støttebibliotek for feilsøking |
|
En libctf variant som ikke bruker libbfd funksjonalitet |
|
Et bibliotek for å håndtere opkoder— “leselig tekst” versjoner av instruksjoner for prosessoren; den brukes til å bygge verktøy som objdump |
GMP pakken inneholder matematikkbiblioteker. Disse har nyttige funksjoner for vilkårlig presisjonsaritmetikk.
Hvis du bygger for 32-bit x86, men du har en CPU som er i
stand til å kjøre 64-bits kode og du har spesifisert
CFLAGS
i miljøet vil
konfigureringsskriptet forsøk å konfigurere for 64-biter og
mislykkes. Unngå dette ved å påkalle configure kommandoen
nedenfor med
ABI=32
./configure ...
Standardinnstillingene til GMP produserer biblioteker optimalisert for vertsprosessoren. Hvis det er ønskelig med biblioteker egnet for prosessorer mindre kapable enn vertens CPU, kan generiske biblioteker bli opprettet ved å kjøre følgende:
cp -v configfsf.guess config.guess cp -v configfsf.sub config.sub
Forbered GMP for kompilering:
./configure --prefix=/usr \ --enable-cxx \ --disable-static \ --docdir=/usr/share/doc/gmp-6.2.1
Betydningen av de nye konfigureringsalternativene:
--enable-cxx
Denne parameteren aktiverer C++ støtte
--docdir=/usr/share/doc/gmp-6.2.1
Denne variabelen spesifiserer riktig sted for dokumentasjon.
Kompiler pakken og generer HTML dokumentasjonen:
make make html
Testpakken for GMP i denne delen anses som kritisk. Ikke hopp over det under noen omstendigheter.
Test resultatene:
make check 2>&1 | tee gmp-check-log
Koden i gmp er svært optimalisert for prosessoren hvor den er bygget. Noen ganger vil koden som oppdager prosessoren feilidentifisere systemets evner og det vil være feil i testene eller andre applikasjoner som bruker gmp bibliotekene med meldingen "Illegal instruction". I dette tilfellet bør gmp rekonfigureres med alternativet --build=x86_64-pc-linux-gnu og gjenoppbygges.
Sørg for at alle 197 testene i testpakken besto. Sjekk resultatene ved å gi følgende kommando:
awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log
Installer pakken og dens dokumentasjon:
make install make install-html
MPFR-pakken inneholder matematiske funksjoner med flere presisjoner.
Forbered MPFR for kompilering:
./configure --prefix=/usr \ --disable-static \ --enable-thread-safe \ --docdir=/usr/share/doc/mpfr-4.1.0
Kompiler pakken og generer HTML dokumentasjonen:
make make html
Testpakken for MPFR i denne delen anses som kritisk. Ikke hopp over den under noen omstendigheter.
Test resultatene og sørg for at alle tester består:
make check
Installer pakken og dens dokumentasjon:
make install make install-html
MPC pakken inneholder et bibliotek for aritmetikk av komplekse tall med vilkårlig høy presisjon og korrekt avrunding av resultatet.
Forbered MPC for kompilering:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/mpc-1.2.1
Kompiler pakken og generer HTML dokumentasjonen:
make make html
For å teste resultatene, utsted:
make check
Installer pakken og dens dokumentasjon:
make install make install-html
Attr pakken inneholder verktøy for å administrere den utvidede attributter på filsystemobjekter.
Forbered Attr for kompilering:
./configure --prefix=/usr \ --disable-static \ --sysconfdir=/etc \ --docdir=/usr/share/doc/attr-2.5.1
Kompiler pakken:
make
Testene må kjøres på et filsystem som støtter utvidete attributter som filsystemene ext2, ext3 eller ext4. For å teste resultatene, utsted:
make check
Installer pakken:
make install
Acl pakken inneholder verktøy for å administrere tilgangskontrolllister, som brukes til å definere mer finmaskede skjønnsmessige tilgangsrettigheter for filer og mapper.
Forbered Acl for kompilering:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/acl-2.3.1
Kompiler pakken:
make
Acl testene må kjøres på et filsystem som støtter tilgangs kontroller etter Coreutils er bygget med Acl biblioteker. Hvis ønskelig, gå tilbake til denne pakken og kjør make check etter at Coreutils har blitt bygget senere i dette kapittelet.
Installer pakken:
make install
Libcap pakken implementerer brukerromsgrensesnittene til POSIX 1003.1e funksjoner tilgjengelig i Linux kjerner. Disse egenskapene er en partisjonering av det allmektige root privilegiet i et sett med distinkte privilegier.
Hindre at statiske biblioteker blir installert:
sed -i '/install -m.*STA/d' libcap/Makefile
Kompiler pakken:
make prefix=/usr lib=lib
Betydningen av make alternativet:
lib=lib
Denne parameteren setter bibliotekkatalogen til
/usr/lib
heller enn
/usr/lib64
på x86_64. Det
har ingen effekt på x86.
For å teste resultatene, utsted:
make test
Installer pakken:
make prefix=/usr lib=lib install
En skallinnpakning for å utforske og begrense kapasitetsstøtte |
|
Undersøker filfunksjoner |
|
Viser mulighetene for den forespurte prosessen(e) |
|
Angir filkapasiteter |
|
Inneholder bibliotekfunksjonene for å manipulere POSIX 1003.1e kapasiteter |
|
Inneholder funksjoner for å støtte POSIX semantikk for syscalls knyttet til pthread biblioteket |
Shadow pakken inneholder programmer for håndtering av passord på en sikker måte.
Hvis du ønsker å håndheve bruken av sterke passord, se
https://www.linuxfromscratch.org/blfs/view/11.1/postlfs/cracklib.html
for installasjon av CrackLib før du bygger Shadow. Legg så
til --with-libcrack
til configure
kommandoen under.
Deaktiver installasjonen av groups programmet og man sidene, ettersom Coreutils gir en bedre versjon. Også, forhindre installasjon av man sider som allerede var installert i Section 8.3, “Man-pages-5.13”:
sed -i 's/groups$(EXEEXT) //' src/Makefile.in find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \;
I stedet for å bruke standard
crypt metoden, bruk
den sikrere SHA-512
metode for passordkryptering, som også tillater passord
lengre enn 8 tegn. Det er også nødvendig å endre det
foreldede /var/spool/mail
plasseringen for brukerpostbokser som Shadow bruker som
standard til /var/mail
stedet
som brukes for øyeblikket. Og, kvitte seg med /bin
og /sbin
fra PATH
, siden de ganske enkelt
er symbolske lenker til motparten i /usr
.
Hvis /bin
og/eller
/sbin
foretrekkes å være i
PATH
av en eller annen grunn,
endre PATH
i .bashrc
etter at LFS er bygget.
sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \ -e 's:/var/spool/mail:/var/mail:' \ -e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \ -i etc/login.defs
Hvis du valgte å bygge Shadow med støtte for Cracklib, kjør følgende:
sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/login.defs
Forbered Shadow for kompilering:
touch /usr/bin/passwd ./configure --sysconfdir=/etc \ --disable-static \ --with-group-name-max-length=32
Betydningen av konfigureringsalternativet:
Filen /usr/bin/passwd
må
eksistere fordi plasseringen er hardkodet i noen
programmer, og hvis den ikke eksisterer, er ikke
standardplasseringen riktig.
--with-group-name-max-length=32
Maksimalt brukernavn er 32 tegn. Gjør det maksimale gruppenavnet det samme.
Kompiler pakken:
make
Denne pakken kommer ikke med en testpakke.
Installer pakken:
make exec_prefix=/usr install make -C man install-man
Denne pakken inneholder verktøy for å legge til, endre og
slette brukere og grupper; angi og endre passordene deres; og
utføre annen administrativ oppgaver. For en fullstendig
forklaring av hva passordskygge betyr, se
doc/HOWTO
filen i den utpakkede
kildetreet. Hvis du bruker Shadow-støtte, husk at programmer
som trenger å bekrefte passord (skjermbehandlere,
FTP-programmer, pop3-nisser, etc.) må være Shadow-kompatibel.
Det vil si at de må kunne jobbe med skyggelagte passord.
For å aktivere skyggelagte passord, kjør følgende kommando:
pwconv
For å aktivere skyggelagte gruppepassord, kjør:
grpconv
Shadows standardkonfigurasjon for useradd verktøyet har noen
forbehold som trenger litt forklaring. Først standard
handling for useradd verktøyet er å lage
brukeren og en gruppe med samme navn som brukeren. Som
standard begynner bruker-ID (UID) og gruppe ID-numre (GID)
med 1000. Dette betyr at hvis du ikke sender parametere til
useradd, hver
bruker vil være medlem av en unik gruppe på systemet. Hvis
denne oppførselen er uønsket, trenger du å sende enten
-g
eller -N
parameter til useradd eller for å endre
innstillingen for USERGROUPS_ENAB
i /etc/login.defs
. Se useradd(8)
for mer informasjon.
For det andre, for å endre standardparametrene, filen
/etc/default/useradd
må lages
og skreddersys for å passe dine spesielle behov. Lag den med:
mkdir -p /etc/default useradd -D --gid 999
/etc/default/useradd
Parameterforklaringer
GROUP=999
Denne parameteren setter begynnelsen på gruppenumrene
som brukes i /etc/group
filen. Den spesielle verdien 999 kommer fra --gid
parameter ovenfor.
Du kan endre den til alt du ønsker. Noter at
useradd
vil aldri gjenbruke en UID eller GID. Hvis nummeret som
er identifisert i denne parameteren brukes, vil det
bruke neste ledige nummer. Merk også at hvis du ikke
har en gruppe med en ID lik dette nummeret på systemet
ditt første gang du bruker useradd uten
-g
parameteren,
du vil få en melding på terminalen som sier:
useradd: unknown GID
999
, selv om kontoen er riktig opprettet. Det er
derfor vi har opprettet gruppen users
med denne gruppe-IDen i
Section 7.6, “Opprette essensielle filer og
symbolkoblinger”.
CREATE_MAIL_SPOOL=yes
Denne parameteren gjør at useradd lager en
postboksfil for den nyopprettede brukeren. useradd vil gjøre
gruppe eierskap av denne filen til mail
gruppe med 0660 tillatelser.
Hvis du foretrekker at disse postboksfilene ikke blir
laget av useradd, utsted
følgende kommando:
sed -i '/MAIL/s/yes/no/' /etc/default/useradd
Velg et passord for brukeren root og sett det ved å kjøre:
passwd root
Brukes til å endre maksimalt antall dager mellom obligatoriske passordendringer |
|
Brukes til å endre en brukers fulle navn og annen informasjon |
|
Brukes til å oppdatere gruppepassord i skriptmodus |
|
Brukes til å oppdatere brukerpassord i skriptmodus |
|
Brukes til å endre en brukers standard påloggingsskall |
|
Sjekker og håndhever gjeldende retningslinjer for passordutløp |
|
Brukes til å undersøke loggen over påloggingsfeil, for å sette et maksimum antall feil før en konto blokkeres, eller for å tilbakestille antall feil |
|
Brukes til å liste de underordnede id-områdene for en bruker |
|
Brukes til å legge til og slette medlemmer og administratorer til grupper |
|
Oppretter en gruppe med det gitte navnet |
|
Sletter gruppen med oppgitt navn |
|
Lar en bruker administrere sin egen gruppemedlemsliste uten krav om superbrukerprivilegier. |
|
Brukes til å endre den gitte gruppens navn eller GID |
|
Verifiserer integriteten til gruppefilene
|
|
Oppretter eller oppdaterer skyggegruppefilen fra den normale gruppefilen |
|
Oppdaterer |
|
Rapporterer siste pålogging for alle brukere eller av en gitt bruker |
|
Brukes av systemet for å la brukere logge på |
|
Er en nisse som brukes til å håndheve restriksjoner på påloggingstid og portene |
|
Brukes til å angi gid-tilordning av et brukernavnområde |
|
Brukes til å endre gjeldende GID under en påloggingsøkt |
|
Brukes til å angi uid-tilordning av et brukernavnområde |
|
Brukes til å opprette eller oppdatere en hel serie med brukerkontoer |
|
Viser en melding om at en konto ikke er tilgjengelig; den er designet til å brukes som standard skall for kontoer som er blitt deaktivert |
|
Brukes til å endre passordet for en bruker- eller gruppekonto |
|
Verifiserer integriteten til passordfilene
|
|
Oppretter eller oppdaterer skyggepassordfilen fra den normale passordfilen |
|
Oppdaterer |
|
Utfører en gitt kommando mens brukerens GID er satt til den gitte gruppen |
|
Kjører et skall med erstatningsbruker- og gruppe-IDer |
|
Oppretter en ny bruker med det gitte navnet, eller oppdaterer standard informasjon om ny bruker |
|
Sletter den gitte brukerkontoen |
|
Brukes til å endre den gitte brukerens påloggingsnavn, bruker identifikasjon (UID), skall, startgruppe, hjemmekatalog, etc. |
|
Redigerer |
|
Redigerer |
|
bibliotek for å prosessere underordnede id-områder for brukere |
GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.
Først må du fikse et problem som forhindrer libasan.a
å bygge denne pakken med
Glibc-2.34 eller nyere:
sed -e '/static.*SIGSTKSZ/d' \ -e 's/return kAltStackSize/return SIGSTKSZ * 4/' \ -i libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp
Hvis du bygger på x86_64, endre standard katalognavn for 64-bit bibliotekene til “lib”:
case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac
GCC dokumentasjonen anbefaler å bygge GCC i en dedikert byggemappe:
mkdir -v build cd build
Forbered GCC for kompilering:
../configure --prefix=/usr \ LD=ld \ --enable-languages=c,c++ \ --disable-multilib \ --disable-bootstrap \ --with-system-zlib
Merk at for andre programmeringsspråk er det noen forutsetninger som ikke er tilgjengelig ennå. Se BLFS Bokens GCC side for instruksjoner om hvordan du bygger alle GCCs støttede språk.
Betydningen av de nye konfigureringsparametrene:
LD=ld
Denne parameteren gjør at konfigureringsskriptet bruker ld installert av binutils bygget tidligere i dette kapittelet, i stedet for den kryssbygde versjonen som ellers ville blitt brukt.
--with-system-zlib
Denne bryteren forteller GCC å koble til den systeminstallerte kopien av zlib biblioteket, i stedet for sin egen interne kopi.
Kompiler pakken:
make
I denne delen vurderes testpakken for GCC å være viktig, men det tar lang tid. Førstegangsbyggere oppfordres til ikke å hoppe over dette. Tiden for å kjøre testene kan bli redusert betydelig ved å legge til -jx i make kommandoen nedenfor hvor x er antall kjerner på systemet ditt.
Et sett med tester i GCC testpakken er kjent for å bruke opp standard stabel (stack), så øk stabelstørrelsen før du kjører testene:
ulimit -s 32768
Test resultatene som en ikke-privilegert bruker, men ikke stopp ved feil:
chown -Rv tester . su tester -c "PATH=$PATH make -k check"
For å motta et sammendrag av resultatene til testpakken, kjør:
../contrib/test_summary
For bare sammendragene, kanaliser utdataene gjennom
grep -A7
Summ
.
Resultatene kan sammenlignes med de som ligger på https://www.linuxfromscratch.org/lfs/build-logs/11.1/ og https://gcc.gnu.org/ml/gcc-testresults/.
Åtte tester relatert til analyzer er kjent for å mislykkes.
En test med navnet asan_test.C
er kjent for mislykkes.
I libstdc++ en test med navnet 49745.cc
er kjent for å mislykkes fordi
deklarasjonsavhengighetene i glibc er endret.
I libstdc++ er en numpunct test og seks tester relatert til get_time kjent for å mislykkes. Dette er fordi lokalitetsdefinisjonene i glibc er endret, men libstdc++ støtter for øyeblikket ikke disse endringene.
Noen få uventede feil kan ikke alltid unngås. GCC utviklerne er vanligvis klar over disse problemene, men har ikke løst dem ennå. Med mindre testresultatene er svært forskjellige fra de på URLen ovenfor, er det trygt å fortsette.
Installer pakken og fjern en unødvendig mappe:
make install rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/11.2.0/include-fixed/bits/
GCC byggekatalogen eies av tester
nå og eierskapet til den
installerte deklarasjonsmappen (og dens innhold) vil være
feil. Endre eierskapet til root
bruker og gruppe:
chown -v -R root:root \ /usr/lib/gcc/*linux-gnu/11.2.0/include{,-fixed}
Lag en symbolkobling som kreves av FHS av "historiske" grunner.
ln -svr /usr/bin/cpp /usr/lib
Legg til en kompatibilitetssymbolkobling for å aktivere byggeprogrammer med optimalisering av koblingstid (LTO):
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/11.2.0/liblto_plugin.so \ /usr/lib/bfd-plugins/
Nå som vår endelige verktøykjede er på plass, er det viktig å sikre at kompilering og kobling vil fungere som forventet. Dette gjør vi ved å utføre noen sunnhetssjekker:
echo 'int main(){}' > dummy.c cc dummy.c -v -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib'
Det skal ikke være noen feil, og utdataen av den siste kommandoen vil være (som gir rom for plattformspesifikke forskjeller i det dynamiske linkernavnet):
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
Sørg nå for at vi er konfigurert til å bruke de riktige startfilene:
grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
Utdata fra den siste kommandoen skal være:
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crt1.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crti.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crtn.o succeeded
Avhengig av maskinarkitekturen din, kan ovenstående avvike
litt. Forskjellen vil være navnet på mappen etter
/usr/lib/gcc
. Det viktige å se
etter her er det at gcc har funnet alle tre
crt*.o
filene under
/usr/lib
mappen.
Kontroller at kompilatoren søker etter riktige deklarasjons filer:
grep -B4 '^ /usr/include' dummy.log
Denne kommandoen skal returnere følgende utdata:
#include <...> search starts here:
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include
/usr/local/include
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include-fixed
/usr/include
Igjen, mappen oppkalt etter måltripletten kan være annerledes enn de ovennevnte, avhengig av systemarkitekturen.
Deretter kontrollerer du at den nye linkeren brukes med de riktige søkebanene:
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
Referanser til stier som har komponenter med '-linux-gnu' bør ignoreres, men ellers skal utdataene fra den siste kommandoen være:
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
SEARCH_DIR("/usr/local/lib64")
SEARCH_DIR("/lib64")
SEARCH_DIR("/usr/lib64")
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");
Et 32-bits system kan se noen forskjellige kataloger. For eksempel her er utdata fra en i686-maskin:
SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32")
SEARCH_DIR("/usr/local/lib32")
SEARCH_DIR("/lib32")
SEARCH_DIR("/usr/lib32")
SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");
Deretter må du kontrollere at vi bruker riktig libc:
grep "/lib.*/libc.so.6 " dummy.log
Utdata fra den siste kommandoen skal være:
attempt to open /usr/lib/libc.so.6 succeeded
Sørg for at GCC bruker riktig dynamisk linker:
grep found dummy.log
Utdataene fra den siste kommandoen skal være (tillater plattformspesifikke forskjeller i dynamisk linkernavn):
found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2
Hvis utdataene ikke vises som vist ovenfor eller ikke mottas i det hele tatt, så er det noe alvorlig galt. Undersøk og gå gjennom trinn for trinn, for å finne ut hvor problemet er og rette det. Alle problemer må løses før du fortsetter med prosessen.
Når alt fungerer som det skal, rydd opp i testfilene:
rm -v dummy.c a.out dummy.log
Til slutt flytter du en feilplassert fil:
mkdir -pv /usr/share/gdb/auto-load/usr/lib mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib
C++ kompilatoren |
|
C kompilatoren |
|
C-forprosessoren; den brukes av kompilatoren for å utvide #include, #define og lignende utsagn i kildefilene |
|
C++ kompilatoren |
|
C kompilatoren |
|
En innpakning rundt ar som legger til et programtillegg til kommandolinjen. Dette programmet brukes kun å legge til "koblingstidsoptimalisering (LTO)" og er ikke nyttig med standard byggealternativer |
|
En innpakning rundt nm som legger til et programtillegg til kommandolinjen. Dette programmet brukes kun å legge til "koblingstidsoptimalisering (LTO" og er ikke nyttig med standard byggealternativer |
|
En innpakning rundt ranlib som legger til et programtillegg til kommandolinjen. Dette programmet brukes kun å legge til "koblingstidsoptimalisering (LTO" og er ikke nyttig med standard byggealternativer |
|
Et dekningstestverktøy; den brukes til å analysere programmer å bestemme hvor optimaliseringer vil ha størst effekt |
|
Frakoblet gcda og gcno profildumpverktøy |
|
Frakoblet gcda profilbehandlingsverktøy |
|
Verktøy for dumping av objektfiler produsert av GCC med LTO aktivert |
|
Kjøretidsbiblioteket for adresserensing |
|
GCC atomic innebygde kjøretidsbibliotek |
|
C forbehandlingsbiblioteket |
|
Inneholder kjøretidsstøtte for gcc |
|
Dette biblioteket er koblet inn i et program når GCC blir instruert om å aktivere profilering |
|
GNU implementering av OpenMP API for multiplattform parallellprogrammering med delt minne i C/C++ og Fortran |
|
GNU transaksjonsminnebiblioteket |
|
Leak Sanitizer kjøretidsbibliotek |
|
GCC sitt LTO programtillegg som lar binutils behandle objektfiler produsert av GCC med LTO aktivert |
|
GCC Quad Precision Math Library API |
|
Inneholder rutiner som støtter GCCs stabelknusende beskyttelses funksjonalitet |
|
Standard C++ biblioteket |
|
ISO/IEC TS 18822:2015 filsystembiblioteky |
|
Gir støttende rutiner for C++ programmeringsspråk |
|
Thread Sanitizer kjøretidsbibliotek |
|
Undefined Behavior Sanitizer kjøretidsbibliotek |
Pakken pkg-config inneholder et verktøy for å sende inkluderingsbanen og/eller bibliotekstier for å bygge verktøy under konfigurerings- og makefasene av pakkeinstallasjoner.
Forbered Pkg-config for kompilering:
./configure --prefix=/usr \ --with-internal-glib \ --disable-host-tool \ --docdir=/usr/share/doc/pkg-config-0.29.2
Betydningen av de nye konfigureringsalternativene:
--with-internal-glib
Dette vil tillate pkg-config å bruke sin interne versjon av Glib fordi en ekstern versjon ikke er tilgjengelig i LFS.
--disable-host-tool
Dette alternativet deaktiverer opprettelsen av en uønsket hard lenke til pkg-config programmet.
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Ncurses pakken inneholder biblioteker for terminaluavhengig håndtering av karakterskjermer.
Forbered Ncurses for kompilering:
./configure --prefix=/usr \ --mandir=/usr/share/man \ --with-shared \ --without-debug \ --without-normal \ --enable-pc-files \ --enable-widec \ --with-pkg-config-libdir=/usr/lib/pkgconfig
Betydningen av de nye konfigureringsalternativene:
--enable-widec
Denne bryteren gjør at biblioteker med store tegn
(f.eks., libncursesw.so.6.3
) bygges i stedet
for vanlige (f.eks., libncurses.so.6.3
). Disse brede
tegnbibliotekene er brukbare i både multibyte og
tradisjonelle 8-biters lokaliteter, mens vanlige
biblioteker fungerer som de skal bare i 8-biters
lokaliteter. Brede karakterer og normale biblioteker er
kildekompatibel, men ikke binærkompatibel.
--enable-pc-files
Denne bryteren genererer og installerer .pc-filer for pkg-config.
--without-normal
Denne bryteren deaktiverer bygging og installasjon av de fleste statiske biblioteker.
Kompiler pakken:
make
Denne pakken har en testpakke, men den kan bare kjøres etter
at pakken er installert. Testene ligger i test/
mappen. Se README
filen i den mappen for ytterligere
detaljer.
Installasjonen av denne pakken vil overskrive libncursesw.so.6.3
. Det kan krasje
skallprosessen som bruker kode og data fra bibliotekfilen.
Installer pakken med DESTDIR
, og
bytt ut bibliotekfilen riktig med install kommandoen. Et
ubrukelig statisk arkiv som ikke håndteres av configure er også fjernet:
make DESTDIR=$PWD/dest install install -vm755 dest/usr/lib/libncursesw.so.6.3 /usr/lib rm -v dest/usr/lib/{libncursesw.so.6.3,libncurses++w.a} cp -av dest/* /
Mange applikasjoner forventer fortsatt at lenkeren skal kunne finne Ncurses biblioteker med non-wide karakterer. Lur slike applikasjoner til å koble til biblioteker med brede tegn ved hjelp av symbolkoblinger og lenkerskript:
for lib in ncurses form panel menu ; do rm -vf /usr/lib/lib${lib}.so echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc done
Til slutt, sørg for at gamle programmer som ser etter
-lcurses
ved byggetiden
fortsatt er byggbare:
rm -vf /usr/lib/libcursesw.so echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so ln -sfv libncurses.so /usr/lib/libcurses.so
Hvis ønskelig, installer Ncurses dokumentasjonen:
mkdir -pv /usr/share/doc/ncurses-6.3 cp -v -R doc/* /usr/share/doc/ncurses-6.3
Instruksjonene ovenfor oppretter ikke Ncurses med non-wide tegn biblioteker siden ingen pakke installert ved kompilering fra kilder ville kobles mot dem under kjøring. Imidlertid den eneste kjente bare binær applikasjonen som kobler mot Ncurses-biblioteker med non-wide karakterer krever versjon 5. Hvis du må ha slike biblioteker på grunn av noen bare binær applikasjon eller for å være kompatibel med LSB, bygg pakken på nytt med følgende kommandoer:
make distclean ./configure --prefix=/usr \ --with-shared \ --without-normal \ --without-debug \ --without-cxx-binding \ --with-abi-version=5 make sources libs cp -av lib/lib*.so.5* /usr/lib
Konverterer en termcap beskrivelse til en terminfo beskrivelse |
|
Tømmer skjermen hvis mulig |
|
Sammenligner eller skriver ut terminfo beskrivelser |
|
Konverterer en terminfo beskrivelse til en termcap beskrivelse |
|
Gir konfigurasjonsinformasjon for ncurses |
|
Reinitialiserer en terminal til standardverdiene |
|
Fjerner og setter tabulatorstopp på en terminal |
|
Terminfo entry-description-kompilatoren som oversetter en terminfo fil fra kildeformat til det binære formatet som trengs for ncurses biblioteksrutiner [En terminfo fil inneholder informasjon om egenskapene til en bestemt terminal.] |
|
Viser alle tilgjengelige terminaltyper, med primærnavn og beskrivelse for hver |
|
Gjør verdiene til terminalavhengige funksjoner tilgjengelig for skallet; den kan også brukes til å tilbakestille eller initialisere en terminal eller rapporter det lange navnet |
|
Kan brukes til å initialisere terminaler |
|
En lenke til |
|
Inneholder funksjoner for å vise tekst på mange komplekse måter på en terminalskjerm; et godt eksempel på bruken av disse funksjonene er menyen som vises under kjernens make menuconfig |
|
Inneholder funksjoner for å implementere skjemaer |
|
Inneholder funksjoner for å implementere menyer |
|
Inneholder funksjoner for å implementere paneler |
Sed pakken inneholder en dataflyt (stream) redigerer.
Forbered Sed for kompilering:
./configure --prefix=/usr
Kompiler pakken og generer HTML dokumentasjonen:
make make html
For å teste resultatene, utsted:
chown -Rv tester . su tester -c "PATH=$PATH make check"
Installer pakken og dens dokumentasjon:
make install install -d -m755 /usr/share/doc/sed-4.8 install -m644 doc/sed.html /usr/share/doc/sed-4.8
Psmisc pakken inneholder programmer for å vise informasjon om kjørende prosesser.
Forbered Psmisc for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
Denne pakken kommer ikke med en testpakke.
Installer pakken:
make install
Rapporterer prosessIDene (PIDene) til prosesser som bruker de gitte filer eller filsystemer |
|
Dreper prosesser ved navn; den sender et signal til alle prosesser som kjører noen av de gitte kommandoene |
|
Se på filbeskrivelser for en prosess som kjører, gitt dens PID |
|
Skriver ut informasjon om en prosess |
|
Rapporterer gjeldende loggbane for en prosess |
|
Viser kjørende prosesser som et tre |
|
Samme som pstree, bortsett fra at den venter på bekreftelse før den avslutter |
Gettext pakken inneholder verktøy for internasjonalisering og lokalisering. Disse gjør at programmer kan kompileres med NLS (Lokal Språk Støtte), slik at de kan sende ut meldinger i brukerens lokale språkformat.
Forbered Gettext for kompilering:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/gettext-0.21
Kompiler pakken:
make
For å teste resultatene (dette tar lang tid, rundt 3 SBU), utsted:
make check
Installer pakken:
make install chmod -v 0755 /usr/lib/preloadable_libintl.so
Kopierer standard Gettext infrastrukturfiler til en kildepakke |
|
Erstatter miljøvariabler i skallformatstrenger |
|
Oversetter en melding på det opprinnelige språket til brukerens språk ved å slå opp oversettelsen i en meldingskatalog |
|
Fungerer først og fremst som et skallfunksjonsbibliotek for gettext |
|
Kopierer alle standard Gettext filer til den gitte mappens toppnivå til en pakke for å begynne å internasjonalisere den |
|
Filtrerer meldingene i en oversettelsesmappe i henhold til deres attributter og manipulerer attributtene |
|
Sammenslår og slår sammen de gitte |
|
Sammenligner to |
|
Finner meldingene som er felles for de gitte
|
|
Konverterer en oversettelseskatalog til en annet tegnkoding |
|
Oppretter en engelsk oversettelseskatalog |
|
Bruker en kommando på alle oversettelser av en oversettelsesmappe |
|
Bruker et filter på alle oversettelser av en oversettelsesmappe |
|
Genererer en binær meldingskatalog fra en oversettelsesmappe |
|
Trekker ut alle meldinger fra en oversettelseskatalog som samsvarer med et gitt mønster eller tilhører noen gitte kildefiler |
|
Oppretter en ny |
|
Kombinerer to rå oversettelser til én enkelt fil |
|
Dekompilerer en binær meldingskatalog til rå oversettelsestekst |
|
Forener dupliserte oversettelser i en oversettelsesmappe |
|
Viser oversettelser på morsmål av en tekstmelding hvis grammatisk form avhenger av et tall |
|
Omkoder serbisk tekst fra kyrillisk til latinsk skrift |
|
Trekker ut de oversettbare meldingslinjene fra den gitte kildefilen for å lage den første oversettelsesmalen |
|
definerer autosprintf klassen, som gir C formaterte utdatarutiner som kan brukes i C++ programmer, for bruk med <string> strenger og <iostream> dataflyt |
|
et privat bibliotek som inneholder vanlige rutiner som brukes av ulike Gettext programmer; disse er ikke beregnet for generelt bruk |
|
Brukes til å skrive spesialiserte programmer som
behandler |
|
et privat bibliotek som inneholder vanlige rutiner som brukes av ulike Gettext programmer; disse er ikke beregnet for generelt bruk |
|
Tekststilbibliotek |
|
Et bibliotek, ment å brukes av LD_PRELOAD som
assisterer |
Bison pakken inneholder en parsergenerator.
Forbered Bison for kompilering:
./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2
Kompiler pakken:
make
For å teste resultatene (about 5.5 SBU), utsted:
make check
Installer pakken:
make install
Genererer, fra en rekke regler, et program for å analysere struktur av tekstfiler; Bison er en erstatning for Yacc (Yet Another Compiler Compiler) |
|
En innpakning for bison,ment for
programmer som fortsatt kaller yacc i stedet for
bison; den kaller
bison
med |
|
Yacc biblioteket som inneholder implementeringer av
Yacc kompatibel |
Grep pakken inneholder programmer for å søke gjennom innholdet i filer.
Forbered Grep for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Bash pakken inneholder Bourne-Again Skallet (Bourne-Again SHell).
Forbered Bash for kompilering:
./configure --prefix=/usr \ --docdir=/usr/share/doc/bash-5.1.16 \ --without-bash-malloc \ --with-installed-readline
Betydningen av det nye konfigureringsalternativet:
--with-installed-readline
Dette alternativet forteller Bash å bruke readline
biblioteket som allerede er
installert på systemet i stedet for å bruke sin egen
readline versjon.
Kompiler pakken:
make
Hopp ned til “Installer pakken” hvis du ikke kjører testpakken.
For å forberede testene, sørg for at brukeren tester
kan skrive til kildetreet:
chown -Rv tester .
Testpakken til pakken er designet for å kjøres som en
ikke-root bruker som eier terminalen koblet til
standardinngang. For å tilfredsstille krav, skap en ny
pseudoterminal ved hjelp av Expect og kjør testene som bruker
tester
:
su -s /usr/bin/expect tester << EOF set timeout -1 spawn make tests expect eof lassign [wait] _ _ _ value exit $value EOF
Installer pakken:
make install
Kjør den nylig kompilerte bash programmet (erstatter det som kjøres for øyeblikket):
exec /usr/bin/bash --login
En mye brukt kommandotolk; den utfører mange typer av utvidelser og erstatninger på en gitt kommandolinje før kjøringen gjøres , og dette gjør dermed denne tolken til et kraftig verktøy |
|
Et skallskript for å hjelpe brukeren med å skrive og sende standard formaterte feilrapporter vedrørende bash |
|
En symbolsk lenke til bash programmet; når det påkalles som sh, bash prøver å etterligne oppstartadferd av historiske versjoner av sh så nært som mulig, samtidig som den samsvarer med POSIX standarden også |
Libtool pakken inneholder GNU generiske bibliotekstøtteskript. Det omslutter kompleksiteten ved å bruke delte biblioteker i en konsistent, overførbart grensesnitt.
Forbered Libtool for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Testtiden for libtool kan reduseres betydelig på et system med flere kjerner. For å gjøre dette, legg til TESTSUITEFLAGS=-j<N> til linjen over. For eksempel kan bruk av -j4 redusere testtiden med over 60 prosent.
Fem tester er kjent for å mislykkes i LFS byggemiljøet pga en sirkulær avhengighet, men alle tester består hvis de sjekkes på nytt etter at automake er installert.
Installer pakken:
make install
Fjern et ubrukelig statisk bibliotek:
rm -fv /usr/lib/libltdl.a
GDBM pakken inneholder GNU Database Manager. Det er et bibliotek av databasefunksjoner som bruker utvidbar hashing og fungerer lignende som standard UNIX dbm. Biblioteket gir primitiver for lagring av nøkkel/data par, søker og henter dataene etter nøkkelen og sletter en nøkkel sammen med sine data.
Forbered GDBM for kompilering:
./configure --prefix=/usr \ --disable-static \ --enable-libgdbm-compat
Betydningen av konfigureringsalternativet:
--enable-libgdbm-compat
Denne bryteren gjør det mulig å bygge libgdbm kompatibilitetsbiblioteket. Noen pakker utenfor LFS kan kreve det eldre DBM rutiner gir.
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Gperf genererer en perfekt hashfunksjon fra et nøkkelsett.
Forbered Gperf for kompilering:
./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1
Kompiler pakken:
make
Testene er kjent for å mislykkes hvis de kjører flere samtidige tester (-j alternativ større enn 1). Å teste resultatene, utsted:
make -j1 check
Installer pakken:
make install
Expat pakken inneholder et dataflytorientert C bibliotek for å analysere XML.
Forbered Expat for kompilering:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/expat-2.4.6
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Hvis ønskelig, installer dokumentasjonen:
install -v -m644 doc/*.{html,css} /usr/share/doc/expat-2.4.6
Inetutils pakken inneholder programmer for grunnleggende nettverksbygging.
Forbered Inetutils for kompilering:
./configure --prefix=/usr \ --bindir=/usr/bin \ --localstatedir=/var \ --disable-logger \ --disable-whois \ --disable-rcp \ --disable-rexec \ --disable-rlogin \ --disable-rsh \ --disable-servers
Betydningen av konfigureringsalternativene:
--disable-logger
Dette alternativet forhindrer Inetutils fra å installere logger programmet, som brukes av skript til sende meldinger til Systemlogg nissen (System Log Daemon). Ikke installer det fordi Util-linux installerer en nyere versjon.
--disable-whois
Dette alternativet deaktiverer byggingen av Inetutils sin whois klient, som er utdatert. Instruksjoner for en bedre whois klienten er i BLFS boken.
--disable-r*
Disse parameterne deaktiverer bygging av foreldede programmer som ikke burde brukes på grunn av sikkerhetsproblemer. Funksjonene som tilbys av disse programmer kan leveres av openssh pakken i BLFS boken.
--disable-servers
Dette deaktiverer installasjonen av de forskjellige nettverksserverne inkludert som en del av Inetutils pakken. Disse serverne anses ikke som hensiktsmessig i et grunnleggende LFS system. Noen er usikre av natur og er ansett som trygt kun på pålitelige nettverk. Merk at bedre erstatninger er tilgjengelige for mange av disse serverne.
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install
Flytt et program til riktig plassering:
mv -v /usr/{,s}bin/ifconfig
Vis systemets DNS domenenavn |
|
Er protokollprogrammet for filoverføringer |
|
Rapporterer eller angir navnet på verten |
|
Administrerer nettverksgrensesnitter |
|
Sender ekkoforespørselspakker og rapporterer hvor lenge svarene tar |
|
En versjon av ping for IPv6 nettverk |
|
Brukes til å snakke med en annen bruker |
|
Et grensesnitt til TELNET protokollen |
|
Et trivielt filoverføringsprogram |
|
Sporer ruten pakkene dine tar fra verten du jobber på videre til en annen vert på et nettverk, og viser alle mellomliggende hopp (porter) underveis |
Less pakken inneholder et tekstfilviser.
Forbered Less for kompilering:
./configure --prefix=/usr --sysconfdir=/etc
Betydningen av konfigureringsalternativene:
--sysconfdir=/etc
Dette alternativet forteller at programmene som er
opprettet av pakken, skal se i /etc
for konfigurasjonen filer.
Kompiler pakken:
make
Denne pakken kommer ikke med en testpakke.
Installer pakken:
make install
Perl pakken inneholder den praktiske utvinnings og rapporterings språket (Practical Extraction and Report Language).
Først bruker du en oppdatering som fikser et problem fremhevet av nylige versjoner av gdbm:
patch -Np1 -i ../perl-5.34.0-upstream_fixes-1.patch
Denne versjonen av Perl bygger nå Compress::Raw::Zlib og Compress::Raw::BZip2 moduler. Som standard vil Perl bruke en intern kopi av kildene for å bygge. Utfør følgende kommando slik at Perl vil bruke bibliotekene installert på systemet:
export BUILD_ZLIB=False export BUILD_BZIP2=0
For å ha full kontroll over måten Perl er satt opp på, kan du fjerne “-des” alternativer fra følgende kommando og håndplukke måten denne pakken er bygget. Alternativt kan du bruke kommandoen nøyaktig som nedenfor for å bruke standardinnstillingene som Perl automatisk oppdager:
sh Configure -des \ -Dprefix=/usr \ -Dvendorprefix=/usr \ -Dprivlib=/usr/lib/perl5/5.34/core_perl \ -Darchlib=/usr/lib/perl5/5.34/core_perl \ -Dsitelib=/usr/lib/perl5/5.34/site_perl \ -Dsitearch=/usr/lib/perl5/5.34/site_perl \ -Dvendorlib=/usr/lib/perl5/5.34/vendor_perl \ -Dvendorarch=/usr/lib/perl5/5.34/vendor_perl \ -Dman1dir=/usr/share/man/man1 \ -Dman3dir=/usr/share/man/man3 \ -Dpager="/usr/bin/less -isR" \ -Duseshrplib \ -Dusethreads
Betydningen av konfigureringsalternativene:
-Dvendorprefix=/usr
Dette sikrer at perl vet hvordan å fortelle pakker hvor de skal installere perl modulene sine.
-Dpager="/usr/bin/less
-isR"
Dette sikrer at less
brukes i stedet
for more
.
-Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3
Siden Groff ikke er installert ennå, Configure tror vi ikke ønsker man sider for Perl. Å utstede disse parametere overstyrer denne avgjørelsen.
-Duseshrplib
Bygger en delt libperl som trengs av noen perl moduler.
-Dusethreads
Bygg perl med støtte for tråder.
-Dprivlib,-Darchlib,-Dsitelib,...
Disse innstillingene definerer hvor Perl leter etter installerte moduler. LFS redaktørene valgte å legge dem i en katalogstruktur basert på Major.Minor-versjonen av Perl (5.34) hvilket tillater oppgradering av Perl til nyere Patch nivåer (5.34.0) uten behovet for å installere alle modulene på nytt.
Kompiler pakken:
make
For å teste resultatene (ca. 11 SBU), utsted:
make test
Installer pakken og rydd opp:
make install unset BUILD_ZLIB BUILD_BZIP2
En kommandolinjegrensesnitt til Module::CoreList |
|
Samhandler med Comprehensive Perl Archive Network (CPAN) fra kommandolinjen |
|
Bygger en Perl utvidelse for Encode modulen fra begge Unicode karaktertilordninger eller Tcl kodingsfiler |
|
Gjetter kodingstypen til en eller flere filer |
|
Konverterer |
|
Konverterer |
|
Skallskript for å undersøke installerte Perl moduler, og kan lage en tarball fra en installert modul |
|
Konverterer data mellom visse inndata og utdata formater |
|
Kan brukes til å konfigurere |
|
Kombinerer noen av de beste egenskapene til C, sed, awk og sh til et singelt swiss-army språk |
|
En hard lenke til perl |
|
Brukes til å generere feilrapporter om Perl, eller modulene som kommer med den, og sender dem |
|
Viser et stykke dokumentasjons i pod format som er innebygd i Perl installasjonstreet eller i et Perl skript |
|
Perl verifiseringsprosedyre for installasjonen; det kan brukes til bekrefte at Perl og dets biblioteker er installert riktig |
|
Brukes til å generere takkemeldinger på E-post til Perl utviklere |
|
En Perl versjon av tegnkodingskonverteren iconv |
|
Et grovt verktøy for å konvertere Perl4
|
|
Konverterer filer fra pod format til HTML format |
|
Konverterer pod data til formatert *roff inndata |
|
Konverterer pod data til formatert ASCII tekst |
|
Skriver ut bruksmeldinger fra innebygde pod dokumenter i filer |
|
Kontrollerer syntaksen til dokumentasjonsfiler i podformat |
|
Viser valgte deler av poddokumentasjonen |
|
Kommandolinjeverktøy for å kjøre tester mot Test::Harness moduler |
|
Et tar likt program skrevet i Perl |
|
Et Perl program som sammenligner et ekstrahert arkiv med et uekstrahert |
|
Et Perl program som bruker mønstertilpasning på innholdet av filer i et tararkiv |
|
Skriver ut eller kontrollerer SHA sjekksummer |
|
Brukes til å fremtvinge detaljert advarselsdiagnostikk i Perl |
|
Konverterer Perl XS-kode til C-kode |
|
Viser detaljer om den interne strukturen til en Zip-fil |
XML::Parser modulen er et Perl grensesnitt til James Clarks XML-parser, Expat.
Forbered XML::Parser for kompilering:
perl Makefile.PL
Kompiler pakken:
make
For å teste resultatene, utsted:
make test
Installer pakken:
make install
Intltool er et internasjonaliseringsverktøy som brukes til å trekke ut oversettbare strenger fra kildefiler.
Rett først en advarsel som er forårsaket av perl-5.22 og senere:
sed -i 's:\\\${:\\\$\\{:' intltool-update.in
Det regulære uttrykket ovenfor ser uvanlig ut på grunn av alle skråstreker. Det den gjør er å legge til et skråstrek før høyre krøllparentes i sekvensen '\${' som resulterer i '\$\{'.
Forbered Intltool for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO
Autoconf pakken inneholder programmer for å produsere skallskript som automatisk kan konfigurere kildekoden.
Forbered Autoconf for kompilering:
./configure --prefix=/usr
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Testtiden for autoconf kan reduseres betydelig på en system med flere kjerner. For å gjøre dette, legg til TESTSUITEFLAGS=-j<N> til linjen over. For eksempel ved å bruke -j4 kan testtiden reduseres med over 60 prosent.
Installer pakken:
make install
Produserer skallskript som automatisk konfigurerer programvares kildekodepakker for å tilpasse seg mange typer Unix-lignende systemer; konfigurasjonsskriptene den produserer er uavhengige— å kjøre de krever ikke autoconf programmet |
|
Et verktøy for å lage malfiler av C #define uttrykk for configure å bruke |
|
En innpakning for M4 makroprosessoren |
|
Kjører automatisk autoconf, autoheader, aclocal, automake, gettextize, og libtoolize i riktig rekkefølge for å spare tid når det gjøres endringer i autoconf og automake malfiler |
|
Hjelper med å lage en |
|
Endrer en |
|
Hjelper når det skrives |
Automake pakken inneholder programmer for å generere Make filer for bruk med Autoconf.
Forbered Automake for kompilering:
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.5
Kompiler pakken:
make
Å bruke make -j4 alternativet øker hastigheten på testene, selv på systemer med kun én prosessor, på grunn av interne forsinkelser i individuelle tester. Å teste resultatene, utsted:
make -j4 check
Testen t/subobj.sh er kjent for å mislykkes.
Installer pakken:
make install
Genererer |
|
En hard lenke til aclocal |
|
Et verktøy for automatisk generering av
|
|
En hard lenke til automake |
OpenSSL pakken inneholder administrasjonsverktøy og relaterte biblioteker til kryptografi. Disse er nyttige for å tilby kryptografiske funksjoner til andre pakker, for eksempel OpenSSH, e-postapplikasjoner og nettlesere (for tilgang til HTTPS-nettsteder).
Forbered OpenSSL for kompilering:
./config --prefix=/usr \ --openssldir=/etc/ssl \ --libdir=lib \ shared \ zlib-dynamic
Kompiler pakken:
make
For å teste resultatene, utsted:
make test
En test, 30-test_afalg.t, er kjent for å mislykkes på noen kjerne konfigurasjoner (avhengig av inkonsistente verdier for CONFIG_CRYPTO_USER_API*-innstillinger.) Hvis det mislykkes, kan den trygt bli ignorert.
Installer pakken:
sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile make MANSUFFIX=ssl install
Legg til versjonen i dokumentasjonskatalognavnet, for å være i samsvarer med andre pakker:
mv -v /usr/share/doc/openssl /usr/share/doc/openssl-3.0.1
Hvis ønskelig, installer litt tilleggsdokumentasjon:
cp -vfr doc/* /usr/share/doc/openssl-3.0.1
Du bør oppdatere OpenSSL når en ny versjon som fikser
sårbarheter er annonsert. Utgivelsene går i serier, med en
bokstav for hver utgivelse etter den første utgivelsen
(f.eks. 1.1.1, 1.1.1a, 1.1.1b, osv.). Fordi LFS installerer
kun de delte bibliotekene, er det ikke nødvendig å
rekompilere pakker som lenker til libcrypto.so
eller libssl.so
ved
oppgradering i samme serie.
Imidlertid må alle kjørende programmer koblet til disse bibliotekene stoppes og startes på nytt. Les de relaterte oppføringene i Section 8.2.1, “Oppgraderingsproblemer” for detaljer.
er et Perl skript som skanner alle filer i en katalog og legger til symbolske lenker til hashverdiene deres |
|
er et kommandolinjeverktøy for bruk av de ulike kryptografifunksjonene til OpenSSL's kryptobibliotek fra skallet. Den kan brukes til ulike funksjoner som er dokumentert i man 1 openssl |
|
implementerer et bredt spekter av kryptografiske algoritmer som brukes i ulike Internett-standarder. Tjenestene som tilbys av dette biblioteket brukes av OpenSSL implementeringer av SSL, TLS og S/MIME, og de har også blitt brukt til å implementere OpenSSH, OpenPGP, og andre kryptografiske standarder |
|
implementerer protokollen Transport Layer Security (TLS v1). Det gir en rik API, dokumentasjon kan bli funnet ved å kjøre man 3 ssl |
Kmod pakken inneholder biblioteker og verktøy for lasting av kjerne moduler
Forbered Kmod for kompilering:
./configure --prefix=/usr \ --sysconfdir=/etc \ --with-openssl \ --with-xz \ --with-zstd \ --with-zlib
Betydningen av konfigureringsalternativene:
--with-openssl
Dette alternativet gjør det mulig for Kmod å håndtere PKCS7 signaturer for kjernemoduler.
--with-xz
, --with-zlib
, og --with-zstd
Disse alternativene gjør at Kmod kan håndtere komprimerte kjernemoduler.
Kompiler pakken:
make
Testpakken til denne pakken krever rå kjerneoverskrifter (ikke de “sanitiserte” kjernehodene installert tidligere), som er utenfor rammen av LFS.
Installer pakken og lag symbolkoblinger for kompatibilitet med Module-Init-Tools (pakken som tidligere håndterte Linux kjernemoduler):
make install for target in depmod insmod modinfo modprobe rmmod; do ln -sfv ../bin/kmod /usr/sbin/$target done ln -sfv kmod /usr/bin/lsmod
Oppretter en avhengighetsfil basert på symbolene den finner i eksisterende sett med moduler; denne avhengighetsfilen brukes av modprobe for automatisk å laste de nødvendige moduler |
|
Installerer en lastbar modul i kjernen som kjører |
|
Laster og laster ut kjernemoduler |
|
Viser innlastede moduler |
|
Undersøker en objektfil assosiert med en kjernemodul og viser all informasjon den kan hente |
|
Bruker en avhengighetsfil, opprettet av depmod, for automatisk å laste inn relevante moduler |
|
Laster ut moduler fra kjernen som kjører |
|
Dette biblioteket brukes av andre programmer til å laste inn og laste ut kjernemoduler |
Libelf er et bibliotek for håndtering av ELF (kjørbare og linkbare formater) filer.
Libelf er en del av elfutils-0.186 pakken. Bruk elfutils-0.186.tar.bz2 som kilde tarball.
Forbered Libelf for kompilering:
./configure --prefix=/usr \ --disable-debuginfod \ --enable-libdebuginfod=dummy
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer kun Libelf:
make -C libelf install install -vm644 config/libelf.pc /usr/lib/pkgconfig rm /usr/lib/libelf.a
Libffi-biblioteket gir et flyttbart programmeringsgrensesnitt på høyt nivå til ulike kallkonvensjoner. Dette lar en programmerer kalle enhver funksjon ved kjøring, spesifisert av en grensesnittbeskrivelse for et kall.
I likhet med GMP bygges libffi med spesifikke optimaliseringer til prosessoren som er i bruk. Hvis du bygger for et annet system, eksporter CFLAGS og CXXFLAGS for å spesifisere en generisk konstruksjon for arkitekturen din. Hvis dette ikke gjøres, vil alle applikasjoner som lenker til libffi utløse ulovlige operasjonsfeil.
Forbered libffi for kompilering:
./configure --prefix=/usr \ --disable-static \ --with-gcc-arch=native \ --disable-exec-static-tramp
Betydningen av konfigureringsalternativet:
--with-gcc-arch=native
Sørger for at GCC optimerer for det gjeldende systemet. Hvis dette ikke er spesifisert, gjettes systemet og koden som genereres kanskje ikke er riktig for enkelte systemer. Hvis den genererte koden vil bli kopiert fra det opprinnelige systemet til et mindre kapabelt system system, bruk det mindre kapable systemet som parameter. For detaljer om alternative systemtyper, se x86 alternativene i GCC manualen.
--disable-exec-static-tramp
Deaktiver statisk trampolinestøtte. Det er en ny sikkerhet funksjon i libffi, men noen BLFS pakker (spesielt GJS og gobject-introspection) har ikke vært tilpasset det.
Kompiler pakken:
make
For å teste resultatene, utsted:
make check
Installer pakken:
make install