Gentoo Logo

Disclaimer : Dit document is niet juist en is niet meer onderhouden.


De KDE gesplitste ebuilds HOWTO

Inhoud:

1.  De gesplitste KDE Ebuilds

Wat zijn ze?

Tot januari 2005 waren de monolithische ebuilds de enige KDE ebuilds in Portage. Dat wil zeggen dat er slechts 15 KDE ebuilds waren (kdebase, kdenetwork, ...) en elke ebuild installeerde een hoop applicaties die in feite niet van elkaar afhankelijk waren. Dit was duidelijk geen optimale situatie en niet erg "Gentoo", maar werd lange tijd getolereerd.

De nieuwe gesplitste ebuilds (konqueror, kmail, ...) zetten de situatie recht door aparte ebuilds te voorzien voor alle KDE-applicaties. Dit gaf ons een totaal van 330 nieuwe ebulids in de categorie kde-base.

We voorzien nog steeds monolithische ebuilds voor KDE 3.5, en ze kunnen samen met de gesplitste gebruikt worden. De gesplitste ebuilds zijn nu wel de standaard en voor KDE 4.0 zullen er geen monolithische meer zijn.

Tenslotte moet er ook vermeld worden dat er gesplitste ebuilds zijn voor KOffice. Deze voorzien kword, kugar, enz. als gescheiden pakketten.

Hoe de gesplitste ebuilds installeren?

De laatste stabiele release op het moment van dit schrijven is 3.5.2. De laatste onstabiele (~arch) is 3.5.5. Gesplitste en monolithische ebuilds voor beide opleveringen zijn in Portage beschikbaar.

  • Om een bepaald pakket zoals kmail te installeren, gebruik je heel eenvoudig emerge kmail.
  • Om de basis van de KDE-omgeving die je toelaat je aan te melden in een minimale KDE-sessie, gebruik je emerge kdebase-startkde.
  • Om hetzelfde te hebben als één van de monolithische pakketten, bijvoorbeeld alle pakketten uit kdebase via gesplitste ebuilds, gebruik je emerge kdebase-meta (of kdepim-meta, ...). Als je absoluut alle beschikbare gesplitste KDE ebuilds wil, typ je emerge kde-meta.

Hoe upgraden van de monolithische naar de gesplitste ebuilds?

Als je nu KDE 3.3.x hebt, kan je emerge kde-meta gebruiken om de 3.5.x ebuilds te installeren, zonder je bestaande installatie te verstoren.

Als je nu de KDE 3.4.x of 3.5.x monolithische ebuilds geïnstalleerd hebt, moet je ze desinstalleren voor je de gesplitste kan installeren. Dit proces kan om de beurt voor elke monolithische ebuild gebeuren, je moet ze niet allemaal in één keer desinstalleren.

Als je twijfelt, denk er dan aan dat er blokkerende afhankelijkheden zitten tussen elke monolithische ebuild en de gesplitste ebuilds die eruit afgeleid zijn. Portage laat je niet toe een illegale status te creëren, dus elke installatie of desinstallatie die Portage toelaat, is goed.

Voordelen van de gesplitste ebuilds

Hier volgt een korte lijst van wat we winnen door de overschakeling naar gesplitste ebuilds:

  • De meeste KDE pakketten worden niet aangepast tussen twee kleine opleveringen van KDE. De update van 3.3.1 naar 3.3.2 bijvoorbeeld, wijzigde minder dan 100 pakketten van de 320. Gesplitste pakketten laten ons toe enkel nieuwe ebuilds te maken voor de pakketten die effectief gewijzigd zijn, wat (in dit voorbeeld) meer dan twee derden van de compilatietijd bespaart bij een upgrade.
  • Patches hebben gewoonlijk maar effect op een specifiek pakket. Met gesplitste ebuilds kunnen ze sneller getest, goedgekeurd en gecommit worden, en de ontwikkelaars hebben minder te doen. Bovendien zal de gebruiker minder tijd nodig hebben bij de upgrade. Dit is vooral belangrijk bij beveiligingsupdates.
  • Gebruikers van andere desktops en kleinere Vensterbeheerders kunnen nu de KDE-applicaties installeren die ze leuk vinden, zonder de grote overhead van de rest zoals kdebase of kdepim.
  • Gebruikers kunnen de pakketten die ze geïnstalleerd hebben fijnstellen. Redenen waarom je dit wil doen:
    • Je zit in met de compilatietijd. emerge kdebase kdepim kdenetwork duurt veel te lang wanneer je enkel konqueror, kmail en kopete nodig hebt. Bovendien, compilatietijd is geld.
    • Je zit in met schijfgebruik. Elke ongebruikt pakket is een aantal MB in de poriën van je schijfsectoren. Een schijf met meer vrije ruimte, ademt vrij; het is een snelle, blije schijf.
    • Je zit in met de veiligheid van je systeem. Alle geïnstalleerde software is een potentiële bron van gevaar. Er is geen excuus voor ongebruikte software die ergens rondslingert.
    • Je bewandelt braaf het Gentoo Pad (en) en je kan er (zoals wij) niet tegen dat pakketten gebundeld worden en aan de gebruiker opgelegd worden.
  • Tenslotte laten de gesplitste ebuilds ons toe meer flexibiliteit te bieden wat betreft USE-vlaggen bij compilatie.

