Debian

Afhankelijkheden van Debian-pakketten

Afhankelijkheden van Debian-pakketten
Voor Linux-distributies zoals Debian GNU/Linux zijn er meer dan 60.000 verschillende softwarepakketten. Ze hebben allemaal een specifieke rol. In dit artikel leggen we uit hoe het pakketbeheer dit enorme aantal softwarepakketten betrouwbaar beheert tijdens een installatie, een update of een verwijdering om uw systeem werkend en volledig stabiel te houden.

Voor Debian GNU/Linux verwijst dit naar de tools apt, apt-get, aptitude, apt-cache, apt-depends, apt-rdepends, dpkg-deb en apt-mark.

Beschikbaarheid van softwarepakketten

Zoals hierboven al gezegd, bestaat een Linux-distributie uit tonnen verschillende softwarepakketten. Vanaf vandaag is software vrij complex, en daarom is het gebruikelijk om software in meerdere afzonderlijke pakketten te verdelen. Deze pakketten kunnen worden gecategoriseerd op functionaliteit of op rol, zoals binaire pakketten, bibliotheken, documentatie, gebruiksvoorbeelden evenals taalspecifieke collecties en bieden een geselecteerd deel van de software, alleen. Er is geen vaste regel voor, en de verdeling wordt gemaakt door ofwel het ontwikkelteam van een tool, of de pakketbeheerder die zorgt voor het softwarepakket voor je Linux-distributie. Gebruikmakend van aptitude, toont Figuur 1 de pakketten die de vertalingen voor de verschillende talen voor de webbrowser Mozilla Firefox bevatten.

Figuur 1: aptitude-firefox.png

Deze manier van werken maakt het mogelijk dat elk pakket onderhouden kan worden door een andere ontwikkelaar of als een heel team. Bovendien kunnen door de opdeling in losse componenten ook andere softwarepakketten er voor hun eigen doeleinden gebruik van maken. Een vereiste functionaliteit kan worden toegepast en hoeft niet opnieuw te worden uitgevonden.

Pakketorganisatie:

De hulpprogramma's voor pakketbeheer op de Debian GNU/Linux-distributie zorgen er voortdurend voor dat volledig wordt voldaan aan de afhankelijkheden van de geïnstalleerde pakketten. Dit is met name het geval als een softwarepakket bedoeld is om op of van uw systeem te worden geïnstalleerd, bijgewerkt of verwijderd. Ontbrekende pakketten worden aan het systeem toegevoegd of geïnstalleerde pakketten worden van het systeem verwijderd voor het geval ze niet langer nodig zijn. Figuur 2 demonstreert dit voor het verwijderen van het pakket 'mc-data' met behulp van 'apt-get'. Het pakket 'mc-data' raadt aan om ook het pakket 'mc' automatisch te verwijderen, omdat het geen zin meer heeft om het zonder 'mc-data' te installeren.

Figuur 2: apt-get-remove-mc.png

Pakketmarkeringen en vlaggen

Tijdens hun werk respecteren de pakketbeheertools de pakketvlaggen en -markeringen die zijn ingesteld. Ze worden ofwel automatisch ingesteld, ofwel handmatig ingesteld door de systeembeheerder. Vooral dit gedrag verwijst naar de vlag 'essentieel pakket' die is ingesteld voor pakketten die niet mogen worden verwijderd. Voordat u dat doet, wordt een duidelijke waarschuwing gegeven (zie afbeelding 3).

Afbeelding 3: apt-get-remove.png

Ook worden de drie markeringen 'automatic', 'manual' en 'hold' in aanmerking genomen. Ze markeren een pakket als automatisch geïnstalleerd, handmatig geïnstalleerd of mag niet worden bijgewerkt (houd de huidige versie vast). Een softwarepakket is ofwel gemarkeerd als 'automatisch' of 'handmatig', maar niet beide.

Het commando 'apt-mark' behandelt onder andere de markeringen en vlaggen met behulp van de volgende subcommando's:

Voer deze opdracht uit om alle handmatig geïnstalleerde pakketten weer te geven:

$ apt-mark showmanual
abiword
abs-gids
ack-grep
acl
acpi

$

Gebruik het subcommando 'hold' om een ​​pakketversie vast te houden. Onderstaand voorbeeld laat dit zien voor het pakket 'mc'.

# apt-mark hold mc
mc in de wacht gezet
#

Het subcommando 'showhold' geeft de pakketten weer die in de wacht staan ​​(in ons geval is het alleen het pakket 'mc'):

# apt-mark showhold
mc
#

