Kapitel 2. Debians pakethantering

# Kapitel 2. Debians pakethantering

| Notera
Detta kapitel är skrivet med antagandet att den senaste stabila versionen är codename: `trixie`. APT-systemets datakälla kallas i detta dokument för källistan. Den kan definieras var som helst i filerna "`/etc/apt/sources.list`", "`/etc/apt/sources.list.d/*.list`" eller "`/etc/apt/sources.list.d/*.sources`".

## 2.1. Förutsättningar för Debians pakethantering

### 2.1.1. Debians system för pakethantering

Debian är en frivilligorganisation som bygger konsekventa distributioner av förkompilerade binära paket med fri programvara och distribuerar dem från sitt arkiv.

Debian-arkivet erbjuds av många fjärranslutna spegelsajter för åtkomst via HTTP- och FTP-metoder. Det finns också tillgängligt som CD-ROM/DVD.

Det nuvarande pakethanteringssystemet i Debian som kan utnyttja alla dessa resurser är Advanced Packaging Tool (APT).

Debians pakethanteringssystem, när det används på rätt sätt, erbjuder användaren att installera konsekventa uppsättningar av binära paket till systemet från arkivet. För närvarande finns det 73987 paket tillgängliga för arkitekturen amd64.

Debians pakethanteringssystem har en rik historia och många valmöjligheter för användarprogrammet i frontend och metoden för arkivåtkomst i backend som ska användas. För närvarande rekommenderar vi följande.

- `apt`(8) för alla interaktiva kommandoradsoperationer, inklusive installation, borttagning och dist-uppgradering av paket.

- `apt-get`(8) för att anropa Debians pakethanteringssystem från skript. Det är också ett reservalternativ när `apt` inte är tillgängligt (ofta med äldre Debian-system).

- `aptitude`(8) för ett interaktivt textgränssnitt för att hantera de installerade paketen och söka efter tillgängliga paket.

Tabell 2.1. Lista över Debians verktyg för pakethantering

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`dpkg` | V:889, I:999 | 6385 | lågnivåsystem för pakethantering för Debian (filbaserat)
`apt` | V:875, I:999 | 4670 | APT-frontend för att hantera paket med CLI: `apt`/`apt-get`/`apt-cache`
`aptitude` | V:36, I:181 | 4624 | APT-frontend för interaktiv hantering av paket med helskärmskonsol: `aptitude`(8)
`tasksel` | V:36, I:983 | 349 | APT-frontend för att installera valda uppgifter: `tasksel`(8)
`unattended-upgrades` | V:124, I:184 | 317 | förbättringspaket för APT för att möjliggöra automatisk installation av säkerhetsuppgraderingar
`gnome-software` | V:165, I:274 | 4476 | Programvarucenter för GNOME (GUI APT front-end)
`synaptic` | V:37, I:304 | 7788 | grafisk pakethanterare (GTK APT front-end)
`apt-utils` | V:399, I:997 | 1151 | APT-verktygsprogram: `apt-extracttemplates`(1), `apt-ftparchive`(1) och `apt-sortpkgs`(1)
`apt-listchanges` | V:382, I:888 | 547 | verktyg för avisering av paketändringshistorik
`apt-listbugs` | V:5, I:7 | 514 | listar kritiska buggar före varje APT-installation
`apt-file` | V:15, I:58 | 89 | APT-verktyget för paketsökning - kommandoradsgränssnitt
`apt-rdepends` | V:0, I:4 | 39 | rekursiv lista över paketberoenden

### 2.1.2. Konfiguration av paket

Här följer några viktiga punkter för paketkonfiguration på Debian-systemet.

- For the modern Desktop environment, rebooting of the system after package configuration change and package upgrade is a good idea to ensure the system to function properly.

- Den manuella konfigurationen av systemadministratören respekteras. Med andra ord, paketkonfigurationssystemet gör ingen påträngande konfiguration för bekvämlighetens skull.

- Varje paket levereras med ett eget konfigurationsskript med standardiserat användargränssnitt som heter `debconf`(7) för att underlätta den första installationen av paketet.

- Debian-utvecklarna gör sitt bästa för att göra din uppgraderingsupplevelse felfri med hjälp av skript för paketkonfiguration.

- Alla funktioner i paketerade program är tillgängliga för systemadministratören. Men de som innebär säkerhetsrisker är inaktiverade i standardinstallationen.

- Om du manuellt aktiverar en tjänst med vissa säkerhetsrisker är du ansvarig för riskbegränsningen.

- Esoterisk konfiguration kan aktiveras manuellt av systemadministratören. Detta kan skapa störningar med populära generiska hjälpprogram för systemkonfigurationen.

### 2.1.3. Grundläggande försiktighetsåtgärder

| Varning
Installera inte paket från en slumpmässig blandning av sviter. Det bryter förmodligen paketkonsistensen som kräver djup kunskap om systemhantering, t.ex. kompilatorns ABI, biblioteksversion, tolkfunktioner etc.

Debian-systemadministratören som är nybörjare bör hålla sig till den `stable` stabila utgåvan av Debian och endast använda säkerhetsuppdateringar. Tills du förstår Debiansystemet mycket väl, bör du följa följande försiktighetsåtgärder.

- Inkludera inte `testing` eller `unstable` i källistan.

- Blanda inte standard Debian med andra icke-Debian-arkiv som Ubuntu i källistan.

- Skapa inte "`/etc/apt/preferences`".

- Ändra inte standardbeteendet för pakethanteringsverktyg via konfigurationsfiler utan att känna till de fullständiga konsekvenserna.

- Installera inte slumpmässiga paket med "`dpkg -i random_package`".

- Installera aldrig slumpmässiga paket med "`dpkg --force-all -i random_package`".

- Radera eller ändra inte filer i "`/var/lib/dpkg/`".

- Skriv inte över systemfiler genom att installera program som kompilerats direkt från källan.

  - Installera dem i "`/usr/local`" eller "`/opt`", om det behövs.

De icke-kompatibla effekter som orsakas av brott mot ovanstående försiktighetsåtgärder för Debians pakethanteringssystem kan göra ditt system obrukbart.

Den seriösa Debian-systemadministratören som driver verksamhetskritiska servrar bör vidta extra försiktighetsåtgärder.

- Installera inte några paket, inklusive säkerhetsuppdateringar från Debian, utan att noggrant testa dem med din specifika konfiguration under säkra förhållanden.

  - I slutändan är det du som systemadministratör som är ansvarig för ditt system.

  - Debiansystemets långa stabilitetshistoria är ingen garanti i sig.

### 2.1.4. Liv med eviga uppgraderingar

| Observera
För din produktionsserver rekommenderas den `stable` sviten med säkerhetsuppdateringar. Detsamma gäller för stationära datorer som du kan lägga begränsad tid på att administrera.

Trots mina varningar ovan vet jag att många läsare av detta dokument kanske vill köra de nyare `testing` eller `unstable` sviterna.

Upplysning med följande räddar en person från den eviga karmiska kampen i uppgraderingshelvetet och låter honom nå Debian-nirvana.

Denna lista är avsedd för den självadministrerade Desktop-miljön.

- Använd `testing` eftersom den praktiskt taget är den rullande utgåvan som automatiskt hanteras av Debianarkivets QA-infrastruktur, såsom Debians kontinuerliga integration, praxis för uppladdning av endast källkod och spårning av biblioteksövergångar. Paketen i `testing` uppdateras tillräckligt ofta för att erbjuda alla de senaste funktionerna.

- Ange kodnamnet som motsvarar `testing` ( "`forky`;" under utgivningscykeln `trixie` as `stable` ) i källistan.

- Uppdatera kodnamnet i källistan manuellt till det nya kodnamnet först efter att du själv har utvärderat situationen i ungefär en månad efter att den stora sviten har släppts. Debians sändlista för användare och utvecklare är också bra informationskällor för detta.

Det är inte rekommenderat att använda den `unstable` sviten. Den `unstable` sviten är bra för att felsöka paket som utvecklare men tenderar att utsätta dig för onödiga risker vid normal användning på skrivbordet. Även om Debiansystemets `unstable` -svit för det mesta ser mycket stabil ut, har det förekommit en del paketproblem och några av dem var inte så triviala att lösa.

Här är några grundläggande försiktighetsåtgärder för att säkerställa snabb och enkel återhämtning från buggar i Debian-paket.

- Gör systemet dubbelstartbart genom att installera den `stable` delen av Debian-systemet på en annan partition

- Ha installations-CD:n till hands för räddningsstarten

- Överväg att installera `apt-listbugs` för att kontrollera informationen i Debian Bug Tracking System (BTS) före uppgraderingen

- Lär dig infrastrukturen för paketsystemet tillräckligt för att kunna lösa problemet

| Observera
Om du inte kan göra någon av dessa försiktighetsåtgärder är du förmodligen inte redo för `testing` och de `unstable` sviterna.

### 2.1.5. Grunderna i Debian-arkivet

| Tips
Debianarkivets officiella policy definieras i Debians policyhandbok, kapitel 2 - Debianarkivet.

Låt oss titta in i Debian-arkivet från en systemanvändares perspektiv.

En systemanvändare får tillgång till Debian-arkivet med hjälp av APT-systemet.

APT-systemet specificerar sin datakälla som källistan och den beskrivs i `sources.list`(5).

För systemet `trixie` med den typiska HTTP-åtkomsten ser källistan i enradig stil ut som följer:

    deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free
    deb-src http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free

    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb-src http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free

Alternativt är motsvarande källista i deb822-style följande.

    Types: deb deb-src
    URIs: http://deb.debian.org/debian/
    Suites: trixie
    Components: main non-free-firmware contrib non-free

    Types: deb deb-src
    URIs: http://security.debian.org/debian-security/
    Suites: trixie-security
    Components: main non-free-firmware contrib non-free

De viktigaste punkterna i källistan är följande.

- Format med en rad

  - Dess definitionsfiler finns i filerna "`/etc/apt/sources.list`" och "`/etc/apt/sources.list.d/*.list`".

  - Varje rad definierar datakällan för APT-systemet.

  - Raden "`deb`" definierar de binära paketen.

  - Raden "`deb-src`" definierar källkodspaketen.

  - Det första argumentet är rot-URL:en för Debian-arkivet.

  - Det andra argumentet är distributionsnamnet med antingen svitnamnet eller kodnamnet.

  - Det tredje och följande argumenten är en lista över giltiga namn på arkivområden i Debian-arkivet.

- Deb822-liknande format

  - Dess definitionsfiler finns i filerna "`/etc/apt/sources.list.d/*.sources`".

  - Varje block av rader som åtskiljs av en blankrad definierar datakällan för APT-systemet.

  - I strofen "`Types:`" definieras listan över typer, t.ex. "`deb`" och "`deb-src`".

  - Stanza "`URIs:`" definierar listan med rot-URI:er för Debian-arkivet.

  - I strofen "`Suites:`" definieras listan över distributionsnamn med hjälp av antingen svitnamnet eller kodnamnet.

  - Stanza "`Components:`" definierar listan över giltiga namn på arkivområden i Debian-arkivet.

Definitionen för "`deb-src`" kan säkert utelämnas om det bara är för `aptitude` som inte har tillgång till källrelaterade metadata. Det påskyndar uppdateringarna av arkivets metadata.

URL:en kan vara "`https://"`, "`http://",` "`ftp://"`, "`file://`", ....

Rader som börjar med "`#`" är kommentarer och ignoreras.

Här brukar jag använda kodnamnet "`trixie`" eller "`forky`" istället för svitnamnet "`stable`" eller "`testing`" för att undvika överraskningar när nästa `stable` släpps.

| Tips
Om "`sid`" används i exemplet ovan istället för "`trixie`", krävs inte raden "`deb: http://security.debian.org/ ..."` eller dess deb822-ekvivalenta innehåll för säkerhetsuppdateringar i källistan. Detta beror på att det inte finns något arkiv med säkerhetsuppdateringar för "`sid`"`(unstable)`.

Här är listan över URL-adresser till Debians arkivplatser och svitnamn eller kodnamn som används i konfigurationsfilen efter `trixie` -utgåvan.

Tabell 2.2. Lista över Debians arkivplatser

arkiv URL | svitens namn | kodnamn | syftet med förvaret
--- | --- | --- | ---
http://deb.debian.org/debian/ | `stable` | `trixie` | Quasi-statisk `stable` release efter omfattande kontroller
http://deb.debian.org/debian/ | `testing` | `forky` | Dynamisk `provning` efter ordentliga kontroller och korta väntetider
http://deb.debian.org/debian/ | `unstable` | `sid` | Dynamisk `unstable` release efter minimala kontroller och inga väntetider
http://deb.debian.org/debian/ | `experimentell` | N/A | Experimenterande av utvecklare före lansering (valfritt, endast för utvecklare)
http://deb.debian.org/debian/ | `stable-proposed-updates` | `trixie-proposed-updates` | Uppdateringar för nästa `stable` punktutgåva (valfritt)
http://deb.debian.org/debian/ | `stable-updates` | `trixie-updates` | Delmängd av sviten `stable-proposed-updates` som behöver brådskande uppdateringar, t.ex. tidszonsdata (valfritt)
http://deb.debian.org/debian/ | `stable-backports` | `trixie-backports` | Slumpmässig samling av omkompilerade paket, mestadels från `testversionen` (valfritt)
http://security.debian.org/debian-security/ | `stable-security` | `trixie-security` | Säkerhetsuppdateringar för den `stable` versionen (viktigt)
http://security.debian.org/debian-security/ | `testing-security` | `forky-security` | Detta stöds inte aktivt och används inte heller av säkerhetsteamet

| Observera

Endast ren `stable` version med säkerhetsuppdateringar ger den bästa stabiliteten. Att köra mestadels `stable` utgåva blandat med några paket från `testing` eller `unstable` utgåva är mer riskfyllt än att köra en ren `unstable` utgåva där biblioteksversioner inte stämmer etc. Om du verkligen behöver den senaste versionen av vissa program under `stable` utgåva, använd paket från tjänsterna stable-updates och backports (se Avsnitt 2.7.4, ”Uppdateringar och baksidor”). Dessa tjänster måste användas med extra försiktighet.

| Observera

Du bör i princip bara ange en av sviterna `stable`, `testing` eller `unstable` i "`deb`"-raden. Om du listar en kombination av `stable`, `testing` och `unstable` sviter på "`deb`"-raden blir APT-programmen långsammare och endast det senaste arkivet är effektivt. Multipel listning är meningsfullt för dessa när filen "`/etc/apt/preferences`" används med tydliga mål (se Avsnitt 2.7.7, ”Justera kandidatversionen med apt-pinning”).

| Tips
För Debian-systemet med den `stable` sviten är det en bra idé att inkludera innehållet med "`http://security.debian.org/"` i källistan för att aktivera säkerhetsuppdateringar som i exemplet ovan.