Samenwerking van gesplitste en monolithische ebuilds

Gesplitste en monolithische ebuilds kunnen vrij gemengd worden. De enige beperking is dat een monolithische ebuild niet geïnstalleerd kan worden samen met een gesplitste die ervan is afgeleid. Er zijn blokkerende afhankelijkheden die dit afdwingen, je kan dus alles doen wat emerge je toelaat.

Normaal gezien is er geen enkele reden om zo'n gemengde configuratie te gebruiken. In feite zou je altijd de gesplitste ebuilds moeten gebruiken, behalve voor uitzonderlijke gevallen zoals heel traag compilerende systemen (mips).

De gesplitste ebuilds zijn ook de standaard ebuilds. Dit wil zeggen dat een andere ebuild die afhangt van een KDE-applicatie de gesplitste ebuild zal willen installeren. De overeenkomstige monolithische ebuild zal echter ook die afhankelijkheid verzorgen. Je kan dus manueel de monolithische ebuild installeren en daarna de ebuild die ervan afhangt.

2.  Performantieperikelen

Waarom gesplitste ebuilds traag zijn

Het werd al eerder gezegd dat gesplitste ebuilds veel meer tijd zouden nodig hebben om geïnstalleerd te worden dan de monolithische, door de overhead van het uitpakken en uitvoeren van ./configure van elk pakket. Een volledige emerge kde-meta zou 20 à 30% langer kunnen duren dan een klassieke emerge kde, onaanvaardbaar bij een reeds lang durende compilatie.

Verder voeren de gesplitste ebuilds op die moment altijd make -f admin/Makefile.cvs uit (dit wil zeggen een uitvoering van autoconf, automake, ... en verschillende KDE-gerelateerde scripts). Dit veroorzaakt een bijkomende vertraging van ongeveer dezelfde grootte als de configuratierun.

Tenslotte moet een gesplitste ebuild uitgepakt worden uit een grote tarball. Dit is trager dan het uitpakken van een aangepaste, kleine tarball. Het aanmaken van zulke kleine tarballs voor het op autotools gebaseerde systeem van KDE 3.x is echter moeilijk.

Het is de moeite om hier nogmaals te herhalen dat met gesplitste ebuilds de compilatietijd bij een KDE-upgrade sterk verkort kan worden door enkel de gewijzigde pakketten te upgraden. Het voordeel van zo'n enkele update overschaduwt meestal de overhead opgelopen bij de oorspronkelijke installatie.

Tenslotte is het installeren van alle KDE-pakketten enkel nodig indien je ze wil ontdekken of wanneer je een multi-gebruikersomgeving opzet. De meeste mensen gebruiken echter slechts een fractie van de meer dan 300 beschikbare KDE-pakketten. Iedereen die zich iets van de compilatietijd aantrekt, kan meer tijd winnen door het selectief installeren van de nodige pakketten dan ze tijd zouden verliezen door de bijkomende overhead.

Hoe gesplitste ebuilds sneller worden gemaakt

De meeste of zelf alle performantieperikelen van de gesplitste ebuilds hangen samen met autotools met name autoconf, automake en andere hulpmiddelen die het ./configure;make;make install bouwsysteem van KDE 3.x beheren.