Met behulp van een alternatieve methode genaamd 'apt pinning' worden pakketten geclassificeerd op basis van prioriteiten. Apt past ze toe om te beslissen hoe om te gaan met dit softwarepakket en de versies die beschikbaar zijn in de softwarerepository.

Pakketbeschrijving:

Met behulp van een alternatieve methode genaamd 'apt pinning' worden pakketten geclassificeerd op basis van prioriteiten. Apt past ze toe om te beslissen hoe om te gaan met dit softwarepakket en de versies die beschikbaar zijn in de softwarerepository.

Elk softwarepakket heeft zijn eigen pakketbeschrijving die gestandaardiseerd is. Deze beschrijving specificeert onder andere expliciet van welk(e) verdere pakket(ten) het afhankelijk is. Distributiespecifieke tools extraheren deze informatie uit de pakketbeschrijving en berekenen en visualiseren de afhankelijkheden voor u. Het volgende voorbeeld gebruikt het commando 'apt-cache show' om de pakketbeschrijving van het pakket 'poppler-utils' weer te geven (zie figuur 4).

Afbeelding 4: pakketbeschrijving-poppler-utils.png

De pakketbeschrijving bevat een sectie met de naam 'Depends'. Deze sectie vermeldt de andere softwarepakketten plus het versienummer waarvan het huidige pakket afhankelijk is. In Figuur 4 is deze sectie rood omkaderd en laat zien dat 'poppler-utils' afhankelijk is van de pakketten 'libpoppler64', 'libc6', 'libcairo2', 'libfreetype6', 'liblcms2-2', 'libstdc++6' en 'zlib1g'.

Toon de pakketafhankelijkheden

Het lezen van de pakketbeschrijving is de moeilijke manier om de pakketafhankelijkheden te achterhalen. Vervolgens laten we u zien hoe u dit kunt vereenvoudigen.

Er zijn verschillende manieren om de pakketafhankelijkheden op de opdrachtregel weer te geven. Gebruik voor een deb-pakket als een lokaal bestand het commando 'dpkg-deb' met twee parameters - de bestandsnaam van het pakket en het trefwoord 'Depends'. Het onderstaande voorbeeld demonstreert dit voor het pakket 'skypeforlinux-64'.deb':

$ dpkg-deb -f Downloads/skypeforlinux-64.deb hangt ervan af
gconf-service, libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.17),
libcairo2 (>= 1.2.4), libcups2 (>= 1.4.0), libexpat1 (>= 2.0.1),
libfreetype6 (>= 2.4.2), libgcc1 (>= 1:4.1.1), libgconf-2-4 (>= 3.2.5),
libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.8), libgtk2.0-0 (>= 2.24.0),
libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.13.4-2~), libpango-1.0-0 (>= 1.14.0),
libpangocairo-1.0-0 (>= 1.14.0), libsecret-1-0 (>= 0.7), libv4l-0 (>= 0.5.0),
libx11-6 (>= 2:1.4.99.1), libx11-xcb1, libxcb1 (>= 1.6), libxcomposiet1 (>= 1:0.3-1),
libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3,
libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.3), libxrender1, libxss1,
libxtst6, apt-transport-https, libfontconfig1 (>= 2.11.0), libdbus-1-3 (>= 1.6.18),
libstdc++6 (>= 4.8.1)
$

Gebruik 'apt-cache' om hetzelfde te doen voor een geïnstalleerd pakket. Het eerste voorbeeld combineert het subcommando 'show' gevolgd door de naam van het pakket. De uitvoer wordt verzonden naar het 'grep'-commando dat de regel 'Depends' filtert:

$ apt-cache toon xpdf | grep hangt ervan af
Hangt af van: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2),
libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6
$

Het commando 'grep-status -F package -s Depends xpdf' rapporteert dezelfde informatie.

Meer specifiek, het tweede voorbeeld gebruikt opnieuw 'apt-cache' maar met het subcommando 'depends', in plaats daarvan. Het subcommando wordt gevolgd door de naam van het pakket:

$ apt-cache hangt af van xpdf
xpdf
Hangt af: libc6
Hangt af: libgcc1
Hangt af: libpoppler46
Hangt af: libstdc++6
Hangt af: libx11-6
Hangt af: libxm4
Hangt af: libxt6
Aanbevolen: poppler-utils
poppler-utils:i386
Aanbevolen: poppler-data
Aanbevolen: gsfonts-x11
Aanbevolen: cups-bsd
kopjes-bsd:i386
Komt in botsing met:
Komt in botsing met:
Komt in botsing met:
Komt in botsing met:
Vervangt:
Vervangt:
Vervangt:
Vervangt:
Botst met: xpdf:i386
$

