dpkg(1) | dpkg suite | dpkg(1) |
dpkg - en mellannivåpakethanterare för Debian
dpkg [flagga...] åtgärd
Manualen är avsedd för användare som vill få en mer detaljerad förståelse för dpkgs kommandoradsflaggor och pakettillstånd än vad som berättas med dpkg --help.
Den bör inte användas av paketansvariga som vill lära sig hur dpkg kommer att installera deras paket. Beskrivningen över vad dpkg gör när paket installeras och tas bort är speciellt otillräckliga.
dpkg är ett mellannivåverktyg för att installera, bygga, ta bort och hantera Debianpaket. Det primära och mer användarvänliga skalet runt dpkg som ett CLI (kommandoradsgränssnitt) är apt(8) och som ett TUI (terminalanvändargränssnitt) är aptitude(8). dpkg kontrolleras helt och hållet via kommandoradsparametrar, vilka består av exakt en åtgärd och noll eller fler flaggor. Åtgärdsparametern talar om för dpkg vad som ska göras, och flaggorna styr på vilket sätt åtgärden ska utföras.
dpkg kan också användas som ett skal runt dpkg-deb(1) och dpkg-query(1). En förteckning över tillgängliga åtgärder beskrivs nedan i stycket ÅTGÄRDER. Om dpkg upptäcker en sådan åtgärd anropas bara dpkg-dpkg eller dpkg-query med de givna flaggorna, men inga specifika flaggor sänds direkt till dem, för att använda sådana flaggor måste bakgrundsprogrammen anropas direkt.
dpkg upprätthåller viss användbar information om tillgängliga paket. Informationen delas in i tre klasser: tillstånd, markeringstillstånd och flaggor. Dessa värden är avsedda att huvudsakligen ändras via dselect.
Installationen består av följande steg:
1. Extrahera styrfilerna ur det nya paketet.
2. Om en annan version av samma paket redan fanns installerat vid nyinstallationen exekveras prerm-skriptet för det gamla paketet.
3. Kör preinst-skriptet, om ett sådant medföljer paketet.
4. Packa upp de nya filerna och säkerhetskopiera samtidigt de gamla filerna så att de kan återställas om någonting går fel.
5. Om en annan version av samma paket redan fanns installerat vid nyinstallationen exekveras postrm-skriptet för det gamla paketet. Observera att skriptet exekveras efter preinst för det nya paketet eftersom de nya filerna skrivs samtidigt som de gamla tas bort.
6. Konfigurera paketet. Se --configure för detaljerad information om hur man gör det.
Hanterar utlösare för Pre-Depends såvida inte --no-triigers har angivits.
För att omkonfigurera ett paket som redan har konfigurerats kan du istället använda kommandot dpkg-reconfigure(8).
Konfigurering består av följande steg:
1. Packa upp konfigurationsfilerna och säkerhetskopiera samtidigt de gamla konfigurationsfilerna så att de kan återställas om någonting går fel.
2. Kör postinst-skriptet, om ett sådant finns i paketet.
Hanterar utlösare såvida inte --no-triggers har angivits.
Borttagning av ett paket består av följande steg:
1. Kör prerm-skriptet
2. Ta bort de installerade filerna
3. Kör postrm-skriptet
Hanterar utlösare såvida inte --no-triggers har angivits.
Observera: det är möjligt att dpkg inte känner till vissa konfigurationsfiler på grund av att de skapas och hanteras separat via konfigurationsskript. I så fall kommer inte dpkg självt ta bort dem, utan paketets postrm-skript (som anropas av dpkg) måste ta hand om att de tas bort när paketet tas bort med --purge. Detta gäller naturligtvis endast för filer i systemkatalogerna, inte konfigurationsfiler som skrivs i enstaka användares hemkataloger.
Rensning av ett paket består av följande steg:
1. Ta bort paketet, om det inte redan är borttaget. Se --remove för detaljerad information om hur det görs.
2. Kör postrm-skriptet
Hanterar utlösare såvida inte --no-triggers har angivits.
Det enda funktionstest som utförs är för närvarande en md5sum-verifiering av filinnehållet mot det värde som lagrats i fildatabasen. Det kontrolleras bara om databasen innehåller filens md5-summa. Kommandot --audit kan användas för att söka efter saknad metadata i databasen.
Utdataformatet kan väljas med flaggan --verify-format, vilket som standard använder formatet rpm, men detta kan komma att ändras i framtiden, varför program som tolkar kommandots utdata bör välja vilket format de förväntar sig explicit.
Ett lättare enkelkommando för att hämta och uppdater available-filen är dselect update. Observera att den här filen i huvudsak är onödig om du använder ett APT-baserat skal istället för dselect: APT har ett eget system för att hålla reda på tillgängliga paket.
Filen available måste vara àjourförd för att kommandot ska vara av något värde, annars kommer okända paket att ignoreras med en varning. Se kommandona --update-avail och --merge-avail för mer information.
Observera: Kommandot använder både available-filen och paketvalen.
Om ett sådant paket finns är utdatan en post från Packages-filen, som Kan hanteras som nödvändigt.
Observera: Kommandot använder både available-filen och paketvalen.
Returnerar 0 om ett paket skrivs ut, 1 om inget lämpligt paket finns och 2 vid fel.
När det används tillsammans med --robot kommer utdata vara programmets versionsnummer i ett numeriskt format avdelat med punkt, utan radbrytningstecken.
Alla flaggorna kan ges både på kommandoraden och i dpkgs konfigurationsfil /etc/dpkg/dpkg.cfg eller fragmentfilerna (vars namn motsvarar skalmönstret '[0-9a-zA-Z_-]*') i konfigurationskatalogen /etc/dpkg/dpkg.cfg.d/. En rad i konfigurationsfilen är antingen en flagga (precis samma som på kommandoraden, men utan inledande bindestreck) eller en kommentar (om den börjar med ett ”#”).
Tal Beskrivning 1 Allmänt hjälpsam förloppsinformation 2 Anrop och status för utvecklarskript 10 Utdata för varje fil som hanteras 100 Massvis med utdata för varje fil som hanteras 20 Utdata för varje konfigurationsfil 200 Massvis med utdata för varje konfigurationsfil 40 Beroenden och konflikter 400 Massvis av beroende-/konfliktutdata 10000 Aktivering och hantering av utlösare 20000 Massvis av utdata om utlösare 40000 Dumma mängder utdata om utlösare 1000 Massvis av pladder om till exempel dpkg/info-katalogen 2000 Knäppa mängder pladder
Varning: Dessa flaggor är huvudsakligen avsedda att endast användas av experter. Om du använder dem utan att fullt ut förstå vad de går ut på kan du förstöra din systeminstallation.
all: Slår på (eller av) alla tvingande flaggor.
downgrade(*): Installera ett paket även om en nyare version redan är installerad.
Varning: För närvarande undersöker inte dpkg beroenden vid nedgradering och kommer därför inte att varna dig om nedgraderingen bryter ett beroende för något paket. Detta kan ha allvarliga sidoeffekter, genom att nedgradera grundläggande systemkomponenter kan du riskera att göra hela systemet instabilt. Använd med tillförsikt.
configure-any: Konfigurera även alla uppackade men ej konfigurerade paket på vilka det aktuella paketet beror.
hold: Tillåt automatiska installationer, uppgraderingar eller borttagningar av paket även när de är märkts som ”håll”. Obervera: När dessa åtgärder anges explicit ignoreras alltid paketvalstatusen ”håll”.
remove-reinstreq: Ta bort ett paket även om det är trasigt och markerat att vara i behov av ominstallation. Detta kan, till exempel, göra så att delar av paketet blir kvar på systemet, men glöms bort av dpkg.
remove-protected: Ta bort paketet även om det anses som skyddat (protected, sedan dpkg 1.20.1). Skyddade paket är huvudsakligen viktig infrastruktur för systemstart eller används för skräddarsydda systemlokala metapaket. Om du tar bort dem kan det göra så att hela systemet inte klarar att starta eller förlora krävd funktionalitet, så använd med tillförsikt.
remove-essential: Ta bort paketet även om det anses som viktigt (essential). Viktiga paket är huvudsakligen de mest grundläggande Unixkommandona, vilka krävs för pakethanteringssystemet, för att systemet generellt ska fungera korrekt eller under start (även om det sistnämnda bör skrivas om till skyddade (protected) paket). Om du tar bort dem kan det göra så att hela systemet slutar fungera, så använd med tillförsikt.
depends: Gör alla beroendeproblem till varningar. Detta påverkar fälten Pre-Depends och Depends.
depends-version: Ignorera versionsnummer när beroenden kontrolleras. Detta påverkar fälten Pre-Depends och Depends.
breaks: Installera, även om det skulle förstöra ett annat paket (sedan dpkg 1.14.16). Detta påverkar fältet Breaks.
conflicts: Installera även om paket som är i konflikt (krockar) med ett annat paket. Detta är farligt, eftersom det oftast leder till att vissa filer skrivs över. Detta påverkar fältet Conflicts.
confmiss: Installera alltid saknade konfigurationsfiler utan att fråga. Detta är farligt, eftersom det inte bibehåller ändringar (tar bort) av filer.
confnew: Om en konfigurationsfil har modifierats och versionsnumret i paketet ändrades, installera alltid nya versioner av ändrade konfigurationsfiler utan att fråga, såvida inte --force-confdef också anges, i vilket fall det förvalda alternativet kommer att utföras.
confold: Om en konfigurationsfil har modifierats och versionsnumret i paketet ändrades, behåll alltid gamla versioner av ändrade konfigurationsfiler utan att fråga, såvida inte --force-confdef också anges, i vilket fall det förvalda alternativet kommer att utföras.
confdef: Om en konfigurationsfil har modifierats och versionsnumret i paketet ändrades, välj alltid det förvalda alternativt för ändrade konfigurationsfiler. Om inget förval har angivits kommer programmet stanna och fråga användaren såvida inte --force-confnew eller --force-confold också angetts, i så fall används den för att bestämma vad som ska utföras.
confask: Erbjud alltid att ersätta en modifierad konfigurationsfil med versionen i paketet, även om versionen i paketet inte ändrades (sedan dpkg 1.15.8). Om någon av --force-confnew, --force-confold eller --force-confdef också angetts, så används den för att bestämma vad som ska utföras.
overwrite: Skriv över ett pakets filer med ett annats.
overwrite-dir: Skriv över ett pakets kataloger med ett annats filer.
overwrite-diverted: Skriv över en omdirigerad fil med en ej omdirigerad version.
statoverride-add: Skriver över en existerande stat-överstyrning när den läggs till (sedan dpkg 1.19.5).
statoverride-remove: Ignorera en saknad stat-överstyrning när den tas bort (sedan dpkg 1.19.5).
security-mac(*): Använd platformsspecifik säkerhet baserad på obligatorisk åtkomststyrning (Mandatory Access Controls, MAC) när filer installeras i filsystemet (sedan dpkg 1.19.5). På Linuxsystem använder implementationen SELinux.
unsafe-io: Utför inte säkra I/O-operationer vid uppackning (sedan dpkg 1.15.8.6). Detta innebär för närvarande att filsystemssynkroniseringar inte utförs innan namn på filer ändras, något som vi vet kan påverka prestanda betydligt negativt för vissa filsystem, vilket tyvärr är samma system som behöver säker I/O på grund av att de har ett otillförlitligt beteende som orsakar tomma filer vid tvära systemkrascher.
Observera: För ext4, den värsta syndaren, kan det vara värt att istället använda monteringsflaggan nodelalloc, vilken både korrigerar prestandaförlusten och datasäkerhetsproblemen, det sistnämnda genom att inte låta filsystemet skapa tomma filer vid tvära krascher för programvara som inte utför synkronisering före atomära namnbyten.
Varning: Den här flaggan kan ge bättre prestanda på bekostnad av dataförluster, använd med tillförsikt.
script-chrootless: Kör utvecklarskript utan att chroot(2):a in i instdir även om paketet inte stöder detta arbetssätt (sedan dpkg 1.18.5).
Varning: Detta kan förstöra ditt värdsystem, använd med extrem tillförsikt.
architecture: Hantera även paket med fel eller saknad maskinvaruarkitektur.
bad-version: Hantera även paket med fel versioner (sedan dpkg 1.16.1).
bad-path: Sökvägen i PATH saknar viktiga program, så problem är troliga.
not-root: Försök (av)installera saker även utan att vara root.
bad-verify: Installera ett paket även om det inte går att verifiera dess äkthet.
Se till att du anger --no-act före åtgärdsflaggan, annars kan du få oönskade biverkningar (t.ex så kommer dpkg --purge foo --no-act först att rensa ut paketet ”foo” för att sedan försöka rensa ut paketet ”--no-act”, trots att du troligen förväntade dig att ingenting skulle utföras)
Sedan dpkg 1.21.10 tar även arkitekturen med i beräkningen, vilket gör det möjligt att korsgradera paket eller installera ytterligare sidoinstallerbara instanser med samma version, men olika arkitektur.
<Observera:> Skal kan anropa dpkg flera gånger per körning, vilket kan göra att hakarna körs fler gånger än förväntat.
Varning: Tänk på att du kan totalt ödelägga ditt system, beroende på vilka sökvägar du exkluderar, så använd med tillförsikt.
Filnamnsmönstrena använder samma sorts jokertecken som skalet, där ”*” motsvarar en sekvens av valfritt antal tecken, inklusive den tomma strängen och även ”/”. Till exempel på motsvarar ”/usr/*/READ*” ”/usr/share/doc/paket/README”. ”?” motsvarar som vanligt ett ensamt tecken (även här ingår ”/”). Och ”[” inleder en teckenklass, som kan innehålla en lista över tecken, intervall och komplement. Se glob(7) för detaljerad information om filnamnsmönster. Observera: den nuvarande implementationen kan återinkludera fler kataloger och symboliska länkar än nödvändigt, speciellt nänär det finns en mer specifik återinkludering, för att vara på den säkra sidan och undvika möjliga uppackningsfel, framtida ändringar kan komma att rätta detta.
Detta kan användas för att ta bort alla sökvägar förutom några specifika; ett typiskt användningsområde är:
--path-exclude=/usr/share/doc/* --path-include=/usr/share/doc/*/copyright
för att ta bort alla dokumentationsfiler förutom upphovsrättsinformation.
Dessa två flaggor kan anges flera gånger, och kan interfolieras med varandra. De hanteras båda i den givna ordningen och det är den sista regeln som motsvarar ett filnamn som fäller avgörandet.
Filtren appliceras när binärpaketen packas upp, och därför har de bara information om vilken sorts objekt som filtreras just nu (t.ex. en normal fil eller en katalog) och kan inte se vilka objekt som kommer härnäst. Eftersom filtren har sidoeffekter (i motsats till find(1)-filter), får inte det att exkludera exakta sökvägsnamn som råkar vara ett katalogobjekt som /usr/share/doc önskat resultat, och endast sökvägsnamnet kommer att exkluderas (vilket kan komma att automatiskt tas med igen om koden ser behovet). Eventuella senare filer som finns i den katalogen kommer inte att kunna packas upp.
Tips: se till att mönstren inte expanderas av ditt skal.
Det enda utdataformatet som stöds är för närvarande rpm, som består av en rad för varje sökväg där ett test misslyckas. Dessa rader har följande format:
missing [c] sökvägsnamn
[(felmeddelande)]
??5?????? [c] sökvägsnamn
De första 9 tecknen används för att rapportera resultaten från testerna, antingen ett bokstavligt missing (saknas) om filen inte finns eller dess metadata inte kan hämtas, eller ett av följande specialtecken som rapporterar resultatet från varje enskilt test:
Raden följs av ett blanksteg och ett attributtecken. Följande attributtecken stöds:
Slutligen följs det av ytterligare ett blanksteg och sökvägsnamnet.
Om posten var av typen missing och filen faktiskt inte finns i filsystemet komemrr aden följas av ett blanksteg och felmeddelandet inom parenteser.
Det enda kommando som för närvarande stöds är --version.
Övriga filer som listas här finns i sina förvalda kataloger, se flaggan --admindir för information om hur du ändrar placeringen av dessa filer.
Statusfilen säkerhetskopieras dagligen i /var/backups. Det kan vara nyttigt om den går förlorad eller skrivs sönder på grund av problem med filsystemet.
Formatet och innehållet i ett binärpaket beskrivs i deb(5).
--no-act ger oftast mindre information än vad som vore hjälpsamt.
För att lista paket relaterade till textredigeringsprogrammet vi(1) (observera att dpkg-query inte längre läser in available-filen som standard, och att flaggan dpkg-query --load-avail istället bör användas för det):
dpkg -l '*vi*'
För att se posterna i /var/lib/dpkg/available för två paket:
dpkg --print-avail elvis vim | less
För att själv söka i paketlistan:
less /var/lib/dpkg/available
För att ta bort det installerade paketet elvis:
dpkg -r elvis
För att installera ett paket måste du först leta på det i ett arkiv eller på en cd-rom. Filen available visar att vim-paketet finns i sektionen editors (textredigeringsprogram):
cd /media/cdrom/pool/main/v/vim dpkg -i vim_4.5-3.deb
För att göra en lokal kopia av paketmarkeringarna:
B<dpkg --get-selections E<gt>mitturval> dpkg --get-selections> mitturval
Du kan överföra filen till en annan dator, och efter att du har uppdaterat available-filen där med ditt önskade pakethanterarskal (se <https://wiki.debian.org/Teams/Dpkg/FAQ#set-selections> för mer information), till exempel:
apt-cache dumpavail | dpkg --merge-avail
eller med dpkg 1.17.6 eller tidigare:
avail=$(mktemp) apt-cache dumpavail> "$avail" dpkg --merge-avail "$avail" rm "$avail"
så kan du installera den med:
dpkg --clear-selections dpkg --set-selections <mitturval
Observera att detta faktiskt inte kommer installera eller ta bort någonting, utan bara sätta valstatus på de efterfrågade paketen. Du måste använda ett annat program för att faktiskt hämta och installera de efterfrågade paketen. Till exempel kan du köra apt-get dselect-upgrade.
För normalt bruk kommer du att upptäcka att dselect(1) tillhandahåller ett bekvämare sätt att ändra paketmarkeringarna.
Ytterligare funktioner kan erhållas genom att installera något av följande paket: apt, aptitude och debsums.
aptitude(8), apt(8), dselect(1), dpkg-deb(1), dpkg-query(1), deb(5), deb-control(5), dpkg.cfg(5), och dpkg-reconfigure(8).
Se /usr/share/doc/dpkg/THANKS för listan över personer som har bidragit till dpkg.
Peter Krefting och Daniel Nylander.
2023-05-11 | 1.21.22 |