KDE 4 zal (voor zover we op dit moment weten) een volledig nieuw bouwsysteem bevatten, dat onder andere de tijd die het oude bouwsysteem nodig heeft met make -f admin/Makefile.common; ./configure, sterk zal verkorten. Hopelijk zal het daarbij ook gemakkelijker zijn om een kleine tarball voor elke ebuild te voorzien door de kost te verlagen die het genereren van de bijhorende configuratiescripts meebrengt.

Eerder al is er overwogen om confcache te gebruiken om de kost van het herhaaldelijk uitvoeren van door autoconf gegenereerde configuratiescripts te verlagen. Confcache is een manier om de resultaten van de configuratietests op te slaan. Er is echter nog confcache-implementatie in de stabiele (2.1) Portage-boom. Zelfs indien die in de toekomst wordt toegevoegd, zou het te laat kunnen zijn om het in de KDE ebuilds te gebruiken; we zouden kunnen wachten op KDE 4.

3.  Gesplitste ebuilds - veel gestelde vragen (FAQ)

Waarom missen sommige pakketten de nieuwe ebuildversies?

Zoals hierboven uitgelegd worden niet alle programma's aangepast bij kleine KDE opleveringen, en dus krijgen ze niet allemaal nieuwe ebuild versies. Bijvoorbeeld, libkdenetwork was niet aangepast in 3.5.0_beta2 dus de nieuwste ebuild beschikbaar voor die oplevering was 3.5_beta1.

Dit wordt enkel gedaan om de compilatietijd tijdens een upgrade te verminderen. Als we een libkdenetwork-3.5.0_beta2 ebuild hadden gemaakt, zou het exact dezelfde bestanden als de 3.5_beta1 ebuild hebben geïnstalleerd. De verschillende afhankelijkheden worden geupdate om correct te werken. Dit wil zeggen dat geen enkele ebuild van libkdenetwork-3.5.0_beta2 zal afhangen, want die bestaat niet.

Is dit nog niet mogelijk met DO_NOT_COMPILE?

DO_NOT_COMPILE is een omgevingsvariabele die intern in het KDE bouwsysteem wordt gebruikt. Het laat toe selectie submappen bij compilatie uit te sluiten. Sommige mensen gebruikten het om subsets van monolithische KDE ebuilds te compileren. Het uitvoeren van DO_NOT_COMPILE=konqueror emerge kdebase zou dus kdebase installeren zonder het programma konqueror.

DO_NOT_COMPILE was echter nooit bedoeld als interface voor de automatische bouw via een pakketbeheerder. Het werkt niet, het kan je systeem stuk maken en het werd nooit ondersteund. We vragen iedereen om dit niet te gebruiken.

Hier volgt een onvolledige lijst van problemen met DO_NOT_COMPILE:

  • Het maakt de afhankelijkheidscontroles van Portage volledig stuk. Portage weet niets over DO_NOT_COMPILE en denk dat het hele monolithische pakket geïnstalleerd is en voldoet voor de afhankelijkheden van andere pakketten. Dit kan ervoor zorgen dat andere pakketten niet geïnstalleerd of niet uitgevoerd kunnen worden.
  • Het dwingt de gebruiker om de namen en betekenissen van alle verschillende bestaande submappen van de KDE-modules te kennen. Weinig of geen gebruikers kennen deze, tenzij de KDE-ontwikkelaars, dus ze kunnen DO_NOT_COMPILE niet gepast gebruikten.
  • De submappen van de KDE-modules kunnen onderling afhankelijkheden hebben, een bepaalde bouwvolgorde eisen of willen een bepaalde map aanwezig hebben, ook al moet ze niet geïnstalleerd worden, enzovoort. We stoppen heel veel werk in de gesplitste ebuilds om ze correct te doen werken. DO_NOT_COMPILE is geen goed hulpmiddel om dezelfde resultaten te krijgen, zelfs als de gebruiker genoeg kennis bezit. Het enige dat je ermee kan doen is enkele programma's uit te sluiten bij het compileren. Het is praktisch onmogelijk om het te gebruiken om slechts enkele programma's uit modules als kdebase of kdepim te installeren.
  • Als ik gisteren kmail installeerde en ik wil vandaag korn erbij, zal ik bij gebruik van DO_NOT_COMPILE kmail opnieuw compileren. Op deze manier is DO_NOT_COMPILE altijd trager dan gesplitste ebuilds.
  • DO_NOT_COMPILE kan niet gebruikt worden om geprecompileerde pakketten (zoals GRP) te maken die één enkel KDE-programma bevatten.

