Linux From Scratch

Versjon 11.1

Publisert 1. Mars 2022

Laget av Gerard Beekmans

Administrerende redaktør: Bruce Dubbs

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.


Table of Contents

Forord

Forord

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

Publikum

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.

LFS målarkitekturer

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.

Forutsetninger

Å 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.

LFS og standarder

Strukturen til LFS følger Linux standarder så tett som mulig. De primære standardene er:

  • POSIX.1-2008.

  • Standard for filsystemhierarki (FHS) Version 3.0

  • 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.

    Note

    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.

Pakker levert av LFS som tilfredsstiller LSB kravene

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

Pakker levert av BLFS som tilfredsstiller LSB kravene

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

Pakker som ikke er levert av LFS eller BLFS nødvendige for å tilfredsstille LSB kravene

LSB Kjerne:

None

LSB Skrivebord:

Qt4 (but Qt5 is provided)

LSB Kjøretidsspråk:

None

LSB Bildebehandling:

None

LSB Gtk3 and LSB Grafikk (Prøvebruk):

None

Begrunnelse for pakker i boken

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.

Typografi

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.

Struktur

Denne boken er delt inn i følgende deler.

Del I - Introduksjon

Del I forklarer noen viktige merknader om hvordan du går frem med LFS installasjon. Denne delen gir også metainformasjon om boken.

Del II - Forberedelse til bygging

Del II beskriver hvordan du forbereder byggeprosessen—lage en partisjon, nedlasting av pakkene og kompilering av midlertidige verktøy.

Del III - Bygging av LFS kryssverktøykjede og midlertidige verktøy

Del III gir instruksjoner for å bygge verktøyene nødvendig for å konstruere det endelige LFS systemet.

Del IV - Bygge 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 - Vedlegg

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.

Errata og sikkerhetsråd

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.

Part I. Introduksjon

Chapter 1. Introduksjon

1.1. Hvordan bygge et LFS-system

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.

1.2. Hva er nytt siden forrige utgivelse

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:

1.3. Endringslogg

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

    • [bdubbs] - Oppdatert til bc-5.2.2. Rettinger #5004.

    • [bdubbs] - Oppdatert til linux-5.16.8. Rettinger #5005.

    • [bdubbs] - Oppdatert til binutils-2.38. Krever at zlib legges til i kapittel 6. Rettinger #5007.

  • 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

    • [bdubbs] - Oppdatert til expat-2.4.3 (sikkerhetsrettinger). Rettinger #4984.

    • [pierre] - Oppdatert til meson-0.61.1. Rettinger #4985.

  • 17.01.2022

    • [thomas] - Lagt til en rettelse av en skrivefeil i meson-0.61.0 oppdateringen.

  • 15.01.2022

    • [bdubbs] - Oppdatert til shadow-4.11.1. Rettinger #4976.

    • [bdubbs] - Oppdatert til readline-8.1.2. Rettinger #4980.

    • [bdubbs] - Oppdatert til meson-0.61.0. Rettinger #4983.

    • [bdubbs] - Oppdatert til libpipeline-1.5.5. Rettinger #4977.

    • [bdubbs] - Oppdatert til bash-5.1.16. Rettinger #4978.

  • 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

    • [bdubbs] - Oppdatert til python3-3.10.1. Rettinger #4963.

    • [bdubbs] - Oppdatert til openssl-1.1.1m. Rettinger #4966.

    • [bdubbs] - Oppdatert til linux-5.15.7. Rettinger #4964.

    • [bdubbs] - Oppdatert til libcap-2.62. Rettinger #4965.

  • 14.12.2021

    • [thomas] - Tillat å bygge findutils på 32-biters systemer. Valgt fra grenen multilib av [pierre].

  • 01.12.2021

    • [bdubbs] - Oppdatert til vim-8.2.3704. Adresserer #4500.

    • [bdubbs] - Oppdatert til iana-etc-20211124. Rettinger #4957.

    • [bdubbs] - Oppdatert til bc-5.2.1. Rettinger #4959.

    • [bdubbs] - Oppdatert til meson-0.60.2. Rettinger #4960.

    • [bdubbs] - Oppdatert til linux-5.15.5. Rettinger #4956.

  • 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.

1.4. Ressurser

1.4.1. FAQ

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/.

1.4.2. E-postlister

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.

1.4.3. IRC

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.

1.4.4. Speilnettsteder

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.

1.4.5. Kontaktinformasjon

Send alle dine spørsmål og kommentarer til en av LFS E-postlister (se ovenfor).

1.5. Hjelp

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.

1.5.1. Ting å nevne

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

Note

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.

1.5.2. Konfigurasjonsskript problemer

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.

1.5.3. Kompileringsproblemer

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.

Part II. Forbereder for byggingen

Chapter 2. Klargjøring av vertssystemet

2.1. Introduksjon

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.

2.2. Systemkrav for vert

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

Important

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

2.3. Bygge LFS i etapper

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.

2.3.1. Kapitler 1–4

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.

2.3.2. Kapitler 5–6

  • /mnt/lfs partisjonen må være montert.

  • Disse to kapitlene 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.

2.3.3. Kapitler 7–10

  • /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 rootbrukeren.

  • 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”.

2.4. Opprette en ny partisjon

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.

Note

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.

2.4.1. Andre partisjonsproblemer

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.

2.4.1.1. Rotpartisjonen

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.

2.4.1.2. Vekselminnepartisjonen

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.

2.4.1.3. Grub Bios partisjonen

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.

Note

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.

2.4.1.4. Bekvemmelig partisjoner

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”.

2.5. Opprette et filsystem på partisjonen

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:

ext2

passer for små partisjoner som oppdateres sjelden slik som /boot.

ext3

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.

ext4

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.

2.6. Stille inn $LFS variabelen

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.

Caution

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.

Note

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.

2.7. Montering av den nye partisjonen

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.

Warning

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.

Chapter 3. Pakker og oppdateringer

3.1. Introduksjon

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

Note

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.

3.2. Alle pakker

Last ned eller på annen måte skaff deg følgende pakker:

Acl (2.3.1) - 348 KB:

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

Attr (2.5.1) - 456 KB:

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

Autoconf (2.71) - 1,263 KB:

Hjemmeside: https://www.gnu.org/software/autoconf/

Laste ned: https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.xz

MD5 sum: 12cfa1687ffa2606337efe1a64416106

Automake (1.16.5) - 1,565 KB:

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

Bash (5.1.16) - 10,277 KB:

Hjemmeside: https://www.gnu.org/software/bash/

Laste ned: https://ftp.gnu.org/gnu/bash/bash-5.1.16.tar.gz

MD5 sum: c17b20a09fc38d67fb303aeb6c130b4e

Bc (5.2.2) - 428 KB:

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

Binutils (2.38) - 23,098 KB:

Hjemmeside: https://www.gnu.org/software/binutils/

Laste ned: https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.xz

MD5 sum: 6e39cad1bb414add02b5b1169c18fdc5

Bison (3.8.2) - 2,752 KB:

Hjemmeside: https://www.gnu.org/software/bison/

Laste ned: https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.xz

MD5 sum: c28f119f405a2304ff0a7ccdcc629713

Bzip2 (1.0.8) - 792 KB:

Laste ned: https://www.sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz

MD5 sum: 67e051268d0c475ea773822f7500d0e5

Check (0.15.2) - 760 KB:

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

Coreutils (9.0) - 5,482 KB:

Hjemmeside: https://www.gnu.org/software/coreutils/

Laste ned: https://ftp.gnu.org/gnu/coreutils/coreutils-9.0.tar.xz

MD5 sum: 0d79ae8a6124546e3b94171375e5e5d0

DejaGNU (1.6.3) - 608 KB:

Hjemmeside: https://www.gnu.org/software/dejagnu/

Laste ned: https://ftp.gnu.org/gnu/dejagnu/dejagnu-1.6.3.tar.gz

MD5 sum: 68c5208c58236eba447d7d6d1326b821

Diffutils (3.8) - 1,548 KB:

Hjemmeside: https://www.gnu.org/software/diffutils/

Laste ned: https://ftp.gnu.org/gnu/diffutils/diffutils-3.8.tar.xz

MD5 sum: 6a6b0fdc72acfe3f2829aab477876fbc

E2fsprogs (1.46.5) - 9,307 KB:

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

Elfutils (0.186) - 9,015 KB:

Hjemmeside: https://sourceware.org/elfutils/

Laste ned: https://sourceware.org/ftp/elfutils/0.186/elfutils-0.186.tar.bz2

MD5 sum: 2c095e31e35d6be7b3718477b6d52702

Eudev (3.2.11) - 2,075 KB:

Laste ned: https://github.com/eudev-project/eudev/releases/download/v3.2.11/eudev-3.2.11.tar.gz

MD5 sum: 417ba948335736d4d81874fba47a30f7

Expat (2.4.6) - 444 KB:

Hjemmeside: https://libexpat.github.io/

Laste ned: https://prdownloads.sourceforge.net/expat/expat-2.4.6.tar.xz

MD5 sum: 22a30c888752fdda9f8dd1b7281c54b0

Note

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.

Expect (5.45.4) - 618 KB:

Hjemmeside: https://core.tcl.tk/expect/

Laste ned: https://prdownloads.sourceforge.net/expect/expect5.45.4.tar.gz

MD5 sum: 00fce8de158422f5ccd2666512329bd2

File (5.41) - 1040 KB:

Hjemmeside: https://www.darwinsys.com/file/

Laste ned: https://astron.com/pub/file/file-5.41.tar.gz

MD5 sum: 18233bb0a0089dfdc7dfbc93b96f231b

Findutils (4.9.0) - 1,999 KB:

Hjemmeside: https://www.gnu.org/software/findutils/

Laste ned: https://ftp.gnu.org/gnu/findutils/findutils-4.9.0.tar.xz

MD5 sum: 4a4a547e888a944b2f3af31d789a1137

Flex (2.6.4) - 1,386 KB:

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

Gawk (5.1.1) - 3,075 KB:

Hjemmeside: https://www.gnu.org/software/gawk/

Laste ned: https://ftp.gnu.org/gnu/gawk/gawk-5.1.1.tar.xz

MD5 sum: 83650aa943ff2fd519b2abedf8506ace

GCC (11.2.0) - 78,996 KB:

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

GDBM (1.23) - 1,092 KB:

Hjemmeside: https://www.gnu.org/software/gdbm/

Laste ned: https://ftp.gnu.org/gnu/gdbm/gdbm-1.23.tar.gz

MD5 sum: 8551961e36bf8c70b7500d255d3658ec

Gettext (0.21) - 9,487 KB:

Hjemmeside: https://www.gnu.org/software/gettext/

Laste ned: https://ftp.gnu.org/gnu/gettext/gettext-0.21.tar.xz

MD5 sum: 40996bbaf7d1356d3c22e33a8b255b31

Glibc (2.35) - 17,741 KB:

Hjemmeside: https://www.gnu.org/software/libc/

Laste ned: https://ftp.gnu.org/gnu/glibc/glibc-2.35.tar.xz

