Pacman

Från Archlinux wiki
Hoppa till: navigering, sök
Sammanfattning
pacman är Arch Linux pakethanterare (package manager). Pakethanterare används för att installera, uppgradera och ta bort programvara. Den här artikeln beskriver grundläggande användning och tips för att lösa problem.
Översikt
Paket i Arch Linux byggs genom att använda makepkg (eng.) och ett anpassat byggskript för varje paket (kallat en PKGBUILD (eng.)). När de paketerats så kan program installeras och hanteras med pacman. PKGBUILD-filer för program som finns i de officiella repositorierna (eng.) finns tillgängliga från ABS-trädet; tusentals fler är tillgängliga från det (icke officiellt stödda) Arch användarrepositorium (Arch user repository, AUR)).
Relaterat
Downgrading Packages
Improve Pacman Performance
pacman GUI Frontends
pacman Rosetta
pacman Tips
Pacman package signing
FAQ#Pakethantering
Pacman-key
Pacnew and Pacsave Files
Resurser
libalpm(3) Manual Page
pacman(8) Manual Page
pacman.conf(5) Manual Page
repo-add(8) Manual Page

Pakethanteraren pacman är en av huvudfunktionerna i Arch linux. Programmet kombinerar ett enkelt binärt paketformat med ett lättanvänt byggsystem (build system) (se makepkg och Arch Build System). Målet med pacman är att göra det enkelt att hantera paket, oavsett om de kommer från Arch linux officiella repositorium) eller är byggda av användaren själv.

pacman håller systemet uppdaterat genom att synkronisera paketlistor med huvudservern. Denna server/klient modell gör det möjligt att ladda ner och installera paket med ett enkelt kommando, inklusive alla beroenden som erfordras.

pacman är skrivet i programmeringsspråket C och använder paketformatet .pkg.tar.xz.

Tips: Det officiella pacman-paketet innehåller även andra användbara verktyg, som makepkg, pactree, vercomp med flera. Du kan se en full lista med pacman -Ql pacman | grep bin

Innehåll

Konfigurering

pacmans konfiguration är placerad i /etc/pacman.conf. Det är här användaren konfigurerar programmet så att det fungerar på önskvärt sätt. Fördjupad information om konfigurationsfilen kan hittas i man pacman.conf.

Generella alternativ

Generella alternativ finns i sektionen [options]. Läs man-sidorna eller se i standardfilen av pacman.conf för information om vad som kan göras där.

Ignorera att updatera paket

För att hoppa över ett specifikt paket, ange det på detta sätt:

IgnorePkg=linux

För att ignorera flera paket så använd en mellanslagsseparerad lista eller flera rader av IgnorePkg.

Ignorera att updatera paketgrupp

Liksom för paket så är det också möjligt att hoppa över uppdateringen av hela paketgrupper:

IgnoreGroup=gnome

Paketdatabaser (Repositorium)

Denna sektion definierar vilja repositorium att använda, som beskrivs i pacman.conf. Dessa kan anges direkt i denna fil eller inkluderas via en annan fil.

Alla officiella repositorium använder samma spegelfil (/etc/pacman.d/mirrorlist), som använder variabeln $repo, vilket innebär att bara en lista behöver underhållas.

Följande kod är ett exempel på detta, där de officiella repositorierna hänvisar sina speglar till filen /etc/pacman.d/mirrorlist.

#[testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[core]
#SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

[extra]
#SigLevel = PackageOptional
Include = /etc/pacman.d/mirrorlist

#[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[community]
#SigLevel = PackageOptional
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.

#[multilib-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[multilib]
#SigLevel = PackageOptional
Include = /etc/pacman.d/mirrorlist

# An example of a custom package repository.  See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
Notera: Försiktighet bör brukas vid användning av repositoriet [testing]. Detta är under aktiv utveckling och en updatering kan medföra att vissa paket slutar att fungera. Användare av repositoriet [testing] uppmuntras att prenumerera på arch-dev-public mailing list för att få aktuell information.

Paketsäkerhet