Wordt er geen te zware druk gezet op de Gentoo KDE beheerders?

Verrassend genoeg wordt deze vraag dikwijls gesteld. Ik ben blij dat de gebruikers zo bezorgd zijn over de beheerders. Laat dit het moment zijn waarop ik jullie kan verzekeren dat we uit vrije wil voor de gesplitste ebuilds hebben gekozen en dat we geloven dat deze kunnen blijven onderhouden. Bovendien is er geen enkele kans om ons nog om te praten... :-)

Voor de volledigheid wil ik ook vermelden dat de beheerders van andere architecturen geklaagd hebben over de bijkomende werklast bij het testen van zoveel verschillende ebuilds. We werken eraan dit probleem op te lossen en dit is de belangrijkste reden waarom monolithische ebuilds nog beschikbaar zijn voor KDE 3.5.

Gaan de oude monolithische ebuilds verwijderd worden?

We zijn dit in de toekomst van plan. Er zullen echter monolithische en gesplitste ebuilds zijn voor alle KDE 3.x opleveringen.

Als je monolithische ebuilds verkiest boven gesplitste, vertel ons dan alsjeblief waarom.

Er zijn teveel ebuilds! Hoe vind ik diegene die ik nodig heb?

Allereerst als je pakket kwam met kdebase, kan je nog steeds emerge kdebase-meta gebruiken, met dezelfde resultaten als de installatie van de monolithische kdebase. Er is dus niet op achteruitgegaan sinds de gesplitste ebuilds.

Natuurlijk gelden ook alle gebruikelijke manieren om een pakket te vinden. Hoe zou je een ebuild vinden als het een Gnome-programma was? Je moet minstens de naam kennen van het programma dat je zoekt.

De situatie zou misschien verbeterd kunnen worden door wat meer -meta ebuilds te voorzien. Deze bevatten slechts een lijst van afhankelijkheden, dus kosten ons niets. Dit is nog niet beslist. Het zou interessant zijn om eerst de Portage sets functionaliteit te hebben, voor we dit uitgebreid beginnen doen.

Hoe kan ik alle ebuilds die afgeleid zijn van een bepaald pakket uitlijsten of desinstalleren?

Het doel is hier om alle gesplitste ebuilds uit te lijsten die afgeleid zijn van bijvoorbeeld de kdebase monolithische ebuild. Een geschike implementatie (zoals GLEP 21) zou dit triviaal maken. Vandaag moet je je echter vertrouwd maken met de details van KDE's eclassimplementatie. Als je dus één van deze benaderingen gebruikt in een script dat niet privé is, laat het ons weten.

De kde-functions.eclass definieert functies genaamd get-parent-package() en get-child-packages() die de vertaling voor jou doen. Deze twee functies zijn de correcte manier om deze taak voor een ebuild te doen in een extern bashscript. Hier is een voorbeeld:

Codevoorbeeld 3.1: Voorbeeld van gebruik van de kde-functies

$ function die() { echo $@; } # om fouten te rapporteren
$ source /usr/portage/eclass/kde-functions.eclass
$ get-parent-package konqueror # zal niet werken, je moet de volledige naam geven
Package konqueror not found in KDE_DERIVATION_MAP, please report bug # fout getoond
$ get-parent-package kde-base/konqueror # volledige pakketnaam
kde-base/kdebase # resultaat getoond
$ get-child-packages kde-base/kdebase
 # (lange lijst van pakketten wordt hier getoond)

Als je script niet in bash is, kan je met grep de (meerlijnige) definitie van de variabele KDE_DERIVATION_MAP die hierboven gebruikt wordt, uit kde-functions.eclass halen. Deze variabele bevat een door witruimte gescheiden lijst van woorden. Elk paar van twee opeenvolgende woorden mappen een ouderpakket op een kindpakket nl. een gesplitste ebuild.



Print

Upgedate op 28 september 2006

De originele versie van dit document wordt niet meer onderhouden

Korte inhoud: De "gesplitste ebuilds" zijn in portage geïntroduceerd met de komst van KDE 3.4. Deze pagina documenteert de redenen acher deze overgang, de nieuwe mogelijkheden en hoe je kan upgraden van de oude "monolithische" ebuilds.

Dan Armak
Auteur

Gregorio Guidi
Redacteur

Frank Goubert
Vertaler

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.