MD5 sum: dd571c67d85d89d7f60b854a4e207423

GMP (6.2.1) - 1,980 KB:

Hjemmeside: https://www.gnu.org/software/gmp/

Laste ned: https://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz

MD5 sum: 0b82665c4a92fd2ade7440c13fcaa42b

Gperf (3.1) - 1,188 KB:

Hjemmeside: https://www.gnu.org/software/gperf/

Laste ned: https://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz

MD5 sum: 9e251c0a618ad0824b51117d5d9db87e

Grep (3.7) - 1,603 KB:

Hjemmeside: https://www.gnu.org/software/grep/

Laste ned: https://ftp.gnu.org/gnu/grep/grep-3.7.tar.xz

MD5 sum: 7c9cca97fa18670a21e72638c3e1dabf

Groff (1.22.4) - 4,044 KB:

Hjemmeside: https://www.gnu.org/software/groff/

Laste ned: https://ftp.gnu.org/gnu/groff/groff-1.22.4.tar.gz

MD5 sum: 08fb04335e2f5e73f23ea4c3adbf0c5f

GRUB (2.06) - 6,428 KB:

Hjemmeside: https://www.gnu.org/software/grub/

Laste ned: https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz

MD5 sum: cf0fd928b1e5479c8108ee52cb114363

Gzip (1.11) - 786 KB:

Hjemmeside: https://www.gnu.org/software/gzip/

Laste ned: https://ftp.gnu.org/gnu/gzip/gzip-1.11.tar.xz

MD5 sum: d1e93996dba00cab0caa7903cd01d454

Iana-Etc (20220207) - 580 KB:

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

Inetutils (2.2) - 1,494 KB:

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

Intltool (0.51.0) - 159 KB:

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

IPRoute2 (5.16.0) - 843 KB:

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

Kbd (2.4.0) - 1,095 KB:

Hjemmeside: https://kbd-project.org/

Laste ned: https://www.kernel.org/pub/linux/utils/kbd/kbd-2.4.0.tar.xz

MD5 sum: 3cac5be0096fcf7b32dcbd3c53831380

Kmod (29) - 548 KB:

Laste ned: https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-29.tar.xz

MD5 sum: e81e63acd80697d001c8d85c1acb38a0

Less (590) - 348 KB:

Hjemmeside: https://www.greenwoodsoftware.com/less/

Laste ned: https://www.greenwoodsoftware.com/less/less-590.tar.gz

MD5 sum: f029087448357812fba450091a1172ab

LFS-Bootscripts (20210608) - 32 KB:

Laste ned: https://www.linuxfromscratch.org/lfs/downloads/11.1/lfs-bootscripts-20210608.tar.xz

MD5 sum: 0f51a074cc4faaff93b3c80e9ab27b0c

Libcap (2.63) - 171 KB:

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

Libffi (3.4.2) - 1,320 KB:

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

Libpipeline (1.5.5) - 934 KB:

Hjemmeside: http://libpipeline.nongnu.org/

Laste ned: https://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.5.5.tar.gz

MD5 sum: 3e725c76bfea1985e87e851ee50c2e29

Libtool (2.4.6) - 951 KB:

Hjemmeside: https://www.gnu.org/software/libtool/

Laste ned: https://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.xz

MD5 sum: 1bfb9b923f2c1339b4d2ce1807064aa5

Linux (5.16.9) - 124,577 KB:

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

Note

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.

M4 (1.4.19) - 1,617 KB:

Hjemmeside: https://www.gnu.org/software/m4/

Laste ned: https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz

MD5 sum: 0d90823e1426f1da2fd872df0311298d

Make (4.3) - 2,263 KB:

Hjemmeside: https://www.gnu.org/software/make/

Laste ned: https://ftp.gnu.org/gnu/make/make-4.3.tar.gz

MD5 sum: fc7a67ea86ace13195b0bce683fd4469

Man-DB (2.10.1) - 1,847 KB:

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

Man-pages (5.13) - 1,752 KB:

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

Meson (0.61.1) - 1,963 KB:

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

MPC (1.2.1) - 820 KB:

Hjemmeside: http://www.multiprecision.org/

Laste ned: https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz

MD5 sum: 9f16c976c25bb0f76b50be749cd7a3a8

MPFR (4.1.0) - 1,490 KB:

Hjemmeside: https://www.mpfr.org/

Laste ned: https://www.mpfr.org/mpfr-4.1.0/mpfr-4.1.0.tar.xz

MD5 sum: bdd3d5efba9c17da8d83a35ec552baef

Ncurses (6.3) - 3,500 KB:

Hjemmeside: https://www.gnu.org/software/ncurses/

Laste ned: https://invisible-mirror.net/archives/ncurses/ncurses-6.3.tar.gz

MD5 sum: a2736befde5fee7d2b7eb45eb281cdbe

Ninja (1.10.2) - 209 KB:

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

OpenSSL (3.0.1) - 14,660 KB:

Hjemmeside: https://www.openssl.org/

Laste ned: https://www.openssl.org/source/openssl-3.0.1.tar.gz

MD5 sum: 7d07e849d77d276891edd579a8832bb3

Patch (2.7.6) - 766 KB:

Hjemmeside: https://savannah.gnu.org/projects/patch/

Laste ned: https://ftp.gnu.org/gnu/patch/patch-2.7.6.tar.xz

MD5 sum: 78ad9937e4caadcba1526ef1853730d5

Perl (5.34.0) - 12,580 KB:

Hjemmeside: https://www.perl.org/

Laste ned: https://www.cpan.org/src/5.0/perl-5.34.0.tar.xz

MD5 sum: df7ecb0653440b26dc951ad9dbfab517

Pkg-config (0.29.2) - 1,970 KB:

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

Procps (3.3.17) - 985 KB:

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

Psmisc (23.4) - 362 KB:

Hjemmeside: https://gitlab.com/psmisc/psmisc

Laste ned: https://sourceforge.net/projects/psmisc/files/psmisc/psmisc-23.4.tar.xz

MD5 sum: 8114cd4489b95308efe2509c3a406bbf

Python (3.10.2) - 18,341 KB:

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

Python Documentation (3.10.2) - 7,102 KB:

Laste ned: https://www.python.org/ftp/python/doc/3.10.2/python-3.10.2-docs-html.tar.bz2

MD5 sum: ffa52f0017baf72df9d32dec785fd6ab

Readline (8.1.2) - 2,923 KB:

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

Sed (4.8) - 1,317 KB:

Hjemmeside: https://www.gnu.org/software/sed/

Laste ned: https://ftp.gnu.org/gnu/sed/sed-4.8.tar.xz

MD5 sum: 6d906edfdb3202304059233f51f9a71d

Shadow (4.11.1) - 1,618 KB:

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

Sysklogd (1.5.1) - 88 KB:

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

Sysvinit (3.01) - 124 KB:

Hjemmeside: https://savannah.nongnu.org/projects/sysvinit

Laste ned: https://download.savannah.gnu.org/releases/sysvinit/sysvinit-3.01.tar.xz

MD5 sum: dc14f92af715bcfa33cc25341730452e

Tar (1.34) - 2,174 KB:

Hjemmeside: https://www.gnu.org/software/tar/

Laste ned: https://ftp.gnu.org/gnu/tar/tar-1.34.tar.xz

MD5 sum: 9a08d29a9ac4727130b5708347c0f5cf

Tcl (8.6.12) - 10,112 KB:

Hjemmeside: http://tcl.sourceforge.net/

Laste ned: https://downloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz

MD5 sum: 87ea890821d2221f2ab5157bc5eb885f

Tcl Dokumentasjon (8.6.12) - 1,176 KB:

Laste ned: https://downloads.sourceforge.net/tcl/tcl8.6.12-html.tar.gz

MD5 sum: a0d1a5b60bbb68f2f0bd3066a19c527a

Texinfo (6.8) - 4,848 KB:

Hjemmeside: https://www.gnu.org/software/texinfo/

Laste ned: https://ftp.gnu.org/gnu/texinfo/texinfo-6.8.tar.xz

MD5 sum: a91b404e30561a5df803e6eb3a53be71

Tidssonedata (2021e) - 413 KB:

Hjemmeside: https://www.iana.org/time-zones

Laste ned: https://www.iana.org/time-zones/repository/releases/tzdata2021e.tar.gz

MD5 sum: 4fdfad906ebc85fef30221c10964cce9

Udev-lfs Tarball (udev-lfs-20171102) - 11 KB:

Laste ned: https://anduin.linuxfromscratch.org/LFS/udev-lfs-20171102.tar.xz

MD5 sum: 27cd82f9a61422e186b9d6759ddf1634

Util-linux (2.37.4) - 5,971 KB:

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

Vim (8.2.4383) - 15,622 KB:

Hjemmeside: https://www.vim.org

Laste ned: https://anduin.linuxfromscratch.org/LFS/vim-8.2.4383.tar.gz

MD5 sum: 3168ff48e382a1201bd0cbd0209bd3e0

Note

Versjonen av vim endres daglig. For å få den nyeste versjonen, gå til https://github.com/vim/vim/tags.

XML::Parser (2.46) - 249 KB:

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

Xz Utils (5.2.5) - 1,122 KB:

Hjemmeside: https://tukaani.org/xz

Laste ned: https://tukaani.org/xz/xz-5.2.5.tar.xz

MD5 sum: aa1621ec7013a19abab52a8aff04fe5b

Zlib (1.2.11) - 457 KB:

Hjemmeside: https://www.zlib.net/

Laste ned: https://zlib.net/zlib-1.2.11.tar.xz

MD5 sum: 85adef240c5f370b308da8c938951a68

Zstd (1.5.2) - 1,892 KB:

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

3.3. Nødvendige oppdateringer

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:

Binutils LTO Fix Patch - 3.5 KB:

Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/binutils-2.38-lto_fix-1.patch

MD5 sum: 3df11b6123d5bbdb0fc83862a003827a

Bzip2 Documentation Patch - 1.6 KB:

Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/bzip2-1.0.8-install_docs-1.patch

MD5 sum: 6a5ac7e89b791aae556de0f745916f7f

Coreutils Internationalization Fixes Patch - 166 KB:

Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/coreutils-9.0-i18n-1.patch

MD5 sum: 1eeba2736dfea013509f9975365e4e32

Coreutils Chmod Fix Patch - 3.8 KB:

Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/coreutils-9.0-chmod_fix-1.patch

MD5 sum: 4709df88e68279e6ef357aa819ba5b1a

Glibc FHS Patch - 2.8 KB:

Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/glibc-2.35-fhs-1.patch

MD5 sum: 9a5997c3452909b1769918c759eff8a2

Kbd Backspace/Delete Fix Patch - 12 KB:

Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/kbd-2.4.0-backspace-1.patch

MD5 sum: f75cca16a38da6caa7d52151f7136895

Sysvinit Consolidated Patch - 2.4 KB:

Last ned: https://www.linuxfromscratch.org/patches/lfs/11.1/sysvinit-3.01-consolidated-1.patch

MD5 sum: 4900322141d493e74020c9cf437b2cdc

Zstd Upstream Fixes Patch - 4 KB:

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.