Pacman 4 stödjer signerade paket, vilket tillför ett extra säkerhetslager till paketen. För att aktivera signaturverifikation se här.

Användning

Nedan följer ett litet urval av uppgifter som pacman kan utföra. För att läsa mer utförliga exempel se man pacman.

Installation av paket

Installation av specifika paket

För att installera ett enskilt paket eller en lista av paket (inklusive beroenden), ge följande kommando:

# pacman -S paketnamn1 paketnamn2 ...

Ibland så finns det flera versioner av ett paket i olika repositorier, t.ex. [extra] och [testing]. För att installera versionen i [extra] så måste repositoriet anges före paketnamnet:

# pacman -S extra/paketnamn

Installation av paketgrupper

Vissa paket ingår i en paketgrupp som kan installeras samtidigt. Some packages belong to a group of packages that can all be installed simultaneously. Att t.ex. ge kommandot:

# pacman -S gnome

kommer att installera alla paket som ingår i gnome-gruppen. För att se vilka paket som ingår i gnome-gruppen, kör:

# pacman -Sg gnome

Du kan även besöka https://www.archlinux.org/groups/ för att se vilka paketgrupper som finns tillgängliga.

Notera: Om ett paket på installationslistan redan finns installerat på systemet så kommer det att återinstalleras, även om det redan är av den senaste versionen. Detta beteende kan åsidosättas genom att ange alternativet --needed.
Varning: Updatera inte paketlistan vid paketinstallation utan att samtidigt uppgradera hela systemet (dvs. kör inte pacman -Sy paketnamn); detta kan leda till beroendeproblem, se Partiella uppgraderingar stöds ej och [1].

Borttagning av paket (avinstallation)

För att ta bort ett enskilt paket, utan att ta bort dess beroenden:

# pacman -R paketnamn

För att ta bort ett enskilt paket samt dess beroenden, så länge dessa inte behövs av andra installerade paket:

# pacman -Rs paketnamn

För att ta bort ett paket, dess beroenden, samt alla paket som är beroende av paketet som avinstalleras:

Varning: Denna operation är rekursiv och måste användas med försiktighet eftersom det den kan ta bort många paket som potentiellt behövs av systemet.
# pacman -Rsc paketnamn

För att ta bort ett paket som behövs av ett annat paket, utan att ta bort paketet som är beroende av målpaketet:

# pacman -Rdd paketnamn

pacman sparar viktiga konfigurationsfiler när vissa program tas bort och döper dem med filändelsen : .pacsave. För att hindra att dessa backup-filer skapas kan alternativet -n användas:

# pacman -Rn paketnamn
Notera: pacman kommer inte att ta bort konfigurationsfiler som programmet själv skapar, som t.ex. "punktfiler" i home-mappen.

Upgradera paket

pacman kan uppgradera alla paket i systemet med bara ett kommando. Detta kan ta ganska lång tid beroende på hur uppdaterat systemet är. Detta kommando synkroniserar både repositoriedatabasen och uppgraderar systemets alla paket (förutom 'lokala' paket som inte finns i de konfigurerade repositorierna):

# pacman -Syu
Varning: Istället för att omedelbart köra uppgraderingar så snart de finns tillgängliga så bör användare vara medvetna om att uppdateringar i Arch, p.g.a. dess rullande utgivningsmodell, kan ha oförutsedda konsekvenser. Detta innebär att det är oklokt att t.ex. köra en uppgradering av systemet strax innan man ska hålla en viktig presentation. Försök istället uppdatera när du har tid över och var beredd på att hantera problem som kan uppstå.

pacman är en kraftfull pakethanterare, men är inte byggd för att hantera alla typer av särfall. Läs The Arch Way om detta skapar förvirring. Användare måste vara vaksamma och själva ta ansvar för att underhålla sina system. Vid en systemuppgradering så är det absolut nödvändigt att användare läser all information från pacman och använder sunt förnuft. Om en användarmodifierad konfigurationsfil måste uppgraderas för en ny paketversion så kommer en .pacnew-fil att skapas för att undvika att de användarmodifierade inställningarna skrivs över. Pacman kommer då att uppmana användaren att sammanfoga dessa filer, vilket kräver ett manuellt ingripande. Det är god praxis att hantera dessa fall direkt efter varje paketuppgradering eller borttagning. Se Pacnew and Pacsave Files för mer information.

