HOWTO Use Portage Correctly

Uit Gentoo Linux Wiki

Ga naar: navigatie, zoeken

HOWTO Hoe Portage correct gebruiken


Inhoud

[bewerken] Inleiding

Er zijn een aantal belangrijke elementen die elke Linux distributie kenmerken. Een van de belangrijkste is de filosofie van het pakketbeheer dat een distributie in zich heeft. Zo kunnen we bijvoorbeeld de distributies, die gemaakt zijn rond RPM, Red Hat gebaseerd noemen of we kunnen stellen dat Ubuntu en Knoppix afgeleid zijn van Debian omdat ze beiden APT gebruiken. De pakket manager in het hart van Gentoo Linux is gekend als Portage.

Portage zet zichzelf op vele manieren apart van bijna alle andere pakketbeheerders. Maar het meest significante verschil is dat het eigenlijk helemaal geen pakketbeheerder is maar eerder wat bekend is als een meta-distributie machine. Wat dit betekent is omwille van de kracht, flexibiliteit en configureerbaarheid van Portage. In de plaats van eerder een gereedschap te zijn om softwarepakketten te installeren of te verwijderen (hoewel het deze taken met gemak kan doen) is het de bedoeling van Portage een complete, voor de gebruiker die het creëerde unieke Linux distributie op te bouwen. In deze zin is Gentoo Linux eigenlijk een meta-distributie. Het is geen statisch product maar eigenlijk een robuuste gereedschapskoffer voor diegenen die zelf een aangepast besturingssysteem willen opbouwen.

Het doel van deze HOWTO is om “de goede gebruiken” om op dagelijkse basis met Portage te werken aan te leren. Het is geen basis of introductie voor portage of emerge. Als je nieuw bent in Gentoo dan is het lezen van het hoofdstuk ter zake in het Gentoo handboekWorking with Gentoo de beste manier om portage en emerge te leren. In deze HOWTO gaan we dieper in op hoe Portage werkt en hoe we het beter kunnen doen werken.


[bewerken] Pakketten Emergen

Het emerge commando is de voornaamste manier voor interactie met Portage. Bijna alle uitvoerbare acties zijn beschikbaar dmv een combinatie van een aantal commandoregelopties. Hier zullen enkele van de nuttigste uitleggen. Consulteer de man page van emerge voor de volledige lijst.

  • emerge --ask (-a voor kort)
Toont een melding die exact weergeeft welke acties emerge zal doen en de gebruiker vragen om ze te bevestigen.
Dit is erg gelijkaardig aan de --pretend optie (-p), maar bespaart je de moeite om het commando twee maal in te voeren (een maal met en een maal zonder -p). --ask gebruik je bijna best altijd als je emerge uitvoert, dus maak er vanaf nu een gewoonte van om het toe te voegen. ;) voorbeeld :
root ~ # emerge -a patch

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] sys-devel/patch-2.5.9-r1

Do you want me to merge these packages? [Yes/No]
  • emerge --verbose (-v)
Toont de huidig beschikbare USE vlaggen en deze geselecteerd voor het gegeven pakket alsook de grootte van de bron en de totale grootte van de te downloaden data.
USE vlaggen tussen (haakjes) zijn niet beschikbaar voor jouw profiel. +plus en -minus zijn geactiveerde of gedeactiveerde vlaggen. Asterisks* duiden aan dat de vlag veranderd is sedert het pakket het laatst was ge-emerged.
Deze optie wordt best gebruikt bij elke emerge, en is enkel nuttig met --ask of --pretend. Een weinig bekend feit is dat deze ook de weergave bepaalt van die "GNU info directory index" meldingen op het einde van een emerge waar niemand zich wat van aantrekt. Voorbeeld :
 root ~ # emerge -pv gimp

 These are the packages that I would merge, in order:

 Calculating dependencies ...done!
 [ebuild   R   ] media-gfx/gimp-2.2.7-r1  -aalib (-altivec) -debug -doc -gimpprint -gtkhtml
 -hardened  +jpeg -lcms +mmx +mng +png +python -scanner -smp +sse +svg -tiff* -wmf 13,647 kB

 Total size of downloads: 13,647 kB
  • emerge --deep (-D)
Checkt de volledige afhankelijkheidsboom van een pakket eerder dan enkel de onmiddellijke afhankelijkheden.
Als het doel world is, checkt –deep de afhankelijkheidsbomen van de pakketten in het world bestand (meer hierover later). Deze optie kan recentere versies (updates) van pakketten vinden die anders niet door emerge worden gemeld.
  • emerge --tree (-t)