| Notera

Säkerhetsbuggarna för det `stable` arkivet åtgärdas av Debians säkerhetsteam. Denna aktivitet har varit ganska rigorös och pålitlig. De för `testing-arkivet` kan åtgärdas av Debians säkerhetsteam för testing. Av flera skäl är denna aktivitet inte lika rigorös som den för `stable` och du kan behöva vänta på att fixade `unstable` paket flyttas till `testing-arkivet`. De för det `unstable` arkivet fixas av den individuella underhållaren. Aktivt underhållna `unstable` paket är vanligtvis i ganska gott skick genom att de utnyttjar de senaste säkerhetsfixarna uppströms. Se Debians FAQ om säkerhet för hur Debian hanterar säkerhetsbuggar.

Tabell 2.3. Lista över Debians arkivområde

område | antal paket | kriterier för förpackningskomponent
--- | --- | ---
`main` | 72513 | DFSG-kompatibel och inget beroende av `non-free`
`icke-fri-firmware` | 64 | inte DFSG-kompatibel, firmware krävs för rimlig upplevelse av systeminstallationen
`contrib` | 377 | Uppfyller DFSG men har beroende till `non-free`
`icke-fri` | 1033 | inte DFSG-kompatibel och inte i `icke-fri-firmware`

Här är antalet paket i ovanstående för arkitekturen amd64. Området `main` tillhandahåller Debian-systemet (se Avsnitt 2.1.6, ”Debian är 100% fri programvara”).

Debians arkivorganisation kan studeras bäst genom att rikta webbläsaren mot varje arkiv-URL med `dists` eller `pool` som tillägg.

Distributionen benämns på två sätt, sviten eller kodnamnet. Ordet distribution används alternativt som synonym till sviten i många dokumentationer. Förhållandet mellan sviten och kodnamnet kan sammanfattas enligt följande.

Tabell 2.4. Förhållandet mellan svit och kodnamn

Tid | svit = `stable` | svit = `testing` | svit = `unstable`
--- | --- | --- | ---
efter `trixie` release | kodnamn = `trixie` | kodnamn = `forky` | kodnamn = `sid`
efter `forky` release | kodnamn = `forky` | kodnamn = `duke` | kodnamn = `sid`

Kodnamnens historia beskrivs i Debians FAQ: 6.2.1 Vilka andra kodnamn har använts tidigare?

I den striktare Debian-arkivterminologin används ordet "section" specifikt för kategorisering av paket efter tillämpningsområde. (Även om ordet "huvudavsnitt" ibland kan användas för att beskriva Debian-arkivets område med namnet "main")

Varje gång en ny uppladdning görs av en Debian-utvecklare (DD) till det `unstable` arkivet (via inkommande bearbetning), måste DD säkerställa att de uppladdade paketen är kompatibla med den senaste uppsättningen paket i det senaste `unstable` arkivet.

Om DD bryter denna kompatibilitet avsiktligt för en viktig biblioteksuppgradering etc., finns det vanligtvis ett meddelande på sändlistan debian-devel etc.

Innan en uppsättning paket flyttas av Debians arkivunderhållsskript från det `unstable` arkivet till `testarkivet`, kontrollerar arkivunderhållsskriptet inte bara paketens mognadsgrad (ca 2-10 dagar gamla) och status för RC-buggrapporterna, utan försöker också se till att de är kompatibla med den senaste uppsättningen paket i `testarkivet`. Denna process gör `testarkivet` mycket aktuellt och användbart.

Genom den gradvisa arkivfrysningsprocessen som leds av releaseteamet mognar `testing` så att det blir helt konsekvent och buggfritt med vissa manuella ingrepp. Därefter skapas den nya `stable` utgåvan genom att kodnamnet för det gamla arkivet `testing` tilldelas det nya `stable` arkivet och det nya kodnamnet skapas för det nya arkivet `testing`. Det ursprungliga innehållet i det nya arkivet `testing` är exakt detsamma som i det nyutgivna `stable` arkivet.

Både de `unstable` och de `testande` arkiven kan drabbas av tillfälliga störningar på grund av flera faktorer.

- Uppladdning av trasiga paket till arkivet (mest för `unstable`)

- Fördröjning av att acceptera nya paket i arkivet (mest för `unstable`)

- Problem med timing för arkivsynkronisering (både för `testing` och `unstable`)

- Manuella ingrepp i arkivet, t.ex. borttagning av paket (mer för `testing`) etc.

Så om du någonsin bestämmer dig för att använda dessa arkiv bör du kunna fixa eller arbeta runt den här typen av problem.

| Observera

Under några månader efter en ny `stable` version bör de flesta datoranvändare använda det `stable` arkivet med dess säkerhetsuppdateringar, även om de vanligtvis använder `unstable` arkiv eller `testing`. Under den här övergångsperioden är både `unstable` arkiv och `testing` inte bra för de flesta. Ditt system är svårt att hålla i gott skick med det `unstable` arkivet eftersom det drabbas av stora uppgraderingar av kärnpaket. `Testing`-arkivet är inte heller användbart eftersom det innehåller i stort sett samma innehåll som det `stable` arkivet utan dess säkerhetsstöd(Debian testing-security-announce 2008-12). Efter en månad eller så kan `unstable` arkiv eller `testing` bli användbara om du är försiktig.

| Tips
Vid spårning av `testarkivet` kan ett problem som orsakas av ett borttaget paket vanligtvis lösas genom att installera motsvarande paket från det `unstable` arkivet som laddas upp för buggfixning.

Se Debians policyhandbok för arkivdefinitioner.

- "Sektioner"

- "Prioriteringar"

- "Bassystem"

- "Viktiga paket"

### 2.1.6. Debian är 100% fri programvara

Debian är en 100% free programvara på grund av följande:

- Debian installerar endast fri programvara som standard för att respektera användarnas friheter.

- Debian tillhandahåller endast fri programvara i `main`.

- Debian rekommenderar att man endast kör fri programvara från `main`.

- Inga paket i `main` depend eller rekommenderar paket i `non-free` eller `non-free-firmware` eller `contrib`.

Vissa människor undrar om följande 2 fakta motsäger varandra eller inte.

- "Debian kommer att förbli 100% free". (Första villkoret i Debians sociala kontrakt)

- Debians servrar innehåller en del paket för `non-free-firmware`, `non-free` och `contrib`.

Dessa motsäger inte varandra, på grund av följande.

- Debian-systemet är 100% free och dess paket finns på Debian-servrar i `main`.

- Paket utanför Debiansystemet finns på Debians servrar i områdena `non-free`, `non-free-firmware` och `contrib`.

Dessa förklaras exakt i de 4:e och 5:e villkoren i Debians sociala kontrakt:

- Våra prioriteringar är våra användare och fri programvara

  - Vi kommer att vägledas av våra användares och den fria programvarugemenskapens behov. Vi kommer att sätta deras intressen först i våra prioriteringar. Vi kommer att stödja våra användares behov av drift i många olika typer av datormiljöer. Vi kommer inte att motsätta oss icke-fria verk som är avsedda att användas på Debiansystem, eller försöka ta ut en avgift av personer som skapar eller använder sådana verk. Vi kommer att tillåta andra att skapa distributioner som innehåller både Debiansystemet och andra verk, utan någon avgift från oss. För att främja dessa mål kommer vi att tillhandahålla ett integrerat system med material av hög kvalitet utan några juridiska restriktioner som skulle förhindra sådan användning av systemet.

- Verk som inte uppfyller våra standarder för fri programvara

  - Vi är medvetna om att vissa av våra användare kräver användning av verk som inte överensstämmer med Debians riktlinjer för fri programvara. Vi har skapat områdena "`non-free`", "`non-free-firmware`" och "`contrib`" i vårt arkiv för dessa verk. Paketen i dessa områden är inte en del av Debiansystemet, även om de har konfigurerats för att användas med Debian. Vi uppmuntrar cd-tillverkare att läsa licenserna för paketen i dessa områden och avgöra om de kan distribuera paketen på sina cd-skivor. Även om icke-fria verk inte är en del av Debian, stöder vi deras användning och tillhandahåller infrastruktur för icke-fria paket (såsom vårt buggspårningssystem och våra e-postlistor). Debians officiella media kan innehålla inbyggd programvara som annars inte är en del av Debiansystemet för att möjliggöra användning av Debian med maskinvara som kräver sådan inbyggd programvara.

| Notera
Den faktiska texten i den 5:e termen i det nuvarande Debian Social Contract 1.2 skiljer sig något från ovanstående text. Denna redaktionella avvikelse är avsiktlig för att göra detta användardokument konsekvent utan att ändra det verkliga innehållet i det sociala kontraktet.

Användare bör vara medvetna om riskerna med att använda paket i områdena `non-free`, `non-free-firmware` och `contrib`:

- brist på frihet för sådana programvarupaket

- brist på stöd från Debian för sådana programpaket (Debian kan inte stödja programvara på rätt sätt utan att ha tillgång till källkoden)

- kontaminering av ditt 100% free Debian-system

Debians riktlinjer för fri programvara är standarderna för fri programvara för Debian. Debian tolkar "programvara" i vidaste bemärkelse, inklusive dokument, inbyggd programvara, logotyp och illustrationer i paketet. Detta gör Debians standarder för fri programvara mycket strikta.

Typiska paket för `non-free`, `non-free-firmware` och `contrib` inkluderar fritt distribuerbara paket av följande typer:

- Dokumentpaket under GNU Free Documentation License med invarianta avsnitt som de för GCC och Make. (finns mestadels i avsnittet `non-free/doc`.)

- Firmwarepaket som innehåller binär data utan källa, t.ex. de som listas i Avsnitt 9.10.5, ”Drivrutiner för hårdvara och firmware” som `non-free-firmware`. (finns oftast i avsnittet `non-free-firmware/kernel`.)

- Spel- och typsnittspaket med restriktioner för kommersiell användning och/eller ändring av innehåll.

Observera att antalet paket i `non-free-`, `non-free-firmware-` och `contrib` är mindre än 2% jämfört med antalet i `main`. Att ge tillgång till områdena `non-free`, `non-free-firmware` och `contrib` döljer inte källan till paketen. Interaktiv helskärmsanvändning av `aptitude`(8) ger dig full insyn och kontroll över vilka paket som installeras från vilket område för att hålla ditt system så fritt som du önskar.

### 2.1.7. Beroenden av paket

Debiansystemet erbjuder en konsekvent uppsättning binära paket genom sin mekanism för deklaration av binära beroendeversioner i kontrollfilsfälten. Här är en lite förenklad definition för dem.

- "Depends"

  - Detta förklarar ett absolut beroende och alla paket som anges i detta fält måste installeras samtidigt eller i förväg.

- "Pre-Depends"

  - Detta är som Depends, förutom att det kräver en fullständig installation av de listade paketen i förväg.

- "Recommends"

  - Detta deklarerar ett starkt, men inte absolut, beroende. De flesta användare vill inte ha paketet om inte alla paket som anges i det här fältet är installerade.

- "Suggests"

  - Detta deklarerar ett svagt beroende. Många användare av detta paket kan dra nytta av att installera paket som listas i detta fält men kan ha rimliga funktioner utan dem.

- "Enhances"

  - Detta förklarar ett svagt beroende som Suggests men fungerar i motsatt riktning.

- "Breaks"

  - Detta deklarerar en paketinkompatibilitet, vanligtvis med någon versionsspecifikation. Lösningen är i allmänhet att uppgradera alla paket som listas i detta fält.

- "Conflicts"

  - Detta förklarar en absolut inkompatibilitet. Alla paket som anges i det här fältet måste tas bort för att installera det här paketet.

- "Replaces"

  - Detta deklareras när filer som installeras av detta paket ersätter filer i de listade paketen.

- "Provides"

  - Detta deklareras när detta paket innehåller alla filer och funktioner i de listade paketen.

| Notera
Observera att det är den sundaste konfigurationen att definiera "Provides", "Conflicts" och "Replaces" samtidigt för ett virtuellt paket. Detta säkerställer att endast ett verkligt paket som tillhandahåller detta virtuella paket kan installeras vid varje tillfälle.

Den officiella definitionen, inklusive källkodsberoende, finns i Policy Manual: Kapitel 7 - Deklaration av relationer mellan paket.

### 2.1.8. Händelseflödet för pakethanteringen

Här följer en sammanfattning av det förenklade händelseflödet för APT:s pakethantering.

- Uppdatera ("`apt update`", "`aptitude update`" eller "`apt-get update`"):

  1. Hämta arkivmetadata från fjärrarkiv

  2. Rekonstruktion och uppdatering av lokala metadata för användning av APT

- Uppgradera ("`apt upgrade`" och "`apt full-upgrade`" eller "`aptitude safe-upgrade`" och "`aptitude full-upgrade`" eller "`apt-get upgrade`" samt "`apt-get dist-upgrade`"):

  1. Välj kandidatversionen, som vanligtvis är den senaste tillgängliga versionen för alla installerade paket (se Avsnitt 2.7.7, ”Justera kandidatversionen med apt-pinning” för undantag)

  2. Lösning av paketberoenden

  3. Hämta utvalda binära paket från fjärrarkivet om kandidatversionen skiljer sig från den installerade versionen

  4. Packa upp hämtade binära paket

  5. Kör preinst skript

  6. Installera binära filer

  7. Kör postinst skript