Chapter 4. Siste forberedelser

4.1. Introduksjon

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.

4.2. Opprette et begrenset mappeoppsett i LFS filsystemet

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

4.3. Legge til LFS brukeren

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

Note

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.

4.4. Sette opp miljøet

Sett opp et godt arbeidsmiljø ved å lage to nye oppstartsfiler for bash skallet. Mens du er logget inn som bruker lfs, utsted følgende kommando å 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.

Important

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

4.5. Om SBU

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.

Note

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.

4.6. Om testpakkene

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.

Note

Å 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.

Part III. Bygge LFS Kryssverktøykjede og midlertidige verktøy

Viktig foreløpig materiale

Introduksjon

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.

Important

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.

Verktøykjedens tekniske merknader

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.

Om Krysskompilering

Note

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:

bygg

er maskinen der vi bygger programmer. Merk at denne maskinen refereres til som verten i andre seksjoner.

vert

er maskinen/systemet der de bygde programmene skal kjøres. Merk at denne bruken av host ikke er den samme som i andre seksjoner.

mål

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.

Implementering av Krysskompilering for LFS

Note

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.

Andre prosedyredetaljer

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.

Generelle kompileringsinstruksjoner

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:

    Important

    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.

    Important

    Å understreke byggeprosessen på nytt:

    1. Plasser alle kildene og oppdateringene i en mappe som vil være tilgjengelig fra chroot-miljøet som f.eks /mnt/lfs/sources/.

    2. Bytt til kildemappen.

    3. For hver pakke:

      1. 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.

      2. Bytt til mappen som ble opprettet da pakken ble pakket ut.

      3. Følg bokens instruksjoner for å bygge pakken.

      4. Bytt tilbake til kildemappen.

      5. Slett den utpakkede kildemappen med mindre du blir bedt om noe annet.

Chapter 5. Kompilere en kryssverktøykjede

5.1. Introduksjon

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.

5.2. Binutils-2.38 - Pass 1

Binutils pakken inneholder en linker, en assembler og annet verktøy for håndtering av objektfiler.

Omtrentlig byggetid: 1 SBU
Nødvendig diskplass: 620 MB

5.2.1. Installasjon av Kryss Binutils

Note

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

Note

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.”

5.3. GCC-11.2.0 - Pass 1

GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.

Omtrentlig byggetid: 11 SBU
Nødvendig diskplass: 3.3 GB

5.3.1. Installasjon av Kryss GCC

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:

Note

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.”

5.4. Linux-5.16.9 API Headers

Linux API deklarasjonene (i linux-5.16.9.tar.xz) eksponerer kjernens API for bruk av Glibc.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 1.2 GB

5.4.1. Installasjon av Linux API deklarasjoner

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

5.4.2. Innhold i Linux API deklarasjoner