Toont de afhankelijkheidsboom voor het pakket/doel.
Dit is een extreme nuttige optie die dikwijls over het hoofd wordt gezien. Als je ooit hebt proberen uitvissen hoe een bepaald pakket binnengehaald werd of gewoon wilt zien wat van wat afhangt dan is dit de optie voor jou. ;)
 root ~ # emerge -atv asterisk

 These are the packages that I would merge, in reverse order:

 Calculating dependencies ...done!
 [ebuild  N    ] net-misc/asterisk-1.0.8  +alsa -bri -debug -doc +gtk -hardened +mmx -mysql
 -postgres -pri -resperl -speex -vmdbmysql -vmdbpostgres -zaptel 9,451 kB
 [ebuild  N    ]  dev-libs/newt-0.51.6  -gpm 152 kB
 [ebuild  N    ]   sys-libs/slang-1.4.9-r2  -cjk -unicode 616 kB
 [ebuild  N    ]  media-sound/sox-12.17.7-r1  +alsa -encode -mad +ogg 455 kB

 Total size of downloads: 10,675 kB

 Do you want me to merge these packages? [Yes/No]
Hier zien we dat asterisk afhangt van newt en sox, en dat newt afhangt van slang. Merk ook op dat de –tree optie de volgorde van oplijsten van de pakketten omkeert. Het eerste pakket om te emergen staat laatst ipv eerst in de lijst.

[bewerken] Onstabiele pakketten forceren

Er zijn meerdere manieren om een ebuild van ‘unstable’ naar ‘stable’ aan te passen (in werkelijkheid er voor zorgen dat portage zijn keyword als x86 behandeld in plaats van ~x86 bijvoorbeeld) Er werden veel slechte methodes verspreid om onstabiele software te installeren. Het volgende legt uit hoe onstabiele software ontmaskerd moet worden en ook hoe het niet moet ontmaskerd worden. Ontmaskeren betekent beschikbaar maken om met emerge te installeren.

[bewerken] Waarom geen ACCEPT_KEYWORDS gebruiken

Een courante (maar niet aanbevolen) benadering is ACCEPT_KEYWORDS="~x86" emerge foo. Dit is in het algemeen echter om vele redenen niet wat je wil. Ten eerste zal het onstabiele versies van alle afhankelijkheden emergen. Ten tweede, en vervelender vanuit het standpunt van systeemonderhoud, is deze wijziging “tijdelijk”. De volgende keer dat je emerge -u world uitvoert, zal portage de onstabiele versies willen “downgraden” naar de hoogste stabiele versie. Portage zal jouw wijzigingen ongedaan maken omdat je het opgedragen hebt om de onstabiele versie tijdelijk te emergen. Gebruik om dit te vermijden /etc/portage/package.keywords. Je kunt hulp om pakketten aan dit bestand toe te voegen in de portage manpage vinden.

  • Als je graag onstabiele/test-software gebruikt kan je ACCEPT_KEYWORDS="~x86" aan jou make.conf toevoegen.

[bewerken] Waarom geen emerge /pad/naar/ebuild

Een andere aanbeveling is emerge /pad/naar/foo.ebuild. Dit heeft een ander vervelend neveneffect, nl dat het werkt als --oneshot. Met andere woorden als dat pakket niet in jou /var/lib/portage/world bestand zit, zal portage het er ook niet instoppen. Dit pakket zal bijgevolg niet worden geüpgraded tenzij manueel geforceerd. emerge -u world zal het ontbreken.


[bewerken] Het gevreesde bericht "masked by: missing keyword" (gemaskeerd door : ontbrekend sleutelwoord)

Beoordelen door Google, is iets wat veel mensen al hebben gevraagd in verschillende forums en mailinglijsten. Dit foutbericht verschijnt typisch wanneer je een pakket tracht te emergen dat nooit getest werd op het platform dat je gebruikt. De enige manier om dit probleem te omzeilen is om Portage te vertellen om alle sleutelwoorden te negeren door ~* of * te gebruiken. Je gebruikt ACCEPT_KEYWORDS beter niet om dit te doen, omdat:

  • dit berichten over alle andere pakketten die incompatible kunnen zijn verbergt.
  • er een bug in emerge is dat aanleiding geeft in een slecht foutbericht.
  • er de redenen zijn die hogerop al warden aangehaald.

Gebruik in de plaats daarvan package.keywords. Om een pakket zonder sleutelwoord van sleutelwoord te voorzien gebruik je ofwel * ofwel ~*. Dit zijn twee speciale sleutelwoorden.

* betekent "past voor elk stabiel sleutelwoord"
~* betekent " past voor elk onstabiel sleutelwoord "

Als een ebuild die je gebruikt stabiel is op x86 maar niet op sparc (dwz niet van sleutelwoord voorzien voor sparc) en je bent op een sparc system dan kan je de ebuild “ontmaskeren” met een *, omdat er geen ~arch sleutelwoorden zijn die voor ~* passen.

Als je bijvoorbeeld huidig onbekend terrein wilt exploreren door het Xenpakket op een AMD64 systeem te testen dan is dit de manier om dit te doen:

