Brug af apt og dpkg

Fra Debianguiden
Skift til: Navigation, Søgning

Når du arbejder med Debian, vil du støde på at man skal bruge 'dpkg'. dpkg er Debians egentlige pakkesystem. Det kan ske at du f. eks. henter Opera, som ikke ligger som prekompileret i Debian. Derfor bliver du nødt til at installere den manuelt, dette gøres ved følgende kommando:

debian:~# dpkg -i pakkenavn.deb

Hvor pakkenavn.deb er navnet på pakken. Du kan fjerne den igen med:

debian:~# dpkg -r pakkenavn

Men normalt når du installerer pakker, så vil den ligge i det arkiv som Debiansystemet kender, det er nemlig det arkiv som er defineret i /etc/apt/sources.list. Her kan man selv tilføje flere kilder. Programmet 'aptitude' vil kigge her når den skal installere pakker. f. eks.

debian:~# aptitude install mozilla

vil installere Mozilla pakken. Du behøver ikke at kende det fulde filnavn, eller hvor den ligger henne. apt-get vil hente den enten fra din CD, fra web eller lignende. Det kommer helt an på indholdet af din '/etc/apt/sources.list'. Pakken kan også fjernes med 'aptitude':

debian:~# aptitude remove mozilla

Du kan også bygge kildekode pakker så de er optimeret til dit eget system, f. eks. hvis du har en i686 så vil du undgå at en speciel pakke er kompileret til i386. Det kan du gøre således:

debian:~# aptitude --compile source mozilla

'aptitude' vil nu hente sourcen til Mozilla og kompilere den for os. Herefter kan den installeres med 'dpkg'. Se i øvrigt afsnittet omkring rekompilering af pakker for mere information. Hvis du får behov for at se hvilke pakker du faktisk har installeret, kan det gøres på følgende måde:

debian:~$ dpkg --get-selections

Det smarte ved det, er at du kan lægge det ud i en fil ved 'dpkg --get-selections > fil'. Det kan være ret nyttigt at gemme denne fil, da hvis der sker det at din maskines harddisk ryger eller lign. og vil "re-etablere" dit system, kan du gøre det ved 'dpkg --set-selections < fil'.

Som en del af apt findes et værktøj der hedder 'apt-cache', som du senere vil skifte bekendtskab med. Det program kan søge i pakke databasen:

debian:~$ apt-cache search browser

hvor browser her er vores søgestreng. Derudover kan den vise informationer om en pakke, det er ret nyttigt hvis du vil se hvad denne pakke egentlig gør:

debian:~$ apt-cache show mc

for at se hvad pakken mc gør. Sluttelig kan man inspicere status og installationsplaner for en given pakke med

debian:~$ apt-cache policy pakkenavn

Opsætning af apt

Når du skal hente pakker med apt, så kan det gøres fra en del forskellige kilder, fx FTP, HTTP, NFS, CDROM og floppy.

Der er 2 måder hvorpå du kan sætte apt op. Det kan enten gøres manuelt via /etc/apt/sources.list, eller via programmet 'apt-setup'. Førstnævnte er foretrukket for fleksibilitetens skyld.

Et eksempel på en sources.list for en http server kan være følgende, hvor vi bruger en dansk ftp-server for de fleste pakker fordi det sparer båndbredde på internettet.

deb http://ftp.dk.debian.org/debian/ stable main non-free contrib
deb-src http://ftp.dk.debian.org/debian/ stable main non-free contrib

Ønsker du derimod at tilføje lokale pakkearkiver til din sources.list, som fx befinder sig på din harddisk under stien '/var/ftp/debian/dists/sarge/main/binary-i386/...', så tilføjer du

deb file:/var/ftp/debian sarge main contrib non-free

CD kilder tilføjer man ikke manuelt. Man sikrer sig først at CD drevet kan mountes automatisk ved at tilføje linien

/dev/hdc  /cdrom  auto  defaults,noauto,ro  0  0  

til /etc/fstab - brug dog dit aktuelle device navn! Derefter tilføjer man Debian CD'er med kommandoen

debian:~# apt-cdrom add

hvor du indlæser den ene CD efter den anden når du bliver bedt om det. Kig derefter i sources.list for at se ændringerne.


Når du har ændret i apts opsætning, så skal du køre 'apt-get update' for at opdatere listen over pakker.