Installerte overskrifter: /usr/include/asm/*.h, /usr/include/asm-generic/*.h, /usr/include/drm/*.h, /usr/include/linux/*.h, /usr/include/misc/*.h, /usr/include/mtd/*.h, /usr/include/rdma/*.h, /usr/include/scsi/*.h, /usr/include/sound/*.h, /usr/include/video/*.h, og /usr/include/xen/*.h
Installerte mapper: /usr/include/asm, /usr/include/asm-generic, /usr/include/drm, /usr/include/linux, /usr/include/misc, /usr/include/mtd, /usr/include/rdma, /usr/include/scsi, /usr/include/sound, /usr/include/video, og /usr/include/xen

Korte beskrivelser

/usr/include/asm/*.h

Linux API ASM deklarasjoner

/usr/include/asm-generic/*.h

Linux API ASM Generiske deklarasjoner

/usr/include/drm/*.h

Linux API DRM deklarasjoner

/usr/include/linux/*.h

Linux API Linux deklarasjoner

/usr/include/misc/*.h

Linux API Diverse deklarasjoner

/usr/include/mtd/*.h

Linux API MTD deklarasjoner

/usr/include/rdma/*.h

Linux API RDMA deklarasjoner

/usr/include/scsi/*.h

Linux API SCSI deklarasjoner

/usr/include/sound/*.h

Linux API Lyd deklarasjoner

/usr/include/video/*.h

Linux API Video deklarasjoner

/usr/include/xen/*.h

Linux API Xen deklarasjoner

5.5. Glibc-2.35

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.

Omtrentlig byggetid: 4.3 SBU
Nødvendig diskplass: 818 MB

5.5.1. Installasjon av Glibc

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

Note

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.

Note

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:

Warning

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

Caution

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

Note

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.”

5.6. Libstdc++ from GCC-11.2.0, Pass 1

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.

Omtrentlig byggetid: 0.4 SBU
Nødvendig diskplass: 818 MB

5.6.1. Installation of Target Libstdc++

Note

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.”

Chapter 6. Krysskompilering av midlertidige verktøy

6.1. Introduksjon

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”.

6.2. M4-1.4.19

M4 pakken inneholder en makroprosessor.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 31 MB

6.2.1. Installasjon av M4

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.”

6.3. Ncurses-6.3

Ncurses pakken inneholder biblioteker for terminaluavhengig håndtering av karakterskjermer.

Omtrentlig byggetid: 0.7 SBU
Nødvendig diskplass: 50 MB

6.3.1. Installasjon av Ncurses

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.

echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so

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.”

6.4. Bash-5.1.16

Bash pakken inneholder Bourne-Again Skallet (Bourne-Again SHell).

Omtrentlig byggetid: 0.4 SBU
Nødvendig diskplass: 64 MB

6.4.1. Installasjon av Bash

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.”

6.5. Coreutils-9.0

Pakken Coreutils inneholder verktøy for å vise og stille inn grunnleggende systemegenskaper.

Omtrentlig byggetid: 0.6 SBU
Nødvendig diskplass: 158 MB

6.5.1. Installasjon av Coreutils

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.”

6.6. Diffutils-3.8

Diffutils pakken inneholder programmer som viser forskjellene mellom filer eller mapper.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 27 MB

6.6.1. Installasjon av Diffutils

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.”

6.7. File-5.41

File pakken inneholder et verktøy for å bestemme typen av en gitt fil eller filer.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 32 MB

6.7.1. Installasjon av File

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.”

6.8. Findutils-4.9.0

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).

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 42 MB

6.8.1. Installasjon av Findutils

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.”

6.9. Gawk-5.1.1

Gawk pakken inneholder programmer for å manipulere tekstfiler.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 45 MB

6.9.1. Installasjon av Gawk

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.”

6.10. Grep-3.7

Grep pakken inneholder programmer for å søke gjennom innholdet i filer.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 26 MB

6.10.1. Installasjon av Grep

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.”

6.11. Gzip-1.11

Gzip pakken inneholder programmer for komprimering og dekomprimering av filer.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 11 MB

6.11.1. Installasjon av Gzip

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.”

6.12. Make-4.3

Make pakken inneholder et program for å kontrollere genereringen av kjørbare filer og andre ikke-kildefiler av en pakke fra kildefiler.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 15 MB

6.12.1. Installasjon av Make

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.”

6.13. Patch-2.7.6

Patch pakken inneholder et program for å endre eller lage filer ved å bruke en patch fil som vanligvis opprettes av diff programmet.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 12 MB

6.13.1. Installasjon av Patch

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.”

6.14. Sed-4.8

Sed pakken inneholder en dataflyt (stream) redigerer.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 20 MB

6.14.1. Installasjon av Sed

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.”

6.15. Tar-1.34

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.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 38 MB

6.15.1. Installasjon av Tar

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.”

6.16. Xz-5.2.5

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.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 15 MB

6.16.1. Installasjon av Xz

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.”

6.17. Binutils-2.38 - Pass 2

Binutils pakken inneholder en linker, en assembler og annet verktøy for håndtering av objektfiler.

Omtrentlig byggetid: 1.3 SBU
Nødvendig diskplass: 520 MB

6.17.1. Installation of Binutils

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.”

6.18. GCC-11.2.0 - Pass 2

GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.

Omtrentlig byggetid: 11 SBU
Nødvendig diskplass: 3.3 GB

6.18.1. Installasjon av GCC

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.”

Chapter 7. Gå inn i Chroot og bygge ytterligere midlertidige verktøy

7.1. Introduksjon

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.

7.2. Skifte eierskap

Note

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

7.3. Klargjøring av virtuelle kjernefilsystemer

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}

7.3.1. Opprette innledende enhetsnoder

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

7.3.2. Montering og fylling av /dev

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

7.3.3. Montering av virtuelle kjernefilsystemer

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

7.4. Gå inn i Chroot miljøet

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å.

Note

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.

7.5. Opprette mapper

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:

Note

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.

7.5.1. FHS Samsvarsmerknad

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.

7.6. Opprette essensielle filer og symbolkoblinger

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.

Note

/run/utmp filen registrerer brukerne som for øyeblikket er pålogget. Denne filen opprettes dynamisk i oppstart skriptet.

7.7. Libstdc++ from GCC-11.2.0, Pass 2

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.

Omtrentlig byggetid: 0.8 SBU
Nødvendig diskplass: 1.1 GB

7.7.1. Installasjon av Target Libstdc++

Note

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.”

7.8. Gettext-0.21

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.

Omtrentlig byggetid: 1.6 SBU
Nødvendig diskplass: 280 MB

7.8.1. Installasjon av Gettext

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.”

7.9. Bison-3.8.2

Bison pakken inneholder en parsergenerator.

Omtrentlig byggetid: 0.3 SBU
Nødvendig diskplass: 50 MB

7.9.1. Installasjon av Bison

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.”

7.10. Perl-5.34.0

Perl pakken inneholder den praktiske utvinnings og rapporterings språket (Practical Extraction and Report Language).

Omtrentlig byggetid: 1.6 SBU
Nødvendig diskplass: 272 MB

7.10.1. Installasjon av Perl

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.”

7.11. Python-3.10.2

Python 3 pakken inneholder Python utviklingsmiljøet. Den er nyttig for objektorientert programmering, skriving av skript, prototyping store programmer, eller utvikle hele applikasjoner.

Omtrentlig byggetid: 1.2 SBU
Nødvendig diskplass: 359 MB

7.11.1. Installasjon av Python

Note

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

Note

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.”

7.12. Texinfo-6.8

Texinfo pakken inneholder programmer for lesing, skriving og konvertere informasjonssider.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 109 MB

7.12.1. Installasjon av Texinfo

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.”

7.13. Util-linux-2.37.4

Util-linux pakken inneholder diverse hjelpeprogrammer.

Omtrentlig byggetid: 0.7 SBU
Nødvendig diskplass: 129 MB

7.13.1. Installasjon av Util-linux

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.”

7.14. Opprydding og lagring av det midlertidige systemet

7.14.1. Opprydding

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

7.14.2. Sikkerhetskopiering

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.

Note

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

Important

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:

Note

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 .

Note

Hvis du fortsetter til kapittel 8, ikke glem å gå inn i chroot miljøet på nytt som forklart i Viktig boksen under.

7.14.3. Gjenopprett

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:

Warning

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.

Important

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.

Part IV. Bygge LFS systemet

Chapter 8. Installere grunnleggende systemprogramvare

8.1. Introduksjon

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.

Note

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.

8.1.1. Om biblioteker

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.

8.2. Pakkehåndtering

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.

8.2.1. Oppgraderingsproblemer

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.

8.2.2. Pakkehåndteringsteknikker

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.

8.2.2.1. Det er alt i hodet mitt!

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.

8.2.2.2. Installer i separate kataloger

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.

8.2.2.3. Symlink Style Package Management

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.

8.2.2.4. Tidsstempelbasert

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.

8.2.2.5. Sporing av installasjonsskript

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.

8.2.2.6. Opprette pakkearkiver

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.

8.2.2.7. Brukerbasert administrasjon

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.

8.2.3. Distribuere LFS på flere systemer

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.

Note

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”.

8.3. Man-pages-5.13

Man-pages pakken inneholder over 2200 Man-sider.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 33 MB

8.3.1. Installasjon av Man-sider

Installer Man-sider ved å kjøre:

make prefix=/usr install

8.3.2. Innhold i Man-sider

Installerte filer: ulike Man-sider

Korte beskrivelser

man pages

Beskriver C programmeringsspråksfunksjoner, viktig enhetsfiler og betydelige konfigurasjonsfiler

8.4. Iana-Etc-20220207

Iana-Etc pakken leverer data for nettverkstjenester og protokoller.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 4.7 MB

8.4.1. Installasjon av Iana-Etc

For denne pakken trenger vi bare å kopiere filene på plass:

cp services protocols /etc

8.4.2. Innhold i Iana-Etc

Installerte filer: /etc/protocols and /etc/services

Korte beskrivelser

/etc/protocols

Beskriver de ulike DARPA Internettprotokollene som er tilgjengelig fra TCP/IP undersystemet

/etc/services

Gir en tilordning mellom vennlige tekstnavn for internetttjenester, og deres underliggende tildelte portnumre og protokolltyper

8.5. Glibc-2.35

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.

Omtrentlig byggetid: 24 SBU
Nødvendig diskplass: 2.8 GB

8.5.1. Installasjon av Glibc

Noen av Glibc programmene bruker ikke-FHS kompatible /var/db mappen til å lagre kjøretidsdataene i. Bruk følgende oppdatering for å forsikre om at slike programmer lagrer kjøretidsdataene deres på de FHS-kompatible stedene:

patch -Np1 -i ../glibc-2.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

Important

I denne delen anses testpakken for Glibc som kritisk. Ikke hopp over den under noen omstendigheter.

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

make check

Du kan se noen testfeil. Glibc testpakken er noe avhengig av vertssystemet. Noen få feil ut av over 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

Note

Glibc bruker nå libidn2 når den løser internasjonalisert domenenavn. Dette er en kjøretids avhengighet. Hvis denne evnen er nødvendig, er instruksjonene for installasjon av libidn2 i BLFS libidn2 siden.

8.5.2. Konfigurerer Glibc

8.5.2.1. Legge til nsswitch.conf

/etc/nsswitch.conf filen må opprettes fordi Glibc standardene ikke fungerer bra i et nettverksmiljø.

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

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

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

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

# End /etc/nsswitch.conf
EOF

8.5.2.2. Legger til tidssonedata

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).

8.5.2.3. Konfigurere den dynamiske lasteren

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

8.5.3. Innhold i Glibc

Installerte programmer: gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, ld.so (symlink to ld-linux-x86-64.so.2 or ld-linux.so.2), locale, localedef, makedb, mtrace, nscd, pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, zdump, og zic
Installerte biblioteker: ld-linux-x86-64.so.2, ld-linux.so.2, libBrokenLocale.{a,so}, libanl.{a,so}, libc.{a,so}, libc_nonshared.a, libc_malloc_debug.so, libcrypt.{a,so}, libdl.{a,so.2}, libg.a, libm.{a,so}, libmcheck.a, libmemusage.so, libmvec.{a,so}, libnsl.so.1, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libpcprofile.so, libpthread.{a,so.0}, libresolv.{a,so}, librt.{a,so.1}, libthread_db.so, og libutil.{a,so.1}
Installerte mapper: /usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/netash, /usr/include/netatalk, /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /usr/include/rpc, /usr/include/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, /var/cache/nscd, og /var/lib/nss_db

Korte beskrivelser

gencat

Genererer meldingskataloger

getconf

Viser systemkonfigurasjonsverdiene for filsystem spesifikke variabler

getent

Henter oppføringer fra en administrativ database

iconv

Utfører tegnsettkonvertering

iconvconfig

Skaper hurtiglastings iconv modulkonfigurasjons filer

ldconfig

Konfigurerer dynamiske lenker til kjøretidsbindingene

ldd

Rapporter hvilke delte biblioteker som kreves av hvert gitt program eller delte bibliotek

lddlibc4

Assisterer ldd med objektfiler. Det eksisterer ikke på nyere arkitekturer som x86_64

locale

Skriver ut forskjellig informasjon om gjeldende lokalitet

localedef

Kompilerer lokalitets spesifikasjoner

makedb

Oppretter en enkel database fra tekst inndata

mtrace

Leser og tolker en minnesporingsfil og viser et sammendrag i menneskelestbart format

nscd

En nisse (daemon) som gir et hurtiglager for de vanligste navne tjenesteforespørsler

pcprofiledump

Dumper informasjon generert av PC profiling

pldd

Viser dynamiske delte objekter som brukes av kjørende prosesser

sln

En statisk koblet ln programm

sotruss

Sporer delte biblioteksprosedyrekall for en spesifisert kommando

sprof

Leser og viser profileringsdata for delte objekter

tzselect

Spør brukeren om lokaliteten til systemet og rapporterer den tilsvarende tidssonebeskrivelsen

xtrace

Sporer kjøringen av et program ved å skrive ut gjeldende utført funksjon

zdump

Tidssone dumperen

zic

Tidssonekompilatoren

ld-*.so

Hjelpeprogrammet for kjørbare delte biblioteker

libBrokenLocale

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

libanl

Et asynkront navneoppslagsbibliotek

libc

C hovedbiblioteket

libc_malloc_debug

Slår på minneallokeringskontroll når den er forhåndslastet

libcrypt

Kryptografibiblioteket

libdl

Dummy bibliotek som ikke inneholder noen funksjoner. Tidligere var den dynamisk koblingsgrensesnittbibliotek, funksjonene er nå i libc

libg

Dummy bibliotek som ikke inneholder noen funksjoner. Tidligere var det et kjøretidsbibliotek for g++

libm

Det matematiske biblioteket

libmvec

Matematisk vektorbibliotek, koblet inn etter behov når libm blir brukt

libmcheck

Slår på minneallokeringskontroll når den er koblet til

libmemusage

Brukt av memusage for å hjelpe til med å samle inn informasjon om minnebruken til et program

libnsl

Nettverkstjenestebiblioteket, nå avviklet

libnss_*

Navnetjenestebrytermodulene, som inneholder funksjoner for å løse vertsnavn, brukernavn, gruppenavn, aliaser, tjenester, protokoller osv. Lastet av libc ifølge konfigurasjon i /etc/nsswitch.conf

libpcprofile

Kan forhåndslastes til PC profile en kjørbar fil

libpthread

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 libc

libresolv

Inneholder funksjoner for å lage, sende og tolke pakker til domenenavnservere

librt

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

libthread_db

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

libutil

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 libc

8.6. Zlib-1.2.11

Zlib pakken inneholder komprimerings- og dekompresjonsrutiner som brukes av noen programmer.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 5.0 MB

8.6.1. Installasjon av Zlib

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

8.6.2. Innhold i Zlib

Installerte biblioteker: libz.so

Korte beskrivelser

libz

Inneholder komprimerings- og dekompresjonsfunksjoner som brukes av noen programmer

8.7. Bzip2-1.0.8

Bzip2 pakken inneholder programmer for komprimering og dekomprimering av filer. Komprimering av tekstfiler med bzip2 gir mye bedre kompresjonsprosent enn med den tradisjonelle gzip.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 7.2 MB

8.7.1. Installasjon av Bzip2

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

8.7.2. Innhold i Bzip2

Installerte programmer: bunzip2 (linker til bzip2), bzcat (linker til bzip2), bzcmp (linker til bzdiff), bzdiff, bzegrep (linker til bzgrep), bzfgrep (linker til bzgrep), bzgrep, bzip2, bzip2recover, bzless (linker til bzmore), og bzmore
Installerte biblioteker: libbz2.so
Installert mappe: /usr/share/doc/bzip2-1.0.8

Korte beskrivelser

bunzip2

Dekomprimerer bzippede filer

bzcat

Dekomprimerer til standard utgang

bzcmp

Kjører cmp på bzippede filer

bzdiff

Kjører diff på bzippede filer

bzegrep

Kjører egrep på bzippede filer

bzfgrep

Kjører fgrep på bzippede filer

bzgrep

Kjører grep på bzippede filer

bzip2

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

bzip2recover

Prøver å gjenopprette data fra skadde bzippede filer

bzless

Kjører less på bzippede filer

bzmore

Kjører more på bzippede filer

libbz2

Biblioteket implementerer tapsfri, blokksorterende data komprimering ved å bruke Burrows-Wheeler-algoritmen

8.8. Xz-5.2.5

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.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 15 MB

8.8.1. Installasjon av Xz

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

8.8.2. Innhold i Xz

Installerte programmer: lzcat (lenker til xz), lzcmp (lenker til xzdiff), lzdiff (lenker til xzdiff), lzegrep (lenker til xzgrep), lzfgrep (lenker til xzgrep), lzgrep (lenker til xzgrep), lzless (lenker til xzless), lzma (lenker til xz), lzmadec, lzmainfo, lzmore (lenker til xzmore), unlzma (lenker til xz), unxz (lenker til xz), xz, xzcat (lenker til xz), xzcmp (lenker til xzdiff), xzdec, xzdiff, xzegrep (lenker til xzgrep), xzfgrep (lenker til xzgrep), xzgrep, xzless, og xzmore
Installerte biblioteker: liblzma.so
Installerte mapper: /usr/include/lzma og /usr/share/doc/xz-5.2.5

Korte beskrivelser

lzcat

Dekomprimerer til standard utgang

lzcmp

Kjører cmp på LZMA komprimerte filer

lzdiff

Kjører diff på LZMA komprimerte filer

lzegrep

Kjører egrep på LZMA komprimerte filer

lzfgrep

Kjører fgrep på LZMA komprimerte filer

lzgrep

Kjører grep på LZMA komprimerte filer

lzless

Kjører less på LZMA komprimerte filer

lzma

Komprimerer eller dekomprimerer filer ved å bruke LZMA formatet

lzmadec

En liten og rask dekoder for LZMA komprimerte filer

lzmainfo

Viser informasjon som er lagret i den komprimerte LZMA filoverskriften

lzmore

Kjører more på LZMA komprimerte filer

unlzma

Dekomprimerer filer ved å bruke LZMA formatet

unxz

Dekomprimerer filer ved å bruke XZ formatet

xz

Komprimerer eller dekomprimerer filer ved å bruke XZ formatet

xzcat

Dekomprimerer til standard utgang

xzcmp

Kjører cmp på XZ komprimerte filer

xzdec

En liten og rask dekoder for XZ komprimerte filer

xzdiff

Kjører diff på XZ komprimerte filer

xzegrep

Kjører egrep på XZ komprimerte filer

xzfgrep

Kjører fgrep på XZ komprimerte filer

xzgrep

Kjører grep på XZ komprimerte filer

xzless

Kjører less på XZ komprimerte filer

xzmore

Kjører more på XZ komprimerte filer

liblzma

Bibliotek som implementerer tapsfri, blokksorterende data komprimering ved å bruke Lempel-Ziv-Markov kjedealgoritmen

8.9. Zstd-1.5.2

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.

Omtrentlig byggetid: 1.1 SBU
Nødvendig diskplass: 55 MB

8.9.1. Installasjon av Zstd

Kompiler pakken:

make

Note

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

8.9.2. Innhold i Zstd

Installerte programmer: zstd, zstdcat (lenker til zstd), zstdgrep, zstdless, zstdmt (lenker til zstd), og unzstd (lenker til zstd)
Installert bibliotek: libzstd.so

Korte beskrivelser

zstd

Komprimerer eller dekomprimerer filer ved å bruke ZSTD formatet

zstdgrep

Kjører grep på ZSTD komprimerte filer

zstdless

Kjører less på ZSTD komprimerte filer

libzstd

Biblioteket implementerer tapsfri data komprimering ved å bruke ZSTD algoritmen

8.10. File-5.41

File pakken inneholder et verktøy for å bestemme typen av en gitt fil eller filer.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 15 MB

8.10.1. Installasjon av File

Forbered File for kompilering:

./configure --prefix=/usr

Kompiler pakken:

make

For å teste resultatene, utsted:

make check

Installer pakken:

make install

8.10.2. Innholdet i File

Installerte programmer: file
Installert bibliotek: libmagic.so

Korte beskrivelser

file

Prøver å klassifisere hver gitt fil; den gjør dette ved å utføre flere tester—filsystemtester, magiske talltester og språk tester

libmagic

Inneholder rutiner for magisk tallgjenkjenning, brukt av file programmet

8.11. Readline-8.1.2

Readline pakken er et sett med biblioteker som tilbyr kommandolinje redigerings- og historikkfunksjoner.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 15 MB

8.11.1. Installasjon av Readline

Å 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

8.11.2. Innhold i Readline

Installerte biblioteker: libhistory.so og libreadline.so
Installerte mapper: /usr/include/readline og /usr/share/doc/readline-8.1.2

Korte beskrivelser

libhistory

Gir et konsistent brukergrensesnitt for tilbakekalling av linjer fra historien

libreadline

Gir et sett med kommandoer for å manipulere tekst som er skrevet inn i et interaktiv økt av et program

8.12. M4-1.4.19

M4 pakken inneholder en makroprosessor.

Omtrentlig byggetid: 0.7 SBU
Nødvendig diskplass: 49 MB

8.12.1. Installasjon av M4

Forbered M4 for kompilering:

./configure --prefix=/usr

Kompiler pakken:

make

For å teste resultatene, utsted:

make check

Installer pakken:

make install

8.12.2. Innhold i M4

Installert program: m4

Korte beskrivelser

m4

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

8.13. Bc-5.2.2

Bc pakken inneholder et vilkårlig behandlingsspråk for numerisk presisjon.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 7.1 MB

8.13.1. Installasjon av Bc

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

8.13.2. Innholdet i Bc

Installerte programmer: bc og dc

Korte beskrivelser

bc

En kommandolinjekalkulator

dc

En omvendt-polert kommandolinjekalkulator

8.14. Flex-2.6.4

Flex pakken inneholder et verktøy for å generere programmerer som gjenkjenner mønstre i tekst.

Omtrentlig byggetid: 0.4 SBU
Nødvendig diskplass: 32 MB

8.14.1. Installasjon av Flex

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

8.14.2. Innhold i Flex

Installerte programmer: flex, flex++ (lenker til flex), og lex (lenker til flex)
Installerte biblioteker: libfl.so
Installert mappe: /usr/share/doc/flex-2.6.4

Korte beskrivelser

flex

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

flex++

En utvidelse av flex brukes til å generere C++ kode og klasser. Det er en symbolsk kobling til flex

lex

En symbolsk lenke som kjører flex i lex emuleringsmodus

libfl

flex biblioteket

8.15. Tcl-8.6.12

Tcl pakken inneholder Tool Command Language, et robust skriptspråk for generelt bruk. Expect pakken er skrevet i Tcl språket.

Omtrentlig byggetid: 3.4 SBU
Nødvendig diskplass: 87 MB

8.15.1. Installasjon av Tcl

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

8.15.2. Innhold i Tcl

Installerte programmer: tclsh (link to tclsh8.6) og tclsh8.6
Installert bibliotek: libtcl8.6.so og libtclstub8.6.a

Korte beskrivelser

tclsh8.6

Tcl kommandoskallet

tclsh

En lenke til tclsh8.6

libtcl8.6.so

Tcl biblioteket

libtclstub8.6.a

Tcl Stub biblioteket

8.16. Expect-5.45.4

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.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 3.9 MB

8.16.1. Installasjon av 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

8.16.2. Innhold i Expect

Installert program: expect
Installert bibliotek: libexpect5.45.4.so

Korte beskrivelser

expect

Kommuniserer med andre interaktive programmer iht til et skript

libexpect-5.45.4.so

Inneholder funksjoner som gjør at Expect kan brukes som en Tcl utvidelse eller brukes direkte fra C eller C++ (uten Tcl)

8.17. DejaGNU-1.6.3

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).

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 6.9 MB

8.17.1. Installasjon av DejaGNU

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

8.17.2. Innhold i DejaGNU

Installert program: dejagnu og runtest

Korte beskrivelser

dejagnu

DejaGNU hjelpekommandostarter

runtest

Et innpakningsskript som lokaliserer riktig expect skall og kjører deretter DejaGNU

8.18. Binutils-2.38

Binutils pakken inneholder en linker, en assembler og annet verktøy for håndtering av objektfiler.

Omtrentlig byggetid: 6.1 SBU
Nødvendig diskplass: 4.6 GB

8.18.1. Installasjon av Binutils

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).

Important

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

8.18.2. Innhold i Binutils

Installerte programmer: addr2line, ar, as, c++filt, dwp, elfedit, gprof, ld, ld.bfd, ld.gold, nm, objcopy, objdump, ranlib, readelf, size, strings, og strip
Installerte biblioteker: libbfd.so, libctf.so, libctf-nobfd.so, og libopcodes.so
Installert mappe: /usr/lib/ldscripts

Korte beskrivelser

addr2line

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

ar

Oppretter, endrer og trekker ut fra arkiver

as

En assembler som setter sammen utdataene til gcc inn i objektfiler

c++filt

Brukes av linkeren til å ikke ødelegge C++ og Java symboler og hindre overbelastede funksjoner å krasje

dwp

DWARF pakkeverktøyet

elfedit

Oppdaterer ELF deklarasjonen til ELF filer

gprof

Viser profildata for kallgrafen

ld

En linker som kombinerer en rekke objekt og arkivfiler inn i en enkelt fil, flytter dataene deres og rydder opp i symbolreferanser

ld.gold

En nedskalert versjon av ld som bare støtter objektfil formatet elf

ld.bfd

Hardlenke til ld

nm

Viser symbolene som forekommer i en gitt objektfil

objcopy

Oversetter én type objektfil til en annen

objdump

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

ranlib

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

readelf

Viser informasjon om binærfiler av ELF typen

size

Viser seksjonsstørrelsene og totalstørrelsen for de gitte objektfilene

strings

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

strip

Kaster symboler fra objektfiler

libbfd

Biblioteket med binære filbeskrivelser

libctf

Compat ANSI-C Type Format støttebibliotek for feilsøking

libctf-nobfd

En libctf variant som ikke bruker libbfd funksjonalitet

libopcodes

Et bibliotek for å håndtere opkoder— leselig tekst versjoner av instruksjoner for prosessoren; den brukes til å bygge verktøy som objdump

8.19. GMP-6.2.1

GMP pakken inneholder matematikkbiblioteker. Disse har nyttige funksjoner for vilkårlig presisjonsaritmetikk.

Omtrentlig byggetid: 1.0 SBU
Nødvendig diskplass: 52 MB

8.19.1. Installasjon av GMP

Note

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 ...

Note

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

Important

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

Caution

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

8.19.2. Innhold i GMP

Installerte biblioteker: libgmp.so og libgmpxx.so
Installert mappe: /usr/share/doc/gmp-6.2.1

Korte beskrivelser

libgmp

Inneholder matematiske presisjonsfunksjoner

libgmpxx

Inneholder C++ matematiske presisjonsfunksjoner

8.20. MPFR-4.1.0

MPFR-pakken inneholder matematiske funksjoner med flere presisjoner.

Omtrentlig byggetid: 0.8 SBU
Nødvendig diskplass: 38 MB

8.20.1. Installasjon av MPFR

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

Important

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

8.20.2. Innhold i MPFR

Installerte biblioteker: libmpfr.so
Installert mappe: /usr/share/doc/mpfr-4.1.0

Korte beskrivelser

libmpfr

Inneholder matematiske funksjoner med flere presisjoner

8.21. MPC-1.2.1

MPC pakken inneholder et bibliotek for aritmetikk av komplekse tall med vilkårlig høy presisjon og korrekt avrunding av resultatet.

Omtrentlig byggetid: 0.3 SBU
Nødvendig diskplass: 21 MB

8.21.1. Installasjon av MPC

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

8.21.2. Innhold i MPC

Installerte biblioteker: libmpc.so
Installert mappe: /usr/share/doc/mpc-1.2.1

Korte beskrivelser

libmpc

Inneholder komplekse matematiske funksjoner

8.22. Attr-2.5.1

Attr pakken inneholder verktøy for å administrere den utvidede attributter på filsystemobjekter.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 4.1 MB

8.22.1. Installasjon av Attr

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

8.22.2. Innhold i Attr

Installerte programmer: attr, getfattr, and setfattr
Installert bibliotek: libattr.so
Installerte mapper: /usr/include/attr og /usr/share/doc/attr-2.5.1

Korte beskrivelser

attr

Utvider attributter på filsystemobjekter

getfattr

Henter de utvidede attributtene til filsystemobjekter

setfattr

Angir de utvidede attributtene til filsystemobjekter

libattr

Inneholder bibliotekfunksjonene for å manipulere utvidede attributter

8.23. Acl-2.3.1

Acl pakken inneholder verktøy for å administrere tilgangskontrolllister, som brukes til å definere mer finmaskede skjønnsmessige tilgangsrettigheter for filer og mapper.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 6.1 MB

8.23.1. Installasjon av Acl

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

8.23.2. Innhold i Acl

Installerte programmer: chacl, getfacl, og setfacl
Installert bibliotek: libacl.so
Installerte mapper: /usr/include/acl og /usr/share/doc/acl-2.3.1

Korte beskrivelser

chacl

Endrer tilgangskontrolllisten til en fil eller mappe

getfacl

Henter filtilgangskontrolllister

setfacl

Angir filtilgangskontrolllister

libacl

Inneholder bibliotekfunksjonene for å manipulere tilgangskontrolllister

8.24. Libcap-2.63

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.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 2.7 MB

8.24.1. Installasjon av Libcap

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

8.24.2. Innhold i Libcap

Installerte programmer: capsh, getcap, getpcaps, og setcap
Installert bibliotek: libcap.so og libpsx.so

Korte beskrivelser

capsh

En skallinnpakning for å utforske og begrense kapasitetsstøtte

getcap

Undersøker filfunksjoner

getpcaps

Viser mulighetene for den forespurte prosessen(e)

setcap

Angir filkapasiteter

libcap

Inneholder bibliotekfunksjonene for å manipulere POSIX 1003.1e kapasiteter

libpsx

Inneholder funksjoner for å støtte POSIX semantikk for syscalls knyttet til pthread biblioteket

8.25. Shadow-4.11.1

Shadow pakken inneholder programmer for håndtering av passord på en sikker måte.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 49 MB

8.25.1. Installasjon av Shadow

Note

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.

Note

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

Note

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:

touch /usr/bin/passwd

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

8.25.2. Konfigurerer Shadow

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

8.25.3. Sette root passordet

Velg et passord for brukeren root og sett det ved å kjøre:

passwd root

8.25.4. Innhold i Shadow

Installerte programmer: chage, chfn, chgpasswd, chpasswd, chsh, expiry, faillog, getsubids, gpasswd, groupadd, groupdel, groupmems, groupmod, grpck, grpconv, grpunconv, lastlog, login, logoutd, newgidmap, newgrp, newuidmap, newusers, nologin, passwd, pwck, pwconv, pwunconv, sg (link to newgrp), su, useradd, userdel, usermod, vigr (link to vipw), og vipw
Installert mappe: /etc/default
Installerte biblioteker: libsubid.so

Korte beskrivelser

chage

Brukes til å endre maksimalt antall dager mellom obligatoriske passordendringer

chfn

Brukes til å endre en brukers fulle navn og annen informasjon

chgpasswd

Brukes til å oppdatere gruppepassord i skriptmodus

chpasswd

Brukes til å oppdatere brukerpassord i skriptmodus

chsh

Brukes til å endre en brukers standard påloggingsskall

expiry

Sjekker og håndhever gjeldende retningslinjer for passordutløp

faillog

Brukes til å undersøke loggen over påloggingsfeil, for å sette et maksimum antall feil før en konto blokkeres, eller for å tilbakestille antall feil

getsubids

Brukes til å liste de underordnede id-områdene for en bruker

gpasswd

Brukes til å legge til og slette medlemmer og administratorer til grupper

groupadd

Oppretter en gruppe med det gitte navnet

groupdel

Sletter gruppen med oppgitt navn

groupmems

Lar en bruker administrere sin egen gruppemedlemsliste uten krav om superbrukerprivilegier.

groupmod

Brukes til å endre den gitte gruppens navn eller GID

grpck

Verifiserer integriteten til gruppefilene /etc/group og /etc/gshadow

grpconv

Oppretter eller oppdaterer skyggegruppefilen fra den normale gruppefilen

grpunconv

Oppdaterer /etc/group fra /etc/gshadow og sletter deretter sistnevnte

lastlog

Rapporterer siste pålogging for alle brukere eller av en gitt bruker

login

Brukes av systemet for å la brukere logge på

logoutd

Er en nisse som brukes til å håndheve restriksjoner på påloggingstid og portene

newgidmap

Brukes til å angi gid-tilordning av et brukernavnområde

newgrp

Brukes til å endre gjeldende GID under en påloggingsøkt

newuidmap

Brukes til å angi uid-tilordning av et brukernavnområde

newusers

Brukes til å opprette eller oppdatere en hel serie med brukerkontoer

nologin

Viser en melding om at en konto ikke er tilgjengelig; den er designet til å brukes som standard skall for kontoer som er blitt deaktivert

passwd

Brukes til å endre passordet for en bruker- eller gruppekonto

pwck

Verifiserer integriteten til passordfilene /etc/passwd og /etc/shadow

pwconv

Oppretter eller oppdaterer skyggepassordfilen fra den normale passordfilen

pwunconv

Oppdaterer /etc/passwd fra /etc/shadow og sletter deretter sistnevnte

sg

Utfører en gitt kommando mens brukerens GID er satt til den gitte gruppen

su

Kjører et skall med erstatningsbruker- og gruppe-IDer

useradd

Oppretter en ny bruker med det gitte navnet, eller oppdaterer standard informasjon om ny bruker

userdel

Sletter den gitte brukerkontoen

usermod

Brukes til å endre den gitte brukerens påloggingsnavn, bruker identifikasjon (UID), skall, startgruppe, hjemmekatalog, etc.

vigr

Redigerer /etc/group eller /etc/gshadow filer

vipw

Redigerer /etc/passwd eller /etc/shadow filer

libsubid

bibliotek for å prosessere underordnede id-områder for brukere

8.26. GCC-11.2.0

GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.

Omtrentlig byggetid: 153 SBU (med testene)
Nødvendig diskplass: 4.3 GB

8.26.1. Installasjon av GCC

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

Important

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

8.26.2. Innhold i GCC

Installerte programmer: c++, cc (lenker til gcc), cpp, g++, gcc, gcc-ar, gcc-nm, gcc-ranlib, gcov, gcov-dump, gcov-tool, og lto-dump
Installerte biblioteker: libasan.{a,so}, libatomic.{a,so}, libcc1.so, libgcc.a, libgcc_eh.a, libgcc_s.so, libgcov.a, libgomp.{a,so}, libitm.{a,so}, liblsan.{a,so}, liblto_plugin.so, libquadmath.{a,so}, libssp.{a,so}, libssp_nonshared.a, libstdc++.{a,so}, libstdc++fs.a, libsupc++.a, libtsan.{a,so}, og libubsan.{a,so}
Installerte mapper: /usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc, og /usr/share/gcc-11.2.0

Korte beskrivelser

c++

C++ kompilatoren

cc

C kompilatoren

cpp

C-forprosessoren; den brukes av kompilatoren for å utvide #include, #define og lignende utsagn i kildefilene

g++

C++ kompilatoren

gcc

C kompilatoren

gcc-ar

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

gcc-nm

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

gcc-ranlib

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

gcov

Et dekningstestverktøy; den brukes til å analysere programmer å bestemme hvor optimaliseringer vil ha størst effekt

gcov-dump

Frakoblet gcda og gcno profildumpverktøy

gcov-tool

Frakoblet gcda profilbehandlingsverktøy

lto-dump

Verktøy for dumping av objektfiler produsert av GCC med LTO aktivert

libasan

Kjøretidsbiblioteket for adresserensing

libatomic

GCC atomic innebygde kjøretidsbibliotek

libcc1

C forbehandlingsbiblioteket

libgcc

Inneholder kjøretidsstøtte for gcc

libgcov

Dette biblioteket er koblet inn i et program når GCC blir instruert om å aktivere profilering

libgomp

GNU implementering av OpenMP API for multiplattform parallellprogrammering med delt minne i C/C++ og Fortran

libitm

GNU transaksjonsminnebiblioteket

liblsan

Leak Sanitizer kjøretidsbibliotek

liblto_plugin

GCC sitt LTO programtillegg som lar binutils behandle objektfiler produsert av GCC med LTO aktivert

libquadmath

GCC Quad Precision Math Library API

libssp

Inneholder rutiner som støtter GCCs stabelknusende beskyttelses funksjonalitet

libstdc++

Standard C++ biblioteket

libstdc++fs

ISO/IEC TS 18822:2015 filsystembiblioteky

libsupc++

Gir støttende rutiner for C++ programmeringsspråk

libtsan

Thread Sanitizer kjøretidsbibliotek

libubsan

Undefined Behavior Sanitizer kjøretidsbibliotek

8.27. Pkg-config-0.29.2

Pakken pkg-config inneholder et verktøy for å sende inkluderingsbanen og/eller bibliotekstier for å bygge verktøy under konfigurerings- og makefasene av pakkeinstallasjoner.

Omtrentlig byggetid: 0.3 SBU
Nødvendig diskplass: 29 MB

8.27.1. Installasjon av Pkg-config

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

8.27.2. Innhold i Pkg-config

Installert program: pkg-config
Installert mappe: /usr/share/doc/pkg-config-0.29.2

Korte beskrivelser

pkg-config

Returnerer metainformasjon for det angitte biblioteket eller pakken

8.28. Ncurses-6.3

Ncurses pakken inneholder biblioteker for terminaluavhengig håndtering av karakterskjermer.

Omtrentlig byggetid: 0.4 SBU
Nødvendig diskplass: 45 MB

8.28.1. Installasjon av Ncurses

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

Note

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

8.28.2. Innhold i Ncurses

Installerte programmer: captoinfo (lenker til tic), clear, infocmp, infotocap (lenker til tic), ncursesw6-config, reset (lenker til tset), tabs, tic, toe, tput, og tset
Installerte biblioteker: libcursesw.so (symbollink og skript som lenker til libncursesw.so), libformw.so, libmenuw.so, libncursesw.so, libpanelw.so, og deres non-wide karakters motstykker uten "w" i biblioteknavnene.
Installerte mapper: /usr/share/tabset, /usr/share/terminfo, og /usr/share/doc/ncurses-6.3

Korte beskrivelser

captoinfo

Konverterer en termcap beskrivelse til en terminfo beskrivelse

clear

Tømmer skjermen hvis mulig

infocmp

Sammenligner eller skriver ut terminfo beskrivelser

infotocap

Konverterer en terminfo beskrivelse til en termcap beskrivelse

ncursesw6-config

Gir konfigurasjonsinformasjon for ncurses

reset

Reinitialiserer en terminal til standardverdiene

tabs

Fjerner og setter tabulatorstopp på en terminal

tic

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.]

toe

Viser alle tilgjengelige terminaltyper, med primærnavn og beskrivelse for hver

tput

Gjør verdiene til terminalavhengige funksjoner tilgjengelig for skallet; den kan også brukes til å tilbakestille eller initialisere en terminal eller rapporter det lange navnet

tset

Kan brukes til å initialisere terminaler

libcursesw

En lenke til libncursesw

libncursesw

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

libformw

Inneholder funksjoner for å implementere skjemaer

libmenuw

Inneholder funksjoner for å implementere menyer

libpanelw

Inneholder funksjoner for å implementere paneler

8.29. Sed-4.8

Sed pakken inneholder en dataflyt (stream) redigerer.

Omtrentlig byggetid: 0.4 SBU
Nødvendig diskplass: 31 MB

8.29.1. Installation of Sed

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

8.29.2. Innhold i Sed

Installert program: sed
Installert mappe: /usr/share/doc/sed-4.8

Short Descriptions

sed

Filtrerer og transformerer tekstfiler i en enkelt omgang

8.30. Psmisc-23.4

Psmisc pakken inneholder programmer for å vise informasjon om kjørende prosesser.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 5.6 MB

8.30.1. Installasjon av Psmisc

Forbered Psmisc for kompilering:

./configure --prefix=/usr

Kompiler pakken:

make

Denne pakken kommer ikke med en testpakke.

Installer pakken:

make install

8.30.2. Innhold i Psmisc

Installerte programmer: fuser, killall, peekfd, prtstat, pslog, pstree, og pstree.x11 (lenker til pstree)

Korte beskrivelser

fuser

Rapporterer prosessIDene (PIDene) til prosesser som bruker de gitte filer eller filsystemer

killall

Dreper prosesser ved navn; den sender et signal til alle prosesser som kjører noen av de gitte kommandoene

peekfd

Se på filbeskrivelser for en prosess som kjører, gitt dens PID

prtstat

Skriver ut informasjon om en prosess

pslog

Rapporterer gjeldende loggbane for en prosess

pstree

Viser kjørende prosesser som et tre

pstree.x11

Samme som pstree, bortsett fra at den venter på bekreftelse før den avslutter

8.31. Gettext-0.21

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.

Omtrentlig byggetid: 2.7 SBU
Nødvendig diskplass: 233 MB

8.31.1. Installasjon av Gettext

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

8.31.2. Innhold i Gettext

Installerte programmer: autopoint, envsubst, gettext, gettext.sh, gettextize, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, ngettext, recode-sr-latin, og xgettext
Installerte biblioteker: libasprintf.so, libgettextlib.so, libgettextpo.so, libgettextsrc.so, libtextstyle.so, og preloadable_libintl.so
Installerte mapper: /usr/lib/gettext, /usr/share/doc/gettext-0.21, /usr/share/gettext, og /usr/share/gettext-0.19.8

Korte beskrivelser

autopoint

Kopierer standard Gettext infrastrukturfiler til en kildepakke

envsubst

Erstatter miljøvariabler i skallformatstrenger

gettext

Oversetter en melding på det opprinnelige språket til brukerens språk ved å slå opp oversettelsen i en meldingskatalog

gettext.sh

Fungerer først og fremst som et skallfunksjonsbibliotek for gettext

gettextize

Kopierer alle standard Gettext filer til den gitte mappens toppnivå til en pakke for å begynne å internasjonalisere den

msgattrib

Filtrerer meldingene i en oversettelsesmappe i henhold til deres attributter og manipulerer attributtene

msgcat

Sammenslår og slår sammen de gitte .po filene

msgcmp

Sammenligner to .po filer for å sjekke at begge inneholder samme sett med msgid strenger

msgcomm

Finner meldingene som er felles for de gitte .po filene

msgconv

Konverterer en oversettelseskatalog til en annet tegnkoding

msgen

Oppretter en engelsk oversettelseskatalog

msgexec

Bruker en kommando på alle oversettelser av en oversettelsesmappe

msgfilter

Bruker et filter på alle oversettelser av en oversettelsesmappe

msgfmt

Genererer en binær meldingskatalog fra en oversettelsesmappe

msggrep

Trekker ut alle meldinger fra en oversettelseskatalog som samsvarer med et gitt mønster eller tilhører noen gitte kildefiler

msginit

Oppretter en ny .po fil, initialisere metainformasjonen med verdier fra brukerens miljø

msgmerge

Kombinerer to rå oversettelser til én enkelt fil

msgunfmt

Dekompilerer en binær meldingskatalog til rå oversettelsestekst

msguniq

Forener dupliserte oversettelser i en oversettelsesmappe

ngettext

Viser oversettelser på morsmål av en tekstmelding hvis grammatisk form avhenger av et tall

recode-sr-latin

Omkoder serbisk tekst fra kyrillisk til latinsk skrift

xgettext

Trekker ut de oversettbare meldingslinjene fra den gitte kildefilen for å lage den første oversettelsesmalen

libasprintf

definerer autosprintf klassen, som gir C formaterte utdatarutiner som kan brukes i C++ programmer, for bruk med <string> strenger og <iostream> dataflyt

libgettextlib

et privat bibliotek som inneholder vanlige rutiner som brukes av ulike Gettext programmer; disse er ikke beregnet for generelt bruk

libgettextpo

Brukes til å skrive spesialiserte programmer som behandler .po filer; dette biblioteket brukes når standardapplikasjonene som ble levert med Gettext (som f.eks msgcomm, msgcmp, msgattrib, og msgen) ikke er tilstrekkelig

libgettextsrc

et privat bibliotek som inneholder vanlige rutiner som brukes av ulike Gettext programmer; disse er ikke beregnet for generelt bruk

libtextstyle

Tekststilbibliotek

preloadable_libintl

Et bibliotek, ment å brukes av LD_PRELOAD som assisterer libintl i å logge uoversatte meldinger

8.32. Bison-3.8.2

Bison pakken inneholder en parsergenerator.

Omtrentlig byggetid: 6.3 SBU
Nødvendig diskplass: 53 MB

8.32.1. Installasjon av Bison

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

8.32.2. Innholdet i Bison

Installerte programmer: bison og yacc
Installerte biblioteker: liby.a
Installert katalog: /usr/share/bison

Korte beskrivelser

bison

Genererer, fra en rekke regler, et program for å analysere struktur av tekstfiler; Bison er en erstatning for Yacc (Yet Another Compiler Compiler)

yacc

En innpakning for bison,ment for programmer som fortsatt kaller yacc i stedet for bison; den kaller bison med -y alternativet

liby

Yacc biblioteket som inneholder implementeringer av Yacc kompatibel yyerror og main funksjoner; dette biblioteket er normalt lite nyttig, men POSIX krever det

8.33. Grep-3.7

Grep pakken inneholder programmer for å søke gjennom innholdet i filer.

Omtrentlig byggetid: 0.9 SBU
Nødvendig diskplass: 36 MB

8.33.1. Installasjon av Grep

Forbered Grep for kompilering:

./configure --prefix=/usr

Kompiler pakken:

make

For å teste resultatene, utsted:

make check

Installer pakken:

make install

8.33.2. Innhold i Grep

Installerte programmer: egrep, fgrep, and grep

Korte beskrivelser

egrep

Skriver ut linjer som samsvarer med et utvidet regulært uttrykk

fgrep

Skriver ut linjer som samsvarer med en liste over faste strenger

grep

Skriver ut linjer som samsvarer med et grunnleggende regulært uttrykk

8.34. Bash-5.1.16

Bash pakken inneholder Bourne-Again Skallet (Bourne-Again SHell).

Omtrentlig byggetid: 1.5 SBU
Nødvendig diskplass: 50 MB

8.34.1. Installasjon av Bash

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

8.34.2. Innholdet i Bash

Installerte programmer: bash, bashbug, og sh (linker til bash)
Installert mappe: /usr/include/bash, /usr/lib/bash, og /usr/share/doc/bash-5.1.16

Korte beskrivelser

bash

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

bashbug

Et skallskript for å hjelpe brukeren med å skrive og sende standard formaterte feilrapporter vedrørende bash

sh

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å

8.35. Libtool-2.4.6

Libtool pakken inneholder GNU generiske bibliotekstøtteskript. Det omslutter kompleksiteten ved å bruke delte biblioteker i en konsistent, overførbart grensesnitt.

Omtrentlig byggetid: 1.5 SBU
Nødvendig diskplass: 43 MB

8.35.1. Installasjon av Libtool

Forbered Libtool for kompilering:

./configure --prefix=/usr

Kompiler pakken:

make

For å teste resultatene, utsted:

make check

Note

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

8.35.2. Innhold i Libtool

Installerte programmer: libtool og libtoolize
Installerte biblioteker: libltdl.so
Installerte mapper: /usr/include/libltdl og /usr/share/libtool

Korte beskrivelser

libtool

Tilbyr generaliserte støttetjenester for bibliotekbygging

libtoolize

Gir en standard måte å legge til libtool støtte til en pakke

libltdl

Skjuler de forskjellige vanskelighetene med dlopening biblioteker

8.36. GDBM-1.23

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.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 13 MB

8.36.1. Installasjon av GDBM

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

8.36.2. Innhold i GDBM

Installerte programmer: gdbm_dump, gdbm_load, og gdbmtool
Installerte biblioteker: libgdbm.so og libgdbm_compat.so

Korte beskrivelser

gdbm_dump

Dumper en GDBM database til en fil

gdbm_load

Gjenoppretter en GDBM database fra en dumpfil

gdbmtool

Tester og modifiserer en GDBM database

libgdbm

Inneholder funksjoner for å manipulere en hashet database

libgdbm_compat

Kompatibilitetsbibliotek som inneholder eldre DBM funksjoner

8.37. Gperf-3.1

Gperf genererer en perfekt hashfunksjon fra et nøkkelsett.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 6.0 MB

8.37.1. Installasjon av Gperf

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

8.37.2. Innhold i Gperf

Installert program: gperf
Installert mappe: /usr/share/doc/gperf-3.1

Korte beskrivelser

gperf

Genererer en perfekt hash fra et nøkkelsett

8.38. Expat-2.4.6

Expat pakken inneholder et dataflytorientert C bibliotek for å analysere XML.

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 12 MB

8.38.1. Installasjon av Expat

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

8.38.2. Innhold i Expat

Installert program: xmlwf
Installerte biblioteker: libexpat.so
Installert mappe: /usr/share/doc/expat-2.4.6

Korte beskrivelser

xmlwf

Er et ikke-validerende verktøy for å sjekke om XML dokumenter er godt utformet

libexpat

Inneholder API funksjoner for å analysere XML

8.39. Inetutils-2.2

Inetutils pakken inneholder programmer for grunnleggende nettverksbygging.

Omtrentlig byggetid: 0.3 SBU
Nødvendig diskplass: 30 MB

8.39.1. Installasjon av Inetutils

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

8.39.2. Innhold i Inetutils

Installerte programmer: dnsdomainname, ftp, ifconfig, hostname, ping, ping6, talk, telnet, tftp, og traceroute

Korte beskrivelser

dnsdomainname

Vis systemets DNS domenenavn

ftp

Er protokollprogrammet for filoverføringer

hostname

Rapporterer eller angir navnet på verten

ifconfig

Administrerer nettverksgrensesnitter

ping

Sender ekkoforespørselspakker og rapporterer hvor lenge svarene tar

ping6

En versjon av ping for IPv6 nettverk

talk

Brukes til å snakke med en annen bruker

telnet

Et grensesnitt til TELNET protokollen

tftp

Et trivielt filoverføringsprogram

traceroute

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

8.40. Less-590

Less pakken inneholder et tekstfilviser.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 4.2 MB

8.40.1. Installasjon av Less

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

8.40.2. Innhold av Less

Installerte programmer: less, lessecho, og lesskey

Korte beskrivelser

less

En filviser eller søker; den viser innholdet i det gitte fil, lar brukeren rulle, finne strenger og hoppe til merker

lessecho

Trengs for å utvide metakarakterer, som f.eks * og ?, i filnavn på Unix systemer

lesskey

Brukes til å spesifisere tastaturbindingene for less

8.41. Perl-5.34.0

Perl pakken inneholder den praktiske utvinnings og rapporterings språket (Practical Extraction and Report Language).

Omtrentlig byggetid: 9.3 SBU
Nødvendig diskplass: 226 MB

8.41.1. Installasjon av Perl

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

8.41.2. Innhold i Perl

Installerte programmer: corelist, cpan, enc2xs, encguess, h2ph, h2xs, instmodsh, json_pp, libnetcfg, perl, perl5.34.0 (hard link to perl), perlbug, perldoc, perlivp, perlthanks (hard link to perlbug), piconv, pl2pm, pod2html, pod2man, pod2text, pod2usage, podchecker, podselect, prove, ptar, ptardiff, ptargrep, shasum, splain, xsubpp, og zipdetails
Installerte biblioteker: Mange som ikke alle kan listes opp her
Installert mappe: /usr/lib/perl5

Korte beskrivelser

corelist

En kommandolinjegrensesnitt til Module::CoreList

cpan

Samhandler med Comprehensive Perl Archive Network (CPAN) fra kommandolinjen

enc2xs

Bygger en Perl utvidelse for Encode modulen fra begge Unicode karaktertilordninger eller Tcl kodingsfiler

encguess

Gjetter kodingstypen til en eller flere filer

h2ph

Konverterer .h C deklarasjons filer til .ph Perl deklarasjons filer

h2xs

Konverterer .h C deklarasjons filer til Perl utvidelse

instmodsh

Skallskript for å undersøke installerte Perl moduler, og kan lage en tarball fra en installert modul

json_pp

Konverterer data mellom visse inndata og utdata formater

libnetcfg

Kan brukes til å konfigurere libnet Perl modul

perl

Kombinerer noen av de beste egenskapene til C, sed, awk og sh til et singelt swiss-army språk

perl5.34.0

En hard lenke til perl

perlbug

Brukes til å generere feilrapporter om Perl, eller modulene som kommer med den, og sender dem

perldoc

Viser et stykke dokumentasjons i pod format som er innebygd i Perl installasjonstreet eller i et Perl skript

perlivp

Perl verifiseringsprosedyre for installasjonen; det kan brukes til bekrefte at Perl og dets biblioteker er installert riktig

perlthanks

Brukes til å generere takkemeldinger på E-post til Perl utviklere

piconv

En Perl versjon av tegnkodingskonverteren iconv

pl2pm

Et grovt verktøy for å konvertere Perl4 .pl filer til Perl5 .pm moduler

pod2html

Konverterer filer fra pod format til HTML format

pod2man

Konverterer pod data til formatert *roff inndata

pod2text

Konverterer pod data til formatert ASCII tekst

pod2usage

Skriver ut bruksmeldinger fra innebygde pod dokumenter i filer

podchecker

Kontrollerer syntaksen til dokumentasjonsfiler i podformat

podselect

Viser valgte deler av poddokumentasjonen

prove

Kommandolinjeverktøy for å kjøre tester mot Test::Harness moduler

ptar

Et tar likt program skrevet i Perl

ptardiff

Et Perl program som sammenligner et ekstrahert arkiv med et uekstrahert

ptargrep

Et Perl program som bruker mønstertilpasning på innholdet av filer i et tararkiv

shasum

Skriver ut eller kontrollerer SHA sjekksummer

splain

Brukes til å fremtvinge detaljert advarselsdiagnostikk i Perl

xsubpp

Konverterer Perl XS-kode til C-kode

zipdetails

Viser detaljer om den interne strukturen til en Zip-fil

8.42. XML::Parser-2.46

XML::Parser modulen er et Perl grensesnitt til James Clarks XML-parser, Expat.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 2.4 MB

8.42.1. Installasjon av XML::Parser

Forbered XML::Parser for kompilering:

perl Makefile.PL

Kompiler pakken:

make

For å teste resultatene, utsted:

make test

Installer pakken:

make install

8.42.2. Innhold i XML::Parser

Installert modul: Expat.so

Korte beskrivelser

Expat

gir Perl Expat grensesnittet

8.43. Intltool-0.51.0

Intltool er et internasjonaliseringsverktøy som brukes til å trekke ut oversettbare strenger fra kildefiler.

Omtrentlig byggetid: mindre enn 0.1 SBU
Nødvendig diskplass: 1.5 MB

8.43.1. Installasjon av Intltool

Rett først en advarsel som er forårsaket av perl-5.22 og senere:

sed -i 's:\\\${:\\\$\\{:' intltool-update.in

Note

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

8.43.2. Innhold i Intltool

Installerte programmer: intltool-extract, intltool-merge, intltool-prepare, intltool-update, og intltoolize
Installerte mapper: /usr/share/doc/intltool-0.51.0 og /usr/share/intltool

Korte beskrivelser

intltoolize

Forbereder en pakke for å bruke intltool

intltool-extract

Genererer deklarasjonsfiler som kan leses av gettext

intltool-merge

Slår sammen oversatte strenger til forskjellige filtyper

intltool-prepare

Oppdaterer pot filer og slår dem sammen med oversettelsesfiler

intltool-update

Oppdaterer po malfilene og slår dem sammen med oversettelsene

8.44. Autoconf-2.71

Autoconf pakken inneholder programmer for å produsere skallskript som automatisk kan konfigurere kildekoden.

Omtrentlig byggetid: mindre enn 0.1 SBU (omtrent 6.8 SBU med testene)
Nødvendig diskplass: 24 MB

8.44.1. Installasjon av Autoconf

Forbered Autoconf for kompilering:

./configure --prefix=/usr

Kompiler pakken:

make

For å teste resultatene, utsted:

make check

Note

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

8.44.2. Innhold i Autoconf

Installerte programmer: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate, og ifnames
Installert mappe: /usr/share/autoconf

Korte beskrivelser

autoconf

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

autoheader

Et verktøy for å lage malfiler av C #define uttrykk for configure å bruke

autom4te

En innpakning for M4 makroprosessoren

autoreconf

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

autoscan

Hjelper med å lage en configure.in fil for en programvarepakke; den undersøker kildefilene i et mappetreet, søker etter vanlige problemer med portabilitet, og oppretter en configure.scan fil som fungerer som en innledende configure.in fil for en pakke

autoupdate

Endrer en configure.in fil som fortsatt anroper autoconf makroer ved deres gamle navn for å bruke gjeldende makronavn

ifnames

Hjelper når det skrives configure.in filer for en programvarepakke; den skriver ut identifikatorene som pakken bruker i C forbehandler betingelser [Hvis en pakke allerede er satt for å ha en viss portabilitet, kan dette programmet hjelpe med å finne ut hva configure må sjekke etter. Den kan også fylle ut hull i en configure.in fil generert av autoscan.]

8.45. Automake-1.16.5

Automake pakken inneholder programmer for å generere Make filer for bruk med Autoconf.

Omtrentlig byggetid: mindre enn 0.1 SBU (omtrent 8.3 SBU med testene)
Nødvendig diskplass: 115 MB

8.45.1. Installasjon av Automake

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

8.45.2. Innholdet i Automake

Installerte programmer: aclocal, aclocal-1.16 (hardlinket til aclocal), automake, og automake-1.16 (hardlinket til automake)
Installerte mapper: /usr/share/aclocal-1.16, /usr/share/automake-1.16, og /usr/share/doc/automake-1.16.5

Korte beskrivelser

aclocal

Genererer aclocal.m4 filer basert på innholdet i configure.in filene

aclocal-1.16

En hard lenke til aclocal

automake

Et verktøy for automatisk generering av Makefile.in filer fra Makefile.am filer [For å lage alle Makefile.in filer for en pakke, kjør dette programmet i mappen på øverste nivå. Ved å skanne configure.in filen, finner den automatisk hver passende Makefile.am fil og genererer tilsvarende Makefile.in fil.]

automake-1.16

En hard lenke til automake

8.46. OpenSSL-3.0.1

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).

Omtrentlig byggetid: 5.4 SBU
Nødvendig diskplass: 474 MB

8.46.1. Installasjon av OpenSSL

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

Note

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.

8.46.2. Innhold i OpenSSL

Installerte programmer: c_rehash og openssl
Installerte biblioteker: libcrypto.so og libssl.so
Installerte mapper: /etc/ssl, /usr/include/openssl, /usr/lib/engines og /usr/share/doc/openssl-3.0.1

Korte beskrivelser

c_rehash

er et Perl skript som skanner alle filer i en katalog og legger til symbolske lenker til hashverdiene deres

openssl

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

libcrypto.so

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

libssl.so

implementerer protokollen Transport Layer Security (TLS v1). Det gir en rik API, dokumentasjon kan bli funnet ved å kjøre man 3 ssl

8.47. Kmod-29

Kmod pakken inneholder biblioteker og verktøy for lasting av kjerne moduler

Omtrentlig byggetid: 0.1 SBU
Nødvendig diskplass: 12 MB

8.47.1. Installasjon av Kmod

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

8.47.2. Innhold i Kmod

Installerte programmer: depmod (lenker til kmod), insmod (lenker til kmod), kmod, lsmod (lenker til kmod), modinfo (lenker til kmod), modprobe (lenker til kmod), og rmmod (lenker til kmod)
Installert bibliotek: libkmod.so

Korte beskrivelser

depmod

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

insmod

Installerer en lastbar modul i kjernen som kjører

kmod

Laster og laster ut kjernemoduler

lsmod

Viser innlastede moduler

modinfo

Undersøker en objektfil assosiert med en kjernemodul og viser all informasjon den kan hente

modprobe

Bruker en avhengighetsfil, opprettet av depmod, for automatisk å laste inn relevante moduler

rmmod

Laster ut moduler fra kjernen som kjører

libkmod

Dette biblioteket brukes av andre programmer til å laste inn og laste ut kjernemoduler

8.48. Libelf fra Elfutils-0.186

Libelf er et bibliotek for håndtering av ELF (kjørbare og linkbare formater) filer.

Omtrentlig byggetid: 0.9 SBU
Nødvendig diskplass: 116 MB

8.48.1. Installasjon av Libelf

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

8.48.2. Innhold i Libelf

Installert bibliotek: libelf.so (symlink) og libelf-0.186.so
Installert mappe: /usr/include/elfutils

Korte beskrivelser

libelf

Inneholder API funksjoner for å håndtere ELF objektfiler

8.49. Libffi-3.4.2

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.

Omtrentlig byggetid: 1.9 SBU
Nødvendig diskplass: 10 MB

8.49.1. Installasjon av Libffi

Note

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

8.49.2. Innhold i Libffi

Installert bibliotek: libffi.so

Korte beskrivelser

libffi

inneholder API funksjonene for fremmede funksjonsgrensesnitt

8.50. Python-3.10.2

Python 3 pakken inneholder Python utviklingsmiljøet. Den er nyttig for objektorientert programmering, skriving av skript, prototyping store programmer, eller utvikle hele applikasjoner.

Omtrentlig byggetid: