7. december

Pakker

Nogle kan bedst lide bløde pakker og andre kan bedst lide hårde pakker. I dagens julekalendergave skal vi se lidt på de to mest udbredte pakkesystemer under Linux, RPM-pakker og DEB-pakker. Pakkesystemerne hjælper dig med at holde styr på de programmer, der er installeret på dit linux-system, så det er let at opdatere eller slette programmerne, når du får behov for det. Man kan ikke uden videre blande de to pakkesystemer, så du er grundlæggende bundet til det pakkesystem der kommer med den distribution du har installeret.

Det er nyttigt at vide lidt om pakkesystemet, hvis du selv skal vedligeholde din maskine.

Det grundlæggende program til at håndterer Debians DEB-pakker er `dpkg`. Det har dog ikke mulighed for selv at finde pakker via nettet eller selv løse afhængigheder, så mange bruger apt-programmerne, der indkapsler `dpkg`. RPM-pakker håndteres med programmet `rpm`.

Installere en pakke

Hvis man har en debian-pakke og ønsker at installerer den kan dette gøres med dpkg:

# dpkg -i foobar_1.666-42.deb

Hvis der mangler nogle afhængigheder vil dpkg beklage sig. Den tilsvarende operation med en RPM-pakke er:

# rpm --upgrade foobar-1.666-42.i386.rpm

Debian-brugere har også en anden mulighed. Hvis pakken findes i et pakke-arkiv, der er "apt-get-bart", kan man installere pakken med `apt-get`:

# apt-get install foobar

Dette vil så hente og installere den seneste udgave af pakken og de pakker den er afhængig af. Med RPM er det ikke helt så elegant, men hvis du har adressen (URL'en) på en pakke, kan du i det mindste få RPM til at tage sig af at hente pakken fra nettet for dig:

# rpm --upgrade ftp://maskine.i.dk/arkiv/foobar-1.666-42.i386.rpm

Slette en pakke

Vil man fjerne en pakke, kan man i Debian enten bare fjerne selve pakkens indhold (remove) eller fjerne alle spor af pakken (purge). Det første fjerner ikke opsætningsfiler, hvilket det sidste gør. Med `dpkg` kan dette gøres med henholdsvis:

# dpkg --remove foobar

og

# dpkg --purge foobar

Med `apt-get` kan man fjerne en pakke med

# apt-get remove foobar

På RPM-baserede systemer skriver du

# rpm --erase foobar

når du vil slette pakken "foobar".

Slette og installere på samme tid (kun Debian)

Hvis man både vil installere nye pakker og fjerne pakker samtidigt kan man med apt-get install sætte et minus efter pakken, den vil så blive fjernet istedet for at blive installeret. Det følgende vil altså installerer pakken foobar og fjerne pakken xyzzy:

# apt-get install foobar xyzzy- 

Opdatere pakker

På RPM-baserede systemer er du nødt til selv at finde nye filer med de pakker du vil opdatere. Det kan du for eksempel gøre ved at anskaffe en cd-rom med de nyeste pakker til dit system. Kommandoen

# rpm --freshen /cdrom/RPMS/*.rpm

opdaterer de pakker, der allerede er installeret på systemet, med de nyeste udgaver der findes i kataloget "/cdrom/RPMS/".

På et Debian-baseret system behøver du - hvis du har en netforbindelse - ikke bekymre dig om først at hente filerne med pakkerne. Første trin i at opdatere de installerede pakker er at gøre `apt-get` opmærksomt på at der findes nye pakker. Dette gøres med:

# apt-get update

Apt-get vil så finde ud af hvilke pakker der er til rådighed i de arkiver, den er sat til at slå op i. Vil man opdatere en enkelt pakke skal man bare skrive

# apt-get install foobar

Hvis man vil opdatere hele systemet bruger man

# apt-get upgrade

Dette vil opdatere alle pakker som ikke kræver at apt-get fjerner eller installerer andre pakker. Hvis en pakke har fået flere afhængigheder kan den enten opdateres individuelt med apt-get install eller med

# apt-get dist-upgrade

der vil prøve mere for at opgraderer pakker. Dette kan dog betyde at den må fjerne pakker, man ikke er intereseret i at apt-get fjerner. Så tjek lige listen over pakker apt-get foreslår at den fjerner.

Hvilken pakke kommer filen fra?

Ofte har man det problem at man enten står med en fil og gerne vil vide hvilken pakke den kommer fra eller gerne vil vide hvilke filer en installeret pakke indeholder. På et debian-baseret system kan det undersøges med dpkg

Det følgende vil søge alle installerede pakker igennem og vise hvilke af dem, der indeholder filer der hedder noget med "libc":

$ dpkg -s libc

På et RPM-baseret system kan du kun spørge efter kilden til en helt specifik fil:

$ rpm --query --file /lib/libc.so.6

"--query --file" kan også forkortes til "-qf", hvis du ikke vil slide på tastaturet.

Hvilke filer kommer pakken med?

Det omvendte problem med at finde ud af hvilke filer en installeret pakke indeholder er desværre ofte en meget anvendelig måde at finde dokumentation for pakke på. Det gøres på følgende måder:

$ dpkg -L foobar
$ rpm --query --list foobar

"--query --list" kan forkortes til "-ql".

Finde den rette pakke

Hvis du bruger et RPM-baseret system, er den mest effektive måde at finde en pakke på at søge i "RPM Find" (rpmfind.net), hente den ned, og installere den.

På et debian-baseret system kan man løse samme opgave med værktøjet apt-cache. Det bruges til at finde oplysninger i den listen med pakker, som apt-get har adgang til. Man kan søge på både pakkenavne og beskrivelser. Følgende kommando finder for eksempel de fleste pakker, der laver kryptering:

$ apt-cache search encryption

apt-cache search leder efter regulære udtryk, hvilket give meget gode muligheder for at finde pakker meget præcist, hvis man ved hvad man leder efter.