Sidder man bag en proxy server kan apt også konfigureres til at bruge den. Det sker i /etc/apt/apt.conf, som også indeholder anden opsætning af apt. Se 'man apt.conf' for en komplet reference. For at bruge proxy sættes <TODOSvend-ev> <varname>Acquire::http::Proxy</varname> til den server, der ønskes brugt. Undtagelser kan sættes ved at sætte variablen til DIRECT:

Acquire::http::Proxy "http://wwwproxy:3128/";
Acquire::http::Proxy::ftp.sunsite.dk DIRECT;
Acquire::http::Proxy::mirrors.sunsite.dk DIRECT;

Dette sætter dog kun proxy for http, hvis der også skal bruges proxy til ftp, så kan det kun ske ved at sætte <TODOSvend-ev> <varname>ftp_proxy</varname> i kommandofortolkeren, f.eks.

debian:~$ export ftp_proxy=http://wwwproxy:3128/

Opgradering af distribution via apt

En af de bedre funktioner ved Debian, er at man kan opgradere sin distribution over internettet, uden overhovedet at genstarte systemet.

Det er sådan, at der findes en stable version af Debian, som i skrivende stund hedder 'etch - det er højst sandsynligt den du kører med.

Den næste version af Debian, kommer til at hedde lenny, og bliver udgivet engang i fremtiden (når den er klar). Hvad gør du så når den udkommer, og du gerne vil opgradere til den? Du skal ind og redigere i /etc/apt/sources.list, her skal du erstatte alle steder hvor der står stable eller etch til lenny. Gem filen, og kør 'aptitude update'. Herefter skriver du 'aptitude dist-upgrade'.

Nu vil aptitude så fortælle dig hvilke pakker som den har tænkt sig at opgradere, og den vil selv hente pakker hjem, installere dem - og kort tid efter (afhængig af din maskine og din internet forbindelse), vil du have en opgraderet distribution - helt uden at genstarte maskinen.

En anden ting som er meget populær for Debian folk, er at opgradere til de nye versioner (lenny og sid, også kendt som testing og unstable) INDEN de bliver udgivet.

Det smarte ved ovenstående, er at du vil få en Debian maskine som er meget mere "oppe i tiden" end din nuværende sarge. Her kan du se, hvad forskellene er ved de tre distributionsversioner:


  • etch (stable) - den stabile version af Debian. Denne version udgør den nyeste udgave af Debian. Her er de ældste, men mest robuste og gennemtestede pakker.
  • lenny (testing) - den næste udgave af Debian, som er under konstant udvikling, lenny erstatter etchs plads som stable i fremtiden. Pakkerne er nyere end i stable, men lidt ældre end unstable.
  • sid (unstable) - en version af Debian der aldrig bliver udgivet. Her kommer de nyeste pakker fra Debian udviklerne ind, hvorefter de senere bliver sendt videre til lenny/testing når de er stabile nok.


Når du har opgraderet til en distribution via aptitude dist-upgrade, kan du holde den løbende opdateret ved at køre kommandoerne aptitude update og aptitude upgrade. Fx bliver sid/unstable opdateret med nye pakker en gang om dagen.

sid(eller unstable) er endnu en version af Debian som er under udvikling. Det er her hvor Debian udviklerne kan lege lidt mere, dvs. der er ingen garanti for at den virker, men den vil altid indeholde det nyeste software.

De fleste forfattere af denne bog kører selv med enten lenny eller unstable, pga. de nye opdaterede pakker, men hvis du har tænkt dig at opgradere til en af disse versioner, INDEN de bliver released, så skal det nævnes at der er ingen garanti for at det virker - så du skal ikke beklage dig til os :) (De virker dog 98% af tiden.)

Fejlretning og rekonfigurering med dpkg og apt

Når man har problemer med sin Debian box, er det praktisk at kende til nogle af de følgende kommandoer for at danne sig et overblik over situationen. En liste over alle halv installerede pakker og pakker med fejlstatus findes ved

debian:~$ dpkg --audit

og listen over pakker der er på hold ses ved en af følgende

debian:~$ dpkg -l | grep ^h
debian:~$ dpkg --get-selections | grep hold

Har man brug for information om hvilken filer en pakke ejer, eller omvendt, hvilken pakke en fil ejes af, kører man

debian:~$ dpkg -L pakkenavn
debian:~$ dpkg -S /sti/filnavn

