BLFS & X- window system: de beproeving.

Door Sjaaksken op vrijdag 23 mei 2014 15:36 - Reacties (9)
Categorieën: BLFS, XORG, Views: 2.841

Na het installeren van de belangrijkste BLF paketten, komt pas de echte beproeving: het installeren van een grafische omgeving. Enter: the X-windows system, het échte werk. Dat merk je al vanaf de eerste stap: het klaarzetten voor de installatie van de Xorg Protocol headers. Standaard wordt deze installatie in de folder /usr gezet, maar om correct te zijn pak je beter een subfolder (mijn idee was om /usr/X11 te gebruiken zoals dit voor veel distributies het geval is). De stappen die je dient te nemen om de installatie folder te veranderen zijn echter heel warrig geschreven. Zo moet je zelf een aantal keer deze installatiefolder configureren. Dit laat veel ruimte voor fouten. In mijn geval ben ik vier maal moeten herbeginnen omdat de Xorg protocol headers niet gevonden konden worden na installatie. Na een zorgvuldige controle van elke lijn in de voorbereiding van deze installatie, werden de protocol headers correct gevonden. Extra moeilijkheid in mijn geval was het feit dat ik in een chroot-omgeving compileer (en dus sommige environment variabelen handmatig moet instellen).

Eens de environment variabelen correct geconfigureerd raken, lukt het uiteindelijk om de x-org paketten te installeren. Zelfs de installatie van de beeld driver (intel in mijn geval) verliep vlekkeloos. Maar daarna botste ik echter weer op een probleem: bij de pagina x-org drivers wordt er verklaard dat er tenminste één werkende driver geïnstalleerd moet worden. Na het succesvol installeren van de intel-driver kon ik - dacht ik - aannemen dat dit voldoende was. Echter verder beneden op die pagina staan de belangrijke input-drivers. Indien je deze niet volledig installeert, kan je wel in 'X' booten maar werkt je input niet meer, en rest er niets anders dan herstarten. Weeral een stukje van de puzzel die je zelf moet leggen.

De xterm sessie ziet er wel heerlijk oldskool uit:
Xorg-2014-04-24 xterm

Nu is xterm alleen natuurlijk niet voldoende. Mijn eerstvolgende doel: KDE (gewoon omdat dit voor GNOME in het BLFS boek staat). Daarvoor zijn zo goed als alle X-libraries vereist. Verwacht je maar aan een hele resem paketten en weinig visueel resultaat. Maar als je op dit punt aangekomen bent, is dat natuurlijk niets nieuws. Hetzelfde geldt voor de KDE core paketten. Tegen dat je hier door geworsteld bent, los je compileer problemen op alsof het niets meer is. Een heel arsenaal aan zoekmiddelen geven altijd wel die ene oplossing voor een compileer probleem, waardoor je weer een paketje verder kan gaan. En op het einde van de tunnel: licht.
Gegarandeerd een glorieus moment, die eerste keer dat je kde kan opstarten.

kraaknieuw: KDE eerste start
KDE system monitor
KDE start menu


Een kraaknieuwe installatie, voelt een beetje aan alsof je een nieuw speeltje krijgt. Ik heb ervoor gekozen om steeds zoveel mogelijk functionaliteit in de paketten te compileren, dus met zoveel mogelijk 'optional' dependencies geïnstalleerd. Dat vergt extra tijd maar is natuurlijk wel (eindelijk) visueel merkbaar, daar de paketten gebruik kunnen maken van systeem notificaties en veel meer met elkaar integreren. Wat je ook kan doen is zo snel mogelijk de KDE core paketten installeren en achteraf de rest installeren, dan moet je natuurlijk nog best de core paketten eens achteraf hercompileren. KDE werkt lekker snel, neemt momenteel maar 170 mb geheugen in. Next: GNOME....

BLFS: the scenic route!

Door Sjaaksken op woensdag 7 mei 2014 16:36 - Reacties (6)
Categorie: BLFS, Views: 3.193

Na de initiële overwinning op LFS kon ik het succes proeven. BLFS werd het nieuwe doel, met als persoonlijke target om een volledig werkende graphische omgeving te compileren. Nu LFS geen geheimen meer heeft, kan dit niet moeilijk zijn toch?

Fout. BLFS is geen procedure zoals je die met LFS van begin tot eind stap voor stap volgt. Meer nog, buiten de rangschikking van de paketten per hoofdstuk (netwerk, general libs,.. ) en de vereiste 'dependencies' per pakket heb je bijna geen leidraad om aan een BLFS te beginnen. Toegegeven, je leert veel bij door het zelf uit te moeten zoeken en dat is deels ook de bedoeling van BLFS, maar de kans om fouten te maken, en vooral om vast te komen zitten, is enorm groot. Gelukkig wordt er momenteel wel werk gemaakt van een nieuwe wiki om de dependencies beter te rangschikken.