Tips: Kom ihåg att pacmans output loggas i /var/log/pacman.log.

Före uppgraderingar är det klokt att besöka Arch Linux hemsida för att kontrollera de senaste nyheterna (eller prenumerera på RSS-strömmen): när uppdateringar kräver ovanliga manuella ingripanden (mer än vad som kan hanteras bara genom att följa instruktionerna från pacman) så kommer en nyhetsuppdatering som berör detta att postas.

Om man råkar ut för problem som inte kan lösas av dessa instruktioner så se till att söka i forumet. Mest troligt så har andra användare stött på samma problem och postat instruktioner för hur det kan lösas.

Förfrågningar till paketdatabaserna

pacman förfrågar de lokala paketdatabaserna med -Q-flaggan; se:

$ pacman -Q --help

och förfrågar sync-databaserna med -S-flaggan; se:

$ pacman -S --help

pacman kan söka efter paket in databasen genom att både söka i paketnamn och beskrivningar:

$ pacman -Ss string1 string2 ...

För att söka bland redan installerade paket:

$ pacman -Qs string1 string2 ...

För att visa utförlig information om ett givet paket:

$ pacman -Si package_name

Detsamma för lokalt installerade paket:

$ pacman -Qi package_name

Genom att ange två -i-flaggor så kommer även en lista över backup-filer och deras modifikationsstatus att visas:

$ pacman -Qii package_name

För att hämta en lista över alla filer som installerats av ett paket:

$ pacman -Ql package_name

För icke-installerade paket så använd pkgfile från pkgtools eller nosr från nosr-git från AUR.

Man kan även fråga databasen om vilket paket en fil i filsystemet tillhör:

$ pacman -Qo /path/to/a/file

För att få en lista på alla paket om inte längre behövs som beroenden till andra paket (föräldralösa):

$ pacman -Qdt

För att få en lista över beroendeträdet till ett paket:

$ pactree package_name

För att få en lista över alla paket som beror på ett annat paket, använd whoneeds från pkgtools:

$ whoneeds package_name

Ytterligare kommandon

Uppgradera systemet och installera en lista med paket (med en kommandolinje):

# pacman -Syu package_name1 package_name2 ...

Ladda ner ett paket utan att installera det:

# pacman -Sw package_name

Installera ett 'lokalt' paket som inte hämtas från ett repositorium:

# pacman -U /path/to/package/package_name-version.pkg.tar.xz

Installera ett paket från en server som inte angetts som repositorium i pacmans konfigurationsfiler:

# pacman -U http://www.example.com/repo/example.pkg.tar.xz

Rensa paketens cacheminne för paket som för närvarande inte är installerade (/var/cache/pacman/pkg):

Varning: Gör bara detta om du är säker på att de aktuella versionerna av de installerade paketen är stabila och en nedgradering inte kommer att behövas eftersom pacman -Sc raderar alla gamla versioner av de installerade paketen.
# pacman -Sc

Rensa hela paketens cacheminne:

Varning: Detta raderar hela cacheminnet till paketen. Att göra detta är dålig praxis eftersom det omöjliggör en nedgradering till de nuvarande paketversionerna i fallet där en uppgradering orsakar systemfel.
# pacman -Scc

Som ett alternativ till både -Sc och -Scc kan man överväga att använda Cacheclean från AUR. Detta python-skript rensar pacmans paket-cache selektivt och behåller x-antal gamla versioner av varje paket.

Partiella uppgraderingar stöds ej

Arch Linux har en rullande utgivningsmodell och nya versioner av biblioteken läggs kontinuerligt upp i repositorierna. Utvecklarna och betrodda användare bygger så om alla paket som behöver byggas om med de nya biblioteken. Om systemet har lokalt installerade paket (som t.ex. AUR-paket) så måste användarna själva bygga om dessa när paketets beroenden får en soname-uppgradering.