Nogle gange er der gået cirkulære afhængigheder i ens system, og så må man gribe til lidt skrappere midler. Følgende simulerer en dist-upgrade hvor både pakker på hold bliver udskiftet med ny, andre pakker, og hvor småfejl i afhængigheder bliver rettet, kommandoen fås med korte eller lange option flags:

debian:~# aptitude --fix-broken --show-upgraded --simulate dist-upgrade 
debian:~# aptitude -f -u -s dist-upgrade 

Er man tilfreds med dette, så kører man "for good" med

debian:~# aptitude --fix-broken --show-upgraded dist-upgrade 
debian:~# aptitude -f -u dist-upgrade 

Når man afinstallerer en pakke med 'aptitude remove pakkenavn', så forbliver konfigurationsfilerne på computeren, og ved en senere geninstallering med 'aptitude install pakkenavn' sparer man tiden for en rekonfigurering (Debian er smart!). Skyldes ens pakke-problemer at nogle pakker ikke er færdig konfigurerede, så trigger man dette ved

debian:~# dpkg --configure --pending

Ønsker man at rekonfigurere en enkelt pakke, der ellers er vel installeret, bruges

debian:~# dpkg-reconfigure pakkenavn

Ønsker man derimod at slette en pakke totalt - inklusive dennes konfigurationsfiler - gøres dette ved en af følgende

debian:~# dpkg --purge pakkenavn
debian:~# apt-get remove --purge pakkenavn

Er man kommet i den situation at en defekt pakke blokerer for både installation og fjernelse af pakker, eller man ikke kan få installeret en pakke, kan man undertiden være nødt til at rette i de filer som styrer pakkens installation/fjernelse. Lad os sige at det er apache som giver problemer, når apache skal sættes op. Så redigérer man /var/lib/dpkg/info/apache.postinst og tilføjer " -x" til øverste linje (eller tilføj en ny linje "set -x" lige nedenunder). Så installerer man igen apache, men nu får man mere præcise oplysninger om hvad der er galt, og så kan man gå ind og ændre i filen apache.postinst,

At kun opdatere enkelte pakker

Ofte er det kun enkelte pakker man virkelig har brug for at skulle have i en nyere version. Det kan derfor være smart kun at opdatere de pakker man har brug for at opdatere. (Det kan f. eks. være at du kører sarge og vil have fat i en pakke fra sid/unstable).

Først skal man fortælle apt at den skal hente pakkelisterne for både stable, testing og unstable (eller bare to af dem). Det gøres ved at skrive begge distributioner ind i /etc/apt/sources.list:

deb http://http.us.debian.org/debian stable main contrib non-free
deb http://http.us.debian.org/debian testing main contrib non-free
deb http://http.us.debian.org/debian unstable main contrib non-free

Dernæst skal pakkelisten opdateres:

debian:~# aptitude update

Vi skal nu fortælle apt at selv om der findes nyere versioner af en pakke, skal den altid bruge pakken fra stable, med mindre den eksplicit får fortalt andet. Det gøres ved at lave en fil /etc/apt/preferences, der indeholder følgende:

Package: *
Pin: release a=stable
Pin-Priority: 600

Dermed ved apt at den skal give alle pakker, der kommer fra stable, en prioritet på 600. (standard-prioriteten er 500). Når apt skal vælge hvilke pakker den skal installere (opgradere til) vælger den de pakker med højst prioritet (før den ser på versions-numre).

Det er nu muligt at installere enkelte pakker direkte fra testing ved at skrive:

debian:~# aptitude install slashem/testing

Dette installerer pakken slashem fra testing. Hvis pakken er afhængig af andre pakker, der ikke er i stable, skal disse angives eksplicit. Hvis man ønsker at opfylde alle afhængigheder ved at installere pakker fra testing kan man skrive følgende:

debian:~# aptitude --target-release testing install slashem

Hvormed apt vil give prioriteten 990 til alle pakker i testing.

Hvis man altid vil følge pakken slashem fra testing, kan man skrive følgende i sin /etc/apt/preferences:


Package: slashem
Pin: release a=testing
Pin-Priority: 700

Package: *
Pin: release a=stable
Pin-Priority: 600

Så vil slashem fra testing have en højere prioritet en slashem fra stable (600) og slashem fra unstable (500).

Den fulde dokumentation af hvad man kan med /etc/apt/preferences findes i manualsiden i apt_preferences(8)