File: /etc/portage/package.keywords
=app-emulation/xen-3.0.0_pre20051027        ~*
=sys-kernel/xen-sources-2.6.12.5            ~*

~* werkt in de meeste gevallen goed omdat ere en onstabiel sleutelwoord is voor een van de arches (architecturen), er zijn echter situaties waarbij het pakket stabiel is op een aantal arches, maar niet op de arch waar je op bezig bent.. Dat is het moment dat het * arch sleutelwoord van pas komt.


[bewerken] Pakketten onderhouden

Portage wilt af en toe een pakket degraderen naar een oudere versie. Gewoonlijk is er een goede reden voor en is het beter om het pakket te degraderen. Er zijn niettemin uitzonderingen; bijvoorbeeld linux-headers die naar 2.4.X willen geconverteerd worden wanneer je een 2.6.x kernel hebt (Nota: dit is niet meer het geval met 2005.0 en latere profielen). We voegen een regel toe in /etc/portage/package.keywords of we doen :

echo sys-kernel/linux-headers -* >> /etc/portage/package.keywords

Pakketten worden gedegradeerd wanneer een groot veiligheidsprobleem is dat nog niet in de nieuwere versies is opgelost of wanneer er andere redenen zijn zoals ernstige stabiliteitsproblemen. Ook kunnen er enkele devs (developers) per ongeluk iets te vroeg als stabiel markeren (ze zijn tenslotte ook mensen :-P )

Pakketten kunnen terug in het systeem willen komen als ze niet nodig zijn. Vroeger konden gebruikers van xorg-x11 opgemerkt hebben dat xfree terug in het systeem wilde komen. Om dit te herstellen moest er een regel toegevoegd worden in /etc/portage/package.mask :

File: /etc/portage/package.mask
x11-base/xfree

Pakketten kunnen ook soms hard gemaskeerd zijn (hard-masked). realone is daar een voorbeeld van. Het is hard-gemaskeerd omwille van het feit dat er een veiligheidslek is dat aanleiding kan geven tot een verstoord systeem. Als je realone om de een of andere reden wilt gebruiken dan is er het package.unmask bestand. Maak een /etc/portage/package.unmask en voer dit commando uit:

echo media-video/realone >> /etc/portage/package.unmask

Er is ook een package.use als je voor een pakket een bepaalde USE vlag niet wilt gebruiken. Maak een /etc/portage/package.use en voer een functie zoals deze in :

echo net-p2p/bittorrent -X >> /etc/portage/package.use

Dit zal portage vertellen geen X support in te sluiten bij het emergen van bittorrent.


Tip: Gebruik ACCEPT_KEYWORDS om alle afhankelijkheden te vinden

Maar als je de nieuwste versie van GNOME, KDE of andere ebuilds met veel afhankelijkheden wilt hebben dan kan het echt vervelend zijn om steeds maar “emerge –pv gnome” in te geven om de afhankelijkheden een per een te bekomen. Daarvoor kan deze regel gebruiken:

ACCEPT_KEYWORDS="~x86" emerge -pv gnome

Verkrijg alle afhankelijkheden en voeg ze aan jou /etc/portage/packages.keywords toe.

[bewerken] Het World bestand onderhouden

Eerst iets over wat het world bestand eigenlijk is. De bedoeling van het world bestand is om de lijst te registreren van de pakketten die de gebruiker op de normale manier wenst opgewaardeerd te hebben. Als je emerge gnome uitvoert zal portage het pakket (gnome-base/gnome) nemen dat overeenkomt met het world bestand: enkel gnome, niet de zijn afhankelijkheden. Als je jou world bestand kwijt bent zal Portage niet meer weten welke pakketten je wenst opgewaardeerd te hebben – dit is over het algemeen niet wenselijk. Je kunt proberen om het world bestand te herstellen en pakkettypes toe te voegen door:

regenworld

Er is ook de forum thread dat informatie geeft hoe een world bestand te herstellen als het met regenworld niet werkt.



[bewerken] Besluit

Om een volledig system op te waarderen voer je emerge --sync uit gevolgd door emerge --update --ask --verbose --tree --deep --newuse world (of emerge -uavtDN world) Een emerge --depclean gevolgd door een revdep-rebuild -- -p -v kan gepast zijn omdat pakketafhankelijkheden voortdurend wijzigen, maar is zeker niet vereist.

Er is een variëteit van "cruft scripts" en opkuisprogramma’s beschikbaar, maar die lijken allemaal zonder onderhoud gevallen te zijn of zijn op een dood spoor gelopen. Als je er goede kent geef ze dan aub in deze HOWTO door.

[bewerken] Zie ook

GaMMa's Original Thread More verbose guide on portage

Afkomstig van de Nederlandstalige Gentoo Wiki, het vrije Gentoo handboek. "http://nl.gentoo-wiki.com/HOWTO_Use_Portage_Correctly"
Persoonlijke instellingen