- Installera ("`apt install …`", `aptitude install …`" eller "`apt-get install …`"):

  1. Välj paket som listas på kommandoraden

  2. Lösning av paketberoenden

  3. Hämta utvalda binära paket från fjärrarkiv

  4. Packa upp hämtade binära paket

  5. Kör preinst skript

  6. Installera binära filer

  7. Kör postinst skript

- Ta bort ("`apt remove …`", "`aptitude remove …`" eller "`apt-get remove …`"):

  1. Välj paket som listas på kommandoraden

  2. Lösning av paketberoenden

  3. Kör prerm skript

  4. Ta bort installerade filer utom konfigurationsfiler

  5. Kör postrm skript

- Rensning ("`apt purge`", "`aptitude purge .`.." eller "`apt-get purge ..."`):

  1. Välj paket som listas på kommandoraden

  2. Lösning av paketberoenden

  3. Kör prerm skript

  4. Ta bort installerade filer inklusive konfigurationsfiler

  5. Kör postrm skript

Här har jag avsiktligt hoppat över tekniska detaljer för helhetsbildens skull.

### 2.1.9. Första svaret på problem med pakethantering

Du bör läsa den fina officiella dokumentationen. Det första dokumentet att läsa är det Debian-specifika "`/usr/share/doc/package_name/README.Debian`". Annan dokumentation i "`/usr/share/doc/package_name/`" bör också läsas. Om du har ställt in shell som Avsnitt 1.4.2, ”Anpassa bash”, skriv följande.

    $ cd package_name
    $ pager README.Debian
    $ mc

Du kan behöva installera motsvarande dokumentationspaket med suffixet "`-doc`" för att få mer detaljerad information.

Om du upplever problem med ett specifikt paket, se till att först kolla upp Debians felhanteringssystem (BTS).

Tabell 2.5. Lista över viktiga webbplatser för att lösa problem med ett specifikt paket

webbplats | kommando
--- | ---
Webbsidan för Debians felhanteringssystem (BTS) | `sensible-browser "https://bugs.debian.org/"`
Felrapporten för ett känt paketnamn | `sensible-browser "https://bugs.debian.org/paketnamn"`
Buggrapporten med känt buggnummer | `sensible-browser "https://bugs.debian.org/buggnummer"`

Sök på Google med sökord som "`site:debian.org`", "`site:wiki.debian.org`", "`site:lists.debian.org`", etc.

När du lämnar in en felrapport ska du använda kommandot `reportbug`(1).

### 2.1.10. Hur man väljer Debian-paket

När du stöter på mer än två liknande paket och undrar vilket du ska installera utan att "pröva dig fram", bör du använda lite sunt förnuft. Jag anser att följande punkter är bra indikationer på vilka paket som är att föredra.

- Essential (Väsentlig): yes > no

- Area (Område): main > contrib > non-free

- Priority: required > important > standard > optional > extra

- Uppgifter: paket som listas i uppgifter som "Skrivbordsmiljö"

- Paket som väljs av beroendepaketet (t.ex. `gcc-10` av `gcc`)

- Popcon: högre i röst- och installationsantal

- Changelog: regelbundna uppdateringar av underhållaren

- BTS: Inga RC-buggar (inga kritiska, inga allvarliga och inga allvarliga buggar)

- BTS: underhållare som svarar på felrapporter

- BTS: högre antal av de nyligen åtgärdade buggarna

- BTS: lägre antal kvarvarande buggar som inte finns på önskelistan

Debian är ett frivilligt projekt med en distribuerad utvecklingsmodell, och dess arkiv innehåller många paket med olika fokus och kvalitet. Du måste fatta ditt eget beslut om vad du ska göra med dem.

### 2.1.11. Hur man hanterar motstridiga krav

Oavsett vilken svit av Debian-system du väljer att använda, kanske du ändå vill köra versioner av program som inte finns tillgängliga i den sviten. Även om du hittar binära paket av sådana program i andra Debian-sviter eller i andra icke-Debian-resurser, kan deras krav stå i konflikt med ditt nuvarande Debian-system.

Även om du kan justera pakethanteringssystemet med apt-pinning-teknik etc. som beskrivs i Avsnitt 2.7.7, ”Justera kandidatversionen med apt-pinning” för att installera sådana osynkroniserade binära paket, har sådana justeringsmetoder endast begränsade användningsområden eftersom de kan förstöra dessa program och ditt system.

Innan du brutalt installerar sådana osynkroniserade paket bör du söka efter alla tillgängliga alternativa säkrare tekniska lösningar som är kompatibla med ditt nuvarande Debian-system.

- Installera sådana program med motsvarande sandboxade uppströms binära paket (se Avsnitt 7.7, ”Sandlåda”).

  - Många GUI-program, t.ex. LibreOffice och GNOME-program, finns tillgängliga som Flatpak-, Snap- eller AppImage-paket.

- Skapa en chroot eller liknande miljö och kör sådana program i den (se Avsnitt 9.11, ”Virtualiserat system”).

  - CLI-kommandon kan enkelt köras under dess kompatibla chroot (se Avsnitt 9.11.4, ”Chroot-system”).

  - Flera fullständiga skrivbordsmiljöer kan enkelt provas utan omstart (se Avsnitt 9.11.5, ”Flera skrivbordssystem”).

- Bygg själv önskade versioner av binära paket som är kompatibla med ditt nuvarande Debian-system.

  - Detta är inte en trivial uppgift (se Avsnitt 2.7.13, ”Portering av ett paket till det stabila systemet”).

## 2.2. Grundläggande funktioner för pakethantering

Förvaringsbaserade pakethanteringsåtgärder i Debiansystemet kan utföras av många APT-baserade pakethanteringsverktyg som finns tillgängliga i Debiansystemet. Här förklarar vi 3 grundläggande pakethanteringsverktyg: `apt`, `apt-get` / `apt-cache` och `aptitude`.

Du måste ha root-behörighet för att kunna utföra pakethanteringsåtgärder som innebär paketinstallation eller uppdatering av paketmetadata.

### 2.2.1. `apt` mot `apt-get` / `apt-cache` mot `aptitude`

Även om `aptitude` är ett mycket trevligt interaktivt verktyg som författaren huvudsakligen använder, bör du känna till några försiktiga fakta:

- Kommandot `aptitude` rekommenderas inte för systemuppgradering från release till release på det `stable` Debian-systemet efter den nya releasen.

  - Användning av "`apt full-upgrade`" eller "`apt-get dist-upgrade`" rekommenderas för detta. Se fel #411280.

- Kommandot `aptitude` föreslår ibland massborttagning av paket för systemuppgraderingen på det `testande` eller `unstable` Debian-systemet.

  - Den här situationen har skrämt många systemadministratörer. Få inte panik.

  - Detta verkar främst bero på versionsskillnader mellan paket som är beroende av eller rekommenderas av ett metapaket som `gnome-core`.

  - Detta kan lösas genom att välja "Cancel pending actions" i kommandomenyn för `aptitude`, avsluta `aptitude` och använda "`apt full-upgrade`".

Kommandona `apt-get` och `apt-cache` är de mest grundläggande APT-baserade pakethanteringsverktygen.

- `apt-get` och `apt-cache` erbjuder endast användargränssnittet för kommandoraden.

- `apt-get` är mest lämpligt för större systemuppgraderingar mellan releaser etc.

- `apt-get` erbjuder en robust lösning för paketberoenden.

- `apt-get` är mindre krävande när det gäller hårdvaruresurser. Det förbrukar mindre minne och körs snabbare.

- `apt-cache` erbjuder en standardregexbaserad sökning på paketets namn och beskrivning.

- `apt-get` och `apt-cache` kan hantera flera versioner av paket med hjälp av `/etc/apt/preferences` men det är ganska besvärligt.

Kommandot `apt` är ett kommandoradsgränssnitt på hög nivå för pakethantering. Det är i grunden ett omslag för `apt-get`, `apt-cache` och liknande kommandon, ursprungligen avsett som ett gränssnitt för slutanvändare och aktiverar vissa alternativ som är bättre lämpade för interaktiv användning som standard.

- `apt` tillhandahåller en vänlig förloppsindikator när du installerar paket med `apt install`.

- `apt` kommer att ta bort cachade `.deb-paket` som standard efter lyckad installation av hämtade paket.

| Tips
Användare rekommenderas att använda det nya kommandot `apt`(8) för interaktiv användning och att använda kommandona `apt-get`(8) och `apt-cache`(8) i skalskriptet.

Kommandot `aptitude` är det mest mångsidiga APT-baserade verktyget för pakethantering.

- `aptitude` erbjuder användargränssnittet för interaktiv text i fullskärm.

- `aptitude` erbjuder även ett användargränssnitt för kommandoraden.

- `aptitude` är mest lämpad för den dagliga interaktiva pakethanteringen, t.ex. kontroll av installerade paket och sökning efter tillgängliga paket.

- `aptitude` är mer krävande när det gäller hårdvaruresurser. Den förbrukar mer minne och körs långsammare.

- `aptitude` erbjuder en förbättrad regexbaserad sökning på alla paketets metadata.

- `aptitude` kan hantera flera versioner av paket utan att använda `/etc/apt/preferences` och det är ganska intuitivt.

### 2.2.2. Grundläggande pakethanteringsoperationer med kommandoraden

Här följer grundläggande åtgärder för pakethantering via kommandoraden med `apt`(8), `aptitude`(8) och `apt-get`(8) `/apt-cache`(8).

Tabell 2.6. Grundläggande pakethantering med kommandoraden med `apt`(8), `aptitude`(8) och `apt-get`(8) `/apt-cache`(8)

`apt`-syntax | `aptitude`-syntax | syntax för `apt-get`/`apt-cache` | beskrivning
--- | --- | --- | ---
`apt update` | `aptitude update` | `apt-get update` | uppdatera metadata för paketarkiv
`apt install foo` | `aptitude install foo` | `apt-get install foo` | installera kandidatversionen av "`foo`"-paketet med dess beroenden
`apt upgrade` | `aptitude safe-upgrade` | `apt-get upgrade` | installera kandidatversionen av installerade paket utan att ta bort några andra paket
`apt full-upgrade` | `aptitude full-upgrade` | `apt-get dist-upgrade` | installera kandidatversionen av installerade paket samtidigt som andra paket tas bort vid behov
`apt remove foo` | `aptitude remove foo` | `apt-get remove foo` | ta bort paketet "`foo`" och lämna kvar dess konfigurationsfiler
`apt autoremove` | N/A | `apt-get autoremove` | ta bort automatiskt installerade paket som inte längre behövs
`apt purge foo` | `aptitude purge foo` | `apt-get purge foo` | rensa paketet "`foo`" med dess konfigurationsfiler
`apt clean` | `aptitude clean` | `apt-get clean` | tömma det lokala arkivet på hämtade paketfiler helt och hållet
`apt autoclean` | `aptitude autoclean` | `apt-get autoclean` | rensa ut det lokala arkivet med hämtade paketfiler för föråldrade paket
`apt show foo` | `aptitude show foo` | `apt-cache show foo` | visa detaljerad information om "`foo`" paketet
`apt-sökning regex` | `aptit sökning regex` | `apt-cache sök regex` | sök paket som matchar regex
N/A | `aptit varför regex` | N/A | förklara anledningen till att paket för regexmatchning bör installeras
N/A | `aptit varför inte regex` | N/A | förklara orsaken till att paket för regexmatchning inte kan installeras
`apt list --manual-installed` | `aptitude search '~i!~M'` | `apt-mark showmanual` | lista manuellt installerade paket

`apt` / `apt-get` och `aptitude` kan blandas utan större problem.

"`aptitude why regex`" kan lista mer information genom "`aptitude -v why regex`". Liknande information kan erhållas med "`apt rdepends package`" eller "`apt-cache rdepends package`".

När kommandot `aptitude` startas i kommandoradsläget och stöter på problem, t.ex. paketkonflikter, kan du växla till det interaktiva helskärmsläget genom att trycka på "`e"`-tangenten senare vid prompten.

| Notera
Även om kommandot `aptitude` har många funktioner, t.ex. en förbättrad paketlösare, har denna komplexitet orsakat (eller kan fortfarande orsaka) vissa regressioner, t.ex. fel #411123, fel #514930 och fel #570377. Om du är osäker bör du använda kommandona `apt`, `apt-get` och `apt-cache` i stället för kommandot `aptitude`.

Du kan ange kommandoalternativ direkt efter "`aptitude`".

Tabell 2.7. Anmärkningsvärda kommandoalternativ för `aptitude`(8)

kommandoalternativ | beskrivning
--- | ---
`-s` | simulera resultatet av kommandot
`-d` | endast nedladdning men ingen installation/uppgradering
`-D` | visa korta förklaringar före automatiska installationer och borttagningar

Se `aptitude`(8) och "aptitude user's manual" på "`/usr/share/doc/aptitude/README`" för mer information.

### 2.2.3. Interaktiv användning av begåvning

För interaktiv pakethantering startar du `aptitude` i interaktivt läge från konsolens shellprompt på följande sätt.

    $ sudo aptitude -u
    Password:

Detta uppdaterar den lokala kopian av arkivinformationen och visar paketlistan i helskärmen med meny. Aptitude placerar sin konfiguration i "`~/.aptitude/config`".

| Tips
Om du vill använda roots konfiguration i stället för användarens använder du "`sudo -H aptitude ..."` i stället för "`sudo aptitude ..."` i ovanstående uttryck.

| Tips
`Aptitude` ställer automatiskt in väntande åtgärder när det startas interaktivt. Om du inte gillar det kan du återställa det från menyn: "Åtgärd" → "Avbryt väntande åtgärder".

### 2.2.4. Viktiga bindningar för lämplighet

Viktiga tangenttryckningar för att bläddra igenom status för paket och för att ange "planerad åtgärd" för dem i detta helskärmsläge är följande.

Tabell 2.8. Lista över nyckelbindningar för aptitude

nyckel | nyckelbindning
--- | ---
`F10` eller `Ctrl-t` | meny
`?` | visa hjälp för tangenttryckning (mer fullständig lista)
`F10` → Hjälp → Användarhandbok | display Användarmanual
`u` | uppdatera paketets arkivinformation
`+` | markera paketet för uppgradering eller installation
`-` | markera paketet för borttagning (behåll konfigurationsfiler)
`_` | markera paketet för rensning (ta bort konfigurationsfiler)
`=` | lägga paketet på is
`U` | markera alla uppgraderingsbara paket (fungerar som fullständig uppgradering)
`g` | påbörja nedladdning och installation av valda paket
`q` | lämna aktuell skärm och spara ändringar
`x` | lämna aktuell skärm och kassera ändringar
`Ange` | visa information om ett paket
`C` | visa ett pakets changelog
`l` | ändra gränsen för de visade paketen
`/` | sök efter den första matchen
`\` | upprepa den senaste sökningen

Filnamnsspecifikationen på kommandoraden och menyprompten efter att du har tryckt på "`l`" och "`//`" använder Aptitude regex enligt beskrivningen nedan. Aptitude regex kan uttryckligen matcha ett paketnamn med hjälp av en sträng som inleds med "`~n`" och följs av paketnamnet.

| Tips
Du måste trycka på "`U`" för att få alla installerade paket uppgraderade till kandidatversionen i det visuella gränssnittet. Annars uppgraderas endast de valda paketen och vissa paket med versionsberoende till dem till kandidatversionen.

### 2.2.5. Paketera visningar under aptitude

I det interaktiva helskärmsläget för `aptitude`(8) visas paketen i paketlistan som i nästa exempel.

    idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

Här betyder denna linje från vänster som följande.

- Flaggan "nuvarande tillstånd" (den första bokstaven)

- Flaggan för "planerad åtgärd" (den andra bokstaven)

- Den "automatiska" flaggan (den tredje bokstaven)

- Paketets namn

- Förändringen i användningen av diskutrymme till följd av "planerad åtgärd"

- Den aktuella versionen av paketet

- Kandidatversionen av paketet

| Tips
Den fullständiga listan över flaggor finns längst ned på hjälpskärmen och visas genom att trycka på "`?`".

Kandidatversionen väljs enligt de aktuella lokala preferenserna (se `apt_preferences`(5) och Avsnitt 2.7.7, ”Justera kandidatversionen med apt-pinning”).

Flera olika typer av paketvyer finns tillgängliga under menyn "`V`yer".

Tabell 2.9. Lista över vyer för lämplighet

visa | beskrivning av vy
--- | ---
`Paketvy` | se Tabell 2.10, ”Kategoriseringen av standardpaketets vyer” (standard)
`Rekommendationer från revisionen` | lista paket som rekommenderas av vissa installerade paket men som ännu inte har installerats
`Platt Paketlista` | lista paket utan kategorisering (för användning med regex)
`Debtags webbläsare` | lista paket kategoriserade enligt deras debtags-poster
`Källa Paket Visa` | lista paket grupperade efter källpaket

| Notera
Hjälp oss att förbättra märkningen av paket med debtags!

Standardfunktionen "`Package View`" kategoriserar paket ungefär som `dselect` med några extra funktioner.

Tabell 2.10. Kategoriseringen av standardpaketets vyer

kategori | beskrivning av vy
--- | ---
`Uppgraderingsbara paket` | lista paket organiserade som `sektion` → `område` → `paket`
`Nya paket` | , ,
`Installerade paket` | , ,
`Inte installerade paket` | , ,
`Föråldrade och lokalt skapade förpackningar` | , ,
`Virtuella paket` | lista paket med samma funktion
`Uppgifter` | lista paket med olika funktioner som vanligtvis behövs för en uppgift

| Tips
`Tasks-vyn` kan användas för att välja ut paket för din uppgift.

### 2.2.6. Sök metodalternativ med aptitude

Aptitude erbjuder flera alternativ för att söka efter paket med hjälp av regex-formeln.

- Shell kommandorad:

  - "`aptitude search 'aptitude_regex'`" för att lista installationsstatus, paketnamn och kort beskrivning av matchande paket

  - "`aptitude show 'package_name'`" för att visa en detaljerad beskrivning av paketet

- Interaktivt helskärmsläge:

  - "`l`" för att begränsa paketvisningen till matchande paket

  - "`/`" för sökning till ett matchande paket

  - "`\`" för bakåtriktad sökning till ett matchande paket

  - "`n`" för hitta nästa

  - "`N`" för find-next (bakåt)

| Tips
Strängen för package_name behandlas som den exakta strängmatchningen till paketnamnet om den inte uttryckligen inleds med "`~`" för att vara regexformeln.

### 2.2.7. Formeln för regex för lämplighet

Aptitude-regexformeln är mutt-liknande utökad ERE (se Avsnitt 1.6.2, ”Vanliga uttryck”) och betydelserna av de `aptitude-specifika` speciella matchningsregeltilläggen är följande.

Tabell 2.11. Lista över regexformeln för lämplighet

beskrivning av den utökade matchningsregeln | regex-formel
--- | ---
matcha på förpackningsnamn | `~nregex_namn`
matcha på beskrivning | `~dregex_beskrivning`
matcha på uppgiftsnamn | `~tregex_task`
match på debtag | `~Gregex_debtag`
matcha på underhållare | `~mregex_maintainer`
match på paketavsnitt | `~sregex_section`
matcha på paketversion | `~Vregex_version`
matcharkiv | `~A{trixie,forky,sid`}
matcha ursprung | `~O{debian,…`}
matcha prioritet | `~p{extra,important,optional,required,standard`}
matcha viktiga paket | `~E`
matcha virtuella paket | `~v`
matcha nya paket | `~N`
matchning med pågående åtgärd | `~a{install,upgrade,downgrade,remove,purge,hold,keep`}
matcha installerade paket | `~i`
matcha installerade paket med A-märkning(automatiskt installerade paket) | `~M`
matcha installerade paket utan A-märkning(administratörsvalda paket) | `~i!~M`
matcha installerade och uppgraderingsbara paket | `~U`
match avlägsnade men inte rensade paket | `~c`
matchade borttagna, rensade eller kan tas bort paket | `~g`
matcha paket som deklarerar ett brutet beroende | `~b`
matcha paket som deklarerar brutna beroenden av typen | `~Btype`
matcha mönsterpaket som deklarerar beroende av typen | `~D[type:]mönster`
matcha mönsterpaket som deklarerar brutet beroende av typen | `~DB[type:]mönster`
matcha paket till vilka det mönstermatchande paketet deklarerar beroendetyp | `~R[type:]mönster`
matcha paket till vilka det mönstermatchande paketet deklarerar bruten beroendetyp | `~RB[type:]mönster`
matcha paket som vissa andra installerade paket är beroende av | `~R~i`
matcha paket som inga andra installerade paket är beroende av | `!~R~i`
matcha paket som vissa andra installerade paket är beroende av eller rekommenderar | `~R~i|~Rrekommenderar:~i`
matcha mönsterpaket med filtrerad version | `~S filtermönster`
matcha alla paket (true) | `~T`
matcha inga paket (false) | `~F`

