• Linux From Scratch 13.1 släppt – bygg ditt Linux-system från grunden

    Linux From Scratch 13.1 har släppts med en rejält uppdaterad grund, bland annat GCC 16.2, Binutils 2.47, Glibc 2.44 och Linuxkärnan 7.1.8. För den som verkligen vill förstå hur ett Linuxsystem byggs upp från grunden är LFS fortfarande ett av de mest lärorika projekten i Linuxvärlden.

    Att installera Linux brukar i dag vara ganska enkelt. Man laddar ner Ubuntu, Fedora, Linux Mint eller någon annan distribution, skriver den till ett USB-minne och följer installationsprogrammet.

    Men vad händer egentligen bakom kulisserna? Hur byggs ett Linux-system upp från de allra första komponenterna?

    Det är precis den frågan som Linux From Scratch, förkortat LFS, försöker besvara. Nu har projektet släppt Linux From Scratch 13.1, med en kraftigt uppdaterad verktygskedja, ny Linuxkärna och ett stort antal uppdaterade systemkomponenter.

    Linux – utan färdig distribution

    Linux From Scratch är egentligen inte en Linuxdistribution i traditionell mening.

    I stället är det en omfattande handbok som steg för steg beskriver hur man själv bygger ett komplett Linux-system från källkod.

    Man börjar alltså inte med ett färdigt Ubuntu- eller Debian-system som ska installeras. I stället kompilerar man själv de program och bibliotek som tillsammans bildar grunden för ett fungerande Linux-system.

    Det gör LFS till något av en praktisk utbildning i hur Linux fungerar.

    Under arbetets gång får man bland annat lära sig hur kompilatorn, standardbiblioteket, skalet, systemverktygen och Linuxkärnan hänger ihop.

    Stor uppdatering av verktygskedjan

    Den kanske viktigaste förändringen i Linux From Scratch 13.1 är uppdateringen av den så kallade toolchain, alltså den grundläggande verktygskedja som används för att bygga resten av systemet.

    Den består bland annat av:

    • GCC 16.2.0
    • GNU Binutils 2.47
    • Glibc 2.44

    GCC är GNU-projektets kompilatorsamling och används för att översätta exempelvis C- och C++-kod till körbara program.

    Binutils innehåller flera grundläggande verktyg som används vid kompilering och länkning av program, medan Glibc är GNU:s implementation av det standardbibliotek som stora delar av ett vanligt Linux-system använder.

    Tillsammans utgör dessa komponenter en central del av grunden för Linuxsystemet.

    När de uppdateras påverkar det därför i praktiken nästan allt som byggs senare i processen.

    Linux 7.1.8 används som kärna

    Även Linuxkärnan har fått en ordentlig uppdatering.

    Linux From Scratch 13.1 använder Linux 7.1.8.

    Kärnan är den del av operativsystemet som bland annat sköter kommunikationen mellan program och hårdvara. Den hanterar exempelvis minne, processer, lagringsenheter, nätverk och drivrutiner.

    I ett vanligt Linuxsystem märker användaren sällan kärnan direkt, men utan den fungerar ingenting annat.

    För den som bygger Linux From Scratch blir kärnans roll betydligt tydligare eftersom man själv måste konfigurera och bygga den.

    46 paket har uppdaterats eller lagts till

    Sedan den föregående stabila versionen har totalt 46 paket uppdaterats eller lagts till.

    Utvecklarna uppger också att mer än 200 ändringar har skickats in till LFS-boken sedan den förra stabila utgåvan.

    Det handlar inte bara om nya programversioner.

    Instruktioner, förklaringar och korrigeringar har också arbetats in i dokumentationen.

    Det är en viktig del av Linux From Scratch eftersom själva dokumentationen i praktiken är projektets produkt.

    Flera säkerhetsuppdateringar

    Version 13.1 innehåller även uppdateringar av ett antal paket där säkerhetsproblem har åtgärdats.

    Bland komponenterna finns:

    • Glibc
    • Coreutils
    • Expat
    • Perl
    • Python
    • systemd
    • XZ
    • Vim

    Det visar också varför nya LFS-versioner behövs trots att grundprinciperna bakom projektet förändras ganska långsamt.

    Ett modernt Linuxsystem består av mängder av komponenter som kontinuerligt behöver uppdateras på grund av nya funktioner, kompatibilitetsproblem och säkerhetsbrister.

    Vad lär man sig av Linux From Scratch?

    Den stora poängen med Linux From Scratch är egentligen inte att skapa den mest praktiska Linuxdistributionen för vardagsanvändning.

    Det finns betydligt enklare sätt att få en fungerande Linuxdator.

    Värdet ligger i stället i själva byggprocessen.

    När man följer LFS får man en betydligt djupare förståelse för exempelvis:

    • hur ett Linuxsystem startar,
    • hur program kompileras och länkas,
    • vilka bibliotek ett grundsystem behöver,
    • hur katalogstrukturen i Linux är uppbyggd,
    • hur användare och rättigheter fungerar,
    • hur kärnan byggs,
    • och hur systemets olika verktyg är beroende av varandra.

    Det gör projektet särskilt intressant för systemadministratörer, utvecklare, Linuxentusiaster och andra som vill förstå operativsystemet på en lägre nivå.

    Man bygger först ett tillfälligt system

    En av de mer intressanta delarna av Linux From Scratch är att man inte bara börjar kompilera program direkt till det slutliga systemet.

    Först byggs en tillfällig verktygskedja.

    Anledningen är att man vill separera det nya Linuxsystemet från den Linuxdistribution som används för att bygga det.

    När den tillfälliga miljön är färdig används den sedan för att bygga de slutliga komponenterna.

    Resultatet blir ett system som i så stor utsträckning som möjligt är byggt av sina egna verktyg och bibliotek.

    Det är också här Linux From Scratch blir betydligt mer avancerat än att bara kompilera några program från källkod.

    BLFS 13.1 kommer senare

    Den här gången släpps dock inte Beyond Linux From Scratch 13.1, BLFS, samtidigt som grundsystemet.

    BLFS är fortsättningen på Linux From Scratch.

    Medan LFS koncentrerar sig på att bygga ett grundläggande Linuxsystem beskriver BLFS hur man installerar mycket av den programvara som krävs för att göra systemet mer användbart i praktiken.

    Det kan exempelvis handla om nätverksprogram, grafiska bibliotek, skrivbordsmiljöer och vanliga användarprogram.

    Utvecklarna uppger dock att BLFS 13.1 är mycket nära färdigställande.

    Av de mer än 1 000 paket som finns med i BLFS har över 99 procent byggts och testats tillsammans med Linux From Scratch 13.1.

    En slutlig version väntas därför följa inom kort.

    Linux som byggsats

    Linux From Scratch kan beskrivas som en avancerad byggsats för den som vill förstå hur Linux faktiskt är konstruerat.

    För vanliga användare är det knappast ett alternativ till exempelvis Linux Mint, Ubuntu eller Fedora. Att bygga systemet kräver både tid, tålamod och en hel del tekniskt arbete.

    Men för den som vill gå från att bara använda Linux till att faktiskt förstå hur ett Linuxsystem byggs upp är LFS fortfarande ett av de mest intressanta projekten inom Linuxvärlden.

    Med Linux From Scratch 13.1 har byggsatsen nu fått en moderniserad grund med GCC 16.2, Binutils 2.47, Glibc 2.44 och Linuxkärnan 7.1.8.

    Och för den riktigt nyfikne återstår egentligen bara en fråga:

    Hur långt ner i Linux kan man gå innan man till slut måste bygga allting själv?

    https://linuxiac.com/linux-from-scratch-13-1-is-out-with-major-toolchain-updates/

    $ Linux From Scratch 13.1

    > Vad är LFS?
    Linux From Scratch är en handbok för den som vill bygga ett komplett Linux-system manuellt från källkod.

    > Version: 13.1

    > Linuxkärna: 7.1.8

    > GCC: 16.2.0

    > Binutils: 2.47

    > Glibc: 2.44

    > Uppdateringar: 46 paket har uppdaterats eller lagts till.

    > Utveckling: Över 200 ändringar har gjorts sedan föregående stabila version.

    > Säkerhet:
    Bland annat Glibc, Coreutils, Expat, Perl, Python, systemd, XZ och Vim har fått säkerhetsrelaterade uppdateringar.

    > BLFS 13.1:
    Beyond Linux From Scratch är ännu inte släppt, men över 99 procent av dess drygt 1 000 paket har byggts och testats mot LFS 13.1.

    root@linux:~# build-linux-from-scratch █

  • Rust-baserade uutils närmar sig full kompatibilitet med GNU Coreutils

    Rust-projektet uutils tar ännu ett stort steg mot att kunna ersätta GNU Coreutils. Med version 0.10 klarar projektet nu 93,48 procent av GNU testsvit och levererar samtidigt förbättringar inom säkerhet, prestanda, filhantering och stöd för fler plattformar.

    Coreutils är en samling grundläggande kommandoradsverktyg som finns i nästan alla Linuxsystem. Kommandon som ls, cp, mv, rm, cat, date och chmod används dagligen av både vanliga användare, systemadministratörer och automatiserade skript.

    Traditionellt kommer dessa program från GNU Coreutils och är huvudsakligen skrivna i programmeringsspråket C. Projektet uutils försöker återskapa samma verktyg i Rust – ett modernare programmeringsspråk med ett starkt fokus på minnessäkerhet och robust programvara.

    Med version 0.10 har projektet tagit ett stort steg närmare målet att fungera som en direkt ersättare för GNU Coreutils.

    Klarar 645 av 690 tester

    Enligt projektets senaste testresultat klarar uutils Coreutils nu 645 av de 690 testerna i GNU:s officiella testsvit. Det motsvarar en kompatibilitet på 93,48 procent.

    I version 0.9 låg resultatet på 90,58 procent. Antalet underkända tester har samtidigt minskat från 56 till 29.

    Att klara testerna är viktigt eftersom även små skillnader mellan två kommandon kan orsaka problem. Ett skript kan exempelvis förvänta sig en viss felkod, ett exakt formaterat felmeddelande eller att ett kommando reagerar på ett särskilt sätt när en fil saknas.

    Ju fler GNU-tester uutils klarar, desto större är möjligheten att befintliga Linuxprogram och skript fungerar utan ändringar.

    Många välkända kommandon har förbättrats

    Version 0.10 innehåller kompatibilitetsförbättringar för ett stort antal vanliga verktyg, däribland:

    date, du, head, tail, install, ls, nproc, numfmt, od, pr, stat, sum och truncate.

    Även felmeddelandena har blivit tydligare. När ett kommando misslyckas anges nu oftare både namnet på den berörda filen och det ursprungliga felet från operativsystemet.

    Det gör det lättare att förstå om problemet exempelvis beror på bristande behörighet, en saknad fil eller ett skrivskyddat filsystem.

    Ökad säkerhet vid filhantering

    En viktig del av utvecklingsarbetet handlar om att förhindra så kallade TOCTOU-problem, en förkortning av time-of-check to time-of-use.

    Problemet kan uppstå när ett program först kontrollerar en fil och därefter utför en åtgärd på den. Under den korta tiden mellan kontrollen och åtgärden kan filen eller sökvägen hinna ändras.

    En angripare skulle exempelvis kunna ersätta en vanlig fil med en symbolisk länk och därmed försöka få programmet att skriva till eller ändra fel fil.

    I version 0.10 har skyddet mot sådana situationer förbättrats i bland annat:

    touch, mkfifo, head, split och chcon.

    De rekursiva funktionerna i chmod och chown har också gjorts mer motståndskraftiga mot cirkulära symboliska länkar och försök att kringgå säkerhetsfunktionen --preserve-root.

    Den funktionen ska bland annat skydda användaren från katastrofala kommandon som av misstag försöker ändra eller radera hela rotfilsystemet.

    Säkrare kopiering och flyttning

    Kommandot cp följer inte längre en symbolisk länk om länken pekar på en underkatalog i kopieringens målområde. Detta minskar risken för att programmet kopierar filer till en oväntad plats.

    Även mv har fått ytterligare skydd när filer flyttas mellan olika filsystem eller när säkerhetskopior skapas.

    Kommandona mkdir, mkfifo och mknod kan dessutom tilldela SELinux-etiketter redan när ett objekt skapas. Tidigare kunde etiketten läggas till i ett separat steg, vilket skapade ett kort tidsfönster där objektet hade fel säkerhetsmärkning.

    Bättre hantering av ovanliga fel

    Utvecklarna har korrigerat flera problem som framför allt uppstår i extrema eller ovanliga situationer.

    Det gäller bland annat:

    • skrivfel vid utmatning till enheter som /dev/full
    • heltalsöverskridningar vid mycket stora argument
    • ogiltiga teckengränser i text med multibyte-kodning
    • onödigt stora minnesallokeringar
    • stacköverskridningar i kommandot expr

    Enheten /dev/full fungerar ungefär som en hårddisk som alltid är full. Den används ofta för att testa hur ett program reagerar när det inte längre går att skriva data.

    Parsern i expr har skrivits om för att arbeta iterativt i stället för rekursivt. Det minskar risken för att mycket djupt nästlade uttryck fyller programmets stack och orsakar en krasch.

    Nya funktioner i mv, install och rm

    Version 0.10 introducerar även flera nya funktioner.

    Kommandot:

    mv --exchange
    

    kan användas för att atomiskt byta plats på två sökvägar. Atomiskt innebär att bytet sker som en enda sammanhängande operation. Andra program ska därför inte kunna se ett tillstånd där bara halva bytet har genomförts.

    Installationsverktyget install har fått stöd för alternativet:

    --reflink
    

    På kompatibla filsystem kan detta skapa en så kallad copy-on-write-kopia. I stället för att omedelbart duplicera alla data kan originalet och kopian tillfälligt dela samma datablock. Nya block skapas först när någon av filerna ändras.

    Det kan göra kopieringen både snabbare och mer utrymmeseffektiv.

    Alternativet install -C kan nu också kombineras med --preserve-timestamps.

    Kommandot rm har fått alternativet:

    --one-file-system
    

    Det förhindrar en rekursiv radering från att fortsätta in i andra monterade filsystem. Funktionen kan vara användbar när exempelvis externa diskar, nätverkslagring eller särskilda systemkataloger är monterade under den katalog som ska tas bort.

    Kommandot cut har dessutom fått -O som en kortare variant av --output-delimiter.

    Snabbare cat, cp och tee

    Flera prestandaförbättringar ingår också i versionen.

    tee har fått möjlighet att använda en snabb kopieringsmetod med så kallad zero-copy. Det innebär att data i vissa situationer kan flyttas mellan olika delar av systemet utan att först kopieras fram och tillbaka genom programmets eget minne.

    Även cat har optimerats för högre datahastighet.

    Kopieringar med cp som inte använder reflink ska också gå snabbare. Förbättringarna gäller bland annat kopiering mellan olika lagringsenheter.

    Kontrollsummeverktygen kan dessutom använda OpenSSL som beräkningsmotor, vilket kan ge bättre prestanda på system där OpenSSL innehåller väloptimerade implementationer för processorn.

    Förbättrat stöd för Windows och WebAssembly

    uutils utvecklas inte enbart för traditionella Linuxsystem.

    Version 0.10 har fått stöd för målplattformen wasm32-wasip2, vilket gör det möjligt att kompilera verktygen för WebAssembly och köra dem i miljöer som stöder WASI.

    På Windows fungerar nu kommandot timeout, och tail -f samt tail -F kan följa filer som uppdateras löpande.

    Det kan exempelvis användas för att övervaka en loggfil medan ett program fortfarande skriver till den.

    Windowsversionen har även fått stöd för glesa kopior i cp. Glesa filer innehåller områden som logiskt består av nollor men som inte behöver ta upp motsvarande fysiskt lagringsutrymme.

    En korrigering har dessutom gjorts för kontrollsummor i samband med konvertering av Windows radslut, så kallade CRLF-radslut.

    Rust som alternativ till klassiska Unixverktyg

    Målet med uutils är inte att skapa helt nya kommandon, utan att återskapa beteendet hos välkända Unixverktyg med en modern kodbas.

    Rust kan förhindra flera vanliga programmeringsfel redan under kompileringen. Det gäller bland annat felaktig minneshantering, användning av frigjort minne och vissa typer av samtidighetsproblem.

    Det betyder däremot inte automatiskt att alla program skrivna i Rust är felfria. Logiska fel, kompatibilitetsproblem och säkerhetsbrister kan fortfarande förekomma.

    Det höga resultatet i GNU:s testsvit visar ändå att uutils börjar närma sig en nivå där projektet kan bli ett realistiskt alternativ i fler operativsystem och Linuxdistributioner.

    Med 93,48 procents godkända tester är full kompatibilitet ännu inte uppnådd. Men version 0.10 visar att avståndet till GNU Coreutils fortsätter att minska.

    https://uutils.org/coreutils

    > TEKNISK FAKTA: uutils Coreutils 0.10
    Projekt: uutils Coreutils
    Version: 0.10
    Programmeringsspråk: Rust
    Mål: Kompatibel ersättare för GNU Coreutils
    GNU-testsvit: 645 av 690 tester godkända
    Kompatibilitet: 93,48 %
    Föregående version: 90,58 %
    Underkända tester: 29
    Plattformar: Linux, Unix-liknande system, Windows och WebAssembly
    Nytt mål: wasm32-wasip2

    Några förbättrade verktyg:
    date, du, head, tail, install, ls, nproc, numfmt, od, pr, stat, sum och truncate

    Nya funktioner:
    mv –exchange
    install –reflink
    rm –one-file-system
    cut -O

    Fokus i version 0.10:
    Kompatibilitet, TOCTOU-säkerhet, symlink-skydd, förbättrad felhantering, högre prestanda och utökat plattformsstöd.

Etikett: Coreutils

  • Linux From Scratch 13.1 släppt – bygg ditt Linux-system från grunden

    Linux From Scratch 13.1 har släppts med en rejält uppdaterad grund, bland annat GCC 16.2, Binutils 2.47, Glibc 2.44 och Linuxkärnan 7.1.8. För den som verkligen vill förstå hur ett Linuxsystem byggs upp från grunden är LFS fortfarande ett av de mest lärorika projekten i Linuxvärlden. Att installera Linux brukar i dag vara ganska enkelt.…

  • Rust-baserade uutils närmar sig full kompatibilitet med GNU Coreutils

    Rust-projektet uutils tar ännu ett stort steg mot att kunna ersätta GNU Coreutils. Med version 0.10 klarar projektet nu 93,48 procent av GNU testsvit och levererar samtidigt förbättringar inom säkerhet, prestanda, filhantering och stöd för fler plattformar. Coreutils är en samling grundläggande kommandoradsverktyg som finns i nästan alla Linuxsystem. Kommandon som ls, cp, mv, rm,…