Buiten de dependencies is er natuurljik nog het probleem van het ingeven van de juiste commando's voor het configureren en compileren van paketten alsook het aanmaken van systeemwijde config bestanden. Overtypen is vragen om problemen, vreemd genoeg blijft het boek BLFS echt heel vaag over wat de beste methode is om deze code over te nemen van het boek. Ergens wordt er gewag gemaakt van een tekstbrowser te gebruiken (daar je nog geen gui omgeving hebt), maar hiervoor ontbreekt vooral een duidelijke 'how to' en meer nog, het configureren van een wifi verbinding wordt zo goed als volledig buiten beschouwing gelaten, zelfs een gewone lan verbinding via dhcp wordt niet concreet overlopen. Hier laat het boek toch al wel enkele grote steken vallen. Ikzelf heb na eindeloos code overtypen de stap gemaakt naar het werken in een chroot omgeving, net zoals met LFS het geval was. Na enig opzoekingswerk online bleek dit mogelijk te zijn, echter voor sommige paketten kom je daarmee in de problemen en dien je alsnog rechtstreeks in je (B)LFS systeem te booten (oa. voor de paketten die de random number generator /dev/urandom nodig hebben). Een beetje duidelijkheid hieromtrent zou welkom zijn in het begin van het boek, en de eerste stappen in BLFS zouden eigenlijk gericht moeten zijn om zo snel mogelijk een werkende internetverbinding en een tekstbrowser op te zetten.

Een ander euvel is dat het versie nummer van BLFS veranderde tijdens mijn build. Voor de laatste versie gebruikt men een generieke URL. Als je deze generieke URL opslaat kom je dus zonder het te weten op een andere, nieuwere versie van BLFS terecht. Door de zeer lange build-tijd van het systeem zou je toch verwachten dat dit vermeden zou worden door geen generieke url's te gebruiken maar effectief naar het versienummer te verwijzen. Door het installereren van nieuwere paketten, kan je later in de problemen komen door kleine verschillen in de nieuwere versies, waardoor je soms een andere versie van het pakket dient te downloaden en te compileren. Complexe materie dus, goed kijken of er geen nieuwe versie van BLFS uitgekomen is is dus de boodschap, ofwel altijd de link naar het expliciete versienummer van BLFS gebruiken.

Een goed idee tijdens het bouwen van BLFS is om een tabel aan te maken met de paketten die je al gebouwd hebt. Zonder een dergelijke lijst is het praktisch onmogelijk om aan de wirwar van paketten en dependencies uit te kunnen geraken. Ikzelf heb een rekenblad gemaakt met verschillende tabbladen, waar ik het onderscheid gemaakt heb tussen geïnstalleerde paketten, paketten die een 'unmet dependency' hebben (tijdelijk) en paketten die ik later nog eens dien te hercompileren, aangezien je het pakket zelf al in een vroeg stadium van je BLFS build nodig hebt, maar er veel recommended paketten gebruik van maken. Door te hercompileren vergroot je de bruikbaarheid van deze paketten. Dubbel werk, en het is niet verplicht maar aangezien je toch al zoveel moeten compileren hebt om aan een BLFS te geraken, kost dit echt niet veel moeite.

Elk bladzijde in het BLFS boek heeft dezelfde structuur: je hebt je pakket, de downloadlink en daaronder de dependencies: required, recommended en optional. Alle "Required" dependencies zijn natuurlijk verplicht om eerste te installeren, zoniet kom je in de problemen (meestal al tijdens de configuratie van de compilatie). "Recommended" betekent dus dat je deze ofwel best eerst installeert, ofwel beslist om later hetzelfde pakket nog eens te compileren. In sommige gevallen heb je best wel veel "Recommended" dependencies dus kan je beter later nog eens hercompileren.

Iets om goed in het oog te houden zijn de versie nummers, van sommige paketten worden er twee verschillende versies gecompileerd (gstreamer0.10 en gstreamer1.0, etc..) Soms trekken deze versienummers zo hard opeen dat je bij het configureren van een pakket, zelfs met lijst van geïnstalleerde paketten, je toch soms je hoofd breekt over het feit dat er een noodzakelijk pakket niet geïnstalleerd is. Het kost veel moeite om in te zien dat er dan een cijfertje verschil zit in het versienummer en dat er een tweede pakket bestaat dat nog geïnstalleerd dient te worden. Je grijze hersenmassa wordt trouwens wel steeds aan het werk gezet.