- Regex-delen är samma ERE som används i typiska Unix-liknande textverktyg som använder "`^`", ".`*`", "`$`" etc. som i `egrep`(1), `awk`(1) och `perl`(1).

- Beroendetypen är en av (depends, predepends, recommends, suggests, conflicts, replaces, provides) som anger paketets inbördes förhållande.

- Standardberoendetypen är "depends".

| Tips
När regex_pattern är en nollsträng placeras "`~T`" omedelbart efter kommandot.

Här är några genvägar.

- "`~Pterm`" == "`~Dprovides:term`"

- "`~Cterm`" == "`~Dkonflikter:term`"

- "`…~W term`" == "`(…|term)`"

Användare som är bekanta med `mutt` lär sig snabbt, eftersom mutt var inspirationen till uttryckssyntaxen. Se "SÖKNING, BEGRÄNSNING OCH UTTRYCK" i "Användarhandboken" "`/usr/share/doc/aptitude/README`".

| Notera
Med `Lenny-versionen` av `aptitude`(8) kan den nya långa syntaxen som "`?broken`" användas för regex-matchning i stället för den gamla korta motsvarigheten "`~b`". Nu betraktas mellanslagstecken "`` " som ett av regexens avslutande tecken utöver tilde-tecken "`~`". Se "Användarhandboken" för den nya syntaxen i långform.

### 2.2.8. Beroendeupplösning av lämplighet

Valet av ett paket i `aptitude` drar inte bara in paket som definieras i dess "`Depends:`"-lista utan även i "`Recommends`:"-listan om menyn "`F10` → Options → Preferences → Dependency handling" är inställd i enlighet med detta. Dessa automatiskt installerade paket tas bort automatiskt om de inte längre behövs under `aptitude`.

Flaggan som styr kommandot `aptitude` är "auto install"-beteende kan också manipuleras med kommandot `apt-mark`(8) från `apt-paketet`.

### 2.2.9. Loggar över paketaktiviteter

Du kan kontrollera paketaktivitetshistoriken i loggfilerna.

Tabell 2.12. Loggfiler för paketaktiviteter

fil | innehåll
--- | ---
`/var/log/dpkg.log` | Logg över aktivitet på `dpkg-nivå` för alla paketaktiviteter
`/var/log/apt/term.log` | Logg över generisk APT-aktivitet
`/var/log/aptitude` | Logg över aktiviteten för kommandot `aptitude`

I verkligheten är det inte så lätt att snabbt få en meningsfull förståelse från dessa loggar. Se Avsnitt 9.3.9, ”Registrering av ändringar i konfigurationsfiler” för ett enklare sätt.

## 2.3. Exempel på lämplighetsoperationer

Här är några exempel på `aptitude`(8)-operationer.

### 2.3.1. Söker intressanta paket

Du kan söka efter paket som uppfyller dina behov med `aptitude` från paketbeskrivningen eller från listan under "Tasks".

### 2.3.2. Lista paket med regex-matchning på paketnamn

Följande kommando listar paket med regex-matchning på paketnamn.

    $ aptitude search '~n(pam|nss).*ldap'
    p libnss-ldap - NSS module for using LDAP as a naming service
    p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

Detta är mycket praktiskt om du vill hitta det exakta namnet på ett paket.

### 2.3.3. Bläddra med regex-matchning

Regexet "`~dipv6`" i vyn "New Flat Package List" med prompten "`l`" begränsar vyn till paket med matchande beskrivning och låter dig bläddra igenom deras information interaktivt.

### 2.3.4. Utrensning av borttagna paket för gott

Du kan rensa bort alla återstående konfigurationsfiler för borttagna paket.

Kontrollera resultatet av följande kommando.

    # aptitude search '~c'

Om du tror att de listade paketen är OK att rensa, kör följande kommando.

    # aptitude purge '~c'

Du kanske vill göra samma sak i det interaktiva läget för att få mer detaljerad kontroll.