Detta innebär att partiella uppgraderingar inte stöds. Använd ej pacman -Sy package eller ett likvärdigt kommando som pacman -Sy följt av pacman -S package. Uppgradera alltid innan ett paket installeras -- särskilt om pacman har uppdaterat de synkroniserade repositorierna. Av samma skäl bör IgnorePkg och IgnoreGroup användas med försiktighet.

Om ett scenario med partiella uppgraderingar har skapats och binära filer inte längre fungerar, pga. att de inte kan hitta biblioteken som de är länkade mot, så försök inte "fixa" problemet bara genom att använda symlinkar. Bibliotek får soname-uppgraderingar när de inte längre är bakåtkompatibla. Det enkla kommandot pacman -Syu tillsammans med en korrekt synkroniserad spegel kommer att lösa problemet, så länge pacman själv fungerar.

Felsökning

F: En uppgradering av paket XYZ förstörde mitt system!

S: Arch Linux är en en distribution med en rullande utgivningsmodell som hela tiden ligger i framkant. Paketuppgraderingar görs tillgängliga så snart de anses stabila nog för allmän användning. Uppgraderingar kommer dock ibland att kräva ingripanden av användaren: konfigurationsfiler behöver kanske uppdateras, valfria beroenden kan förändras osv.

Det viktigaste rådet att komma ihåg är att inte "blint" uppgradera Arch-system. Läs alltid igenom listan av paket som kommer att uppgraderas. Lägg märke till om "kritiska" paket kommer att uppgraderas (linux, xorg-server osv.). Om så är fallet är det alltid en god idé att läsa nyheterna på https://www.archlinux.org/ och http://www.archlinux.se/, samt titta igenom forumen, för att se om andra användare har haft problem med uppgraderingen.

Om en paketuppdatering förväntas eller är känd att orsaka problem så kommer paketerarna att se till att pacman visar ett lämpligt meddelande när paketet uppgraderas. Om du har problem efter en uppgradering så dubbelkolla outputen från pacman genom att läsa dess loggfil (/var/log/pacman.log).

Vid tillfällen där ingen information finns tillgänglig via pacman, det inte finns relevant information bland nyheterna på https://www.archlinux.org/ och det inte finns meddelanden i forumet som rör uppgraderingen, överväg då att söka hjälp på forumet eller IRC. En annan lösning är att nedgradera paketet som orsakar problem.

F: Jag vet att en ny version till paket ABC publicerats men pacman säger att mitt system är uppdaterat!

S: pacmans speglar synkroniseras inte omedelbart. Det kan ta över 24 timmar innan en uppdatering blir tillgänglig för dig. Det enda alternativen är att vara tålmodig eller att använda en andra speglar. MirrorStatus kan hjälpa dig att identifiera en uppdaterad spegel.

F: Jag får ett felmeddelande vid en uppgradering: "file exists in filesystem"!

S: ÅSIDO: Taget från https://bbs.archlinux.org/viewtopic.php?id=56373 av Misfit138.
error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.

Varför händer detta: pacman har identifierat en filkonflikt och kommer inte, som en del av dess design, att skriva över dessa filer åt dig. Detta är ett medvetet designval och inte en brist i programmet.

Problemet är vanligtvis trivialt att lösa. Ett säkert sätt är att först kontrollera om ett annat paket äger filen (pacman -Qo /sökväg/till/filen). Om filen ägs av ett annat paket så registrera en bugrapport (eng.). Om filen inte ägs av ett annat paket så kan filen som 'existerar i filsystemet' döpas om, varpå uppgraderingskommandot körs igen. Om allt går som det ska så kan filen då raderas.

Om du har installerat ett paket manuellt utan att använda pacman eller någon av dess programfronter, så måste du avinstallera det och radera alla dess filer innan det kan installeras på ett korrekt sätt med pacman.

