Pakkesystem

Et **pakkesystem** eller en **pakkebehandler** er en samling dataprogrammer som automatiserer installering, oppgradering, konfigurering og fjerning av programvarepakker på en datamaskins operativsystem. Eliminasjon av manuelle installeringer og oppdateringer, er spesielt nyttig for store virksomheter, der operativsystemet kan inneholde opptil titusenvis av programvarepakker.

En programvarepakke har et pakkeformat. Den består av programvare og data som er lagret i en eller flere arkivfiler (vanligvis én enkelt datafil). Arkiverte datafiler kan være ordnet i katalogstrukturer, og kan være komprimerte for å oppta mindre lagringsplass. Arkivfiler kan også inneholde innebygd kryptering.

Pakkene inneholder ofte metadata, slik som navnet på programvaren, en beskrivelse av programvarens oppgave og hensikt, versjonsnummer, utgiver, sjekksum og en liste over avhengigheter til andre programmer som er nødvendige for at programmet skal kjøre skikkelig. Under installering blir slike metadata vanligvis lagret i en lokal *pakkedatabase*. Denne pakkedatabasen forteller pakkebehandleren om hvorvidt forutsetningene er tilstede eller ikke for en gitt programvare.

Programvarepakker er vanligvis lagret i et programvarelager eller en mobilapplikasjonsbutikk som er tilgjengelig over internett. I slike tilfeller samarbeider og kommuniserer pakkebehandleren med en binærlagerbehandler over et datanett.

Den første pakkebehandleren var dpkg, som ble lansert for Linuxdistribusjonen Debian i januar 1994. I august 1994 kom pakkesystemet FreeBSD Ports for FreeBSD. I 1997 lanserte programvareselskapet Red Hat pakkebehandleren RPM Package Manager (RPM). RPM har fått stor utbredelse, og ble adoptert av Linux Standard Base (kompatibilitet med POSIX og *[[Single UNIX Specification]]*). Det finnes også flere pakkebehandlere, og de er omtalt i artikkelen.

## Forskjeller fra installasjonsprogrammer

For å gi en forståelse av hva et pakkesystem egentlig *er*, kan det være nyttig å forklare hva det *ikke* er. Mange brukere som er vant med operativsystemer som MS-DOS, klassisk Mac OS/nyere MacOS og Microsoft Windows, har også hatt befatning med installasjonsprogrammer. Måten programmer installeres på i slike systemer, er annerledes enn i Linux. Linux er på dette området et langt mer sofistikert operativsystem:

* Installasjonsprogrammer følger med hvert enkelt dataprogram, og er forskjellige for hvert enkelt program. Pakkesystemet er derimot en del av selve operativsystemet, og ikke programmene
* Hvert enkelt installasjonsprogram holder rede på avhengigheter til andre programmer, og hvilke pakker som hører til det aktuelle programmet. Pakkesystemer bruker derimot én enkelt database som inneholder en oversikt over alle installasjoner
* Et installasjonsprogram virker bare sammen med det medfølgende produktet, mens pakkesystemet kan verifisere og behandle alle programpakkene i operativsystemet
* Det er flere forskjellige leverandører av ulike installasjonsprogrammer, mens pakkesystemet bare har en enkelt leverandør
* De enkelte installasjonsprogrammer kan ha sitt eget dataformat, mens pakkesystemet bare bruker et enkelt dataformat

## Forskjeller fra byggesystemer

## Funksjoner

Pakkehåndteringssystemer har ansvar for å organisere alle pakkene som er installert på et system og vedlikeholde deres brukbarhet. Sjekksumverifikasjon sørger for at pakkene ikke har blitt korrupte i løpet av overføringen til systemet. Digitale signaturer sørger for at pakkene kommer fra en utgiver som brukeren har bedt systemet om å stole på. Pakkesystemet sørger for enkel installasjon, oppgradering, sikkerhetsoppdatering, fjerning av pakker; og at alle pakkene som trengs for at en programvare skal fungere blir installert. Pakkesystemene inneholder også ofte gruppering, klassifisering og rangering av pakkene for å eliminere forvirring rundt hvilken type pakke brukeren ønsker å installere.

Det er vanlig at pakkehåndteringsystemene baserer seg på enkle bakstykker, som gjør den egentlige jobben med å installere pakker. For eksempel er yum avhengig av rpm og apt er avhengig av dpkg.

### Konvertering av binærpakker