Du anger regex "`~c`" i vyn "New Package View" med prompten "`l".` Detta begränsar paketvyn till att endast omfatta paket som matchas med regex, dvs. "borttagna men inte rensade". Alla dessa regex-matchade paket kan visas genom att trycka på "`[`" i rubrikerna på översta nivån.

Sedan trycker du på "`_`" vid rubriker på högsta nivå, t.ex. "Ej installerade paket". Endast regexmatchade paket under rubriken markeras för att rensas med detta. Du kan utesluta vissa paket som ska rensas genom att trycka på "`=`" interaktivt för vart och ett av dem.

Den här tekniken är ganska praktisk och fungerar för många andra kommandotangenter.

### 2.3.5. Städning av status för automatisk/manuell installation

Så här städar jag upp status för automatisk/manuell installation av paket (efter att ha använt installationsprogram för paket som inte är aptitude etc.).

1. Starta `aptitude` i interaktivt läge som root.

2. Skriv "`u`", "`U`", "`f"` och "`g`" för att uppdatera och uppgradera paketlistan och paketen.

3. Skriv "`l`" för att ange paketets visningsgräns som "`~i(~R~i|~Rrecommends:~i`)" och skriv "`M`" över "`Installed Packages`" som automatiskt installerat.

4. Skriv "`l`" för att ange paketets visningsgräns som "`~prequired|~pimportant|~pstandard|~E`" och skriv "`m"` över "`Installed Packages`" som manuellt installerat.

5. Skriv "`l`" för att ange gränsen för paketvisning som "`~i!~M`" och ta bort oanvända paket genom att skriva "`-`" över vart och ett av dem efter att ha exponerat dem genom att skriva "`[`" över "`Installerade paket`".

6. Skriv "`l`", för att ange paketets visningsgräns som "`~i`"; skriv sedan "`m`" över "`Tasks`", för att markera det paketet som manuellt installerat.

7. Avsluta `aptitude`.

8. Starta "`apt-get -s autoremove|less`" som root för att kontrollera vad som inte används.

9. Starta om `aptitude` i interaktivt läge och markera nödvändiga paket som "`m`".

10. Starta om "`apt-get -s autoremove|less`" som root för att kontrollera att REMOVED endast innehåller förväntade paket.

11. Starta "`apt-get autoremove|less`" som root för att automatiskt ta bort oanvända paket.

"`m`"-åtgärden över "`Tasks`" är valfri för att förhindra massuttag av paket i framtiden.

### 2.3.6. Systemomfattande uppgradering

| Notera

När du flyttar till en ny version bör du överväga att utföra en ren installation av det nya systemet, även om Debian kan uppgraderas enligt beskrivningen nedan. Detta ger dig en chans att ta bort skräp som samlats in och exponerar dig för den bästa kombinationen av de senaste paketen. Naturligtvis bör du göra en fullständig säkerhetskopiering av systemet till en säker plats (se Avsnitt 10.2, ”Backup och återställning”) innan du gör detta. Jag rekommenderar att du gör en dual boot-konfiguration med olika partitioner för att få den smidigaste övergången.

Du kan göra en systemomfattande uppgradering till en nyare version genom att ändra innehållet i källistan som pekar på en ny version och köra kommandot "`apt update; apt dist-upgrade`".

För att uppgradera från `stable` till `testing` eller `unstable` under utgivningscykeln `trixie`-as-`stable` ersätter du "`trixie`" i källistexemplet på Avsnitt 2.1.5, ”Grunderna i Debian-arkivet” med "`forky`" eller "`sid`".

I verkligheten kan du stöta på vissa komplikationer på grund av vissa problem med paketövergången, främst på grund av paketberoenden. Ju större skillnaden mellan uppgraderingarna är, desto större är sannolikheten att du får större problem. För övergången från den gamla `stable` till den nya `stable` efter lanseringen kan du läsa dess nya Release Notes och följa den exakta proceduren som beskrivs i den för att minimera problem.

När du bestämmer dig för att flytta från `stable` till `testing` innan den formella releasen finns det inga Release Notes som kan hjälpa dig. Skillnaden mellan `stable` och `testing` kan ha blivit ganska stor efter den föregående `stable` releasen och gör uppgraderingssituationen komplicerad.

Du bör vidta försiktighetsåtgärder för den fullständiga uppgraderingen samtidigt som du samlar in den senaste informationen från sändlistan och använder sunt förnuft.

1. Läs tidigare "Release Notes".

2. Säkerhetskopiera hela systemet (särskilt data- och konfigurationsinformation).

3. Ha startbart media till hands för trasig bootloader.

4. Informera användarna om systemet i god tid.

5. Registrera uppgraderingsaktivitet med `skript`(1).

6. Använd "unmarkauto" på nödvändiga paket, t.ex. "`aptitude unmarkauto vim`", för att förhindra borttagning.

7. Minimera antalet installerade paket för att minska risken för paketkonflikter, t.ex. genom att ta bort paket för skrivbordsuppgifter.

8. Ta bort filen "`/etc/apt/preferences`" (inaktivera apt-pinning).

9. Försök att uppgradera stegvis: `oldstable` → `stable` → `testing` → `unstable`.

10. Uppdatera källistan så att den endast pekar på det nya arkivet och kör "`aptitude update`".

11. Installera eventuellt nya kärnpaket först, t.ex. "`aptitude install perl`".

12. Kör kommandot "`apt-get -s dist-upgrade`" för att bedöma effekten.

13. Kör kommandot "`apt-get dist-upgrade`" till sist.

| Observera
Det är inte klokt att hoppa över en större Debian-utgåva när man uppgraderar mellan `stable` utgåvor.

| Observera
I tidigare "Release Notes" har GCC, Linux Kernel, initrd-tools, Glibc, Perl, APT tool chain etc. krävt särskild uppmärksamhet för systemomfattande uppgradering.

| Observera
"Release Notes" may not cover all possible cases. If you change low level configurations, your next upgrade may fail badly as "... segfault after upgrade ...".

För dagliga uppgradering i `unstable`, se Avsnitt 2.4.3, ”Skydd för paketproblem”.

## 2.4. Avancerade åtgärder för pakethantering

### 2.4.1. Avancerad pakethantering med kommandoraden

Här är en lista över andra pakethanteringsoperationer för vilka `aptitude` är för hög nivå eller saknar nödvändiga funktioner.

Tabell 2.13. Lista över avancerade åtgärder för pakethantering

kommando | åtgärd
--- | ---
`COLUMNS=120 dpkg -l paketnamn_mönster` | lista status för ett installerat paket för felrapporten
`dpkg -L paketnamn` | lista innehållet i ett installerat paket
`dpkg -L paketnamn | egrep '/usr/share/man/man.*/.+'` | lista manpages för ett installerat paket
`dpkg -S fil_namn_mönster` | lista installerade paket som har matchande filnamn
`apt-file search filnamnsmönster` | lista paket i arkivet som har matchande filnamn
`apt-file list paketnamnsmönster` | lista innehållet i matchande paket i arkivet
`dpkg-reconfigure paketnamn` | konfigurera om det exakta paketet
`dpkg-reconfigure -plow paketnamn` | konfigurera om det exakta paketet med den mest detaljerade frågan
`configure-debian` | omkonfigurera paket från helskärmsmenyn
`dpkg --audit` | granskningssystem för delvis installerade paket
`dpkg --configure -a` | konfigurera alla delvis installerade paket
`apt-cache-policy binärt_paketnamn` | visa tillgänglig versions-, prioritets- och arkivinformation för ett binärt paket
`apt-cache madison paketnamn` | visa tillgänglig version, arkivinformation för ett paket
`apt-cache showsrc binär_paketnamn` | visa information om källpaketet för ett binärt paket
`apt-get build-dep paket_namn` | installera nödvändiga paket för att bygga paket
`aptitude build-dep paket_namn` | installera nödvändiga paket för att bygga paket
`apt-get källa paketnamn` | ladda ner en källa (från standardarkivet)
`dget URL för dsc-fil` | ladda ner ett källpaket (från annat arkiv)
`dpkg-source -x paketnamn_version-debian.revision.dsc` | bygg ett källträd från en uppsättning källkodspaket ("`*.orig.tar.gz`" och "`*.debian.tar.gz`"/"`*.diff.gz`")
`debuild binary` | bygga paket från ett lokalt källträd
`make-kpkg kernel_image` | bygga ett kernelpaket från ett kernelkällträd
`make-kpkg --initrd kernel_image` | bygga ett kernelpaket från ett kernelkällträd med initramfs aktiverat
`dpkg -i paketnamn_version-debian.revision_arch.deb` | installera ett lokalt paket till systemet
`apt install /sökväg/till/paketfilnamn.deb` | installera ett lokalt paket i systemet och under tiden försöka lösa beroendet automatiskt
`debi paketnamn_version-debian.revision_arch.dsc` | installera lokala paket till systemet
`dpkg --get-selections '*' >selection.txt` | spara `dpkg` nivå paketval statusinformation
`dpkg --set-selections <val.txt` | set `dpkg` level information om status för val av paket
`echo paketnamn hold | dpkg --set-selections` | ställa in paketvalsstatus på `dpkg-nivå` för ett paket att hålla (motsvarande "`aptitude hold package_name`")

| Notera
För ett paket med multi-arch-funktionen kan du behöva ange arkitekturnamnet för vissa kommandon. Använd till exempel "`dpkg -L libglib2.0-0:amd64`" för att lista innehållet i paketet `libglib2.0-0` för arkitekturen `amd64`.

| Observera
Paketverktyg på lägre nivå som "`dpkg -i ..."` och "`debi …`.." bör användas med försiktighet av systemadministratören. De tar inte automatiskt hand om nödvändiga paketberoenden. Dpkg:s kommandoradsalternativ "`--force-all`" och liknande (se `dpkg`(1)) är endast avsedda att användas av experter. Att använda dem utan att fullt ut förstå deras effekter kan förstöra hela ditt system.

Vänligen notera följande.

- Alla kommandon för systemkonfiguration och installation måste köras från root.

- Till skillnad från `aptitude` som använder regex (se Avsnitt 1.6.2, ”Vanliga uttryck”) använder andra kommandon för pakethantering mönster som shell glob (se Avsnitt 1.5.6, ”Skal glob”).

- `apt-file`(1) som tillhandahålls av `apt-file-paketet` måste köra "`apt-file update`" i förväg.

- `configure-debian`(8) som tillhandahålls av paketet `configure-debian` använder `dpkg-reconfigure`(8) som backend.

- `dpkg-reconfigure`(8) kör paketskript med `debconf`(1) som backend.

- kommandona "`apt-get build-dep`", "`apt-get source`" och "`apt-cache showsrc`" kräver att "`deb-src`" anges i källistan.

- `dget`(1), `debuild`(1) och `debi`(1) kräver paketet `devscripts`.

- Se (om)paketeringsproceduren med hjälp av "`apt-get source`" på Avsnitt 2.7.13, ”Portering av ett paket till det stabila systemet”.

- kommandot `make-kpkg` kräver paketet `kernel-package` (se Avsnitt 9.10, ”Kärnan”).

- Se Avsnitt 12.9, ”Skapa Debian-paket” för allmänna förpackningar.

### 2.4.2. Verifiering av installerade paketfiler

Installationen av `debsums` möjliggör verifiering av installerade paketfiler mot MD5sum-värden i filen "`/var/lib/dpkg/info/*.md5sums`" med `debsums`(1). Se Avsnitt 10.3.5, ”MD5-summan” för information om hur MD5sum fungerar.

| Notera
Eftersom MD5sum-databasen kan manipuleras av en inkräktare är `debsums`(1) av begränsad nytta som säkerhetsverktyg. Det är bara bra för att kontrollera lokala ändringar av administratören eller skador på grund av mediefel.

### 2.4.3. Skydd för paketproblem

Många användare föredrar att följa de testversioner (eller unstable versioner) av Debian-systemet som innehåller nya funktioner och paket. Detta gör systemet mer benäget att drabbas av de kritiska paketbuggarna.

Installationen av paketet `apt-listbugs` skyddar ditt system mot kritiska buggar genom att Debian BTS automatiskt kontrolleras för kritiska buggar vid uppgradering med APT-systemet.

Installationen av paketet `apt-listchanges` ger viktiga nyheter i "`NEWS.Debian`" vid uppgradering med APT-systemet.

### 2.4.4. Sökning på paketets metadata

Även om det numera är lätt att söka i paketets metadata genom att besöka Debians webbplats https://packages.debian.org/, ska vi titta på mer traditionella sätt.

Kommandona `grep-dctrl`(1), `grep-status`(1) och `grep-available`(1) kan användas för att söka i alla filer som har det allmänna formatet för en Debian-paketkontrollfil.

"`dpkg -S file_name_pattern`" kan användas för att söka efter paketnamn som innehåller filer med matchande namn som installerats av `dpkg`. Men detta förbiser filer som skapats av underhållsskript.

Om du behöver göra en mer detaljerad sökning i dpkg:s metadata måste du köra kommandot "`grep -e regex_pattern *`" i katalogen "`/var/lib/dpkg/info/`". Detta gör att du kan söka på ord som nämns i paketskript och installationsfrågetexter.

Om du vill söka efter paketberoenden rekursivt bör du använda `apt-rdepends`(8).

## 2.5. Interna funktioner för Debians pakethantering

Låt oss lära oss hur Debians pakethanteringssystem fungerar internt. Detta bör hjälpa dig att skapa din egen lösning på vissa paketproblem.

### 2.5.1. Metadata för arkiv

Metadatafiler för varje distribution lagras under "`dist/codename`" på varje Debian-spegelsida, t.ex. "`http://deb.debian.org/debian/".` Dess arkivstruktur kan bläddras igenom med webbläsaren. Det finns 6 typer av nyckelmetadata.

Tabell 2.14. Innehållet i Debian-arkivets metadata

fil | plats | innehåll
--- | --- | ---
`Release` | toppen av distributionen | arkivbeskrivning och integritetsinformation
`Release.gpg` | toppen av distributionen | signaturfil för filen "`Release`" signerad med arkivnyckeln
`Contents-architecture` | toppen av distributionen | lista över alla filer för alla paket i det aktuella arkivet
`Release` | toppen av varje kombination av distribution/område/arkitektur | arkivbeskrivning som används för regeln i `apt_preferences`(5)
`Paket` | toppen av varje kombination av distribution/område/binär-arkitektur | sammanlänkad `debian/control` för binära paket
`Källor` | toppen av varje kombination av distribution/område/källa | sammanlänkad `debian/control` för källkodspaket

I det senaste arkivet lagras dessa metadata som komprimerade och differentierade filer för att minska nätverkstrafiken.

### 2.5.2. "Release"-fil på högsta nivå och äkthet

| Tips
Filen "`Release"` på högsta nivån används för att signera arkivet under det säkra APT-systemet.

Varje svit i Debian-arkivet har en "`Release`"-fil på högsta nivån, t.ex. "`http://deb.debian.org/debian/dists/unstable/Release",` enligt följande.

    Origin: Debian
    Label: Debian
    Suite: unstable
    Codename: sid
    Date: Sat, 14 May 2011 08:20:50 UTC
    Valid-Until: Sat, 21 May 2011 08:20:50 UTC
    Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
    Components: main contrib non-free
    Description: Debian x.y Unstable - Not Released
    MD5Sum:
     bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
     9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
     3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
    ...

| Notera
Här kan du läsa min motivering till att använda "suite" och "codename" i Avsnitt 2.1.5, ”Grunderna i Debian-arkivet”. "Distribution" används när man hänvisar till både "suite" och "codename". Alla arkivnamn för "area" som erbjuds av arkivet listas under "Components".

Integriteten hos filen "`Release`" på högsta nivån verifieras av en kryptografisk infrastruktur som kallas secure apt och som beskrivs i `apt-secure`(8).

- Den kryptografiska signaturfilen "`Release.gpg`" skapas från den autentiska toppnivåfilen "`Release`" och den hemliga Debian-arkivnyckeln.

- De offentliga Debian-arkivnycklarna installeras lokalt med det senaste paketet `debian-archive-keyring`.

- Det säkra APT-systemet verifierar automatiskt integriteten hos den nedladdade filen "`Release`" på högsta nivån kryptografiskt med hjälp av filen "`Release.gpg`" och de lokalt installerade offentliga Debian-arkivnycklarna.

- Integriteten hos alla "`Packages`"- och "`Sources"`-filer verifieras med hjälp av MD5sum-värden i "`Release"`-filen på högsta nivån. Integriteten för alla paketfiler verifieras genom att använda MD5sum-värden i filerna "`Packages`" och "`Sources`". Se `debsums`(1) och Avsnitt 2.4.2, ”Verifiering av installerade paketfiler”.

- Eftersom verifieringen av kryptografiska signaturer är en mycket mer processorkrävande process än beräkningen av MD5sum-värdet, ger användningen av MD5sum-värdet för varje paket samtidigt som kryptografisk signatur används för "`Release"`-filen på högsta nivå god säkerhet med hög prestanda (se Avsnitt 10.3, ”Infrastruktur för datasäkerhet”).

Om posten i källistan anger alternativet "`signed-by`" verifieras integriteten hos den nedladdade "`Release"`-filen på högsta nivån med hjälp av den angivna offentliga nyckeln. Detta är användbart när källistan innehåller icke-Debian-arkiv.

| Tips
Användningen av kommandot `apt-key`(8) för APT-nyckelhantering är föråldrad.

Du kan också manuellt verifiera integriteten hos filen "`Release`" med filen "`Release.gpg`" och den offentliga Debian-arkivnyckeln som finns på ftp-master.debian.org med hjälp av `gpg`.

### 2.5.3. "Release"-filer på arkivnivå

| Tips
Filerna på arkivnivån "`Release`" används för regeln i `apt_preferences`(5).

Det finns "`Release`"-filer på arkivnivå för alla arkivplatser som anges i källistan, t.ex. "`http://deb.debian.org/debian/dists/unstable/main/binary-amd64/Release"` eller "`http://deb.debian.org/debian/dists/sid/main/binary-amd64/Release"` enligt följande.

    Archive: unstable
    Origin: Debian
    Label: Debian
    Component: main
    Architecture: amd64

| Observera
För "`Archive:`" används svitnamn ("`stable`", "`testing`", "`unstable`", ...) i Debian-arkivet medan kodnamn ("`trusty`", "`xenial`", "`artful`", ...) används i Ubuntu-arkivet.

För vissa arkiv, t.ex. `experimental` och `trixie-backports`, som innehåller paket som inte bör installeras automatiskt, finns det en extra rad, t.ex. "`http://deb.debian.org/debian/dists/experimental/main/binary-amd64/Release"` enligt följande.

    Archive: experimental
    Origin: Debian
    Label: Debian
    NotAutomatic: yes
    Component: main
    Architecture: amd64

Observera att för normala arkiv utan "`NotAutomatic: yes`" är standardvärdet för Pin-Priority 500, medan för specialarkiv med "`NotAutomatic: yes`" är standardvärdet för Pin-Priority 1 (se `apt_preferences`(5) och Avsnitt 2.7.7, ”Justera kandidatversionen med apt-pinning”).

### 2.5.4. Hämtning av metadata för paketet

När APT-verktyg, såsom `aptitude`, `apt-get`, `synaptic`, `apt-file`, `auto-apt`, ... används, måste vi uppdatera de lokala kopiorna av metadata som innehåller Debian-arkivinformationen. Dessa lokala kopior har följande filnamn som motsvarar de angivna `distributions-`, `områdes-` och `arkitekturnamnen` i källistan (se Avsnitt 2.1.5, ”Grunderna i Debian-arkivet”).

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release`"

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release.gpg`"

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_binary-architecture_Packages`"

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_source_Sources`"

- "`/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribution_Contents-arkitektur.gz`" (för `apt-file`)

De första 4 typerna av filer delas av alla relevanta APT-kommandon och uppdateras från kommandoraden med "`apt-get update`" eller "`aptitude update`". Metadata för "`Packages`" uppdateras om "`deb`" anges i källistan. Metadata för "`Sources`" uppdateras om "`deb-src`" anges i källistan.

Metadata för "`Packages`" och "`Sources`" innehåller "`Filename`:"-stanza som pekar på filplatsen för binär- och källkodspaketen. För närvarande finns dessa paket under katalogträdet "`pool/`" för att underlätta övergången mellan olika utgåvor.

Lokala kopior av metadata för "`Packages`" kan sökas interaktivt med hjälp av `aptitude`. Det specialiserade sökkommandot `grep-dctrl`(1) kan söka i lokala kopior av metadata för "`Packages`" och "`Sources`".

Den lokala kopian av metadata för "`Contents-architecture`" kan uppdateras med "`apt-file update`" och dess plats skiljer sig från de andra 4. Se `apt-file`(1). ( `Auto-Apt` använder som standard en annan plats för den lokala kopian av "`Contents-architecture.gz`")

### 2.5.5. Paketstatus för APT

Förutom de fjärrhämtade metadata lagrar APT-verktyget efter `Lenny` sin lokalt genererade information om installationsstatus i "`/var/lib/apt/extended_states`", som används av alla APT-verktyg för att spåra alla automatiskt installerade paket.

### 2.5.6. Paketstatus för aptitude

Förutom de metadata som hämtas på distans lagrar kommandot `aptitude` sin lokalt genererade information om installationsstatus i "`/var/lib/aptitude/pkgstates`", som endast används av kommandot.

### 2.5.7. Lokala kopior av de hämtade paketen

Alla paket som hämtas på distans via APT-mekanismen lagras i "`/var/cache/apt/archives`" tills de rensas.

Denna policy för rensning av cachefiler för `aptitude` kan ställas in under "`Alternativ`" → "`Inställningar`" och den kan tvingas fram via menyn "Rensa`paketcache`" eller "Rensa`föråldrade filer`" under "`Åtgärder`".

### 2.5.8. Debian paket filnamn

Debians paketfiler har särskilda namnstrukturer.

Tabell 2.15. Namnstrukturen för Debian-paket

paket typ | namn struktur
--- | ---
Det binära paketet (a.k.a `deb`) | `paketnamn_upstream-version-debian.revision_arkitektur.deb`
Det binära paketet för debian-installer (även kallat `udeb`) | `paketnamn_upstream-version-debian.revision_arkitektur.udeb`
Källkodspaketet (uppströmskälla) | `paketnamn_upstream-version-debian.revision.orig.tar.gz`
Källkodspaketet `1.0` (Debian-ändringar) | `paketnamn_upstream-version-debian.revision.diff.gz`
Källkodspaketet `3.0 (quilt` ) (Debian-ändringar) | `paketnamn_upstream-version-debian.revision.debian.tar.gz`
Källpaketet (beskrivning) | `paketnamn_upstream-version-debian.revision.dsc`

| Tips
Här beskrivs endast de grundläggande formaten för källkodspaket. Se mer på `dpkg-source`(1).

Tabell 2.16. De användbara tecknen för varje komponent i Debian-paketets namn

namn komponent | användbara tecken (ERE regex) | existens
--- | --- | ---
`paket-namn` | `[a-z0-9][-a-z0-9.+]+` | krävs
`epok:` | `[0-9]+:` | valfritt
`uppströms-version` | `[-a-zA-Z0-9.+:]+ [-a-zA-Z0-9.+:]+` | krävs
`debian.revision` | `[a-zA-Z0-9.+~]+` | valfritt

| Notera
Du kan kontrollera paketets versionsordning med `dpkg`(1), t.ex. "`dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?`" .

| Notera
Debian-installer (d-i) använder `udeb` som filändelse för sitt binära paket i stället för vanliga `deb`. Ett `udeb-paket` är ett nedbantat `deb-paket` som tar bort en del oväsentligt innehåll, t.ex. dokumentation, för att spara utrymme och samtidigt lätta på kraven i paketpolicyn. Både `deb-` och `udeb-paketen` delar samma paketstruktur. "`u`" står för micro.

### 2.5.9. Kommandot dpkg

`dpkg`(1) är verktyget på lägsta nivå för Debians pakethantering. Det är mycket kraftfullt och måste användas med försiktighet.

Under installationen av paketet med namnet "`paketets_namn`", bearbetar `dpkg` det i följande ordning.

1. Packa upp deb-filen (motsvarande "`ar -x`")

2. Kör`"package_name.preinst`" med `debconf`(1)

3. Installera paketets innehåll i systemet ("`tar -x`"-motsvarighet)

4. Kör`"package_name.postinst`" med `debconf`(1)

`Debconf-systemet` tillhandahåller standardiserad användarinteraktion med I18N- och L10N-stöd (Kapitel 8, I18N och L10N).

Tabell 2.17. De anmärkningsvärda filer som skapats av `dpkg`

fil | beskrivning av innehåll
--- | ---
`/var/lib/dpkg/info/package_name.conffiles` | lista över konfigurationsfiler. (kan ändras av användaren)
`/var/lib/dpkg/info/package_name.list` | lista över filer och kataloger som installerats av paketet
`/var/lib/dpkg/info/package_name.md5sums` | lista över MD5-hashvärden för filer som installerats av paketet
`/var/lib/dpkg/info/package_name.preinst` | paketskript som ska köras innan paketet installeras
`/var/lib/dpkg/info/package_name.postinst` | paketskript som ska köras efter installationen av paketet
`/var/lib/dpkg/info/package_name.prerm` | paketskript som ska köras innan paketet tas bort
`/var/lib/dpkg/info/package_name.postrm` | paketskript som ska köras efter att paketet har tagits bort
`/var/lib/dpkg/info/package_name.config` | paket skript för `debconf` system
`/var/lib/dpkg/alternatives/package_name` | den alternativa information som används av kommandot `update-alternatives`
`/var/lib/dpkg/available` | information om tillgänglighet för alla paket
`/var/lib/dpkg/diversions` | den avledningsinformation som används av `dpkg`(1) och som ställs in av `dpkg-divert`(8)
`/var/lib/dpkg/statoverride` | information om stat-överstyrning som används av `dpkg`(1) och ställs in av `dpkg-statoverride`(8)
`/var/lib/dpkg/status` | statusinformation för alla paket
`/var/lib/dpkg/status-old` | den första generationens säkerhetskopia av filen "`var/lib/dpkg/status`"
`/var/backups/dpkg.status*` | andra generationens säkerhetskopia och äldre versioner av filen "`var/lib/dpkg/status`"

Filen "`status`" används också av verktyg som `dpkg`(1), "`dselect update`" och "`apt-get -u dselect-upgrade`".

Det specialiserade sökkommandot `grep-dctrl`(1) kan söka i de lokala kopiorna av metadata för "`status`" och "`available`".

| Tips
I debian-installer-miljön används kommandot `udpkg` för att öppna `udeb-paket`. Kommandot `udpkg` är en nedbantad version av kommandot `dpkg`.

### 2.5.10. Kommandot update-alternatives

Debian-systemet har en mekanism för att installera överlappande program på ett fredligt sätt med hjälp av `update-alternatives`(1). Du kan till exempel låta `vi-kommandot` välja att köra `vim` samtidigt som du installerar både `vim-` och `nvi-paket`.

    $ ls -l $(type -p vi)
    lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
    $ sudo update-alternatives --display vi
    ...
    $ sudo update-alternatives --config vi
      Selection    Command
     ----------------------------------------------
          1        /usr/bin/vim
    *+    2        /usr/bin/nvi

    Enter to keep the default[*], or type selection number: 1

Debians alternativsystem behåller sitt urval som symlänkar i "`/etc/alternatives/`". Urvalsprocessen använder motsvarande fil i "`/var/lib/dpkg/alternatives/`".

### 2.5.11. Kommandot dpkg-statoverride

Stat-överskrivningar som tillhandahålls av kommandot `dpkg-statoverride`(8) är ett sätt att tala om för `dpkg`(1) att använda en annan ägare eller ett annat läge för en fil när ett paket installeras. Om "`--update`" anges och filen finns, sätts den omedelbart till den nya ägaren och det nya läget.

| Observera
Om systemadministratören direkt ändrar ägare eller läge för en fil som ägs av paketet med hjälp av kommandona `chmod` eller `chown` återställs detta vid nästa uppgradering av paketet.

| Notera
Jag använder ordet fil här, men i själva verket kan det vara vilket filsystemobjekt som helst som `dpkg` hanterar, inklusive kataloger, enheter etc.

### 2.5.12. Kommandot dpkg-divert

Filavledningar som tillhandahålls av kommandot `dpkg-divert`(8) är ett sätt att tvinga `dpkg`(1) att inte installera en fil på dess standardplats, utan på en avledd plats. Användningen av `dpkg-divert` är avsedd för skript för paketunderhåll. Den tillfälliga användningen av systemadministratören är föråldrad.

## 2.6. Återhämtning från ett trasigt system

När `testing` eller `unstable` system körs förväntas administratören återhämta sig från en trasig pakethanteringssituation.

| Observera
Vissa metoder som beskrivs här är högriskåtgärder. Du har blivit varnad!

### 2.6.1. Inkompatibilitet med gammal användarkonfiguration

Om ett grafiskt gränssnittsprogram för skrivbord upplevde instabilitet efter en betydande uppgradering av uppströmsversionen, bör du misstänka störningar i gamla lokala konfigurationsfiler som skapats av det. Om det är stabilt under ett nyskapat användarkonto bekräftas denna hypotes. (Detta är ett fel i paketeringen som vanligtvis undviks av paketeraren)

För att återställa stabiliteten bör du flytta motsvarande lokala konfigurationsfiler och starta om GUI-programmet. Du kan behöva läsa innehållet i gamla konfigurationsfiler för att återskapa konfigurationsinformation senare. (Radera dem inte för snabbt.)

### 2.6.2. Cachelagring av fel i paketdata

Cachningsfel i paketdata orsakar spännande fel, t.ex. "GPG-fel: ... ogiltigt: BADSIG ..." med APT.

Du bör ta bort alla cachade data med "`sudo rm -rf /var/lib/apt/*` " och försöka igen. (Om `apt-cacher-ng` används bör du även köra "`sudo rm -rf /var/cache/apt-cacher-ng/*` ")

### 2.6.3. Räddning med kommandot dpkg

Since `dpkg` is very low level package tool, it can function without network connection.

Let's assume `foo` package was broken and needs to be fixed.

Du kan fortfarande hitta cachade kopior av äldre buggfria versioner av `foo-paketet` i paketets cachekatalog: "`/var/cache/apt/archives/`". (Om inte, kan du hämta den från arkivet på https://snapshot.debian.org/ eller kopiera den från paketcachen på en fungerande maskin)

Om du kan starta upp systemet kan du installera det med följande kommando.

    # dpkg -i /path/to/foo_old_version_arch.deb

Om ett försök att installera ett paket på det här sättet misslyckas på grund av vissa beroendeöverträdelser och du verkligen måste göra detta som en sista utväg, kan du åsidosätta beroendet med hjälp av `dpkg`:s "`--ignore-depends`", "`--force-depends`" och andra alternativ. Om du gör detta måste du anstränga dig ordentligt för att återställa korrekt beroende senare. Se `dpkg`(8) för mer information.

| Notera
Om ditt system är allvarligt trasigt bör du göra en fullständig säkerhetskopia av systemet på en säker plats (se Avsnitt 10.2, ”Backup och återställning”) och utföra en ren installation. Detta är mindre tidskrävande och ger bättre resultat i slutändan.

| Tips
Om systemhaveriet är mindre kan man alternativt nedgradera hela systemet som i Avsnitt 2.7.11, ”Akut nedgradering” genom att använda APT-systemet på högre nivå.

### 2.6.4. Misslyckad installation på grund av att beroenden saknas

Om du försöker installera ett paket med "`sudo dpkg -i ...`" på ett system där alla beroendepaket inte är installerade, kommer paketinstallationen att misslyckas som delvis installerad.

You should install all dependency packages by repeatedly using "`sudo dpkg -i ...`" or by using:

    # apt --fix-broken install

Konfigurera sedan alla delvis installerade paket med följande kommando.

    # dpkg --configure -a

### 2.6.5. Olika paket med överlappande filer

Pakethanteringssystem på arkivnivå, t.ex. `aptitude`(8) eller `apt-get`(1), försöker inte ens installera paket med överlappande filer med hjälp av paketberoenden (se Avsnitt 2.1.7, ”Beroenden av paket”).

Fel från paketunderhållaren eller distribution av inkonsekvent blandade arkivkällor (se Avsnitt 2.7.6, ”Paket från blandade arkivkällor utan apt-pinning”) av systemadministratören kan skapa en situation med felaktigt definierade paketberoenden. När du installerar ett paket med överlappande filer med `aptitude`(8) eller `apt-get`(1) i en sådan situation, ser `dpkg`(1) som packar upp paketet till att returnera fel till det anropande programmet utan att skriva över befintliga filer.

| Observera
Användningen av tredjepartspaket medför betydande systemrisker via underhållsskript som körs med root-rättigheter och kan göra vad som helst med ditt system. Kommandot `dpkg`(1) skyddar endast mot överskrivning vid uppackning.

Du kan komma runt en sådan trasig installation genom att ta bort det gamla felaktiga paketet, `gamla paketet`först.

    $ sudo dpkg -P old-package

### 2.6.6. Åtgärdar trasigt paketskript

När ett kommando i paketskriptet av någon anledning returnerar ett felmeddelande och skriptet avslutas med ett felmeddelande avbryter pakethanteringssystemet sin åtgärd och får delvis installerade paket. När ett paket innehåller buggar i sina borttagningsskript kan paketet bli omöjligt att ta bort och ganska otrevligt.

För problemet med paketskriptet "`paketets_namn`", bör du titta på följande paketskript.

- "`/var/lib/dpkg/info/package_name.preinst`"

- "`/var/lib/dpkg/info/package_name.postinst`"

- "`/var/lib/dpkg/info/package_name.prerm`"

- "`/var/lib/dpkg/info/package_name.postrm`"

Redigera det felaktiga paketskriptet från roten med hjälp av följande tekniker.

- inaktivera den kränkande raden genom att föregå "`#`"

- tvinga fram en lyckad retur genom att lägga till "`|| true`" på den felaktiga raden

Konfigurera sedan alla delvis installerade paket med följande kommando.

    # dpkg --configure -a

### 2.6.7. Återställning av data för paketval

Om "`/var/lib/dpkg/status`" blir korrupt av någon anledning, förlorar Debiansystemet data om paketval och drabbas hårt. Leta efter den gamla filen "`/var/lib/dpkg/status`" i "`/var/lib/dpkg/status-old`" eller "`/var/backups/dpkg.status.*`".

Att ha "`/var/backups/`" i en separat partition kan vara en bra idé eftersom den här katalogen innehåller massor av viktiga systemdata.

Vid allvarliga skador rekommenderar jag att man gör en nyinstallation efter att ha tagit en säkerhetskopia av systemet. Även om allt i "`/var/`" är borta kan du fortfarande återskapa viss information från kataloger i "`/usr/share/doc/`" för att vägleda din nya installation.

Installera om det minimala systemet (skrivbordet).

    # mkdir -p /path/to/old/system

Montera det gamla systemet på "`/path/to/old/system/`".

    # cd /path/to/old/system/usr/share/doc
    # ls -1 >~/ls1.txt
    # cd /usr/share/doc
    # ls -1 >>~/ls1.txt
    # cd
    # sort ls1.txt | uniq | less

Sedan presenteras du med paketnamn som ska installeras. (Det kan finnas några icke-paketnamn som "`texmf`".)

## 2.7. Tips för pakethantering

För enkelhetens skull presenteras exemplen på källistan i det här avsnittet som "`/etc/apt/sources.list`" i enradig stil efter utgåvan `trixie`.

### 2.7.1. Vem laddade upp paketet?

Även om namnet på underhållaren som anges i "`/var/lib/dpkg/available`" och "`/usr/share/doc/package_name/changelog`" ger viss information om "vem som ligger bakom paketeringsaktiviteten", är den faktiska uppladdaren av paketet något dunkel. `who-uploads`(1) i `devscripts-paketet` identifierar den faktiska uppladdaren av Debians källkodspaket.

### 2.7.2. Begränsning av nedladdningsbandbredd för APT

Om du vill begränsa nedladdningsbandbredden för APT till t.ex. 800Kib/sek (=100kiB/sek) ska du konfigurera APT med följande konfigurationsparameter.

    APT::Acquire::http::Dl-Limit "800";

### 2.7.3. Automatisk nedladdning och uppgradering av paket

Paketet `apt` levereras med ett eget cron-skript "`/etc/cron.daily/apt`" för att stödja automatisk nedladdning av paket. Detta skript kan förbättras för att utföra automatisk uppgradering av paket genom att installera paketet `unattended-upgrades`. Dessa kan anpassas med parametrar i "`/etc/apt/apt.conf.d/02backup`" och "`/etc/apt/apt.conf.d/50unattended-upgrades`" som beskrivs i "`/usr/share/doc/unattended-upgrades/README`".

Paketet `unattended-upgrades` är huvudsakligen avsett för säkerhetsuppgraderingar av `stable` system. Om risken för att ett befintligt `stable` system bryts ned av den automatiska uppgraderingen är mindre än risken för att systemet bryts ned av en inkräktare som använder ett säkerhetshål som har täppts till av säkerhetsuppdateringen, bör du överväga att använda denna automatiska uppgradering med konfigurationsparametrar enligt följande.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "1";

Om du kör ett `testing` eller `unstable` system vill du inte använda den automatiska uppgraderingen eftersom systemet då säkert går sönder någon dag. Även i sådana `testing` eller `unstable` fall kan du ändå vilja hämta paket i förväg för att spara tid för den interaktiva uppgraderingen med konfigurationsparametrar som följande.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "0";

### 2.7.4. Uppdateringar och baksidor

Det finns stable-updates ( "`trixie`-updates" under utgivningscykeln `trixie``-as-stable` ) och backports.debian.org-arkiv som tillhandahåller uppgraderingspaket för `stable`.

För att kunna använda dessa arkiv måste du lista alla nödvändiga arkiv i filen "`/etc/apt/sources`.list" enligt följande.

    deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free
    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-backports main non-free-firmware contrib non-free

Det finns inget behov av att ange Pin-Priority-värdet explicit i filen "`/etc/apt/preferences`". När nyare paket blir tillgängliga ger standardkonfigurationen de flesta rimliga uppgraderingar (se Avsnitt 2.5.3, ”"Release"-filer på arkivnivå”).

- Alla installerade äldre paket uppgraderas till nyare från `trixie-updates`.

- Endast manuellt installerade äldre paket från `trixie-backports` uppgraderas till nyare paket från `trixie-backports`.

När du vill installera ett paket med namnet "`paket-namn`" med dess beroende från `trixie-backports` arkiv manuellt, använder du följande kommando medan du byter målversion med alternativet "`-t`".

    $ sudo apt-get install -t trixie-backports package-name

| Varning
Installera inte för många paket från backports.debian.org-arkiven. Det kan orsaka komplikationer med paketberoenden. Se Avsnitt 2.1.11, ”Hur man hanterar motstridiga krav” för alternativa lösningar.

### 2.7.5. Externa paketarkiv

| Varning
Du bör vara medveten om att det externa paketet får root-behörighet till ditt system. Du bör endast använda det betrodda externa paketarkivet. Se Avsnitt 2.1.11, ”Hur man hanterar motstridiga krav” för alternativa lösningar.

Du kan använda säker APT med Debian-kompatibla externa paketarkiv genom att lägga till det i källistan och dess arkivnyckelfil i katalogen "`/etc/apt/trusted.gpg`.d/". Se `sources.list`(5), `apt-secure`(8) och `apt-key`(8).

### 2.7.6. Paket från blandade arkivkällor utan apt-pinning

| Observera
Installation av paket från blandade arkivkällor stöds inte av den officiella Debian-distributionen, med undantag för officiellt stödda särskilda kombinationer av arkiv, t.ex. `stable` med säkerhetsuppdateringar och stable-updates.

Här är ett exempel på åtgärder för att inkludera specifika paket med nyare uppströmsversioner som finns i `unstable` när du spårar `testing` för ett enstaka tillfälle.

1. Ändra filen "`/etc/apt/sources.list`" tillfälligt till en enda "`unstable`"-post.

2. Kör "`aptitude update`".

3. Kör "`aptitude install paket-namn`".

4. Återställ den ursprungliga filen "`/etc/apt/sources.list`" för `testing`.

5. Kör "`aptitude update`".

Du skapar inte filen "`/etc/apt/preferences`" och behöver inte heller oroa dig för apt-pinning med detta manuella tillvägagångssätt. Men detta är mycket besvärligt.

| Observera
När du använder blandade arkivkällor måste du själv se till att paketen är kompatibla, eftersom Debian inte garanterar det. Om paket inte är kompatibla kan det leda till att systemet inte fungerar. Du måste kunna bedöma dessa tekniska krav. Användningen av blandade källor av slumpmässiga arkiv är helt valfri och det är inget jag uppmuntrar dig att använda.

Allmänna regler för installation av paket från olika arkiv är följande.

- Icke-binära paket ( "`Architecture: all`") är säkrare att installera.

  - dokumentationspaket: inga särskilda krav

  - tolkprogramspaket: kompatibel tolk måste finnas tillgänglig

- Binära paket (icke "`Architecture: all`") möter vanligtvis många vägspärrar och är osäkra att installera.

  - kompatibilitet med biblioteksversioner (inklusive "`libc`")

  - relaterat verktyg programversion kompatibilitet

  - ABI-kompatibilitet för kärnan

  - Kompatibilitet med C++ ABI

  - …

| Notera
För att göra ett paket säkrare att installera kan vissa kommersiella, icke-fria binära programpaket innehålla helt statiskt länkade bibliotek. Du bör ändå kontrollera ABI-kompatibilitetsproblem etc. för dem.

| Notera
Förutom för att undvika trasiga paket på kort sikt, är det i allmänhet en dålig idé att installera binära paket från icke-Debian-arkiv. Du bör söka efter alla tillgängliga alternativa säkrare tekniska lösningar som är kompatibla med ditt nuvarande Debian-system (se Avsnitt 2.1.11, ”Hur man hanterar motstridiga krav”).

### 2.7.7. Justera kandidatversionen med apt-pinning

| Varning
Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den.

Utan filen "`/etc/apt/preferences`" väljer APT-systemet den senast tillgängliga versionen som kandidatversion med hjälp av versionssträngen. Detta är det normala tillståndet och den mest rekommenderade användningen av APT-systemet. Alla officiellt stödda kombinationer av arkiv kräver inte filen "`/etc/apt/preferences`" eftersom vissa arkiv som inte bör användas som automatisk källa för uppgraderingar markeras som NotAutomatic och hanteras på rätt sätt.

| Tips
Jämförelseregeln för versionssträngar kan verifieras med t.ex. "`dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?`" (se `dpkg`(1)).

När du regelbundet installerar paket från blandade arkivkällor (se Avsnitt 2.7.6, ”Paket från blandade arkivkällor utan apt-pinning”) kan du automatisera dessa komplicerade operationer genom att skapa filen "`/etc/apt/preferences`" med rätt poster och justera paketvalsregeln för kandidatversionen enligt beskrivningen i `apt_preferences`(5). Detta kallas apt-pinning.

När du använder apt-pinning måste du själv se till att paketen är kompatibla eftersom Debian inte garanterar det. Apt-pinning är en helt frivillig åtgärd och jag uppmuntrar inte till att använda den.

Release-filer på arkivnivå (se Avsnitt 2.5.3, ”"Release"-filer på arkivnivå”) används för regeln i `apt_preferences`(5). Således fungerar apt-pinning endast med "suite"-namn för normala Debian-arkiv och Debian-arkiv för säkerhet. (Detta skiljer sig från Ubuntu-arkiv.) Du kan t.ex. göra "`Pin: release a=unstable`" men inte "`Pin: release a=sid`" i filen "`/etc/apt/preferences`".

När du använder icke-Debian-arkiv som en del av apt-pinning bör du kontrollera vad de är avsedda för och även kontrollera deras trovärdighet. Ubuntu och Debian är till exempel inte avsedda att blandas.

| Notera
Även om du inte skapar filen "`/etc/apt/preferences`" kan du utföra ganska komplexa systemoperationer (se Avsnitt 2.6.3, ”Räddning med kommandot dpkg” och Avsnitt 2.7.6, ”Paket från blandade arkivkällor utan apt-pinning”) utan apt-pinning.

Här följer en förenklad förklaring av apt-pinning-tekniken.

APT-systemet väljer det uppgraderingspaket med högst Pin-prioritet från tillgängliga paketkällor som definieras i filen "`/etc/apt/sources.list`" som kandidatversionspaket. Om paketets Pin-Priority är större än 1000, tas denna versionsbegränsning för uppgradering bort för att möjliggöra nedgradering (se Avsnitt 2.7.11, ”Akut nedgradering”).

Pin-Priority-värdet för varje paket definieras av "Pin-Priority"-poster i filen "`/etc/apt/preferences`" eller använder dess standardvärde.

Tabell 2.18. Lista över anmärkningsvärda Pin-Priority-värden för apt-pinning-teknik.

Pin-prioritet | apt-pinning effekter till paketet
--- | ---
1001 | installera paketet även om detta utgör en nedgradering av paketet
990 | används som standard för målversionens arkiv
500 | används som standard för det normala arkivet
100 | används som standard för arkiven NotAutomatic och ButAutomaticUpgrades
100 | används för det installerade paketet
1 | används som standard för NotAutomatic-arkivet
-1 | installera aldrig paketet även om det rekommenderas

Målarkivet för utgåvan kan anges med kommandoradsalternativet,`t.ex. "apt-get install -t testing some-package`"

Arkivet NotAutomatic and ButAutomaticUpgrades skapas genom att arkivservern har en Release-fil på arkivnivå (se Avsnitt 2.5.3, ”"Release"-filer på arkivnivå”) som innehåller både "NotAutomatic`: yes`" och "`ButAutomaticUpgrades: yes`". NotAutomatic-arkivet skapas genom att arkivservern har en Release-fil på arkivnivå som endast innehåller "NotAutomatic:`yes`".

Situationen med apt-pinning av paket från flera arkivkällor visas av "`apt-cache policy package`".

- En rad som börjar med "`Package pin:`" listar paketversionen av pin om associationen bara med paket är definierad, t.ex. "`Package pin: 0.190`".

- Ingen rad med "`Paketnål`:" finns om ingen association bara med paketet är definierad.

- Pin-Priority-värdet som bara är associerat med paketet anges till höger om alla versionssträngar, t.ex. "`0.181 700`".

- "`0`" anges på höger sida av alla versionssträngar om ingen koppling till paketet har definierats, t.ex. "`0.181 0`".

- Arkivens Pin-Priority-värden (definierade som "`Package: *`" i filen "`/etc/apt/preferences`") listas till vänster om alla arkivsökvägar, t.ex. "`100 http://deb.debian.org/debian/ trixie-backports/main Packages`".

### 2.7.8. Blockeringspaket installerade av "Recommends"

| Varning
Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den.

Om du inte vill att vissa paket ska hämtas automatiskt av "Recommends" måste du skapa filen "`/etc/apt/preferences`" och uttryckligen lista alla dessa paket högst upp i den på följande sätt.

    Package: package-1
    Pin: version *
    Pin-Priority: -1

    Package: package-2
    Pin: version *
    Pin-Priority: -1

### 2.7.9. Spåra `testing` med vissa paket från `unstable`

| Varning
Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den.

Här är ett exempel på apt-pinning-teknik för att inkludera specifika nyare uppströmsversionspaket som finns i `unstable` regelbundet uppgraderade när man följer `testing`. Du listar alla nödvändiga arkiv i filen "`/etc/apt/sources.list`" enligt följande.

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

Ställ in filen "`/etc/apt/preferences`" enligt följande.

    Package: *
    Pin: release a=unstable
    Pin-Priority: 100

När du vill installera ett paket med namnet "`paket-namn`" med dess beroenden från `unstable-arkivet` under denna konfiguration, ger du följande kommando som byter målversion med alternativet "`-t`" (Pin-prioritet för `unstable` blir 990).

    $ sudo apt-get install -t unstable package-name

Med den här konfigurationen uppgraderas paket som installerades från `testarkivet` med det aktuella `testarkivet` och paket som installerades från det `unstable arkivet med det aktuella` `unstable` arkivet genom att köra "`apt-get` upgrade" och "apt-get`dist-upgrade`" (eller "`aptitude safe-upgrade`" och "`aptitude full-upgrade`").

| Observera
Var försiktig så att du inte tar bort "`testing`"-posten från filen "`/etc/apt/sources.list`". Utan "`testing`"-posten i den uppgraderar APT-systemet paket med nyare `unstable` arkiv.

| Tips
Jag brukar redigera filen "`/etc/apt/sources.list`" för att kommentera bort arkivposten "`unstable`" direkt efter ovanstående operation. Detta undviker en långsam uppdateringsprocess på grund av för många poster i filen "`/etc/apt/sources.list`", även om det förhindrar uppgradering av paket som installerades från ett `unstable`-arkiv med hjälp av det aktuella `unstable`-arkivet.

| Tips
Om "`Pin-Priority: 1`" används i stället för "Pin-Priority`: 100`" i filen "`/etc/apt/preferences`", uppgraderas inte redan installerade paket med Pin-Priority-värdet 100 av `unstable` archive även om posten "`testing`" i filen "`/etc/apt/sources.list`" tas bort.

Om du vill spåra vissa paket i `unstable` automatiskt utan inledande installation av "`-t unstable`", måste du skapa filen "`/etc/apt/preferences`" och uttryckligen lista alla dessa paket högst upp i den enligt följande.

    Package: package-1
    Pin: release a=unstable
    Pin-Priority: 700

    Package: package-2
    Pin: release a=unstable
    Pin-Priority: 700

Dessa anger Pin-Priority-värdet för varje specifikt paket. För att till exempel spåra den senaste `unstable` versionen av denna "Debian Reference" på engelska, bör du ha följande poster i filen "`/etc/apt/preferences`".

    Package: debian-reference-en
    Pin: release a=unstable
    Pin-Priority: 700

    Package: debian-reference-common
    Pin: release a=unstable
    Pin-Priority: 700

| Tips
Denna apt-pinning-teknik är giltig även när du spårar `stable` arkiv. Dokumentationspaket har alltid varit säkra att installera från `unstable` arkiv enligt min erfarenhet hittills.

### 2.7.10. Spårning `unstable` med vissa paket från `experimental`

| Varning
Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den.

Här är ett annat exempel på apt-pinning-teknik för att inkludera specifika nyare uppströmsversionspaket som finns i `experimental` medan de spårar `unstable`. Du listar alla nödvändiga arkiv i filen "`/etc/apt/sources.list`" enligt följande.

    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://deb.debian.org/debian/ experimental main contrib non-free
    deb http://security.debian.org/ testing-security main contrib

Standardvärdet för Pin-Priority för `experimentella` arkiv är alltid 1 (<<100) eftersom det inte är ett automatiskt arkiv (se Avsnitt 2.5.3, ”"Release"-filer på arkivnivå”). Det finns inget behov av att ange Pin-Priority-värdet explicit i filen "`/etc/apt/preferences`" bara för att använda `experimentarkivet`, såvida du inte vill spåra vissa paket i det automatiskt för nästa uppgradering.

### 2.7.11. Akut nedgradering

| Varning
Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den.

| Observera
Nedgradering stöds inte officiellt av Debian, vilket är meningen. Det bör endast göras som en del av en nödåterställningsprocess. Trots detta är det känt att det fungerar bra vid många incidenter. För kritiska system bör du säkerhetskopiera alla viktiga data på systemet efter återställningen och installera om det nya systemet från grunden.

Du kan ha turen att kunna nedgradera från ett nyare arkiv till ett äldre arkiv för att återställa en trasig systemuppgradering genom att manipulera kandidatversionen (se Avsnitt 2.7.7, ”Justera kandidatversionen med apt-pinning”). Detta är ett lata alternativ till tråkiga åtgärder med många "`dpkg -i broken-package_old-version.deb`"-kommandon (se Avsnitt 2.6.3, ”Räddning med kommandot dpkg”).

Sök rader i filen "`/etc/apt/sources.list`" som spårar `unstable` som följande.

    deb http://deb.debian.org/debian/ sid main contrib non-free

Ersätt det med följande för att spåra `testing`.

    deb http://deb.debian.org/debian/ forky main contrib non-free

Ställ in filen "`/etc/apt/preferences`" enligt följande.

    Package: *
    Pin: release a=testing
    Pin-Priority: 1010

Kör "`apt-get update; apt-get dist-upgrade`" för att tvinga fram nedgradering av paket i hela systemet.

Ta bort den här speciella filen "`/etc/apt/preferences`" efter denna akuta nedgradering.

| Tips
Det är en bra idé att ta bort (inte rensa!) så många paket som möjligt för att minimera beroendeproblem. Du kan behöva ta bort och installera vissa paket manuellt för att få systemet nedgraderat. Linuxkärnan, bootloader, udev, PAM, APT och nätverksrelaterade paket och deras konfigurationsfiler kräver särskild uppmärksamhet.

### 2.7.12. Equivs-paketet

Om du ska kompilera ett program från källkod för att ersätta Debian-paketet, är det bäst att göra det till ett riktigt lokalt debianiserat paket`(*.deb)` och använda privat arkiv.

Om du väljer att kompilera ett program från källkod och installera dem under "`/usr/local`" istället, kan du behöva använda `equivs` som en sista utväg för att tillgodose det saknade paketberoendet.

    Package: equivs
    Priority: optional
    Section: admin
    Description: Circumventing Debian package dependencies
     This package provides a tool to create trivial Debian packages.
     Typically these packages contain only dependency information, but they
     can also include normal installed files like other packages do.
     .
     One use for this is to create a metapackage: a package whose sole
     purpose is to declare dependencies and conflicts on other packages so
     that these will be automatically installed, upgraded, or removed.
     .
     Another use is to circumvent dependency checking: by letting dpkg
     think a particular package name and version is installed when it
     isn't, you can work around bugs in other packages' dependencies.
     (Please do still file such bugs, though.)

### 2.7.13. Portering av ett paket till det stabila systemet

| Observera
Det finns ingen garanti för att det förfarande som beskrivs här fungerar utan extra manuella insatser på grund av systemskillnader.

För partiella uppgraderingar av det `stable` systemet är det önskvärt att bygga om ett paket inom dess miljö med hjälp av källpaketet. På så sätt undviks omfattande uppgraderingar av paket på grund av deras beroenden.

Lägg till följande poster i "`/etc/apt/sources.list`" i ett `stable` system.

    deb-src http://deb.debian.org/debian unstable  main contrib non-free

Installera de paket som krävs för kompilering och ladda ner källkodspaketet enligt följande.

    # apt-get update
    # apt-get dist-upgrade
    # apt-get install fakeroot devscripts build-essential
    # apt-get build-dep foo
    $ apt-get source foo
    $ cd foo*

Uppdatera vissa verktygskedjepaket som `dpkg` och `debhelper` från bakåtporteringspaketen om de krävs för bakåtporteringen.

Utför följande.

    $ dch -i

Bump-paketversion, t.ex. en som har tillägget "`+bp1`" i "`debian/changelog`"

Bygg paket och installera dem i systemet på följande sätt.

    $ debuild
    $ cd ..
    # debi foo*.changes

### 2.7.14. Proxyserver för APT

Eftersom spegling av hela underavsnitt av Debian-arkivet slösar med diskutrymme och nätverksbandbredd, är distribution av en lokal proxyserver för APT ett önskvärt övervägande när du administrerar många system på LAN. APT kan konfigureras att använda generiska webbproxyservrar (http) såsom `squid` (se Avsnitt 6.5, ”Andra nätverksapplikationsservrar”) som beskrivs i apt `.conf`(5) och i "`/usr/share/doc/apt/examples/configure-index.gz`". Miljövariabeln "`$http_proxy`" kan användas för att åsidosätta proxyserverinställningen i filen "`/etc/apt/apt.conf`".

Det finns proxyverktyg speciellt för Debian-arkiv. Du bör kontrollera BTS innan du använder dem.

Tabell 2.19. Lista över proxyverktyg speciellt för Debian-arkiv

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`approx` | V:0, I:0 | 8308 | proxyserver för cachning av Debian-arkivfiler (kompilerat OCaml-program )
`apt-cacher` | V:0, I:0 | 267 | Cachelagringsproxy för Debians paket- och källfiler (Perl-program)
`apt-cacher-ng` | V:4, I:4 | 1968 | Caching-proxy för distribution av programvarupaket (kompilerat C++-program)

| Observera
När Debian omorganiserar sin arkivstruktur tenderar dessa specialiserade proxyverktyg att kräva kodomskrivningar av paketunderhållaren och kanske inte fungerar på ett tag. Å andra sidan är generiska webbproxyservrar (http) mer robusta och lättare att hantera sådana förändringar.

### 2.7.15. Mer läsning för pakethanteringen

Du kan läsa mer om pakethanteringen i följande dokumentationer.

- Primär dokumentation om pakethanteringen:

  - `aptitude`(8), `dpkg`(1), `tasksel`(8), `apt`(8), `apt-get`(8), `apt-config`(8), `apt-secure`(8), `sources.list`(5), `apt.conf`(5) och `apt_preferences`(5);

  - "`/usr/share/doc/apt-doc/guide.html/index.html`" och "`/usr/share/doc/apt-doc/offline.html/index.html`" från paketet `apt-doc`; och

  - "`/usr/share/doc/aptitude/html/en/index.html`" från paketet `aptitude-doc-en`.

- Officiella och detaljerade dokumentationer om Debian-arkivet:

  - "Debians policyhandbok kapitel 2 - Debianarkivet",

  - "Debian Developer's Reference, Kapitel 4 - Resurser för Debian-utvecklare 4.6 Debian-arkivet", och

  - "Vanliga frågor om Debian GNU/Linux, kapitel 6 - Debians FTP-arkiv".

- Handledning för att bygga ett Debian-paket för Debian-användare:

  - "Guide för Debians underhållsansvariga".

Kapitel 1. GNU/Linux handledning |  | Kapitel 3. Initialisering av systemet