|
1.
Welkom bij Portage
Portage is waarschijnlijk Gentoo's meest opmerkelijke innovatie in
softwarebeheer. Met zijn hoge flexibiliteit en zijn enorme hoeveelheid aan
mogelijkheden wordt het vaak gezien als de beste softwarebeheertool die voor
Linux beschikbaar is.
Portage is geheel geschreven in Python
en Bash en is daardoor
heel zichtbaar voor gebruikers omdat het beide script talen zijn.
De meeste gebruikers zullen met Portage werken via de emerge tool. Dit
hoofdstuk is niet bedoeld om de beschikbare informatie uit de emerge handleiding
te herhalen. Voor een complete lijst met emerge's mogelijkheden, lees de
handleiding:
Codevoorbeeld 1.1: De emerge handleiding lezen |
$ man emerge
|
1.
De Portageboom
Ebuilds
Als we over pakketten praten, bedoelen we meestal softwaretitels die
beschikbaar zijn via de Portageboom. De Portageboom is een verzameling van
ebuilds, bestanden die alle informatie bevatten die Portage nodig heeft
(om te installeren, te zoeken, uit te lezen, ...). Deze ebuilds staan standaard
in /usr/portage.
Op het moment dat u Portage vraagt een taak met betrekking tot softwaretitels
uit te voeren, zal het de ebuilds op uw systeem als basis gebruiken. Daarom is
het belangrijk dat u regelmatig de ebuilds op uw systeem vernieuwt zodat
Portage weet over nieuwe software, beveiligingsupdates, etc.
De Portageboom updaten
De Portageboom wordt meestal bijgewerkt met rsync, een snel werkend
bestandsoverdrachtprogramma. Bijwerken is zeer simpel omdat het emerge
commando een front-end voor rsync biedt:
Codevoorbeeld 1.1: De Portageboom bijwerken |
# emerge --sync
|
Indien u door firewall-beperkingen geen rsync kunt gebruiken, kunt u nog
steeds de Portageboom updaten door onze dagelijks gegenereerde Portageboom
snapshots te gebruiken. De emerge-webrsync tool haalt deze automatisch
op en installeert deze meteen:
Codevoorbeeld 1.1: Emerge-webrsync draaien |
# emerge-webrsync
|
1.
Software beheren
Zoeken naar software
Om door de Portageboom naar softwaretitels te zoeken, kunt u de in
emerge ingebouwde zoekfunctie gebruiken. Standaard geeft emerge
--search de naam terug van de pakketten waarbij de titel (volledig of
deels) overeenkomt met de opgegeven zoekterm.
Om bijvoorbeeld te zoeken naar alle pakketten met "pdf" in hun naam:
Codevoorbeeld 1.1: Zoeken naar pdf-genaamde pakketten |
$ emerge --search pdf
|
Indien u ook door de beschrijvingen wil zoeken, kunt u --searchdesc
(of -S) gebruiken:
Codevoorbeeld 1.1: zoeken naar pdf-gerelateerde pakketten |
$ emerge --searchdesc pdf
|
Als we kijken naar de resultaten, ziet u dat er veel informatie wordt
weergegeven. De velden hebben een duidelijke naam dus daar gaan we niet
verder op in:
Codevoorbeeld 1.1: Voorbeeld van de emerge --search resultaten |
* net-print/cups-pdf
Latest version available: 1.5.2
Latest version installed: [ Not Installed ]
Size of downloaded files: 15 kB
Homepage: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
Description: Provides a virtual printer for CUPS to produce PDF files.
License: GPL-2
|
Software installeren
Wanneer u een softwaretitel gevonden hebt die u wilt installeren, kunt u dit
simpel doen met emerge: voeg gewoon de pakket naam toe. Om
bijvoorbeeld gnumeric in installeren:
Codevoorbeeld 1.1: gnumeric installeren |
# emerge gnumeric
|
Omdat veel applicaties op elkaar steunen (afhankelijkheden), is het heel goed
mogelijk dat enkele andere applicaties ook worden geïnstalleerd. Geen zorgen,
Portage kan deze afhankelijkheden prima aan. Als u wilt weten wat Portage
zou installeren als u vraagt een bepaald pakket te installeren,
voeg --pretend toe:
Codevoorbeeld 1.1: Doe alsof u gnumeric installeert |
# emerge --pretend gnumeric
|
Als u Portage vraagt een pakket te installeren, zal het, indien nodig, de
benodigde broncode van internet downloaden en standaard opslaan in
/usr/portage/distfiles. Hierna zal het pakket worden uitgepakt,
gecompileerd en geinstalleerd. Als u wilt dat Portage de broncode alleen
downloadt zonder ze te installeren, voeg de --fetchonly optie toe aan
het emerge commando:
Codevoorbeeld 1.1: Alleen de broncodes downloaden voor gnumeric |
# emerge --fetchonly gnumeric
|
De documentatie bij een geïnstalleerd programma vinden
Veel pakketten komen met eigen documentatie. Soms wordt de doc USE vlag
gebruikt om te bepalen of de documentatie wel of niet mee geïnstalleerd moet
worden. U kunt controleren of een pakket een doc USE vlag heeft door
emerge -vp <naam van het pakket> te gebruiken.
Codevoorbeeld 1.1: Controleren of er een doc USE vlag aanwezig is |
# emerge -vp alsa-lib
[ebuild N ] media-libs/alsa-lib-1.0.9_rc3 +doc -jack 674 kB
|
U kunt de doc USE vlag voor het hele systeem aanzetten in het
/etc/make.conf bestand, of dit per pakket aangeven in het
/etc/portage/package.use bestand. Je kunt ook de map,
/etc/portage/package.use, genaamd aanmaken en de zelfde lijst
maken in een bestand in deze map. Het (USE
vlaggen) hoofdstuk geeft meer uitleg over dit onderwerp.
Wanneer een pakket is geïnstalleerd, kunt u de documentatie meestal vinden in
een submap in /usr/share/doc, genaamd naar het pakket. U kunt ook
een lijst van alle geïnstalleerde bestanden opvragen met behulp van het
equery programma, dat onderdeel is van de app-portage/gentoolkit
pakket (Engelstalig).
Codevoorbeeld 1.1: De documentatie bij een pakket vinden |
# ls -l /usr/share/doc/alsa-lib-1.0.9_rc3
total 28
-rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz
-rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x 2 root root 8560 May 17 21:54 html
-rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.9_rc3
* Contents of media-libs/alsa-lib-1.0.9_rc3:
/usr
/usr/bin
/usr/bin/alsalisp
|
Software verwijderen
Als u een softwarepakket van uw systeem wilt verwijderen, gebruikt u emerge
--unmerge. Dit vertelt Portage dat het alle bestanden van dat pakket moet
verwijderen behalve de configuratie bestanden van die applicatie als u
ze gewijzigd heeft na de installatie. De configuratie bestanden laten staan heeft
het voordeel dat u direct verder kunt werken als u besluit het pakket opnieuw
te installeren.
Echter, een grote waarschuwing is van toepassing: Portage zal
niet controleren of het pakket dat u wilt verwijderen vereist is voor
een ander pakket. Het zal echter wel waarschuwen als u een belangrijk pakket
wilt verwijderen wat tot gevolg heeft dat het systeem niet meer kan draaien.
Codevoorbeeld 1.1: Gnumeric van het systeem verwijderen |
# emerge --unmerge gnumeric
|
Als u een pakket van het systeem verwijdert, blijven de afhankelijkheden van
dat pakket op uw systeem geïnstalleerd. Om Portage al deze afhankelijkheden te
laten vinden, kun u de emerge --depclean functie gebruiken. We
gaan het hier later over hebben.
Uw systeem updaten
Om uw systeem in vorm te houden (en niet te vergeten de meest recente
beveiligingsupdates te installeren), dient u het systeem regelmatig te updaten.
Omdat Portage alleen de ebuilds in de Portageboom controleert, dient u eerst
de Portageboom te updaten. Als dat klaar is, kunt u het systeem updaten met
emerge --update world. In het volgende voorbeeld zullen we ook de
--ask optie gebruiken, die portage een lijst met te updaten pakketten
laat tonen, met de vraag of u verder wilt gaan of niet:
Codevoorbeeld 1.1: Uw systeem updaten |
# emerge --update --ask world
|
Portage zal dan zoeken naar een nieuwere versie van de applicaties die u heeft
geïnstalleerd. Het zal echter alleen de versies controleren van de applicaties
die u specifiek hebt geïnstalleerd - niet de afhankelijkheden. Als u ieder
pakket op uw systeem wil updaten, voeg het --deep argument toe:
Codevoorbeeld 1.1: Uw gehele systeem updaten |
# emerge --update --deep world
|
Omdat beveiligingsupdates ook nogal eens voorkomen in pakketten die u niet
expliciet zelf hebt geïnstalleerd (maar dus door het installeren van andere
pakketten), is het aan te raden om af en toe dit commando te gebruiken.
Als u een van uw (USE vlaggen) recent heeft
gewijzigd wilt u misschien ook --newuse toevoegen. Portage controleert
dan of er nieuwe pakketten geïnstalleerd moeten worden of hercompilatie van
reeds geïnstalleerde pakketten nodig is:
Codevoorbeeld 1.1: Een complete update uitvoeren |
# emerge --update --deep --newuse world
|
Mini pakketten
Sommige pakketten in de Portageboom hebben niet echt inhoud maar worden
gebruikt om een verzameling van pakketten te installeren. Het kde pakket
zal bijvoorbeeld de hele KDE-omgeving op uw systeem installeren door
KDE-gerelateerde pakketten als afhankelijkheden op uw systeem te installeren.
Als u zo'n pakket wilt verwijderen, zal emerge --unmerge weinig zin
hebben omdat de afhankelijkheden op uw systeem blijven staan.
Portage heeft de functionaliteit om zogenaamde wezen (programma's die zijn
achtergebleven na het verwijderen van een ander programma) te verwijderen,
maar omdat de beschikbaarheid van software dynamisch afhankelijk is, dient u
eerst het gehele systeem te updaten, inclusief veranderingen die u heeft
doorgevoerd door uw USE vlaggen aan te passen. Hierna kunt u emerge
--depclean gebruiken om de wezen te verwijderen. Als
dit klaar is, dient u de applicaties te herbouwen die gelinkt waren
aan de nu verwijderde software titels.
Dit gebeurt met de drie volgende commando's:
Codevoorbeeld 1.1: Wezen verwijderen |
# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild
|
revdep-rebuild wordt geleverd door het gentoolkit pakket; vergeet
dit niet eerst te emergen:
Codevoorbeeld 1.1: Het gentoolkit pakket installeren |
# emerge gentoolkit
|
1.
Als Portage klaagt ...
Over SLOTs, virtuals, branches, architecturen en profielen
Zoals eerder gezegd, Portage is extreem krachtig en ondersteunt veel
mogelijkheden die andere softwarebeheer tools niet hebben. Om dit te begrijpen
zullen we enkele aspecten van Portage uitleggen zonder er te diep op in te gaan.
Met Portage kunnen verschillende versies van een enkel pakket gelijktijdig op
het systeem staan. Terwijl andere distributies de gewoonte hebben hun pakketten
te noemen naar de versie (zoals freetype en freetype2) gebruikt
Portage een technologie genaamd SLOTs. Een ebuild stelt een bepaald SLOT
voor zijn versie vast. Ebuilds met verschillende SLOTs kunnen gelijktijdig op
het systeem staan. Het freetype pakket heeft bijvoorbeeld ebuilds met
SLOT="1" en SLOT="2".
Er zijn ook pakketten die dezelfde functionaliteit bieden, maar op een andere
manier geïmplementeerd zijn. metalog, sysklogd en syslog-ng
zijn bijvoorbeeld allemaal systeemloggers. Applicaties die steunen op de
beschikbaarheid van "een systeemlogger" kunnen bijvoorbeeld niet steunen op
metalogd omdat andere systeemloggers net zo goed er op kunnen staan.
Portage staat daarom virtuals toe: iedere systeemlogger biedt
virtual/syslog zodat applicaties op virtual/syslog kunnen steunen.
Software in de Portageboom kan in verschillende branches zitten. Standaard
accepteert uw systeem alleen pakketten die Gentoo stabiel acht. De
meeste nieuwe softwaretitels zitten nadat ze worden toegevoegd in de testing
branch, wat betekent dat er meer getest moet worden voordat ze stabiel worden
bevonden. Hoewel u de ebuilds wel zult zien in de Portageboom, zal Portage ze
niet updaten voordat ze in de stable branch worden gezet.
Bepaalde software is slechts beschikbaar voor enkele architecturen. Of de
software werkt niet op andere architecturen of het moet verder getest worden of
de ontwikkelaar die de software in de Portageboom heeft gezet kan niet
controleren of de software op andere architecturen werkt.
Iedere Gentoo installatie volgt een bepaald profiel wat, onder andere,
de lijst met voor het systeem noodzakelijke software bevat.
Blokkerende pakketten
Codevoorbeeld 1.1: Portage waarschuwing over blokkerende pakketten (met --pretend) |
[blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)
|
Codevoorbeeld 1.1: Portage waarschuwing over blokkerende pakketten (zonder --pretend) |
!!! Error: the mail-mta/postfix package conflicts with another package.
!!! both can't be installed on the same system together.
!!! Please use 'emerge --pretend' to determine blockers.
|
Ebuilds bevatten specifieke velden die Portage vertellen over zijn
afhankelijkheden. Er zijn twee mogelijke afhankelijkheden: build
afhankelijkheden, bepaald in DEPEND en run-time (draai) afhankelijkheden,
bepaald in RDEPEND. Als een van deze afhankelijkheden uitdrukkelijk een
pakket of virtual als niet compatibel markeert, volgt er een blokkade.
Om een blokkade op te lossen, kunt u kiezen om het pakket niet te installeren of
het pakket wat problemen geeft te unmergen. In het gegeven voorbeeld kunt u
kiezen om postfix niet te installeren of ssmtp eerst te
verwijderen.
Het is ook mogelijk dat twee pakketten twee pakketten die u wilt installeren
elkaar blokkeren. In dit uitzonderlijke geval kunt het beste kijken of u wel
echt beide pakketten nodig heeft of ook met slechts één van de twee verder
kunt. Zo niet, vul dan een bugrapport in op
Gentoo's bugtracking systeem.
Verborgen pakketten
Codevoorbeeld 1.1: Portage waarschuwing over verborgen pakketten |
!!! all ebuilds that could satisfy "bootsplash" have been masked.
|
Codevoorbeeld 1.1: Portage waarschuwing over verborgen pakketten - reden |
!!! possible candidates are:
- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- media-video/ati-gatos-4.3.0 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)
|
Wanneer u een pakket wil installeren dat niet voor uw systeem beschikbaar is,
zult u een foutmelding zien. U kunt een andere applicatie die wel voor u
beschikbaar is installeren of wachten tot het pakket wel voor u
beschikbaar komt. Er is altijd een reden waarom een pakket verborgen is:
-
~arch keyword betekent dat de applicatie niet voldoende is getest om
in de stabiele branch gezet te worden. Wacht een paar dagen of weken en
probeer het opnieuw.
-
-arch keyword of -* keyword betekent dat de applicatie niet
werkt op uw architectuur. Als u gelooft dat het pakket prima werkt, vul
dan een bug in op onze bugzilla
website. Doe dit alstublieft wel in het Engels.
-
missing keyword betekent dat de applicatie nog niet op uw
architectuur is getest. Vraag het architectuur porting team om het te
testen of test het pakket voor ze en vertel uw bevindingen op onze bugzilla website. Ook dit graag in het
Engels.
-
package.mask betekent dat het pakket corrupt, onstabiel (of erger)
bevonden is en daarom met opzet verborgen is, gebruik dit dus niet.
-
profile betekent dat het pakket niet geschikt bevonden is voor uw
profiel. De applicatie kan uw systeem beschadigen als u het installeert of
het is gewoon niet compatibel met het door u gebruikte profiel.
Afwezige afhankelijkheden
Codevoorbeeld 1.1: Portage waarschuwing over afwezige afhankelijkheden |
emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".
!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.
|
De applicatie die u probeert te installeren steunt op een ander pakket dat niet
beschikbaar is voor uw systeem. Controleer bugzilla of het bekend is en zo niet, meldt
het dan alstublieft. Tenzij u branches combineert zou dit niet voor mogen komen
en is dus een bug.
Overkoepelende ebuild naam
Codevoorbeeld 1.1: Portage waarschuwing over overkoepelende ebuild namen |
!!! The short ebuild name "aterm" is ambiguous. Please specify
!!! one of the following fully-qualified ebuild names instead:
dev-libs/aterm
x11-terms/aterm
|
De applicatie die u probeert te installeren heeft een naam die overeenkomt met
andere pakketten. U dient de categorienaam ook op te geven. Portage zal u
meerdere opties geven waaruit u kunt kiezen.
Circulaire afhankelijkheden
Codevoorbeeld 1.1: Portage waarschuwing over Circulaire afhankelijkheden |
!!! Error: circular dependencies:
ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2
|
Twee (of meer) pakketten die u wilt installeren hangen af van elkaar en kunnen
daarom niet geïnstalleerd worden. Dit is zeer waarschijnlijk een fout in de
Portageboom. Resync na een tijdje en probeer het opnieuw. U kunt ook op bugzilla kijken of het een bekend probleem
is, zo niet, vertel het ons dan alstublieft. Ook nu weer graag in het Engels.
Fetch faalde
Codevoorbeeld 1.1: Portage waarschuwing over fetch failed |
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
!!! Some fetch errors were encountered. Please see above for details.
|
Portage was niet in staat om de broncode van de gegeven applicatie te
downloaden en zal (indien mogelijk) proberen door te gaan met andere applicaties
te installeren. Deze fout kan ontstaan doordat een mirror nog niet volledig
gesynchroniseerd is of omdat de ebuild naar de verkeerde locatie verwijst. De
server waar de broncodes staan kan ook om een of andere reden down zijn.
Probeer het na een uur opnieuw om te zien of het probleem nog steeds bestaat.
Systeem profiel beveiliging
Codevoorbeeld 1.1: Portage waarschuwing over profiel-beveiligde pakketten |
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.
|
U heeft gevraagd om een pakket wat deel uitmaakt van de hoofd pakketten
van uw systeem te verwijderen. Het staat in uw profiel als noodzakelijk en zou
daarom niet van uw systeem verwijderd moeten worden.
|