Wanneer kan je nu besluiten dat je BLFS af is? Voor sommigen is dat als alle paketten geïnstalleerd zijn, voor anderen betekent het dat je een draaiende gui omgeving zoals Gnome of KDE hebt. Je kan eigenlijk al spreken van een BLFS zodra je een minimale extra functionaliteit geïnstalleerd hebt op je bestaande LFS build. Een BLFS kan dus alles zijn, een firewall, een router, een NAS -systeem of alles tegelijk. In mijn geval ga ik voor een volledig draaiende desktop-omgeving. Meer daarover in een volgende post.

edit: kleine correcties

LFS 7.4: Succes!

Door Sjaaksken op vrijdag 18 april 2014 11:19 - Reacties (9)
Categorie: -, Views: 3.242

Enkele maanden geleden begon ik met het trage proces om een LFS build (linux from scratch) zelf te compileren. Na in het verleden reeds enkele mislukte pogingen ondernomen te hebben, is het mij ditmaal toch gelukt om deze build te vervolledigen.

Waarom je het eigenlijk zo moeilijk maken, als er toch zoveel linuxdistrubities zijn die veel meer tweaks en grafische pracht allemaal voorgeconfigureerd hebben, vraagt men mij meestal. Het antwoord is simpel: "omdat het kan" (en omdat ik het wil kunnen). Het leert je trouwens ook om de technologie die achter linux steekt, stapje voor stapje te beginnen begrijpen. De structuur van het systeem wordt er op deze manier echt ingeramd en de onmisbare tools tonen snel waarom ze zo onmisbaar zijn: indien je ergens in het proces één fout maakt, kan je meestal vanaf 'scratch' herbeginnen ofwel vanaf je laatste backup.

Toch heeft LFS ook veel voordelen: je hebt volledige controle over de software, en je kan op elk moment een backup nemen, waardoor je bv. verschillende versies van je systeem kan maken met elk een ander doel, zonder al te veel werk opnieuw te moeten doen. Je kan bv. een router/firewall maken en gebaseerd op dezelfde LFS build, een NAS systeem of een ftp server. Wie bv. een LFS systeem in een gevirtualiseerde omgeving bouwt, kan zo snel heel specifieke systemen maken, geoptimaliseerd en afgeslankt voor dat ene doel. Met de moderne distributies zoals ubuntu, die gebruiksvriendelijkheid en beheersbaarheid voorop plaatsen, is dat veel moeilijker. Hoe minder paketten te onderhouden zijn, hoe minder kans op kwetsbaarheden, desalnietemin vraagt het up-to-date houden van een LFS systeem wel meer handmatig werk dan een moderne distro met packagemanager.

Hoe begin je nu aan een LFS systeem? Eigenlijk door leentje-buur te spelen bij een al bestaand linux systeem (op een livecd of reeds geïnstalleerd). Je gebruikt de daar aanwezige paketten om zelf eerst een tijdelijk systeem te compileren. Dat tijdelijk systeem bevat eigenlijk de core-tools nodig om linux te kunnen compileren. Eens dit tijdelijk systeem alle nodige paketten bevat, mag je nog eens opnieuw beginnen met het compileren van deze zelfde paketten, maar ditmaal wel voor écht. Als je de lijst van paketten (dat zijn er nog wel wat) één voor één afgewerkt hebt, kan je beginnen aan het klapstuk: de kernel compileren. Spannend!

De kernel is echt dé kern (el) van je OS. Hierin zitten alle benodigde features om het systeem en de hardware correct te laten lopen. Met LFS dien je dit slechts éénmaal te compileren. Als je later een BLFS systeem bouwt (Beyond LFS), dan wordt een kernel compilatie echt routine, aangezien je voor veel specifieke hardware een optie moet activeren in de kernel en deze kernel dan gehercompileerd dient te worden. Maar daarover meer in een volgende blog. (zie BLFS).

Hetgeen volgt is pure ComputerLinuxRomantiek: het installeren van de bootloader én booten in je verse lean mean LFS machine. Als je alle stappen dusver doorlopen hebt is het installeren van een bootloader een makkie, waarna je de hele boel mag herstarten. Grub (de bootloader) komt te voorschijn en als alles goed gaat: BAM --> LFS.

LFS Kernel configuration

htop screenshot


En nu kan het echte werk beginnen!

edit:screenshots toegevoegd