Kunsten at holde et etch-system opdateret

Debian-brugere løber ofte ind i problemet, at den stabile version af Debian (på nuværende tidspunkt "etch"), er uddateret i forhold til andre distributioner, eller hvad der er behov for. Det er derimod ikke altid nemt at finde den bedste måde at holde sit system opdateret, dette afsnit vil prøve at gøre rede for de foretrukne metoder.

Det er normalt folk der bruger Debian som en arbejdsmaskine (kontra server), der har behov for mere opdateret software. F.eks. er det nyttigt have en nyere version af XOrg-serveren hvis ens nykøbte grafikkort kun er understøttet deri, eller måske at få opdateret sin Mozilla til den nyeste og bedste version.

Der er adskillige måder, hvorpå systemet kan holdes opdateret, her er nævnt størstedelen:

  • Hente software fra dets hjemmeside og kompilere det manuelt. Dette er ikke anbefalet.
  • Fuldstændig droppe etch og opgradere til enten lenny/testing eller sid/unstable (se Opgradering af distribution via apt). Dette kan anbefales hvis du ved hvad du gør.
  • Hente enkelte src-Debian pakker (pakker med kildekode) fra lenny/testing eller sid/unstable distributionerne, og kompilere dem til din etch boks (se Rekompilering af programmer). Dette er en god mulighed, men ikke altid så lige til.
  • Bruge eksternt byggede Debian pakker, som er kompileret til etch med det

formål at give folk mulighed for at køre nyere software på etch. Dette er den nemmeste og fortrukne metode. Risikoen er at der ingen garanti er på at disse pakker vil virke efter hensigten.

Forklaring på etch/stable, lenny/testing og sid/unstable på: http://www.people.cornell.edu/pages/kk288/debian_choosing_distribution.html

Problemet med den sidstnævnte metode, er at det ikke altid er lige nemt at finde de pakker man skal bruge. Men der er blevet oprettet et websted, som er dedikeret til formålet, nemlig www.apt-get.org. Her vil du finde (godkendte) kilder som kan bruges til apt med populær software. Kilderne indsættes i /etc/apt/sources.list. Af populær software på sitet i skrivende stund, er OpenOffice.org, GNOME 2, KDE, Mozilla, mplayer osv.

Man kan eventuelt hente pakker fra 'Backports.org'. Disse pakker kompileret for etch fra lenny (altså den debianudgave der engang i fremtiden vil blive stable). De kommer alle fra debians udviklere, og fungerer fint. Man bør dog ikke til installere alle pakker fra Backports, så kan der opstå problemer. Rediger din '/etc/apt/sources.list' og tilføj flg. linie:

deb http://www.backports.org/debian/ etch-backports main contrib non-free

opret/rediger derefter filen '/etc/apt/preferences' og skriv blot flg. linier i den:

Package: *
Pin: release a=etch-backports
Pin-Priority: 200

Dette gør at pakker fra den officielle udgave vil blive foretrukket når du installerer. Pakker fra Backports kan installeres ved:

aptitude -t etch-backports install blabla (eller hvilken pakke du ønsker) 

Dette er en god og sikker måde at holde sit system relativt up2date.


Men det er ikke alle pakker der findes som debianpakker eller i en relevant version. Man kan så være nødt til at downloade kildekoden og kompilere pakken og installere den. Nogle gange er det også en fordel at kompilere en programpakke fra den nyeste kildekode hvor der ikke findes debian src pakker.

Under alle omstændigheder kommer der til at ligge filer på systemet som debian ikke kender noget til, og som man ikke kan afinstallere med dpkg -r. Det er meget enkelt at løse dette problem med checkinstall:

aptitude install checkinstall

Hvordan bruges så checkinstall? Først downloader man den pakke man gerne vil bruge f.eks. libusb i den nyeste udgave og pakker den ud, typisk med: "tar xvzf [pakkenavn]". Så kører man på sædvanlig vis "./configure" og dernæst "make", men i stedet for at køre "make install" kører man "checkinstall". Checkinstall laver så en debianpakke i forbindelse med at pakken istalleres, og den bliver registreret i din maskines debiansystem og kan blive afinstalleret med "dpkg -r [pakken]". Se også næste afsnit om: Recompilering af pakker. Man kan ofte bruge de debian source-pakker der kan downloades med aptitude / apt-get.