Alien er et program som konverterer mellom forskjellige Linux pakkeformeter. Det støtter konvertering mellom rpm (del av Linux Standard Base), deb, Stampede (.slp) og Slackware (tgz) pakker.

### Vedlikehold og konfigurering
Upgradering av konfigurasjonsfiler er en kilde til mange problemer ved oppgradering av programvare. Siden pakkesystemer, ihvertfall i Unix systemer, er utvidelser av filarkiveringsverktøy, kan de vanligvis enten overskrive eller beholde konfigurasjonsfiler, heller enn å tilegne regler til konfigurasjonen. Det finnes imidlertid unntakelser som vanligvis gjelder kjernekonfigurasjon (som vil gjøre maskinen ubrukelig etter en omstart hvis den brytes). Problemer kan oppstå dersom filformatet til konfigurasjonsfiler endres. For eksempel, hvis eldre filformater ikke explisitt slår av nye funksjoner som burde være slått av. Noen pakkehånderingssystemer, slik som Debians dpkg tillater konfigurasjon under installasjonen. I andre situasjoner kan det være hesiktsmessig å installere pakker med en standardkonfigurasjon og deretter overskrive denne konfigurasjonen, for eksempel ved installasjon til et stort antall maskiner. Denne typen pre-konfigurert installasjon støttes også av dpkg.

### Pakkekilder
For å gi brukere enkel kontroll over hvilke typer programvare som de kan installere på deres systemer (og noenganger på grunn av legale årsaker på distributørens side), blir programvare ofte lastet ned fra flere forskjellige *pakkekilder*.

### Fri-programvare-systemer
Naturen til fri programvare gjør at pakker som kommer under liknende kompatible lisenser er tilgjengelig for bruk på en rekke operativsystemer. En typisk forskjell mellom pakkehåndtering i proprietære operativsystemer, slik som Mac OS X og Windows, og de i fri programvare, slik som Linux, er at fri programvaresystemer tillater at tredjepartspakker også installeres og oppgraderes gjennom de samme mekanismene, hvor pakkesystemene i Mac OS X og Windows bare vil oppgradere programvare som tilbys av hhv. Apple og Microsoft (med unntak av noen tredjeparts enhetsdrivere i Windows).

## Forskjellige pakkesystemer
### Debian-baserte
* dpkg, utvikles av Debian, men brukes også av andre distribusjoner, bruker filendingen .deb og var det første til å ha et avhengighetsløsende verktøy (apt).
* ipkg er et dpkg-basert lettvekts-system for blant annet håndholdte enheter.

### RPM-baserte
* rpm ble opprinnelig utviklet av Red Hat. RPM er pakkeformat-standarden i Linux Standard Base (LSB).
* yum og packagekit brukes av Fedora.
* zypper og YaST brukes av OpenSUSE.
* urpmi og Mandrake Control Center brukes av Mandriva.

### Tar-baserte
* Gzippede tar-arkiv med filending .tgz brukes av Slackware. Dette systemet har i seg selv ingen avhengighetskontroll.
* Pacman for Arch Linux bruker også .tgz-filer.

### uavhengige av pakkeformat
* Portage og emerge brukes av Gentoo. De ble inspirert av BSDs ports system og bruker skript kalt ebuild for å kompilere og installere programvare. Selv om systemet baserer seg på kildekode, tilbys også enkelte pakker ferdigkompilert.
* Ports bruker et system av makefiler for å installere programvare fra kildekode eller binærfiler.
* Smart Package Manager kan bruke både .deb- og .rpm-pakker.

### Andre pakkeformat
* fink, for Mac OS X, er delvis basert på dpkg/apt og delvis på ports.
* Autopackage bruker .package-filer.
* Windows Installer er den offisielle måten å installere pakker på i Microsoft Windows. Windows Installer bruker et XML-basert format i .msi-filer.

Uavhengig av pakkeformat, tilbyr de aller fleste linuxdistribusjoner både binær- og kildekodepakker. Kildekodepakkene kompileres automatisk av pakkehåndtereren, slik at brukeren ikke merker noen forskjell.

## Betydning
Ian Murdock har kommentert at pakkesystemer er «det største enkelt avansementet Linux har tilbrakt industrien», at det gjør at grensen mellom operativsystem og programmer flyter over i hverandre, og at det gjør det «lettere å flytte nye innovasjoner (...) inn i markedsplassen og (...) utvikle operativsystemet».

## Se også
* Pakkekilde
* dpkg
* rpm

## Referanser