De lijst hierboven is vrij lang en kan worden ingekort met de schakelaar '-i' (afkorting van '-belangrijk'):

$ apt-cache hangt af van -i xpdf
xpdf
Hangt af: libc6
Hangt af: libgcc1
Hangt af: libpoppler46
Hangt af: libstdc++6
Hangt af: libx11-6
Hangt af: libxm4
Hangt af: libxt6
$

Het commando 'apt-rdepends' doet hetzelfde, maar met versie-informatie indien gespecificeerd in de beschrijving:

$ apt-rdepends xpdf
Pakketlijsten lezen... Klaar
Afhankelijkheidsboom bouwen
Statusinformatie lezen... Klaar
xpdf
Hangt af van: libc6 (>= 2.4)
Hangt af van: libgcc1 (>= 1:4.1.1)
Hangt af: libpoppler46 (>= 0.26.2)
Hangt af: libstdc++6 (>= 4.1.1)
Hangt af: libx11-6
Hangt af: libxm4 (>= 2.3.4)
Hangt af: libxt6
libc6
Hangt af: libgcc1

$

Het commando 'aptitude' werkt ook met schakelaars. Gebruik voor afhankelijkheden de schakelaar '~R' gevolgd door de naam van het pakket. Figuur 5 laat dit zien voor het pakket 'xpdf'. De letter 'A' in de tweede kolom van de uitvoer van 'aptitude' identificeert het pakket als automatisch geïnstalleerd.

Figuur 5: aptitude-rdepends.png

Pakketafhankelijkheden kunnen een beetje lastig zijn. Het kan helpen om pakketafhankelijkheden grafisch weer te geven. Gebruik het commando 'debtree' gevolgd door de naam van het pakket om een ​​grafische weergave van de pakketafhankelijkheden te maken. De tool 'dot' uit het Graphviz-pakket zet de beschrijving als volgt om in een afbeelding:

$ debiteuren xpdf | punt -Tpng > grafiek.png

In figuur 6 ziet u de gemaakte PNG-afbeelding die de afhankelijkheidsgrafiek bevat.

Afbeelding 6: punt.png

Toon de omgekeerde afhankelijkheden

Tot nu toe hebben we getoond dat we de vraag hebben beantwoord welke pakketten nodig zijn voor een pakket. Er is ook andersom - zogenaamde omgekeerde afhankelijkheden. De volgende voorbeelden gaan over het pakket en de pakketten die ervan afhankelijk zijn. Voorbeeld nummer één gebruikt 'apt-cache' met het subcommando 'rdepends' als volgt:

$ apt-cache rdepends xpdf
xpdf
Omgekeerd hangt af:
|octaaf-doc
xpdf:i386
libfontconfig1:i386
|xmds-doc
xfe
wiipdf
|vim-latexsuite
python-scapy
|ruby-tioga
|python-tabellen-doc
|pagina-crunch
|octaaf-doc
|muttprint-handleiding
mozplugger
mlpost
libmlpost-ocaml-dev

$

Pakketten die afhankelijk zijn van andere pakketten zijn gemarkeerd met een pijpsymbool. Deze pakketten hoeven niet op uw systeem te worden geïnstalleerd, maar moeten worden vermeld in de pakketdatabase.

Het volgende voorbeeld gebruikt 'aptitude' om de pakketten op te sommen die een harde verwijzing hebben naar het pakket 'xpdf' (zie figuur 7).

Figuur 7: aptitude-search.png

Valideer de installatie op ontbrekende pakketten

'Apt-get' biedt het subcommando 'check' waarmee de installatie kan worden gevalideerd. Als u de volgende uitvoer ziet, ontbreken er geen pakketten:

# apt-get check
Pakketlijsten lezen... Klaar
Afhankelijkheidsboom bouwen
Statusinformatie lezen... Klaar
#

Conclusie

Het vinden van pakketafhankelijkheden werkt goed met de juiste tools. Als u ze op de juiste manier gebruikt, begrijpt u waarom pakketten zijn geïnstalleerd en welke mogelijk ontbreken.

Links en referenties

Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...
0 A.D. zelfstudie
Van de vele strategiespellen die er zijn, 0 A.D. slaagt erin om op te vallen als een uitgebreide titel en een zeer diep, tactisch spel ondanks dat het...
Unity3D-zelfstudie
Inleiding tot Unity 3D Unity 3D is een krachtige game-ontwikkelingsengine. Het is platformoverschrijdend, zodat je games voor mobiel, internet, deskto...