Till varje installerat paket medföljer en/var/lib/pacman/local/$package-$version/files-fil som innehåller metadata om detta paket. Om denna fil skadas - är tom eller saknas - så resulterar detta i felmeddelandet "file exists in filesystem" när du försöker uppgradera paketet. Ett sådant felmeddelande berör vanligtvis bara ett paket och istället för att manuellt döpa om ta bort alla dess filer så kan kommandot pacman -S --force $package användas för att tvinga pacman att skriva över dessa filer.

Kör inte kommandot pacman -Syu --force.

F: Jag får ett felmeddelande vid installation av ett paket: "not found in sync db"

S: Först och främst, se till att paketet verkligen existerar (och kolla efter stavfel!) Om du är säker på att paketet existerar så kan felet bero på att din paketlista är ouppdaterad eller att dina repositorier är felkonfigurerade. Försök köra pacman -Syy för att tvinga en uppdatering av alla paketlistor.

F: pacman fortsätter att uppgradera samma paket flera gånger!

S: Detta beror på upprepade rader i /var/lib/pacman/local/, som t.ex. två fall av linux. pacman -Qi ger output som visar den korrekta versionen, men pacman -Qu känner igen den gamla versionen och försöker därför uppgradera denna.

Lösning: radera de felaktiga raderna i /var/lib/pacman/local/.

Notera: pacman version 3.4 bör visa ett felmeddelande vid fall av identiska rader, vilket skulle göra denna notis överflödig.

F: pacman kraschar under en uppgradering!

S: I fall då pacman kraschar med felmeddelandet "database write" när det tar bort paket, och det inte fungerar att ominstallera eller uppgradera paket:
  1. Starta med hjälp av Arch live-CD
  2. Montera ditt rotfilsystem
  3. Uppdatera pacmans databas via pacman -Syy
  4. Ominstallera de trasiga paketen med pacman -r /path/to/root -S package

F: Jag installerade mjukvara med make install; dessa filer tillhör inte något paket!

S: I fall av ett "conflicting files"-felmeddelande, notera att pacman kommer att skriva över manuellt installerad mjukvara om argumentet -f anges (pacman -Sf). Se pacman Tips#Identify files not owned by any package för ett skript som söker igenom filsystemet efter filer som inte längre tillhör något paket.

F: Jag behöver ett paket med en specifik fil. Hur tar jag reda på vilka paket som tillhandahåller den?

S: Installera pkgtools som innehåller pkgfile som använder en separat databas innehållande alla filer och de paket de är associerade med.

F: pacman är helt trasigt! Hur kan jag installera om det?

S: I fall då pacman är helt trasigt och inte går att reparera, så ladda manuellt ner de nödvändiga paketen (openssl, libarchive, and pacman) och extrahera dem till rot. Pacmans binärfil kommer att återställas tillsammans med dess standardkonfigurationsfil. Ominstallera därefter dessa paket med pacman för att behålla paketdatabasens fullständighet. Mer information samt ett (gammalt) exempelskript som automatiserar processen finns tillgängligt i detta foruminlägg (eng.).

F: Efter att ha uppdaterat mitt system så får jag felmeddelandet "unable to find root device" efter att ha startat om, och mitt system kan inte längre starta.

S: Den mest troliga förklaringen är att dina initramfs förstördes under kärnans uppgradering (olämplig användning av pacmans alternativ --force kan vara en orsak). Använd proceduren nedan för att återställa systemet.

Starta systemet från en Arch live-cd. Kör sedan:

# mkdir /mnt/arch
# mount /dev/sdaX /mnt/arch (din rotpartition)
# cd /mnt/arch
# mount -t proc proc proc/
# mount -t sysfs sys sys/
# mount -o bind /dev dev/
# mount /dev/sdaX boot/ (din /boot-partition) #Detta steg är bara nödvändigt om du har en separat boot-partition
# chroot .
# pacman -Syu udev mkinitcpio
# mkinitcpio -p linux
Därefter, avmontera och starta om systemet.
Personliga verktyg
På andra språk